| 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 | |