82327c1d |
1 | package net.encode.wurmesp.feature.hook; |
2 | |
3 | import java.lang.reflect.Field; |
4 | import java.util.logging.Level; |
5 | |
6 | import org.gotti.wurmunlimited.modloader.ReflectionUtil; |
7 | |
8 | import com.wurmonline.client.game.World; |
9 | import com.wurmonline.client.renderer.PickRenderer; |
10 | import com.wurmonline.client.renderer.backend.Queue; |
11 | |
12 | import net.encode.wurmesp.WurmEspMod; |
13 | |
14 | public class RenderPickedItem |
15 | extends Hook { |
16 | |
17 | public RenderPickedItem() { |
18 | this.prepareHook("com.wurmonline.client.renderer.WorldRender", "renderPickedItem", "(Lcom/wurmonline/client/renderer/backend/Queue;)V", () -> (proxy, method, args) -> { |
19 | method.invoke(proxy, args); |
20 | Class<?> cls = proxy.getClass(); |
21 | World world = (World)ReflectionUtil.getPrivateField((Object)proxy, (Field)ReflectionUtil.getField(cls, (String)"world")); |
22 | WurmEspMod._pickRenderer = (PickRenderer)ReflectionUtil.getPrivateField((Object)proxy, (Field)ReflectionUtil.getField(cls, (String)"pickRenderer")); |
23 | Queue queuePick = (Queue)ReflectionUtil.getPrivateField((Object)proxy, (Field)ReflectionUtil.getField(cls, (String)"queuePick")); |
24 | WurmEspMod.pickableUnits.stream().filter(unit -> WurmEspMod.players && unit.isPlayer() || WurmEspMod.uniques && unit.isUnique() || WurmEspMod.conditioned && unit.isConditioned() || WurmEspMod.animals && (unit.isMob() && !unit.isAggroMob()) || WurmEspMod.mobs && unit.isAggroMob() || WurmEspMod.specials && unit.isSpecial() || WurmEspMod.items && unit.isSpotted()).forEachOrdered(unit -> { |
25 | if (unit.isConditioned() && WurmEspMod.conditioned || unit.isConditioned() && WurmEspMod.conditionedcolorsallways || unit.isChampion() && WurmEspMod.championmcoloralways) { |
26 | unit.renderUnit(queuePick, true); |
27 | } else { |
28 | unit.renderUnit(queuePick, false); |
29 | } |
30 | }); |
31 | if (WurmEspMod.tileshighlight) { |
32 | WurmEspMod.tilesHighlightManager.setWorldQueue(world, queuePick); |
33 | if (WurmEspMod.tilesHighlightManager.first) { |
34 | WurmEspMod.tilesHighlightManager.refresh(); |
35 | WurmEspMod.tilesHighlightManager.first = false; |
36 | } else if (WurmEspMod.tilesHighlightCronoManager.hasEnded()) { |
37 | WurmEspMod.tilesHighlightManager.refresh(); |
38 | WurmEspMod.tilesHighlightCronoManager.restart(5000L); |
39 | } |
40 | Thread tilesHighlightThread = new Thread(() -> WurmEspMod.tilesHighlightManager.queue()); |
41 | tilesHighlightThread.setPriority(10); |
42 | tilesHighlightThread.start(); |
43 | } else { |
44 | WurmEspMod.tilesHighlightManager.setWorld(world); |
45 | } |
46 | if (WurmEspMod.tilescloseby && world.getPlayer().getPos().getLayer() >= 0) { |
47 | WurmEspMod.tilesCloseByManager.setWorldQueue(world, queuePick); |
48 | if (WurmEspMod.tilesCloseByManager.first) { |
49 | WurmEspMod.tilesCloseByManager.refresh(); |
50 | WurmEspMod.tilesCloseByManager.first = false; |
51 | } else if (WurmEspMod.tilesCloseByCronoManager.hasEnded()) { |
52 | WurmEspMod.tilesCloseByManager.refresh(); |
53 | WurmEspMod.tilesCloseByCronoManager.restart(1000L); |
54 | } |
55 | Thread tilesThread = new Thread(() -> WurmEspMod.tilesCloseByManager.queue()); |
56 | tilesThread.setPriority(10); |
57 | tilesThread.start(); |
58 | } |
59 | if (WurmEspMod.tilesclosebynotrideable && world.getPlayer().getPos().getLayer() >= 0) { |
60 | WurmEspMod.tilesCloseByWalkableManager.setWorldQueue(world, queuePick); |
61 | if (WurmEspMod.tilesCloseByWalkableManager.first) { |
62 | WurmEspMod.tilesCloseByWalkableManager.refresh(); |
63 | WurmEspMod.tilesCloseByWalkableManager.first = false; |
64 | } else if (WurmEspMod.tilesCloseByWalkableCronoManager.hasEnded()) { |
65 | WurmEspMod.tilesCloseByWalkableManager.refresh(); |
66 | WurmEspMod.tilesCloseByWalkableCronoManager.restart(1000L); |
67 | } |
68 | Thread tilesWalkableThread = new Thread(() -> WurmEspMod.tilesCloseByWalkableManager.queue()); |
69 | tilesWalkableThread.setPriority(10); |
70 | tilesWalkableThread.start(); |
71 | } |
72 | if (WurmEspMod.tilesFlower && world.getPlayer().getPos().getLayer() >= 0) { |
73 | WurmEspMod.tilesFlowerManager.setWorldQueue(world, queuePick); |
74 | if (WurmEspMod.tilesFlowerManager.first) { |
75 | WurmEspMod.tilesFlowerManager.refresh(); |
76 | WurmEspMod.tilesFlowerManager.first = false; |
77 | } else if (WurmEspMod.tilesFlowerCronoManager.hasEnded()) { |
78 | WurmEspMod.tilesFlowerManager.refresh(); |
79 | WurmEspMod.tilesFlowerCronoManager.restart(1000L); |
80 | } |
81 | Thread tilesFlowerThread = new Thread(() -> WurmEspMod.tilesFlowerManager.queue()); |
82 | tilesFlowerThread.setPriority(10); |
83 | tilesFlowerThread.start(); |
84 | } |
85 | if (WurmEspMod.xray && world.getPlayer().getPos().getLayer() < 0) { |
86 | Thread refreshThread; |
87 | WurmEspMod.xrayManager.setWorldQueue(world, queuePick); |
88 | if (WurmEspMod.xrayManager.first) { |
89 | if (WurmEspMod.xrayrefreshthread) { |
90 | refreshThread = new Thread(() -> WurmEspMod.xrayManager.refresh()); |
91 | refreshThread.setPriority(10); |
92 | refreshThread.start(); |
93 | } else { |
94 | WurmEspMod.xrayManager.refresh(); |
95 | } |
96 | WurmEspMod.xrayManager.first = false; |
97 | } else if (WurmEspMod.xrayCronoManager.hasEnded()) { |
98 | if (WurmEspMod.xrayrefreshthread) { |
99 | refreshThread = new Thread(() -> WurmEspMod.xrayManager.refresh()); |
100 | refreshThread.setPriority(10); |
101 | refreshThread.start(); |
102 | } else { |
103 | WurmEspMod.xrayManager.refresh(); |
104 | } |
105 | WurmEspMod.xrayCronoManager.restart(WurmEspMod.xrayrefreshrate * 1000); |
106 | } |
107 | if (WurmEspMod.xraythread) { |
108 | Thread xrayThread = new Thread(() -> WurmEspMod.xrayManager.queue()); |
109 | xrayThread.setPriority(10); |
110 | xrayThread.start(); |
111 | } else { |
112 | WurmEspMod.xrayManager.queue(); |
113 | } |
114 | } |
115 | return null; |
116 | }); |
117 | WurmEspMod.logger.log(Level.INFO, "[WurmEspMod] WorldRender.renderPickedItem hooked"); |
118 | } |
119 | } |
120 | |