diff options
4 files changed, 149 insertions, 103 deletions
diff --git a/src/Java/gtPlusPlus/xmod/forestry/HANDLER_FR.java b/src/Java/gtPlusPlus/xmod/forestry/HANDLER_FR.java index f48d0ffec2..9bdf9a83dd 100644 --- a/src/Java/gtPlusPlus/xmod/forestry/HANDLER_FR.java +++ b/src/Java/gtPlusPlus/xmod/forestry/HANDLER_FR.java @@ -7,6 +7,7 @@ import cpw.mods.fml.common.Optional; import gtPlusPlus.core.lib.LoadedMods; import gtPlusPlus.core.util.reflect.ReflectionUtils; import gtPlusPlus.xmod.forestry.bees.custom.GTPP_Bees; +import gtPlusPlus.xmod.forestry.bees.custom.GTPP_Branch_Definition; import gtPlusPlus.xmod.forestry.bees.items.FR_ItemRegistry; import gtPlusPlus.xmod.forestry.bees.recipe.FR_Gregtech_Recipes; import net.minecraft.block.Block; @@ -16,16 +17,13 @@ public class HANDLER_FR { public static void preInit(){ if (LoadedMods.Forestry){ - FR_ItemRegistry.Register(); - } - - new GTPP_Bees(); - + FR_ItemRegistry.Register(); + } } public static void Init(){ if (LoadedMods.Forestry){ - + new GTPP_Bees(); } } diff --git a/src/Java/gtPlusPlus/xmod/forestry/bees/custom/GTPP_Bee_Definition.java b/src/Java/gtPlusPlus/xmod/forestry/bees/custom/GTPP_Bee_Definition.java index 24327a97a9..e04d659cfb 100644 --- a/src/Java/gtPlusPlus/xmod/forestry/bees/custom/GTPP_Bee_Definition.java +++ b/src/Java/gtPlusPlus/xmod/forestry/bees/custom/GTPP_Bee_Definition.java @@ -10,18 +10,25 @@ import forestry.apiculture.genetics.BeeDefinition; import forestry.apiculture.genetics.BeeVariation; import forestry.apiculture.genetics.IBeeDefinition; import forestry.core.genetics.alleles.AlleleHelper; +import gtPlusPlus.core.item.ModItems; import gtPlusPlus.core.util.Utils; import gtPlusPlus.core.util.item.ItemUtils; +import gtPlusPlus.core.util.reflect.ReflectionUtils; +import net.minecraft.item.Item; import net.minecraft.item.ItemStack; + +import org.apache.commons.lang3.reflect.FieldUtils; import org.apache.commons.lang3.text.WordUtils; +import java.lang.reflect.Field; +import java.lang.reflect.Method; import java.util.Arrays; import java.util.Locale; public enum GTPP_Bee_Definition implements IBeeDefinition { - SILICON(GTPP_Branch_Definition.METAL, "Silicon", true, Utils.rgbtoHexValue(75, 75, 75), Utils.rgbtoHexValue(125, 125, 125)) { + SILICON(GTPP_Branch_Definition.ORGANIC, "Silicon", true, Utils.rgbtoHexValue(75, 75, 75), Utils.rgbtoHexValue(125, 125, 125)) { @Override protected void setSpeciesProperties(IAlleleBeeSpeciesCustom beeSpecies) { beeSpecies.addProduct(getSlagComb(), 0.10f); @@ -37,7 +44,7 @@ public enum GTPP_Bee_Definition implements IBeeDefinition { @Override protected void registerMutations() { - IBeeMutationCustom tMutation = registerMutation(getSpecies("SlimeBall"), getSpecies("StickyResin"), 10); + IBeeMutationCustom tMutation = registerMutation(getGregtechBeeType("SLIMEBALL"), getGregtechBeeType("STICKYRESIN"), 10); } }, @@ -57,7 +64,7 @@ public enum GTPP_Bee_Definition implements IBeeDefinition { @Override protected void registerMutations() { - IBeeMutationCustom tMutation = registerMutation(getSpecies("SlimeBall"), getSpecies("StickyResin"), 10); + IBeeMutationCustom tMutation = registerMutation(getGregtechBeeType("SLIMEBALL"), getGregtechBeeType("STICKYRESIN"), 10); } }, @@ -77,7 +84,7 @@ public enum GTPP_Bee_Definition implements IBeeDefinition { @Override protected void registerMutations() { - IBeeMutationCustom tMutation = registerMutation(getSpecies("Rubber"), getSpecies("Oil"), 10); + IBeeMutationCustom tMutation = registerMutation(RUBBER.species, getGregtechBeeType("OIL"), 10); } }, @@ -97,7 +104,7 @@ public enum GTPP_Bee_Definition implements IBeeDefinition { @Override protected void registerMutations() { - IBeeMutationCustom tMutation = registerMutation(getSpecies("Rubber"), getSpecies("Plastic"), 10); + IBeeMutationCustom tMutation = registerMutation(RUBBER.species, PLASTIC.species, 10); } }, @@ -117,7 +124,7 @@ public enum GTPP_Bee_Definition implements IBeeDefinition { @Override protected void registerMutations() { - IBeeMutationCustom tMutation = registerMutation(getSpecies("Ptfe"), getSpecies("Plastic"), 10); + IBeeMutationCustom tMutation = registerMutation(PTFE.species, PLASTIC.species, 10); } }, @@ -667,7 +674,12 @@ public enum GTPP_Bee_Definition implements IBeeDefinition { } protected final IBeeMutationCustom registerMutation(IAlleleBeeSpecies parent1, IAlleleBeeSpecies parent2, int chance) { - return BeeManager.beeMutationFactory.createMutation(parent1, parent2, getTemplate(), chance); + IAllele[] template = getTemplate(); + Utils.LOG_INFO("[Bees-Debug] parent1: "+(parent1 != null)); + Utils.LOG_INFO("[Bees-Debug] parent2: "+(parent2 != null)); + Utils.LOG_INFO("[Bees-Debug] chance: "+(chance)); + Utils.LOG_INFO("[Bees-Debug] template: "+(template != null)); + return BeeManager.beeMutationFactory.createMutation(parent1, parent2, template, chance); } @Override @@ -696,10 +708,33 @@ public enum GTPP_Bee_Definition implements IBeeDefinition { } private static ItemStack getSlagComb(){ - return ItemUtils.getSimpleStack(GTPP_Bees.Comb_Slag, 1); + return issStackValid(ItemUtils.getSimpleStack(GTPP_Bees.Comb_Slag, 1)); } private static ItemStack getStoneComb(){ - return ItemUtils.getSimpleStack(GTPP_Bees.Comb_Stone, 1); + return issStackValid(ItemUtils.getSimpleStack(GTPP_Bees.Comb_Stone, 1)); } + private static ItemStack issStackValid(ItemStack result){ + if (result == null){ + return ItemUtils.getSimpleStack(ModItems.AAA_Broken); + } + return result; + } + + public static IAlleleBeeSpecies getGregtechBeeType(String name){ + Class<?> gtBees; + try { + Class gtBeeTypes = Class.forName("gregtech.loaders.misc.GT_BeeDefinition"); + Enum gtBeeEnumObject = Enum.valueOf(gtBeeTypes, name); + Field gtBeesField = FieldUtils.getDeclaredField(gtBeeTypes, "species", true); + gtBeesField.setAccessible(true); + ReflectionUtils.makeAccessible(gtBeesField); + Object beeType = gtBeesField.get(gtBeeEnumObject); + return (IAlleleBeeSpecies) beeType; + } + catch (ClassNotFoundException | IllegalArgumentException | IllegalAccessException e) { + e.printStackTrace(); + } + return null; + } } diff --git a/src/Java/gtPlusPlus/xmod/forestry/bees/custom/GTPP_Bees.java b/src/Java/gtPlusPlus/xmod/forestry/bees/custom/GTPP_Bees.java index eb6beac02a..d26e34ba89 100644 --- a/src/Java/gtPlusPlus/xmod/forestry/bees/custom/GTPP_Bees.java +++ b/src/Java/gtPlusPlus/xmod/forestry/bees/custom/GTPP_Bees.java @@ -9,6 +9,9 @@ import org.apache.commons.lang3.reflect.FieldUtils; import cpw.mods.fml.common.Loader; import gregtech.GT_Mod; import gregtech.api.enums.Materials; +import gtPlusPlus.core.util.Utils; +import gtPlusPlus.core.util.reflect.ReflectionUtils; +import net.minecraft.item.Item; import net.minecraft.item.ItemStack; public class GTPP_Bees { @@ -23,11 +26,17 @@ public class GTPP_Bees { //Materials obtained via reflection public static Materials PTFE; public static Materials PBS; + + //public static GTPP_Branch_Definition definition; public GTPP_Bees() { if (Loader.isModLoaded("Forestry") /*&& tryGetBeesBoolean()*/) { + //Set Bee Defs from GT via Reflection + //definition = new GTPP_Branch_Definition(); + + //Set Materials and Comb stacks from GT via Reflection setMaterials(); combs = new ItemCustomComb(); @@ -55,13 +64,37 @@ public class GTPP_Bees { Class<?> gtCombItemClass = Class.forName("gregtech.common.items.ItemComb"); Class gtCombEnumClass = Class.forName("gregtech.common.items.CombType"); Field gtCombs = FieldUtils.getDeclaredField(gtBees, "combs", true); + gtCombs.setAccessible(true); + ReflectionUtils.makeAccessible(gtCombs); Enum gtCombTypeSlag = Enum.valueOf(gtCombEnumClass, "SLAG"); Enum gtCombTypeStone = Enum.valueOf(gtCombEnumClass, "STONE"); - Object oCombObject = gtCombs.get(gtBees); + Item oCombObject = (Item) gtCombs.get(null); + + Utils.LOG_INFO("[Bees-Debug] Field getModifiers: "+gtCombs.getModifiers()); + Utils.LOG_INFO("[Bees-Debug] Field toGenericString: "+gtCombs.toGenericString()); + Utils.LOG_INFO("[Bees-Debug] Field getClass: "+gtCombs.getClass()); + Utils.LOG_INFO("[Bees-Debug] Field isEnumConstant: "+gtCombs.isEnumConstant()); + Utils.LOG_INFO("[Bees-Debug] Field isSynthetic: "+gtCombs.isSynthetic()); + Utils.LOG_INFO("[Bees-Debug] Field get(gtBees) != null: "+(gtCombs.get(gtBees) != null)); + Utils.LOG_INFO("[Bees-Debug] Field isAccessible: "+gtCombs.isAccessible()); + + + Utils.LOG_INFO("[Bees] gtBees: "+(gtBees != null)); + Utils.LOG_INFO("[Bees] gtCombItemClass: "+(gtCombItemClass != null)); + Utils.LOG_INFO("[Bees] gtCombEnumClass: "+(gtCombEnumClass != null)); + Utils.LOG_INFO("[Bees] gtCombs: "+(gtCombs != null)); + Utils.LOG_INFO("[Bees] gtCombTypeSlag: "+(gtCombTypeSlag != null)); + Utils.LOG_INFO("[Bees] gtCombTypeStone: "+(gtCombTypeStone != null)); + Utils.LOG_INFO("[Bees] oCombObject: "+(oCombObject != null)); + if (gtCombItemClass.isInstance(oCombObject)){ Method getStackForType; getStackForType = gtCombItemClass.getDeclaredMethod("getStackForType", gtCombEnumClass); + + if (getStackForType != null) { + Utils.LOG_INFO("[Bees] Found Method: getStackForType"); + } if (Comb_Slag == null){ Comb_Slag = (ItemStack) getStackForType.invoke(gtBees, gtCombTypeSlag); } @@ -69,10 +102,13 @@ public class GTPP_Bees { Comb_Stone = (ItemStack) getStackForType.invoke(gtBees, gtCombTypeStone); } } + else { + Utils.LOG_INFO("[Bees] oCombObject was not an instance of gregtech.common.items.ItemComb"); + } } catch (NullPointerException | ClassNotFoundException | IllegalArgumentException | IllegalAccessException | NoSuchMethodException | SecurityException | InvocationTargetException e){ - + Utils.LOG_INFO("[Bees] Bad Reflection. setMaterials()"); } PTFE = trySetValue("Polytetrafluoroethylene"); diff --git a/src/Java/gtPlusPlus/xmod/forestry/bees/custom/GTPP_Branch_Definition.java b/src/Java/gtPlusPlus/xmod/forestry/bees/custom/GTPP_Branch_Definition.java index a56bb3b2aa..add7198bd8 100644 --- a/src/Java/gtPlusPlus/xmod/forestry/bees/custom/GTPP_Branch_Definition.java +++ b/src/Java/gtPlusPlus/xmod/forestry/bees/custom/GTPP_Branch_Definition.java @@ -1,103 +1,80 @@ package gtPlusPlus.xmod.forestry.bees.custom; -import forestry.api.apiculture.BeeManager; -import forestry.api.apiculture.EnumBeeChromosome; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; + import forestry.api.genetics.IAllele; import forestry.api.genetics.IClassification; -import forestry.apiculture.genetics.alleles.AlleleEffect; -import forestry.core.genetics.alleles.AlleleHelper; -import forestry.core.genetics.alleles.EnumAllele; - -import java.util.Arrays; - +import gtPlusPlus.core.util.Utils; public enum GTPP_Branch_Definition { - ORGANIC("Fuelis") { - @Override - protected void setBranchProperties(IAllele[] alleles) { - AlleleHelper.instance.set(alleles, EnumBeeChromosome.TEMPERATURE_TOLERANCE, EnumAllele.Tolerance.UP_2); - AlleleHelper.instance.set(alleles, EnumBeeChromosome.NOCTURNAL, false); - AlleleHelper.instance.set(alleles, EnumBeeChromosome.FLOWER_PROVIDER, EnumAllele.Flowers.MUSHROOMS); - AlleleHelper.instance.set(alleles, EnumBeeChromosome.FLOWERING, EnumAllele.Flowering.SLOW); - } - }, - GEM("Ornamentis") { - @Override - protected void setBranchProperties(IAllele[] alleles) { - AlleleHelper.instance.set(alleles, EnumBeeChromosome.TEMPERATURE_TOLERANCE, EnumAllele.Tolerance.NONE); - AlleleHelper.instance.set(alleles, EnumBeeChromosome.NOCTURNAL, false); - AlleleHelper.instance.set(alleles, EnumBeeChromosome.FLOWER_PROVIDER, EnumAllele.Flowers.VANILLA); - AlleleHelper.instance.set(alleles, EnumBeeChromosome.FLOWERING, EnumAllele.Flowering.AVERAGE); - } - }, - METAL("Metaliferis") { - @Override - protected void setBranchProperties(IAllele[] alleles) { - AlleleHelper.instance.set(alleles, EnumBeeChromosome.TEMPERATURE_TOLERANCE, EnumAllele.Tolerance.DOWN_2); - AlleleHelper.instance.set(alleles, EnumBeeChromosome.NOCTURNAL, false); - AlleleHelper.instance.set(alleles, EnumBeeChromosome.FLOWER_PROVIDER, EnumAllele.Flowers.JUNGLE); - AlleleHelper.instance.set(alleles, EnumBeeChromosome.FLOWERING, EnumAllele.Flowering.SLOWER); - } - }, - RAREMETAL("Mineralis") { - @Override - protected void setBranchProperties(IAllele[] alleles) { - AlleleHelper.instance.set(alleles, EnumBeeChromosome.TEMPERATURE_TOLERANCE, EnumAllele.Tolerance.DOWN_1); - AlleleHelper.instance.set(alleles, EnumBeeChromosome.NOCTURNAL, false); - AlleleHelper.instance.set(alleles, EnumBeeChromosome.FLOWER_PROVIDER, EnumAllele.Flowers.CACTI); - AlleleHelper.instance.set(alleles, EnumBeeChromosome.FLOWERING, EnumAllele.Flowering.FAST); - } - }, - RADIOACTIVE("Criticalis") { - @Override - protected void setBranchProperties(IAllele[] alleles) { - AlleleHelper.instance.set(alleles, EnumBeeChromosome.TEMPERATURE_TOLERANCE, EnumAllele.Tolerance.NONE); - AlleleHelper.instance.set(alleles, EnumBeeChromosome.NOCTURNAL, false); - AlleleHelper.instance.set(alleles, EnumBeeChromosome.FLOWER_PROVIDER, EnumAllele.Flowers.END); - AlleleHelper.instance.set(alleles, EnumBeeChromosome.FLOWERING, EnumAllele.Flowering.AVERAGE); - } - }; + ORGANIC("ORGANIC"), + GEM("GEM"), + METAL("METAL"), + RAREMETAL("RAREMETAL"), + RADIOACTIVE("RADIOACTIVE"); - private static IAllele[] defaultTemplate; - private final IClassification branch; + final String mFieldName; + final Enum mActualValues; + GTPP_Branch_Definition(String mValue){ + this.mFieldName = mValue; + this.mActualValues = setEnumVar(mValue); + } - GTPP_Branch_Definition(String scientific) { - branch = BeeManager.beeFactory.createBranch(this.name().toLowerCase(), scientific); - } + public final IAllele[] getTemplate() { + Class gtBranchDefClass; + try { + gtBranchDefClass = Class.forName("gregtech.loaders.misc.GT_BranchDefinition"); + Enum enumA = mActualValues; + Method methodMyMethod = gtBranchDefClass.getMethod("getTemplate"); - private static IAllele[] getDefaultTemplate() { - if (defaultTemplate == null) { - defaultTemplate = new IAllele[EnumBeeChromosome.values().length]; + Utils.LOG_INFO("[Bees] gtBranchDefClass: "+(gtBranchDefClass != null)); + Utils.LOG_INFO("[Bees] enumA: "+(enumA != null)); + Utils.LOG_INFO("[Bees] methodMyMethod: "+(methodMyMethod != null)); + + return (IAllele[]) methodMyMethod.invoke(enumA); + } + catch (ClassNotFoundException | NoSuchMethodException | SecurityException | IllegalAccessException | IllegalArgumentException | InvocationTargetException e) { + Utils.LOG_INFO("[Bees] Bad Reflection. getTemplate()"); + e.printStackTrace(); + //gregtech.loaders.misc.GT_BranchDefinition.getTemplate() + return null; + } + } - AlleleHelper.instance.set(defaultTemplate, EnumBeeChromosome.SPEED, EnumAllele.Speed.SLOW); - AlleleHelper.instance.set(defaultTemplate, EnumBeeChromosome.LIFESPAN, EnumAllele.Lifespan.SHORTER); - AlleleHelper.instance.set(defaultTemplate, EnumBeeChromosome.FERTILITY, EnumAllele.Fertility.NORMAL); - AlleleHelper.instance.set(defaultTemplate, EnumBeeChromosome.TEMPERATURE_TOLERANCE, EnumAllele.Tolerance.NONE); - AlleleHelper.instance.set(defaultTemplate, EnumBeeChromosome.NOCTURNAL, false); - AlleleHelper.instance.set(defaultTemplate, EnumBeeChromosome.HUMIDITY_TOLERANCE, EnumAllele.Tolerance.NONE); - AlleleHelper.instance.set(defaultTemplate, EnumBeeChromosome.TOLERANT_FLYER, false); - AlleleHelper.instance.set(defaultTemplate, EnumBeeChromosome.CAVE_DWELLING, false); - AlleleHelper.instance.set(defaultTemplate, EnumBeeChromosome.FLOWER_PROVIDER, EnumAllele.Flowers.VANILLA); - AlleleHelper.instance.set(defaultTemplate, EnumBeeChromosome.FLOWERING, EnumAllele.Flowering.SLOWEST); - AlleleHelper.instance.set(defaultTemplate, EnumBeeChromosome.TERRITORY, EnumAllele.Territory.AVERAGE); - AlleleHelper.instance.set(defaultTemplate, EnumBeeChromosome.EFFECT, AlleleEffect.effectNone); - } - return Arrays.copyOf(defaultTemplate, defaultTemplate.length); - } + public final IClassification getBranch() { + Class gtBranchDefClass; + try { + gtBranchDefClass = Class.forName("gregtech.loaders.misc.GT_BranchDefinition"); + Enum enum_MY_SAMPLE_ENUM = mActualValues; + Method methodMyMethod = gtBranchDefClass.getMethod("getBranch"); + - protected void setBranchProperties(IAllele[] template) { + Utils.LOG_INFO("[Bees] gtBranchDefClass: "+(gtBranchDefClass != null)); + Utils.LOG_INFO("[Bees] enum_MY_SAMPLE_ENUM: "+(enum_MY_SAMPLE_ENUM != null)); + Utils.LOG_INFO("[Bees] methodMyMethod: "+(methodMyMethod != null)); + + return (IClassification) methodMyMethod.invoke(enum_MY_SAMPLE_ENUM); + } + catch (ClassNotFoundException | NoSuchMethodException | SecurityException | IllegalAccessException | IllegalArgumentException | InvocationTargetException e) { + Utils.LOG_INFO("[Bees] Bad Reflection. getBranch()"); + e.printStackTrace(); + return null; + } + } - } + private Enum setEnumVar(String value){ + try { + Class gtBranchDefClass = Class.forName("gregtech.loaders.misc.GT_BranchDefinition"); + Enum branchDef = Enum.valueOf(gtBranchDefClass, value); + return branchDef; + } + catch (ClassNotFoundException e){ + return null; + } + } - public final IAllele[] getTemplate() { - IAllele[] template = getDefaultTemplate(); - setBranchProperties(template); - return template; - } - public final IClassification getBranch() { - return branch; - } } |