1 package net
.encode
.wurmesp
.feature
.hook
;
3 import java
.lang
.reflect
.Field
;
4 import java
.util
.logging
.Level
;
6 import org
.gotti
.wurmunlimited
.modloader
.ReflectionUtil
;
8 import com
.wurmonline
.client
.game
.World
;
9 import com
.wurmonline
.client
.renderer
.PickRenderer
;
10 import com
.wurmonline
.client
.renderer
.backend
.Queue
;
12 import net
.encode
.wurmesp
.WurmEspMod
;
14 public class RenderPickedItem
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);
28 unit
.renderUnit(queuePick
, false);
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);
40 Thread tilesHighlightThread
= new Thread(() -> WurmEspMod
.tilesHighlightManager
.queue());
41 tilesHighlightThread
.setPriority(10);
42 tilesHighlightThread
.start();
44 WurmEspMod
.tilesHighlightManager
.setWorld(world
);
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);
55 Thread tilesThread
= new Thread(() -> WurmEspMod
.tilesCloseByManager
.queue());
56 tilesThread
.setPriority(10);
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);
68 Thread tilesWalkableThread
= new Thread(() -> WurmEspMod
.tilesCloseByWalkableManager
.queue());
69 tilesWalkableThread
.setPriority(10);
70 tilesWalkableThread
.start();
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);
81 Thread tilesFlowerThread
= new Thread(() -> WurmEspMod
.tilesFlowerManager
.queue());
82 tilesFlowerThread
.setPriority(10);
83 tilesFlowerThread
.start();
85 if (WurmEspMod
.xray
&& world
.getPlayer().getPos().getLayer() < 0) {
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();
94 WurmEspMod
.xrayManager
.refresh();
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();
103 WurmEspMod
.xrayManager
.refresh();
105 WurmEspMod
.xrayCronoManager
.restart(WurmEspMod
.xrayrefreshrate
* 1000);
107 if (WurmEspMod
.xraythread
) {
108 Thread xrayThread
= new Thread(() -> WurmEspMod
.xrayManager
.queue());
109 xrayThread
.setPriority(10);
112 WurmEspMod
.xrayManager
.queue();
117 WurmEspMod
.logger
.log(Level
.INFO
, "[WurmEspMod] WorldRender.renderPickedItem hooked");