diff options
author | Alkalus <3060479+draknyte1@users.noreply.github.com> | 2019-07-29 19:03:03 +0100 |
---|---|---|
committer | Alkalus <3060479+draknyte1@users.noreply.github.com> | 2019-07-29 19:03:03 +0100 |
commit | f0108520f233284116112a594cf2f36aec7abccd (patch) | |
tree | 178d176843c270ec0d01a96db8ac93174d2ab3af /src/Java/gtPlusPlus/xmod/tinkers/util | |
parent | a05fb3167179cbc25f006f825cd55638ce14d7fa (diff) | |
download | GT5-Unofficial-f0108520f233284116112a594cf2f36aec7abccd.tar.gz GT5-Unofficial-f0108520f233284116112a594cf2f36aec7abccd.tar.bz2 GT5-Unofficial-f0108520f233284116112a594cf2f36aec7abccd.zip |
+ Added all drying rack recipes to the dehydrator. Closes #487.
Diffstat (limited to 'src/Java/gtPlusPlus/xmod/tinkers/util')
-rw-r--r-- | src/Java/gtPlusPlus/xmod/tinkers/util/TinkersDryingRecipe.java | 93 | ||||
-rw-r--r-- | src/Java/gtPlusPlus/xmod/tinkers/util/TinkersUtils.java | 70 |
2 files changed, 139 insertions, 24 deletions
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<TinkersDryingRecipe> recipes = new AutoMap<TinkersDryingRecipe>(); + + 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(); + } +} diff --git a/src/Java/gtPlusPlus/xmod/tinkers/util/TinkersUtils.java b/src/Java/gtPlusPlus/xmod/tinkers/util/TinkersUtils.java index f0c6d76b7c..15ca3b497e 100644 --- a/src/Java/gtPlusPlus/xmod/tinkers/util/TinkersUtils.java +++ b/src/Java/gtPlusPlus/xmod/tinkers/util/TinkersUtils.java @@ -12,6 +12,8 @@ import java.util.LinkedList; import java.util.List; import gregtech.api.enums.Materials; +import gtPlusPlus.api.objects.Logger; +import gtPlusPlus.api.objects.data.AutoMap; import gtPlusPlus.core.lib.LoadedMods; import gtPlusPlus.core.material.Material; import gtPlusPlus.core.util.minecraft.ItemUtils; @@ -24,14 +26,14 @@ import net.minecraftforge.fluids.FluidStack; public class TinkersUtils { - private static final Class mClass_Smeltery; - private static final Class mClass_TConstructRegistry; - private static final Class mClass_ToolMaterial; - private static final Class mClass_IPattern; - private static final Class mClass_DynamicToolPart; - private static final Class mClass_FluidType; - private static final Class mClass_CastingRecipe; - private static final Class mClass_TinkerSmeltery; + private static final Class<?> mClass_Smeltery; + private static final Class<?> mClass_TConstructRegistry; + private static final Class<?> mClass_ToolMaterial; + private static final Class<?> mClass_IPattern; + private static final Class<?> mClass_DynamicToolPart; + private static final Class<?> mClass_FluidType; + private static final Class<?> mClass_CastingRecipe; + private static final Class<?> mClass_TinkerSmeltery; private static final Field mField_MoltenIronFluid; @@ -313,16 +315,36 @@ public class TinkersUtils { ItemStack ingotCast = new ItemStack(mTinkerMetalPattern, aType, 0); return ingotCast; } - return ItemUtils.getErrorStack(1, "Bad Tinkers Pattern"); - - - - - - - + return ItemUtils.getErrorStack(1, "Bad Tinkers Pattern"); } + private static AutoMap<?> mDryingRackRecipes; + + public static List<?> getDryingRecipes(){ + if (mDryingRackRecipes != null) { + return mDryingRackRecipes; + } + AutoMap<Object> aData = new AutoMap<Object>(); + int aCount = 0; + try { + ArrayList<?> recipes = (ArrayList<?>) ReflectionUtils.getField(ReflectionUtils.getClass("tconstruct.library.crafting.DryingRackRecipes"), "recipes").get(null); + if (recipes != null) { + for (Object o : recipes) { + aData.put(o); + aCount++; + } + Logger.INFO("Found "+aCount+" Tinkers drying rack recipes."); + } + else { + Logger.INFO("Failed to find any Tinkers drying rack recipes."); + } + } catch (IllegalArgumentException | IllegalAccessException e) { + Logger.INFO("Failed to find any Tinkers drying rack recipes."); + } + mDryingRackRecipes = aData; + return aData; + } + /** * Generates Tinkers {@link ToolMaterial}'s reflectively. * @param name @@ -340,7 +362,7 @@ public class TinkersUtils { */ public static Object generateToolMaterial(String name, String localizationString, int level, int durability, int speed, int damage, float handle, int reinforced, float stonebound, String style, int primaryColor) { try { - Constructor constructor = mClass_ToolMaterial.getConstructor(String.class, String.class, int.class, int.class, int.class, int.class, float.class, int.class, float.class, String.class, int.class); + Constructor<?> constructor = mClass_ToolMaterial.getConstructor(String.class, String.class, int.class, int.class, int.class, int.class, float.class, int.class, float.class, String.class, int.class); Object myObject = constructor.newInstance(name, localizationString, level, durability, speed, damage, handle, reinforced, stonebound, style, primaryColor); return myObject; } catch (Throwable t) { @@ -404,24 +426,24 @@ public class TinkersUtils { } } - public static List getTableCastingRecipes(){ + public static List<?> getTableCastingRecipes(){ Object aCastingTableHandlerInstance = getCastingInstance(0); - List aTemp; + List<?> aTemp; try { - aTemp = (List) mMethod_getCastingRecipes.invoke(aCastingTableHandlerInstance, new Object[] {}); + aTemp = (List<?>) mMethod_getCastingRecipes.invoke(aCastingTableHandlerInstance, new Object[] {}); return aTemp; } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException e) { e.printStackTrace(); } - return new ArrayList(); + return new ArrayList<Object>(); } public static boolean generateCastingRecipes(Material aMaterial, int aID) { - List newRecipies = new LinkedList(); + List<CastingRecipeHandler> newRecipies = new LinkedList<CastingRecipeHandler>(); - Iterator iterator1 = getTableCastingRecipes().iterator(); + Iterator<?> iterator1 = getTableCastingRecipes().iterator(); Fluid aMoltenIron = null; if (aMoltenIron == null) { try { @@ -451,7 +473,7 @@ public class TinkersUtils { Object ft; try { ft = mMethod_getFluidType.invoke(null, aMaterial.getLocalizedName()); - Iterator iterator2 = newRecipies.iterator(); + Iterator<CastingRecipeHandler> iterator2 = newRecipies.iterator(); while (iterator2.hasNext()) { CastingRecipeHandler recipe = new CastingRecipeHandler(iterator2.next()); if (!recipe.valid){ |