aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/gtPlusPlus/xmod/tinkers/util
diff options
context:
space:
mode:
authorAlexdoru <57050655+Alexdoru@users.noreply.github.com>2024-09-07 05:40:03 +0200
committerGitHub <noreply@github.com>2024-09-07 03:40:03 +0000
commit82604eadb847335e4b4ddf2e90a28b325786837b (patch)
treeb5c34fa3ab38181fc47ec20c8537a5db34e285e1 /src/main/java/gtPlusPlus/xmod/tinkers/util
parentba7a419aacf0b0eb33afbde5663640a0908b77ce (diff)
downloadGT5-Unofficial-82604eadb847335e4b4ddf2e90a28b325786837b.tar.gz
GT5-Unofficial-82604eadb847335e4b4ddf2e90a28b325786837b.tar.bz2
GT5-Unofficial-82604eadb847335e4b4ddf2e90a28b325786837b.zip
Remove a bunch more reflection (#3074)
Co-authored-by: boubou19 <miisterunknown@gmail.com>
Diffstat (limited to 'src/main/java/gtPlusPlus/xmod/tinkers/util')
-rw-r--r--src/main/java/gtPlusPlus/xmod/tinkers/util/TinkersDryingRecipe.java91
-rw-r--r--src/main/java/gtPlusPlus/xmod/tinkers/util/TinkersUtils.java356
2 files changed, 70 insertions, 377 deletions
diff --git a/src/main/java/gtPlusPlus/xmod/tinkers/util/TinkersDryingRecipe.java b/src/main/java/gtPlusPlus/xmod/tinkers/util/TinkersDryingRecipe.java
index 4adac363e8..4136b54309 100644
--- a/src/main/java/gtPlusPlus/xmod/tinkers/util/TinkersDryingRecipe.java
+++ b/src/main/java/gtPlusPlus/xmod/tinkers/util/TinkersDryingRecipe.java
@@ -1,9 +1,7 @@
package gtPlusPlus.xmod.tinkers.util;
-import static gregtech.api.enums.Mods.TinkerConstruct;
import static gtPlusPlus.api.recipe.GTPPRecipeMaps.chemicalDehydratorRecipes;
-import java.lang.reflect.Field;
import java.util.List;
import net.minecraft.item.ItemStack;
@@ -14,7 +12,7 @@ import gregtech.api.enums.TierEU;
import gregtech.api.util.GTUtility;
import gtPlusPlus.api.objects.Logger;
import gtPlusPlus.api.objects.data.AutoMap;
-import gtPlusPlus.core.util.reflect.ReflectionUtils;
+import tconstruct.library.crafting.DryingRackRecipes;
public class TinkersDryingRecipe {
@@ -24,20 +22,25 @@ public class TinkersDryingRecipe {
public final ItemStack input;
public 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());
+ }
+
public static void generateAllDryingRecipes() {
- List<?> aRecipes = TinkersUtils.getDryingRecipes();
- if (aRecipes != null && aRecipes.size() > 0) {
- for (Object o : aRecipes) {
+ List<DryingRackRecipes.DryingRecipe> aRecipes = TinkersDryingRecipe.getDryingRecipes();
+ if (!aRecipes.isEmpty()) {
+ for (DryingRackRecipes.DryingRecipe recipe : aRecipes) {
Logger.INFO(
- "Trying to generate recipe using object of type " + o.getClass()
+ "Trying to generate recipe using object of type " + recipe.getClass()
.getSimpleName());
- generateFromTinkersRecipeObject(o);
+ generateFromTinkersRecipe(recipe);
}
} else {
- Logger.INFO(
- "Error generating Drying recipes, map was either null or empty. Null? " + (aRecipes != null)
- + ", Size: "
- + aRecipes.size());
+ Logger.INFO("Error generating Drying recipes, map was empty. Size: " + aRecipes.size());
}
if (!recipes.isEmpty()) {
Logger.INFO("Adding " + recipes.size() + " drying rack recipes to the dehydrator.");
@@ -52,61 +55,19 @@ public class TinkersDryingRecipe {
}
}
- public static TinkersDryingRecipe generateFromTinkersRecipeObject(Object o) {
- Field aTime;
- Field aInput;
- Field aOutput;
- Class aTinkerClass = ReflectionUtils.getClass("tconstruct.library.crafting.DryingRackRecipes.DryingRecipe"); // o.getClass();
- if (aTinkerClass == null || TinkerConstruct.isModLoaded()) {
- 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");
- 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) {
- b.printStackTrace();
- }
- return null;
+ private static void generateFromTinkersRecipe(DryingRackRecipes.DryingRecipe recipe) {
+ recipes.add(new TinkersDryingRecipe(recipe.input, recipe.time, recipe.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);
+ private static List<DryingRackRecipes.DryingRecipe> getDryingRecipes() {
+ AutoMap<DryingRackRecipes.DryingRecipe> aData = new AutoMap<>();
+ int aCount = 0;
+ for (DryingRackRecipes.DryingRecipe recipe : DryingRackRecipes.recipes) {
+ aData.put(recipe);
+ aCount++;
+ }
+ Logger.INFO("Found " + aCount + " Tinkers drying rack recipes.");
+ return aData;
}
public boolean matches(ItemStack input) {
diff --git a/src/main/java/gtPlusPlus/xmod/tinkers/util/TinkersUtils.java b/src/main/java/gtPlusPlus/xmod/tinkers/util/TinkersUtils.java
index 8b173d5b62..09633f5810 100644
--- a/src/main/java/gtPlusPlus/xmod/tinkers/util/TinkersUtils.java
+++ b/src/main/java/gtPlusPlus/xmod/tinkers/util/TinkersUtils.java
@@ -1,339 +1,89 @@
package gtPlusPlus.xmod.tinkers.util;
-import static gregtech.api.enums.Mods.TinkerConstruct;
-
-import java.lang.reflect.Field;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.LinkedHashMap;
-import java.util.LinkedList;
import java.util.List;
import net.minecraft.block.Block;
-import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraftforge.fluids.Fluid;
import net.minecraftforge.fluids.FluidStack;
-import gregtech.api.enums.Materials;
-import gtPlusPlus.api.objects.Logger;
-import gtPlusPlus.api.objects.data.AutoMap;
import gtPlusPlus.core.material.Material;
-import gtPlusPlus.core.util.minecraft.ItemUtils;
-import gtPlusPlus.core.util.reflect.ReflectionUtils;
+import tconstruct.library.TConstructRegistry;
+import tconstruct.library.crafting.CastingRecipe;
+import tconstruct.library.crafting.FluidType;
+import tconstruct.library.crafting.LiquidCasting;
+import tconstruct.library.crafting.Smeltery;
+import tconstruct.library.tools.DynamicToolPart;
+import tconstruct.library.util.IPattern;
+import tconstruct.smeltery.TinkerSmeltery;
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 Field mField_MoltenIronFluid;
-
- private static final Method mMethod_getFluidType;
- private static final Method mMethod_getCastingRecipes;
-
- private static Object mSmelteryInstance;
- private static Object mTinkersRegistryInstance;
-
- private static final HashMap<String, Method> mMethodCache = new LinkedHashMap<>();
-
- static {
- mClass_Smeltery = ReflectionUtils.getClass("tconstruct.library.crafting.Smeltery");
- mClass_TConstructRegistry = ReflectionUtils.getClass("tconstruct.library.TConstructRegistry");
-
- mClass_ToolMaterial = ReflectionUtils.getClass("tconstruct.library.tools.ToolMaterial");
- mClass_IPattern = ReflectionUtils.getClass("tconstruct.library.util.IPattern");
- mClass_DynamicToolPart = ReflectionUtils.getClass("tconstruct.library.tools.DynamicToolPart");
- mClass_FluidType = ReflectionUtils.getClass("tconstruct.library.crafting.FluidType");
- mClass_CastingRecipe = ReflectionUtils.getClass("tconstruct.library.crafting.CastingRecipe");
- mClass_TinkerSmeltery = ReflectionUtils.getClass("tconstruct.smeltery.TinkerSmeltery");
-
- mField_MoltenIronFluid = ReflectionUtils.getField(mClass_TinkerSmeltery, "moltenIronFluid");
-
- mMethod_getFluidType = ReflectionUtils.getMethod(mClass_FluidType, "getFluidType", String.class);
- mMethod_getCastingRecipes = ReflectionUtils
- .getMethod(getCastingInstance(0), "getCastingRecipes", new Class[] {});
- }
-
- private static void setTiConDataInstance() {
- if (!TinkerConstruct.isModLoaded()) {
- return;
- }
-
- if (mSmelteryInstance == null) {
- if (mClass_Smeltery != null) {
- try {
- mSmelteryInstance = ReflectionUtils.getField(mClass_Smeltery, "instance")
- .get(null);
- } catch (IllegalArgumentException | IllegalAccessException ignored) {}
- }
- }
- if (mTinkersRegistryInstance == null) {
- if (mClass_TConstructRegistry != null) {
- try {
- mTinkersRegistryInstance = ReflectionUtils.getField(mClass_TConstructRegistry, "instance")
- .get(null);
- } catch (IllegalArgumentException | IllegalAccessException ignored) {}
- }
- }
- }
-
/**
* Add a new fluid as a valid Smeltery fuel.
- *
+ *
* @param fluid The fluid.
* @param power The temperature of the fluid. This also influences the melting speed. Lava is 1000.
* @param duration How long one "portion" of liquid fuels the smeltery. Lava is 10.
*/
public static void addSmelteryFuel(Fluid fluid, int power, int duration) {
- setTiConDataInstance();
- ReflectionUtils.invokeVoid(
- mSmelteryInstance,
- "addSmelteryFuel",
- new Class[] { Fluid.class, int.class, int.class },
- new Object[] { fluid, power, duration });
+ Smeltery.addSmelteryFuel(fluid, power, duration);
}
public static boolean registerFluidType(String name, Block block, int meta, int baseTemperature, Fluid fluid,
boolean isToolpart) {
- if (mMethodCache.get("registerFluidType") == null) {
- Method m = ReflectionUtils.getMethod(
- ReflectionUtils.getClass("tconstruct.library.crafting.FluidType"),
- "registerFluidType",
- String.class,
- Block.class,
- int.class,
- int.class,
- Fluid.class,
- boolean.class);
- mMethodCache.put("registerFluidType", m);
- }
- try {
- mMethodCache.get("registerFluidType")
- .invoke(null, name, block, meta, baseTemperature, fluid, isToolpart);
- return true;
- } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {
- return false;
- }
+ FluidType.registerFluidType(name, block, meta, baseTemperature, fluid, isToolpart);
+ return true;
}
public static void addMelting(ItemStack input, Block block, int metadata, int temperature, FluidStack liquid) {
- if (mMethodCache.get("addMelting") == null) {
- Method m = ReflectionUtils.getMethod(
- mClass_Smeltery,
- "addMelting",
- ItemStack.class,
- Block.class,
- int.class,
- int.class,
- FluidStack.class);
- mMethodCache.put("addMelting", m);
- }
- try {
- mMethodCache.get("addMelting")
- .invoke(null, input, block, metadata, temperature, liquid);
- } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException ignored) {}
+ Smeltery.addMelting(input, block, metadata, temperature, liquid);
}
- public static void addMelting(Object type, ItemStack input, int temperatureDifference, int fluidAmount) {
- if (mMethodCache.get("addMelting") == null) {
- Method m = ReflectionUtils
- .getMethod(mClass_Smeltery, "addMelting", mClass_FluidType, ItemStack.class, int.class, int.class);
- mMethodCache.put("addMelting", m);
- }
- try {
- mMethodCache.get("addMelting")
- .invoke(null, type, input, temperatureDifference, fluidAmount);
- } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException ignored) {}
+ public static void addMelting(FluidType type, ItemStack input, int temperatureDifference, int fluidAmount) {
+ Smeltery.addMelting(type, input, temperatureDifference, fluidAmount);
}
public static void addBasinRecipe(ItemStack output, FluidStack metal, ItemStack cast, boolean consume, int delay) {
- if (mMethodCache.get("addBasinRecipe") == null) {
- Method m = ReflectionUtils.getMethod(
- ReflectionUtils.getClass("tconstruct.library.crafting.LiquidCasting"),
- "addCastingRecipe",
- ItemStack.class,
- FluidStack.class,
- ItemStack.class,
- boolean.class,
- int.class);
- mMethodCache.put("addBasinRecipe", m);
- }
- try {
- mMethodCache.get("addBasinRecipe")
- .invoke(getCastingInstance(0), output, metal, cast, consume, delay);
- } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException ignored) {}
+ LiquidCasting tableCasting = TConstructRegistry.getTableCasting();
+ tableCasting.addCastingRecipe(output, metal, cast, consume, delay);
}
public static void addCastingTableRecipe(ItemStack output, FluidStack metal, ItemStack cast, boolean consume,
int delay) {
- if (mMethodCache.get("addCastingTableRecipe") == null) {
- Method m = ReflectionUtils.getMethod(
- ReflectionUtils.getClass("tconstruct.library.crafting.LiquidCasting"),
- "addCastingRecipe",
- ItemStack.class,
- FluidStack.class,
- ItemStack.class,
- boolean.class,
- int.class);
- mMethodCache.put("addCastingTableRecipe", m);
- }
- try {
- mMethodCache.get("addCastingTableRecipe")
- .invoke(getCastingInstance(1), output, metal, cast, consume, delay);
- } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException ignored) {}
+ LiquidCasting basinCasting = TConstructRegistry.getBasinCasting();
+ basinCasting.addCastingRecipe(output, metal, cast, consume, delay);
}
- /**
- * 0 For Table, 1 For Basin.
- *
- * @param aType - Casting Type
- * @return - The casting instance.
- */
- public static Object getCastingInstance(int aType) {
-
- setTiConDataInstance();
-
- Method m = null;
- if (aType == 0) {
- m = ReflectionUtils.getMethod(mTinkersRegistryInstance, "getTableCasting", new Class[] {});
- } else if (aType == 1) {
- m = ReflectionUtils.getMethod(mTinkersRegistryInstance, "getBasinCasting", new Class[] {});
- } // return null;
-
- if (m != null) {
- try {
- return m.invoke(mTinkersRegistryInstance, new Object[] {});
- } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {
- e.printStackTrace();
- }
- }
- return null;
- }
-
- private static Item mTinkerMetalPattern;
-
- public static ItemStack getPattern(int aType) {
- if (mTinkerMetalPattern == null) {
- Field m = ReflectionUtils.getField(mClass_TinkerSmeltery, "metalPattern");
- if (m != null) {
- try {
- mTinkerMetalPattern = (Item) m.get(null);
- } catch (IllegalArgumentException | IllegalAccessException ignored) {}
- }
- }
- if (mTinkerMetalPattern != null) {
- return new ItemStack(mTinkerMetalPattern, aType, 0);
- }
- 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<>();
- 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;
- }
-
- public static List<?> getTableCastingRecipes() {
- Object aCastingTableHandlerInstance = getCastingInstance(0);
- List<?> aTemp;
- try {
- aTemp = (List<?>) mMethod_getCastingRecipes.invoke(aCastingTableHandlerInstance, new Object[] {});
- return aTemp;
- } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {
- e.printStackTrace();
- }
- return new ArrayList<>();
+ public static List<CastingRecipe> getTableCastingRecipes() {
+ LiquidCasting tableCasting = TConstructRegistry.getTableCasting();
+ return tableCasting.getCastingRecipes();
}
public static void generateCastingRecipes(Material aMaterial, int aID) {
-
- List<CastingRecipeHandler> newRecipies = new LinkedList<>();
-
- Iterator<?> iterator1 = getTableCastingRecipes().iterator();
- Fluid aMoltenIron = null;
- if (aMoltenIron == null) {
- try {
- aMoltenIron = (Fluid) mField_MoltenIronFluid.get(null);
- } catch (IllegalArgumentException | IllegalAccessException e) {
- e.printStackTrace();
- aMoltenIron = Materials.Iron.getMolten(0)
- .getFluid();
- }
- }
- while (iterator1.hasNext()) {
- CastingRecipeHandler recipe = new CastingRecipeHandler(iterator1.next());
- if (recipe == null || !recipe.valid) {
- continue;
- }
- try {
- if (recipe.castingMetal.getFluid() == aMoltenIron && recipe.cast != null
- && mClass_IPattern.isInstance(recipe.cast.getItem())
- && mClass_DynamicToolPart.isInstance(
- recipe.getResult()
- .getItem())) {
- newRecipies.add(recipe);
- }
- } catch (IllegalArgumentException e) {
- e.printStackTrace();
- return;
- }
- }
-
- Object ft;
- try {
- ft = mMethod_getFluidType.invoke(null, aMaterial.getLocalizedName());
- for (CastingRecipeHandler newRecipy : newRecipies) {
- CastingRecipeHandler recipe = new CastingRecipeHandler(newRecipy);
- if (!recipe.valid) {
- continue;
- }
- // CastingRecipe recipe = (CastingRecipe) i$.next();
- ItemStack output = recipe.getResult()
+ Fluid aMoltenIron = TinkerSmeltery.moltenIronFluid;
+ FluidType fluidType = FluidType.getFluidType(aMaterial.getLocalizedName());
+ for (CastingRecipe recipe : getTableCastingRecipes()) {
+ CastingRecipeHandler newRecipe = new CastingRecipeHandler(recipe);
+ if (newRecipe.castingMetal.getFluid() == aMoltenIron && newRecipe.cast != null
+ && newRecipe.cast.getItem() instanceof IPattern
+ && newRecipe.getResult()
+ .getItem() instanceof DynamicToolPart) {
+ ItemStack output = newRecipe.getResult()
.copy();
output.setItemDamage(aID);
- FluidStack liquid2 = new FluidStack(
+ FluidStack liquid = new FluidStack(
aMaterial.getFluidStack(0)
.getFluid(),
- recipe.castingMetal.amount);
- addCastingTableRecipe(output, liquid2, recipe.cast, recipe.consumeCast, recipe.coolTime);
- addMelting(ft, output, 0, liquid2.amount / 2);
+ newRecipe.castingMetal.amount);
+ addCastingTableRecipe(output, liquid, newRecipe.cast, newRecipe.consumeCast, newRecipe.coolTime);
+ addMelting(fluidType, output, 0, liquid.amount / 2);
}
- } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {
- e.printStackTrace();
}
+ }
+ public static ItemStack getPattern(int aType) {
+ return new ItemStack(TinkerSmeltery.metalPattern, aType, 0);
}
private static class CastingRecipeHandler {
@@ -344,30 +94,12 @@ public class TinkersUtils {
public boolean consumeCast;
public int coolTime;
- public boolean valid;
-
- public CastingRecipeHandler(Object aCastingRecipe) {
- if (mClass_CastingRecipe.isInstance(aCastingRecipe)) {
- try {
- Field aF_output = ReflectionUtils.getField(mClass_CastingRecipe, "output");
- Field aF_castingMetal = ReflectionUtils.getField(mClass_CastingRecipe, "castingMetal");
- Field aF_cast = ReflectionUtils.getField(mClass_CastingRecipe, "cast");
- Field aF_consumeCast = ReflectionUtils.getField(mClass_CastingRecipe, "consumeCast");
- Field aF_coolTime = ReflectionUtils.getField(mClass_CastingRecipe, "coolTime");
-
- output = (ItemStack) aF_output.get(aCastingRecipe);
- castingMetal = (FluidStack) aF_castingMetal.get(aCastingRecipe);
- cast = (ItemStack) aF_cast.get(aCastingRecipe);
- consumeCast = (boolean) aF_consumeCast.get(aCastingRecipe);
- coolTime = (int) aF_coolTime.get(aCastingRecipe);
- valid = true;
- } catch (Throwable t) {
- t.printStackTrace();
- valid = false;
- }
- } else {
- valid = false;
- }
+ public CastingRecipeHandler(CastingRecipe castingRecipe) {
+ this.output = castingRecipe.output;
+ this.castingMetal = castingRecipe.castingMetal;
+ this.cast = castingRecipe.cast;
+ this.consumeCast = castingRecipe.consumeCast;
+ this.coolTime = castingRecipe.coolTime;
}
public ItemStack getResult() {