From f0108520f233284116112a594cf2f36aec7abccd Mon Sep 17 00:00:00 2001 From: Alkalus <3060479+draknyte1@users.noreply.github.com> Date: Mon, 29 Jul 2019 19:03:03 +0100 Subject: + Added all drying rack recipes to the dehydrator. Closes #487. --- .../xmod/tinkers/util/TinkersDryingRecipe.java | 93 ++++++++++++++++++++++ 1 file changed, 93 insertions(+) create mode 100644 src/Java/gtPlusPlus/xmod/tinkers/util/TinkersDryingRecipe.java (limited to 'src/Java/gtPlusPlus/xmod/tinkers/util/TinkersDryingRecipe.java') diff --git a/src/Java/gtPlusPlus/xmod/tinkers/util/TinkersDryingRecipe.java b/src/Java/gtPlusPlus/xmod/tinkers/util/TinkersDryingRecipe.java new file mode 100644 index 0000000000..8be5e35ed6 --- /dev/null +++ b/src/Java/gtPlusPlus/xmod/tinkers/util/TinkersDryingRecipe.java @@ -0,0 +1,93 @@ +package gtPlusPlus.xmod.tinkers.util; + +import java.lang.reflect.Field; +import java.util.ArrayList; +import java.util.List; + +import gregtech.api.enums.GT_Values; +import gtPlusPlus.api.objects.Logger; +import gtPlusPlus.api.objects.data.AutoMap; +import gtPlusPlus.core.lib.CORE; +import gtPlusPlus.core.lib.LoadedMods; +import gtPlusPlus.core.recipe.common.CI; +import gtPlusPlus.core.util.reflect.ReflectionUtils; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; + +public class TinkersDryingRecipe { + + public static AutoMap recipes = new AutoMap(); + + public final int time; + public final ItemStack input; + public final ItemStack result; + + public static void generateAllDryingRecipes() { + List aRecipes = TinkersUtils.getDryingRecipes(); + if (aRecipes != null && aRecipes.size() > 0) { + for (Object o : aRecipes) { + generateFromTinkersRecipeObject(o); + } + } + if (!recipes.isEmpty()) { + Logger.INFO("Adding "+recipes.size()+" drying rack recipes to the dehydrator."); + for (TinkersDryingRecipe r : recipes) { + CORE.RA.addDehydratorRecipe( + new ItemStack[] { + CI.getNumberedCircuit(16), + r.input + }, + GT_Values.NF, + GT_Values.NF, + new ItemStack[] {r.result}, + new int[] {}, + r.time, + 120); + } + } + } + + public static TinkersDryingRecipe generateFromTinkersRecipeObject(Object o) { + Field aTime; + Field aInput; + Field aOutput; + Class aTinkerClass = ReflectionUtils.getClass("tconstruct.library.crafting.DryingRackRecipes.DryingRecipe"); + if (aTinkerClass == null || !LoadedMods.TiCon) { + return null; + } + aTime = ReflectionUtils.getField(aTinkerClass, "time"); + aInput = ReflectionUtils.getField(aTinkerClass, "input"); + aOutput = ReflectionUtils.getField(aTinkerClass, "result"); + try { + int time_internal = aTime.getInt(o); + ItemStack input_internal = (ItemStack) aInput.get(o); + ItemStack result_internal = (ItemStack) aOutput.get(o); + return new TinkersDryingRecipe(input_internal, time_internal, result_internal); + } catch (Throwable b) { + + } + return null; + } + + TinkersDryingRecipe(final ItemStack input, final int time, final ItemStack result) { + this.time = time; + this.input = input; + this.result = result; + recipes.add(this); + } + + public boolean matches(ItemStack input) { + if (input.hasTagCompound()) { + input = input.copy(); + input.getTagCompound().removeTag("frypanKill"); + if (input.getTagCompound().hasNoTags()) { + input.setTagCompound((NBTTagCompound) null); + } + } + return ItemStack.areItemStacksEqual(this.input, input); + } + + public ItemStack getResult() { + return this.result.copy(); + } +} -- cgit From 8308ff274b114193fed038daf139c9c94329a666 Mon Sep 17 00:00:00 2001 From: Alkalus <3060479+draknyte1@users.noreply.github.com> Date: Thu, 15 Aug 2019 01:32:23 +0100 Subject: $ Fixed Dehydrator not properly importing Tinkers drying rack recipes. Fixes #487. $ Fixed Pest Killer not detecting butterflies properly. --- .../machines/TileEntityPestKiller.java | 2 +- .../core/util/reflect/ReflectionUtils.java | 61 +++++++++++++++++----- .../gtPlusPlus/xmod/tinkers/HANDLER_Tinkers.java | 2 +- .../xmod/tinkers/util/TinkersDryingRecipe.java | 39 +++++++++++--- 4 files changed, 84 insertions(+), 20 deletions(-) (limited to 'src/Java/gtPlusPlus/xmod/tinkers/util/TinkersDryingRecipe.java') diff --git a/src/Java/gtPlusPlus/core/tileentities/machines/TileEntityPestKiller.java b/src/Java/gtPlusPlus/core/tileentities/machines/TileEntityPestKiller.java index b518072e48..3ebe5be40d 100644 --- a/src/Java/gtPlusPlus/core/tileentities/machines/TileEntityPestKiller.java +++ b/src/Java/gtPlusPlus/core/tileentities/machines/TileEntityPestKiller.java @@ -55,7 +55,7 @@ public class TileEntityPestKiller extends TileEntity implements ISidedInventory, static { mEntityMap.put(EntityBat.class); if (LoadedMods.Forestry) { - mEntityMap.put(ReflectionUtils.getClass("forestry.lepidopterology.entities.EntityButterfly.class")); + mEntityMap.put(ReflectionUtils.getClass("forestry.lepidopterology.entities.EntityButterfly")); } } diff --git a/src/Java/gtPlusPlus/core/util/reflect/ReflectionUtils.java b/src/Java/gtPlusPlus/core/util/reflect/ReflectionUtils.java index 19e42735d7..b52c13c563 100644 --- a/src/Java/gtPlusPlus/core/util/reflect/ReflectionUtils.java +++ b/src/Java/gtPlusPlus/core/util/reflect/ReflectionUtils.java @@ -293,7 +293,7 @@ public class ReflectionUtils { return loaded > 0; } - + public static boolean setField(final Object object, final String fieldName, final Object fieldValue) { Class clazz = object.getClass(); @@ -313,8 +313,8 @@ public class ReflectionUtils { } } return false; - - + + } public static boolean setField(final Object object, final Field field, final Object fieldValue) { @@ -484,11 +484,11 @@ public class ReflectionUtils { * Internal Magic that probably should not get exposed. */ - - - - - + + + + + @@ -767,15 +767,52 @@ public class ReflectionUtils { } private static Class getClass_Internal(String string) { + Class aClass = null; if (ReflectionUtils.doesClassExist(string)) { try { - return Class.forName(string); + aClass = Class.forName(string); } catch (ClassNotFoundException e) { - return getNonPublicClass(string); + aClass = getNonPublicClass(string); } } - return null; + + if (aClass == null) { + String aClassName = ""; + Logger.REFLECTION("Splitting "+string+" to try look for hidden classes."); + String[] aData = string.split("\\."); + Logger.REFLECTION("Obtained "+aData.length+" pieces."); + for (int i=0;i<(aData.length-1);i++) { + aClassName += (i > 0) ? "."+aData[i] : ""+aData[i]; + Logger.REFLECTION("Building: "+aClassName); + } + Logger.REFLECTION("Trying to search '"+aClassName+"' for inner classes."); + Class clazz = ReflectionUtils.getClass(aClassName); + + Class[] y = clazz.getDeclaredClasses(); + if (y == null || y.length <= 0) { + Logger.REFLECTION("No hidden inner classes found."); + return null; + } + else { + boolean found = false; + for (Class h : y) { + Logger.REFLECTION("Found hidden inner class: "+h.getCanonicalName()); + if (h.getSimpleName().toLowerCase().equals(aData[aData.length-1].toLowerCase())) { + Logger.REFLECTION("Found correct class. ["+aData[aData.length-1]+"] Caching at correct location: "+string); + Logger.REFLECTION("Found at location: "+h.getCanonicalName()); + ReflectionUtils.mCachedClasses.put(string, h); + aClass = h; + found = true; + break; + } + } + if (!found) { + return null; + } + } + } + return aClass; } /** @@ -803,7 +840,7 @@ public class ReflectionUtils { public static boolean doesFieldExist(String clazz, String string) { return doesFieldExist(ReflectionUtils.getClass(clazz), string); } - + public static boolean doesFieldExist(Class clazz, String string) { if (clazz != null) { if (ReflectionUtils.getField(clazz, string) != null) { diff --git a/src/Java/gtPlusPlus/xmod/tinkers/HANDLER_Tinkers.java b/src/Java/gtPlusPlus/xmod/tinkers/HANDLER_Tinkers.java index f96ca01403..4a3f9cd504 100644 --- a/src/Java/gtPlusPlus/xmod/tinkers/HANDLER_Tinkers.java +++ b/src/Java/gtPlusPlus/xmod/tinkers/HANDLER_Tinkers.java @@ -40,7 +40,7 @@ public class HANDLER_Tinkers { //Generate Drying Rack recipes TinkersDryingRecipe.generateAllDryingRecipes(); - + for (BaseTinkersMaterial y : mTinkerMaterials) { //y.generate(); } diff --git a/src/Java/gtPlusPlus/xmod/tinkers/util/TinkersDryingRecipe.java b/src/Java/gtPlusPlus/xmod/tinkers/util/TinkersDryingRecipe.java index 8be5e35ed6..8bc7ffef29 100644 --- a/src/Java/gtPlusPlus/xmod/tinkers/util/TinkersDryingRecipe.java +++ b/src/Java/gtPlusPlus/xmod/tinkers/util/TinkersDryingRecipe.java @@ -26,9 +26,13 @@ public class TinkersDryingRecipe { List aRecipes = TinkersUtils.getDryingRecipes(); if (aRecipes != null && aRecipes.size() > 0) { for (Object o : aRecipes) { + Logger.INFO("Trying to generate recipe using object of type "+o.getClass().getSimpleName()); generateFromTinkersRecipeObject(o); } } + else { + Logger.INFO("Error generating Drying recipes, map was either null or empty. Null? "+(aRecipes != null)+", Size: "+aRecipes.size()); + } if (!recipes.isEmpty()) { Logger.INFO("Adding "+recipes.size()+" drying rack recipes to the dehydrator."); for (TinkersDryingRecipe r : recipes) { @@ -41,8 +45,8 @@ public class TinkersDryingRecipe { GT_Values.NF, new ItemStack[] {r.result}, new int[] {}, - r.time, - 120); + r.time/10, + 30); } } } @@ -51,9 +55,31 @@ public class TinkersDryingRecipe { Field aTime; Field aInput; Field aOutput; - Class aTinkerClass = ReflectionUtils.getClass("tconstruct.library.crafting.DryingRackRecipes.DryingRecipe"); + Class aTinkerClass = ReflectionUtils.getClass("tconstruct.library.crafting.DryingRackRecipes.DryingRecipe");//o.getClass(); if (aTinkerClass == null || !LoadedMods.TiCon) { - return null; + Logger.INFO("Error generating Drying Recipe, could not find class. Exists? "+ReflectionUtils.doesClassExist("tconstruct.library.crafting.DryingRackRecipes.DryingRecipe")); + Class clazz = ReflectionUtils.getClass("tconstruct.library.crafting.DryingRackRecipes"); + Class[] y = clazz.getDeclaredClasses(); + if (y == null || y.length <= 0) { + Logger.INFO("No hidden inner classes."); + return null; + } + else { + boolean found = false; + for (Class h : y) { + Logger.INFO("Found hidden inner class: "+h.getCanonicalName()); + if (h.getSimpleName().toLowerCase().equals("dryingrecipe")) { + Logger.INFO("Found correct recipe. Caching at correct location."); + ReflectionUtils.mCachedClasses.put("tconstruct.library.crafting.DryingRackRecipes.DryingRecipe", h); + aTinkerClass = h; + found = true; + break; + } + } + if (!found) { + return null; + } + } } aTime = ReflectionUtils.getField(aTinkerClass, "time"); aInput = ReflectionUtils.getField(aTinkerClass, "input"); @@ -64,15 +90,16 @@ public class TinkersDryingRecipe { ItemStack result_internal = (ItemStack) aOutput.get(o); return new TinkersDryingRecipe(input_internal, time_internal, result_internal); } catch (Throwable b) { - + b.printStackTrace(); } return null; } - TinkersDryingRecipe(final ItemStack input, final int time, final ItemStack result) { + public TinkersDryingRecipe(final ItemStack input, final int time, final ItemStack result) { this.time = time; this.input = input; this.result = result; + Logger.INFO("Generating Drying Recipe. Input: "+input.getDisplayName()+", Output: "+result.getDisplayName()); recipes.add(this); } -- cgit