82327c1d |
1 | package net.encode.wurmesp.feature.hook; |
2 | |
3 | import java.lang.reflect.Field; |
4 | import java.util.List; |
5 | import java.util.logging.Level; |
6 | |
7 | import org.gotti.wurmunlimited.modloader.ReflectionUtil; |
8 | |
9 | import com.wurmonline.client.renderer.gui.HeadsUpDisplay; |
10 | import com.wurmonline.client.renderer.gui.MainMenu; |
11 | import com.wurmonline.client.renderer.gui.WindowSerializer; |
12 | import com.wurmonline.client.renderer.gui.WurmComponent; |
13 | import com.wurmonline.client.renderer.gui.WurmEspWindow; |
14 | import com.wurmonline.client.settings.SavePosManager; |
15 | |
16 | import net.encode.wurmesp.WurmEspMod; |
17 | |
18 | public class HeadsUpDisplayInit |
19 | extends Hook { |
20 | public HeadsUpDisplayInit() { |
21 | this.prepareHook("com.wurmonline.client.renderer.gui.HeadsUpDisplay", "init", "(II)V", () -> (proxy, method, args) -> { |
22 | method.invoke(proxy, args); |
23 | WurmEspMod.hud = (HeadsUpDisplay)proxy; |
24 | this.initEspWR(); |
25 | return null; |
26 | }); |
27 | WurmEspMod.logger.log(Level.INFO, "[WurmEspMod] HeadsUpDisplay.init hooked"); |
28 | } |
29 | |
30 | private void initEspWR() { |
31 | try { |
32 | WurmEspWindow wurmEspWindow = new WurmEspWindow(); |
33 | MainMenu mainMenu = (MainMenu)ReflectionUtil.getPrivateField((Object)WurmEspMod.hud, (Field)ReflectionUtil.getField(WurmEspMod.hud.getClass(), (String)"mainMenu")); |
34 | mainMenu.registerComponent("Esp", (WurmComponent)wurmEspWindow); |
35 | @SuppressWarnings("unchecked") |
36 | List<WurmEspWindow> components = (List<WurmEspWindow>)ReflectionUtil.getPrivateField((Object)WurmEspMod.hud, (Field)ReflectionUtil.getField(WurmEspMod.hud.getClass(), (String)"components")); |
37 | components.add(wurmEspWindow); |
38 | SavePosManager savePosManager = (SavePosManager)ReflectionUtil.getPrivateField((Object)WurmEspMod.hud, (Field)ReflectionUtil.getField(WurmEspMod.hud.getClass(), (String)"savePosManager")); |
39 | savePosManager.registerAndRefresh((WindowSerializer)wurmEspWindow, "wurmespwindow"); |
40 | } |
41 | catch (ClassCastException | IllegalAccessException | IllegalArgumentException | NoSuchFieldException e) { |
42 | throw new RuntimeException(e); |
43 | } |
44 | } |
45 | } |
46 | |