From f0b0ced99b15884fd485129c1fb231c04eaa9e42 Mon Sep 17 00:00:00 2001 From: Draknyte1 Date: Mon, 18 Dec 2017 14:23:05 +1000 Subject: + Added some safety handling to Bee generation since they will not generate in older versions of Forestry. % Made all of Growthcraft support reflective. --- .../xmod/growthcraft/fishtrap/FishTrapHandler.java | 47 +++++++++++-- .../xmod/growthcraft/fishtrap/Growthcraft_New.java | 78 +++++++++++++++++++--- .../xmod/growthcraft/fishtrap/Growthcraft_Old.java | 78 +++++++++++++++++++--- 3 files changed, 179 insertions(+), 24 deletions(-) (limited to 'src/Java/gtPlusPlus/xmod/growthcraft') diff --git a/src/Java/gtPlusPlus/xmod/growthcraft/fishtrap/FishTrapHandler.java b/src/Java/gtPlusPlus/xmod/growthcraft/fishtrap/FishTrapHandler.java index 687a5afa3b..aaaa0a0dee 100644 --- a/src/Java/gtPlusPlus/xmod/growthcraft/fishtrap/FishTrapHandler.java +++ b/src/Java/gtPlusPlus/xmod/growthcraft/fishtrap/FishTrapHandler.java @@ -1,5 +1,8 @@ package gtPlusPlus.xmod.growthcraft.fishtrap; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; + import gregtech.api.enums.GT_Values; import gregtech.api.util.GT_ModHandler; import gtPlusPlus.core.lib.LoadedMods; @@ -11,30 +14,62 @@ import net.minecraft.item.ItemStack; public class FishTrapHandler { private static final String[] fishTypes = {"fish", "junk", "treasure"}; + private static Object mFishingRegistry; + private static Growthcraft_Old mHandler; + + public static Object getFishingRegistry(){ + if (mFishingRegistry != null){ + return mFishingRegistry; + } + else { + return setFishTrapRegistry(); + } + } + + private final static Object setFishTrapRegistry(){ + Class mFishingRegistryClass; + try { + mFishingRegistryClass = Class.forName("growthcraft.api.fishtrap.FishTrapRegistry"); + final Method mFishingRegistryMethod = mFishingRegistryClass.getDeclaredMethod("getInstance", null); + mFishingRegistry = mFishingRegistryMethod.invoke(null); + if (mFishingRegistry != null){ + return mFishingRegistry; + } + } + catch (ClassNotFoundException | NoSuchMethodException | SecurityException | IllegalAccessException | IllegalArgumentException | InvocationTargetException e) { + } + return null; + } protected static void addFish(final String lootType, final ItemStack lootStack, final int lootChance){ + if (mFishingRegistry == null){ + setFishTrapRegistry(); + } + if (mHandler == null){ + mHandler = new Growthcraft_Old(); + } + final String GCVersion = LoadedMods.getModVersion("Growthcraft"); - final String[] versionString = GCVersion.split("//."); if (LoadedMods.getModVersion("Growthcraft").contains("2.3.1") || versionString[1].equals("3")){ if (lootType.equals(fishTypes[0])){ - Growthcraft_Old.addTrapFish(lootStack, lootChance); + mHandler.addTrapFish(lootStack, lootChance); Utils.LOG_INFO("Added "+lootStack.getDisplayName()+" as an extra Fish for Growthcraft Fishtraps."); } else if (lootType.equals(fishTypes[1])){ - Growthcraft_Old.addTrapJunk(lootStack, lootChance); + mHandler.addTrapJunk(lootStack, lootChance); Utils.LOG_INFO("Added "+lootStack.getDisplayName()+" as extra Junk for Growthcraft Fishtraps."); } else if (lootType.equals(fishTypes[2])){ - Growthcraft_Old.addTrapTreasure(lootStack, lootChance); + mHandler.addTrapTreasure(lootStack, lootChance); Utils.LOG_INFO("Added "+lootStack.getDisplayName()+" as extra Treasure for Growthcraft Fishtraps."); } else { return; } - } + }/* else if (LoadedMods.getModVersion("Growthcraft").contains("2.7.2")){ if (lootType.equals(fishTypes[0])){ Growthcraft_New.addTrapFish(lootStack, lootChance); @@ -51,7 +86,7 @@ public class FishTrapHandler { else { return; } - } + }*/ else { Utils.LOG_INFO("Extra Fish loot for Growthcraft Fishtraps disabled. Found V."+LoadedMods.getModVersion("Growthcraft")); diff --git a/src/Java/gtPlusPlus/xmod/growthcraft/fishtrap/Growthcraft_New.java b/src/Java/gtPlusPlus/xmod/growthcraft/fishtrap/Growthcraft_New.java index 4405709888..3b6b46d630 100644 --- a/src/Java/gtPlusPlus/xmod/growthcraft/fishtrap/Growthcraft_New.java +++ b/src/Java/gtPlusPlus/xmod/growthcraft/fishtrap/Growthcraft_New.java @@ -1,24 +1,84 @@ package gtPlusPlus.xmod.growthcraft.fishtrap; -import growthcraft.api.fishtrap.FishTrapEntry; -import growthcraft.api.fishtrap.FishTrapRegistry; +import java.lang.reflect.*; + import net.minecraft.item.ItemStack; public class Growthcraft_New { - public static void addTrapJunk(final ItemStack loot, final int lootChance){ - FishTrapRegistry.instance().addTrapJunk(new FishTrapEntry(loot, lootChance)); - + Method addTrapJunk; + Method addTrapTreasure; + Method addTrapFish; + Object FishTrapRegistryO; + + public Growthcraft_New(){ + setFishTrapRegistry(); + } + + void setFishTrapRegistry(){ + try { + Class FishTrapRegistryClass = Class.forName("gtPlusPlus.xmod.growthcraft.fishtrap.FishTrapHandler.mFishingRegistry"); + Class FishTrapEntry = Class.forName("growthcraft.api.fishtrap.FishTrapEntry"); + if (FishTrapRegistryClass.isInstance(FishTrapHandler.getFishingRegistry())){ + addTrapJunk = FishTrapRegistryClass.getDeclaredMethod("addTrapJunk", FishTrapEntry); + addTrapTreasure = FishTrapRegistryClass.getDeclaredMethod("addTrapTreasure", FishTrapEntry); + addTrapFish = FishTrapRegistryClass.getDeclaredMethod("addTrapFish", FishTrapEntry); + FishTrapRegistryO = FishTrapHandler.getFishingRegistry(); + } + } + catch (ClassNotFoundException | NoSuchMethodException | SecurityException e) { + e.printStackTrace(); + } + } + + private Object createFishTrapEntry(ItemStack loot, int chance){ + try { + Class FishTrapEntry = Class.forName("growthcraft.api.fishtrap.FishTrapEntry"); + Object o = FishTrapEntry.getConstructor(ItemStack.class, int.class); + if (FishTrapEntry != null){ + Constructor[] constructors = FishTrapEntry.getDeclaredConstructors(); + constructors[0].setAccessible(true); + Object x = constructors[0].newInstance(loot, chance); + if (x != null){ + return x; + } + } + } + catch (ClassNotFoundException | NoSuchMethodException | SecurityException | InstantiationException | IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {} + + return null; + } + + private boolean invoke(Method m, ItemStack o, int p){ + try { + Object I = createFishTrapEntry(o, p); + m.invoke(FishTrapRegistryO, I); + return true; + } + catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {} + return false; } - public static void addTrapTreasure(final ItemStack loot, final int lootChance){ - FishTrapRegistry.instance().addTrapTreasure(new FishTrapEntry(loot, lootChance)); + public void addTrapJunk(final ItemStack loot, final int lootChance){ + //FishTrapRegistry.instance().addTrapJunk(new FishTrapEntry(loot, lootChance)); + if (addTrapJunk != null){ + invoke(addTrapJunk, loot, lootChance); + } } - public static void addTrapFish(final ItemStack loot, final int lootChance){ - FishTrapRegistry.instance().addTrapFish(new FishTrapEntry(loot, lootChance)); + public void addTrapTreasure(final ItemStack loot, final int lootChance){ + //FishTrapRegistry.instance().addTrapTreasure(new FishTrapEntry(loot, lootChance)); + if (addTrapTreasure != null){ + invoke(addTrapTreasure, loot, lootChance); + } + } + public void addTrapFish(final ItemStack loot, final int lootChance){ + //FishTrapRegistry.instance().addTrapFish(new FishTrapEntry(loot, lootChance)); + if (addTrapFish != null){ + invoke(addTrapFish, loot, lootChance); + } } } diff --git a/src/Java/gtPlusPlus/xmod/growthcraft/fishtrap/Growthcraft_Old.java b/src/Java/gtPlusPlus/xmod/growthcraft/fishtrap/Growthcraft_Old.java index f988abd53a..62fe2f29cb 100644 --- a/src/Java/gtPlusPlus/xmod/growthcraft/fishtrap/Growthcraft_Old.java +++ b/src/Java/gtPlusPlus/xmod/growthcraft/fishtrap/Growthcraft_Old.java @@ -1,24 +1,84 @@ package gtPlusPlus.xmod.growthcraft.fishtrap; -import growthcraft.api.fishtrap.FishTrapEntry; -import growthcraft.api.fishtrap.FishTrapRegistry; +import java.lang.reflect.*; + import net.minecraft.item.ItemStack; public class Growthcraft_Old { - public static void addTrapJunk(final ItemStack loot, final int lootChance){ - FishTrapRegistry.instance().addTrapJunk(new FishTrapEntry(loot, lootChance)); - + Method addTrapJunk; + Method addTrapTreasure; + Method addTrapFish; + Object FishTrapRegistryO; + + public Growthcraft_Old(){ + setFishTrapRegistry(); + } + + void setFishTrapRegistry(){ + try { + Class FishTrapRegistryClass = Class.forName("gtPlusPlus.xmod.growthcraft.fishtrap.FishTrapHandler.mFishingRegistry"); + Class FishTrapEntry = Class.forName("growthcraft.api.fishtrap.FishTrapEntry"); + if (FishTrapRegistryClass.isInstance(FishTrapHandler.getFishingRegistry())){ + addTrapJunk = FishTrapRegistryClass.getDeclaredMethod("addTrapJunk", FishTrapEntry); + addTrapTreasure = FishTrapRegistryClass.getDeclaredMethod("addTrapTreasure", FishTrapEntry); + addTrapFish = FishTrapRegistryClass.getDeclaredMethod("addTrapFish", FishTrapEntry); + FishTrapRegistryO = FishTrapHandler.getFishingRegistry(); + } + } + catch (ClassNotFoundException | NoSuchMethodException | SecurityException e) { + e.printStackTrace(); + } + } + + private Object createFishTrapEntry(ItemStack loot, int chance){ + try { + Class FishTrapEntry = Class.forName("growthcraft.api.fishtrap.FishTrapEntry"); + Object o = FishTrapEntry.getConstructor(ItemStack.class, int.class); + if (FishTrapEntry != null){ + Constructor[] constructors = FishTrapEntry.getDeclaredConstructors(); + constructors[0].setAccessible(true); + Object x = constructors[0].newInstance(loot, chance); + if (x != null){ + return x; + } + } + } + catch (ClassNotFoundException | NoSuchMethodException | SecurityException | InstantiationException | IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {} + + return null; + } + + private boolean invoke(Method m, ItemStack o, int p){ + try { + Object I = createFishTrapEntry(o, p); + m.invoke(FishTrapRegistryO, I); + return true; + } + catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {} + return false; } - public static void addTrapTreasure(final ItemStack loot, final int lootChance){ - FishTrapRegistry.instance().addTrapTreasure(new FishTrapEntry(loot, lootChance)); + public void addTrapJunk(final ItemStack loot, final int lootChance){ + //FishTrapRegistry.instance().addTrapJunk(new FishTrapEntry(loot, lootChance)); + if (addTrapJunk != null){ + invoke(addTrapJunk, loot, lootChance); + } } - public static void addTrapFish(final ItemStack loot, final int lootChance){ - FishTrapRegistry.instance().addTrapFish(new FishTrapEntry(loot, lootChance)); + public void addTrapTreasure(final ItemStack loot, final int lootChance){ + //FishTrapRegistry.instance().addTrapTreasure(new FishTrapEntry(loot, lootChance)); + if (addTrapTreasure != null){ + invoke(addTrapTreasure, loot, lootChance); + } + } + public void addTrapFish(final ItemStack loot, final int lootChance){ + //FishTrapRegistry.instance().addTrapFish(new FishTrapEntry(loot, lootChance)); + if (addTrapFish != null){ + invoke(addTrapFish, loot, lootChance); + } } } -- cgit From 5715a32d2901922503fd850f3a68503fb77467c3 Mon Sep 17 00:00:00 2001 From: Draknyte1 Date: Wed, 20 Dec 2017 23:39:49 +1000 Subject: - Disabled some logging. % Minor Project Clean-up, added missing Override annotations to 100+ methods & removed pointless casts. % Moved Logging to it's own class. $ Fixed Multi-block handling of Pollution. $ Fixed the GT 5.09 material enabler system. (From My Side, it's still borked on GTs). + Added a Dynamic Proxy invocation for IMaterialHandler. + Added an AutoMap data type, which is a Auto-incremental ID'd Hashmap wrapper. --- .../gtPlusPlus/xmod/growthcraft/fishtrap/FishTrapHandler.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'src/Java/gtPlusPlus/xmod/growthcraft') diff --git a/src/Java/gtPlusPlus/xmod/growthcraft/fishtrap/FishTrapHandler.java b/src/Java/gtPlusPlus/xmod/growthcraft/fishtrap/FishTrapHandler.java index aaaa0a0dee..2e6c9c5c84 100644 --- a/src/Java/gtPlusPlus/xmod/growthcraft/fishtrap/FishTrapHandler.java +++ b/src/Java/gtPlusPlus/xmod/growthcraft/fishtrap/FishTrapHandler.java @@ -5,8 +5,8 @@ import java.lang.reflect.Method; import gregtech.api.enums.GT_Values; import gregtech.api.util.GT_ModHandler; +import gtPlusPlus.api.objects.Logger; import gtPlusPlus.core.lib.LoadedMods; -import gtPlusPlus.core.util.Utils; import gtPlusPlus.core.util.fluid.FluidUtils; import gtPlusPlus.core.util.item.ItemUtils; import net.minecraft.item.ItemStack; @@ -56,15 +56,15 @@ public class FishTrapHandler { if (LoadedMods.getModVersion("Growthcraft").contains("2.3.1") || versionString[1].equals("3")){ if (lootType.equals(fishTypes[0])){ mHandler.addTrapFish(lootStack, lootChance); - Utils.LOG_INFO("Added "+lootStack.getDisplayName()+" as an extra Fish for Growthcraft Fishtraps."); + Logger.INFO("Added "+lootStack.getDisplayName()+" as an extra Fish for Growthcraft Fishtraps."); } else if (lootType.equals(fishTypes[1])){ mHandler.addTrapJunk(lootStack, lootChance); - Utils.LOG_INFO("Added "+lootStack.getDisplayName()+" as extra Junk for Growthcraft Fishtraps."); + Logger.INFO("Added "+lootStack.getDisplayName()+" as extra Junk for Growthcraft Fishtraps."); } else if (lootType.equals(fishTypes[2])){ mHandler.addTrapTreasure(lootStack, lootChance); - Utils.LOG_INFO("Added "+lootStack.getDisplayName()+" as extra Treasure for Growthcraft Fishtraps."); + Logger.INFO("Added "+lootStack.getDisplayName()+" as extra Treasure for Growthcraft Fishtraps."); } else { return; @@ -89,7 +89,7 @@ public class FishTrapHandler { }*/ else { - Utils.LOG_INFO("Extra Fish loot for Growthcraft Fishtraps disabled. Found V."+LoadedMods.getModVersion("Growthcraft")); + Logger.INFO("Extra Fish loot for Growthcraft Fishtraps disabled. Found V."+LoadedMods.getModVersion("Growthcraft")); } } -- cgit