Clean
[esp.git] / src / net / encode / wurmesp / feature / hook / HeadsUpDisplayInit.java
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