/src/main/java/forgefuck/team/xenobyte/modules/ThaumResearch.java

https://github.com/N1nt4nd0/Xenobyte · Java · 126 lines · 112 code · 14 blank · 0 comment · 20 complexity · cb4c81938f0cf659220451fd92d3419c MD5 · raw file

  1. package forgefuck.team.xenobyte.modules;
  2. import java.lang.reflect.Field;
  3. import java.util.LinkedHashMap;
  4. import java.util.List;
  5. import java.util.Map;
  6. import cpw.mods.fml.common.Loader;
  7. import forgefuck.team.xenobyte.api.config.Cfg;
  8. import forgefuck.team.xenobyte.api.module.Category;
  9. import forgefuck.team.xenobyte.api.module.CheatModule;
  10. import forgefuck.team.xenobyte.api.module.PerformMode;
  11. import forgefuck.team.xenobyte.api.module.PerformSource;
  12. import forgefuck.team.xenobyte.gui.click.elements.Button;
  13. import forgefuck.team.xenobyte.gui.click.elements.Panel;
  14. import forgefuck.team.xenobyte.utils.Reflections;
  15. public class ThaumResearch extends CheatModule {
  16. @Cfg("aspectMode") private boolean aspectMode;
  17. public ThaumResearch() {
  18. super("ThaumResearch", Category.MODS, PerformMode.SINGLE);
  19. }
  20. private boolean isComplete(String research) throws Exception {
  21. return (Boolean) Class.forName("thaumcraft.common.lib.research.ResearchManager").getMethod("isResearchComplete", String.class, String.class).invoke(null, utils.myName(), research);
  22. }
  23. private Object[] getAspects(Object obj) throws Exception {
  24. return (Object[]) Class.forName("thaumcraft.api.aspects.AspectList").getMethod("getAspects").invoke(Reflections.findField(Class.forName("thaumcraft.api.research.ResearchItem"), "tags").get(obj));
  25. }
  26. private void getResearchs() {
  27. try {
  28. Field theResearch = Class.forName("thaumcraft.client.gui.GuiResearchPopup").getDeclaredField("theResearch");
  29. theResearch.setAccessible(true);
  30. ((List) theResearch.get(Class.forName("thaumcraft.client.lib.ClientTickEventsFML").getField("researchPopup").get(null))).clear();
  31. LinkedHashMap<String, Object> researchCategories = (LinkedHashMap<String, Object>) Reflections.findField(Class.forName("thaumcraft.api.research.ResearchCategories"), "researchCategories").get(null);
  32. for (Object listObj : researchCategories.values()) {
  33. Map<String, Object> research = (Map<String, Object>) Reflections.findField(Class.forName("thaumcraft.api.research.ResearchCategoryList"), "research").get(listObj);
  34. for (Object item : research.values()) {
  35. String[] parents = (String[]) Reflections.findField(Class.forName("thaumcraft.api.research.ResearchItem"), "parents").get(item);
  36. String[] parentsHidden = (String[]) Reflections.findField(Class.forName("thaumcraft.api.research.ResearchItem"), "parentsHidden").get(item);
  37. String key = (String) Reflections.findField(Class.forName("thaumcraft.api.research.ResearchItem"), "key").get(item);
  38. if (!isComplete(key)) {
  39. boolean check = true;
  40. if (parents != null) {
  41. for (String parent : parents) {
  42. if (!isComplete(parent)) {
  43. check = false;
  44. break;
  45. }
  46. }
  47. }
  48. if (!check) {
  49. continue;
  50. }
  51. if (parentsHidden != null) {
  52. for (String parent : parentsHidden) {
  53. if (!isComplete(parent)) {
  54. check = false;
  55. break;
  56. }
  57. }
  58. }
  59. if (!check) {
  60. continue;
  61. }
  62. for (Object aObj : getAspects(item)) {
  63. if (aObj == null) {
  64. check = false;
  65. break;
  66. }
  67. }
  68. if (!check) {
  69. continue;
  70. }
  71. utils.sendPacket("thaumcraft", (byte) 14, key, utils.worldId(), utils.myName(), (byte) 0);
  72. }
  73. }
  74. }
  75. } catch (Exception e) {}
  76. }
  77. private void getAspects() {
  78. try {
  79. List aspects = (List) Class.forName("thaumcraft.api.aspects.Aspect").getMethod("getCompoundAspects").invoke(null);
  80. for (Object aspect : aspects) {
  81. String a1 = (String) Class.forName("thaumcraft.api.aspects.Aspect").getMethod("getTag").invoke(((Object[]) Class.forName("thaumcraft.api.aspects.Aspect").getMethod("getComponents").invoke(aspect))[0]);
  82. String a2 = (String) Class.forName("thaumcraft.api.aspects.Aspect").getMethod("getTag").invoke(((Object[]) Class.forName("thaumcraft.api.aspects.Aspect").getMethod("getComponents").invoke(aspect))[1]);
  83. utils.sendPacket("thaumcraft", (byte) 13, utils.worldId(), utils.myId(), 0, 0, 0, a1, a2, true, true);
  84. }
  85. } catch (Exception e) {}
  86. }
  87. @Override public void onPerform(PerformSource src) {
  88. if (aspectMode) {
  89. getAspects();
  90. } else {
  91. getResearchs();
  92. }
  93. }
  94. @Override public boolean isWorking() {
  95. return Loader.isModLoaded("Thaumcraft");
  96. }
  97. @Override public String moduleDesc() {
  98. return lang.get("All aspects and researches are opened", "Магистр ёба");
  99. }
  100. @Override public Panel settingPanel() {
  101. return new Panel(
  102. new Button("AspectMode", aspectMode) {
  103. @Override public void onLeftClick() {
  104. buttonValue(aspectMode = !aspectMode);
  105. }
  106. @Override public String elementDesc() {
  107. return lang.get("Gives out aspects, otherwise opens researches", "Выдаёт аспекты, иначе открывает изучения");
  108. }
  109. }
  110. );
  111. }
  112. }