aboutsummaryrefslogtreecommitdiff
path: root/src/Java
diff options
context:
space:
mode:
Diffstat (limited to 'src/Java')
-rw-r--r--src/Java/gtPlusPlus/preloader/asm/transformers/ClassTransformer_GT_BlockMachines_NBT.java182
-rw-r--r--src/Java/gtPlusPlus/preloader/asm/transformers/Preloader_Transformer_Handler.java82
-rw-r--r--src/Java/gtPlusPlus/xmod/gregtech/api/interfaces/internal/IGregtech_RecipeAdder.java39
-rw-r--r--src/Java/gtPlusPlus/xmod/gregtech/recipes/GregtechRecipeAdder.java87
-rw-r--r--src/Java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechConduits.java42
5 files changed, 354 insertions, 78 deletions
diff --git a/src/Java/gtPlusPlus/preloader/asm/transformers/ClassTransformer_GT_BlockMachines_NBT.java b/src/Java/gtPlusPlus/preloader/asm/transformers/ClassTransformer_GT_BlockMachines_NBT.java
new file mode 100644
index 0000000000..e65d9d11eb
--- /dev/null
+++ b/src/Java/gtPlusPlus/preloader/asm/transformers/ClassTransformer_GT_BlockMachines_NBT.java
@@ -0,0 +1,182 @@
+package gtPlusPlus.preloader.asm.transformers;
+
+import static org.objectweb.asm.Opcodes.*;
+
+import java.io.IOException;
+import org.apache.logging.log4j.Level;
+import org.objectweb.asm.ClassReader;
+import org.objectweb.asm.ClassVisitor;
+import org.objectweb.asm.ClassWriter;
+import org.objectweb.asm.Label;
+import org.objectweb.asm.MethodVisitor;
+
+import cpw.mods.fml.relauncher.FMLRelaunchLog;
+import gtPlusPlus.preloader.DevHelper;
+
+public class ClassTransformer_GT_BlockMachines_NBT {
+
+ //The qualified name of the class we plan to transform.
+ private static final String className = "micdoodle8.mods.galacticraft.core.util.FluidUtil";
+ //gregtech/common/blocks/GT_Block_Machines
+
+ private final boolean isValid;
+ private final ClassReader reader;
+ private final ClassWriter writer;
+
+ String aEntityPlayer;
+ String aEntityPlayerMP;
+ String aWorld;
+
+ private static boolean doesMethodAlreadyExist = false;
+
+ public ClassTransformer_GT_BlockMachines_NBT(byte[] basicClass, boolean obfuscated) {
+ ClassReader aTempReader = null;
+ ClassWriter aTempWriter = null;
+ try {
+ aTempReader = new ClassReader(className);
+ aTempWriter = new ClassWriter(aTempReader, ClassWriter.COMPUTE_FRAMES);
+ new ClassReader(basicClass).accept(new localClassVisitor(aTempWriter), 0);
+ } catch (IOException e) {}
+ if (aTempReader != null && aTempWriter != null) {
+ isValid = true;
+ }
+ else {
+ isValid = false;
+ }
+ reader = aTempReader;
+ writer = aTempWriter;
+
+ if (reader != null && writer != null && !doesMethodAlreadyExist) {
+ aEntityPlayer = obfuscated ? DevHelper.getObfuscated("net/minecraft/entity/player/EntityPlayer") : "net/minecraft/entity/player/EntityPlayer";
+ aEntityPlayerMP = obfuscated ? DevHelper.getObfuscated("net/minecraft/entity/player/EntityPlayerMP") : "net/minecraft/entity/player/EntityPlayerMP";
+ aWorld = obfuscated ? DevHelper.getObfuscated("net/minecraft/world/World") : "net/minecraft/world/World";
+
+ injectMethod("removedByPlayer");
+ injectMethod("harvestBlock");
+ }
+
+ }
+
+ public boolean isValidTransformer() {
+ return isValid;
+ }
+
+ public ClassReader getReader() {
+ return reader;
+ }
+
+ public ClassWriter getWriter() {
+ return writer;
+ }
+
+ public void injectMethod(String aMethodName) {
+ MethodVisitor mv;
+ FMLRelaunchLog.log("[GT++ ASM] Gregtech NBT Persistency Patch", Level.INFO, "Injecting "+aMethodName+" into "+className+".");
+ if (aMethodName.equals("removedByPlayer")) {
+
+ mv = getWriter().visitMethod(ACC_PUBLIC, "removedByPlayer", "(L"+aWorld+";L"+aEntityPlayer+";IIIZ)Z", null, null);
+ mv.visitCode();
+ Label l0 = new Label();
+ mv.visitLabel(l0);
+ mv.visitLineNumber(535, l0);
+ mv.visitVarInsn(ILOAD, 6);
+ Label l1 = new Label();
+ mv.visitJumpInsn(IFEQ, l1);
+ Label l2 = new Label();
+ mv.visitLabel(l2);
+ mv.visitLineNumber(536, l2);
+ mv.visitInsn(ICONST_1);
+ mv.visitInsn(IRETURN);
+ mv.visitLabel(l1);
+ mv.visitLineNumber(538, l1);
+ mv.visitFrame(F_SAME, 0, null, 0, null);
+ mv.visitVarInsn(ALOAD, 0);
+ mv.visitVarInsn(ALOAD, 1);
+ mv.visitVarInsn(ALOAD, 2);
+ mv.visitVarInsn(ILOAD, 3);
+ mv.visitVarInsn(ILOAD, 4);
+ mv.visitVarInsn(ILOAD, 5);
+ mv.visitInsn(ICONST_0);
+ mv.visitMethodInsn(INVOKESPECIAL, "gregtech/api/items/GT_Generic_Block", "removedByPlayer", "(L"+aWorld+";L"+aEntityPlayer+";IIIZ)Z", false);
+ mv.visitInsn(IRETURN);
+ Label l3 = new Label();
+ mv.visitLabel(l3);
+ mv.visitLocalVariable("this", "Lgregtech/common/blocks/GT_Block_Machines;", null, l0, l3, 0);
+ mv.visitLocalVariable("aWorld", "L"+aWorld+";", null, l0, l3, 1);
+ mv.visitLocalVariable("aPlayer", "L"+aEntityPlayer+";", null, l0, l3, 2);
+ mv.visitLocalVariable("aX", "I", null, l0, l3, 3);
+ mv.visitLocalVariable("aY", "I", null, l0, l3, 4);
+ mv.visitLocalVariable("aZ", "I", null, l0, l3, 5);
+ mv.visitLocalVariable("aWillHarvest", "Z", null, l0, l3, 6);
+ mv.visitMaxs(7, 7);
+ mv.visitEnd();
+
+
+ }
+ else if (aMethodName.equals("harvestBlock")) {
+
+ mv = getWriter().visitMethod(ACC_PUBLIC, "harvestBlock", "(L"+aWorld+";L"+aEntityPlayer+";IIII)V", null, null);
+ mv.visitCode();
+ Label l0 = new Label();
+ mv.visitLabel(l0);
+ mv.visitLineNumber(544, l0);
+ mv.visitVarInsn(ALOAD, 0);
+ mv.visitVarInsn(ALOAD, 1);
+ mv.visitVarInsn(ALOAD, 2);
+ mv.visitVarInsn(ILOAD, 3);
+ mv.visitVarInsn(ILOAD, 4);
+ mv.visitVarInsn(ILOAD, 5);
+ mv.visitVarInsn(ILOAD, 6);
+ mv.visitMethodInsn(INVOKESPECIAL, "gregtech/api/items/GT_Generic_Block", "harvestBlock", "(L"+aWorld+";L"+aEntityPlayer+";IIII)V", false);
+ Label l1 = new Label();
+ mv.visitLabel(l1);
+ mv.visitLineNumber(545, l1);
+ mv.visitVarInsn(ALOAD, 1);
+ mv.visitVarInsn(ILOAD, 3);
+ mv.visitVarInsn(ILOAD, 4);
+ mv.visitVarInsn(ILOAD, 5);
+ mv.visitMethodInsn(INVOKEVIRTUAL, ""+aWorld+"", "setBlockToAir", "(III)Z", false);
+ mv.visitInsn(POP);
+ Label l2 = new Label();
+ mv.visitLabel(l2);
+ mv.visitLineNumber(546, l2);
+ mv.visitInsn(RETURN);
+ Label l3 = new Label();
+ mv.visitLabel(l3);
+ mv.visitLocalVariable("this", "Lgregtech/common/blocks/GT_Block_Machines;", null, l0, l3, 0);
+ mv.visitLocalVariable("aWorld", "L"+aWorld+";", null, l0, l3, 1);
+ mv.visitLocalVariable("aPlayer", "L"+aEntityPlayer+";", null, l0, l3, 2);
+ mv.visitLocalVariable("aX", "I", null, l0, l3, 3);
+ mv.visitLocalVariable("aY", "I", null, l0, l3, 4);
+ mv.visitLocalVariable("aZ", "I", null, l0, l3, 5);
+ mv.visitLocalVariable("aMeta", "I", null, l0, l3, 6);
+ mv.visitMaxs(7, 7);
+ mv.visitEnd();
+
+ }
+ FMLRelaunchLog.log("[GT++ ASM] Gregtech NBT Persistency Patch", Level.INFO, "Method injection complete.");
+
+ }
+
+ public static final class localClassVisitor extends ClassVisitor {
+
+ public localClassVisitor(ClassVisitor cv) {
+ super(ASM5, cv);
+ }
+
+ @Override
+ public MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions) {
+ if (name.equals("removedByPlayer")) {
+ FMLRelaunchLog.log("[GT++ ASM] Gregtech NBT Persistency Patch", Level.INFO, "Found method "+name+", skipping patch.");
+ doesMethodAlreadyExist = true;
+ }
+ if (name.equals("harvestBlock")) {
+ FMLRelaunchLog.log("[GT++ ASM] Gregtech NBT Persistency Patch", Level.INFO, "Found method "+name+", skipping patch.");
+ doesMethodAlreadyExist = true;
+ }
+ MethodVisitor methodVisitor = super.visitMethod(access, name, desc, signature, exceptions);
+ return methodVisitor;
+ }
+ }
+
+}
diff --git a/src/Java/gtPlusPlus/preloader/asm/transformers/Preloader_Transformer_Handler.java b/src/Java/gtPlusPlus/preloader/asm/transformers/Preloader_Transformer_Handler.java
index 700fa09047..3738140b0d 100644
--- a/src/Java/gtPlusPlus/preloader/asm/transformers/Preloader_Transformer_Handler.java
+++ b/src/Java/gtPlusPlus/preloader/asm/transformers/Preloader_Transformer_Handler.java
@@ -11,7 +11,6 @@ import cpw.mods.fml.relauncher.ReflectionHelper;
import net.minecraft.launchwrapper.IClassTransformer;
import net.minecraft.launchwrapper.Launch;
import gtPlusPlus.preloader.asm.transformers.Preloader_ClassTransformer.OreDictionaryVisitor;
-import gtPlusPlus.preloader.asm.transformers.Preloader_ClassTransformer2.GT_MetaTile_Visitor;
public class Preloader_Transformer_Handler implements IClassTransformer {
@@ -54,69 +53,32 @@ public class Preloader_Transformer_Handler implements IClassTransformer {
}
// Fix Tinkers Fluids
- if (transformedName.equals("tconstruct.smeltery.blocks.TConstructFluid")) {
- FMLRelaunchLog.log("[GT++ ASM] Bright Fluids", Level.INFO, "Transforming %s", transformedName);
- return new ClassTransformer_TiConFluids("getLightValue", obfuscated, basicClass).getWriter().toByteArray();
- }
+ if (transformedName.equals("tconstruct.smeltery.blocks.TConstructFluid")) {
+ FMLRelaunchLog.log("[GT++ ASM] Bright Fluids", Level.INFO, "Transforming %s", transformedName);
+ return new ClassTransformer_TiConFluids("getLightValue", obfuscated, basicClass).getWriter().toByteArray();
+ }
//Fix GC stuff
- if (transformedName.equals("micdoodle8.mods.galacticraft.core.util.FluidUtil")) {
- FMLRelaunchLog.log("[GT++ ASM] Galacticraft FluidUtils Patch", Level.INFO, "Transforming %s", transformedName);
- return new ClassTransformer_GC_FluidUtil(basicClass, obfuscated).getWriter().toByteArray();
- }
- if (transformedName.equals("micdoodle8.mods.galacticraft.core.tile.TileEntityFuelLoader")) {
- FMLRelaunchLog.log("[GT++ ASM] Galacticraft Fuel_Loader Patch", Level.INFO, "Transforming %s", transformedName);
- return new ClassTransformer_GC_FuelLoader(basicClass, obfuscated).getWriter().toByteArray();
- }
- if (transformedName.equals("micdoodle8.mods.galacticraft.api.prefab.entity.EntityAutoRocket")) {
- FMLRelaunchLog.log("[GT++ ASM] Galacticraft EntityAutoRocket Patch", Level.INFO, "Transforming %s", transformedName);
- return new ClassTransformer_GC_EntityAutoRocket(basicClass, obfuscated).getWriter().toByteArray();
- }
-
-
- if (mEnabled) {
- if (transformedName.equals("gregtech.api.metatileentity.BaseMetaTileEntity")) {
- FMLRelaunchLog.log("[GT++ ASM] NBTFixer", Level.INFO, "Transforming %s", transformedName);
- ClassWriter classWriter = new ClassWriter(ClassWriter.COMPUTE_FRAMES);
- ClassReader x = new ClassReader(basicClass);
- x.accept(new GT_MetaTile_Visitor(classWriter, false), ClassReader.EXPAND_FRAMES);
- return classWriter.toByteArray();
- }
- if (transformedName.equals("gregtech.common.blocks.GT_Block_Machines")) {
- FMLRelaunchLog.log("[GT++ ASM] NBTFixer", Level.INFO, "Transforming %s", transformedName);
- ClassWriter classWriter = new ClassWriter(ClassWriter.COMPUTE_FRAMES);
- ClassReader x = new ClassReader(basicClass);
- x.accept(new GT_MetaTile_Visitor(classWriter, true), ClassReader.EXPAND_FRAMES);
- return classWriter.toByteArray();
- }
-
- //Improve OB Sprinklers
- /*if (transformedName.equals("openblocks.common.tileentity.TileEntitySprinkler")) {
- FMLRelaunchLog.log("[GT++ ASM] OpenBlocks Sprinkler Patch", Level.INFO, "Transforming %s", transformedName);
- try {
- ClassLoader aCustom = new gtPlusPlus.preloader.CustomClassLoader();
- Class aCustomClass = aCustom.loadClass(gtPlusPlus.xmod.ob.TileEntitySprinkler_ASM.class.getName());
- if (aCustomClass == null) {
- aCustomClass = aCustom.loadClass(gtPlusPlus.xmod.ob.TileEntitySprinkler_ASM.class.getCanonicalName());
- }
- if (aCustomClass == null) {
- aCustomClass = aCustom.loadClass(gtPlusPlus.xmod.ob.TileEntitySprinkler_ASM.class.getSimpleName());
- }
- if (aCustomClass == null) {
- byte[] mCustomClassData = GetBytecode.getClassFile(aCustomClass);
- if (mCustomClassData != null) {
- FMLRelaunchLog.log("[GT++ ASM] OpenBlocks Sprinkler Patch", Level.INFO, "Custom Class Loaded in place.");
- return mCustomClassData;
- }
- }
+ if (transformedName.equals("micdoodle8.mods.galacticraft.core.util.FluidUtil")) {
+ FMLRelaunchLog.log("[GT++ ASM] Galacticraft FluidUtils Patch", Level.INFO, "Transforming %s", transformedName);
+ return new ClassTransformer_GC_FluidUtil(basicClass, obfuscated).getWriter().toByteArray();
+ }
+ if (transformedName.equals("micdoodle8.mods.galacticraft.core.tile.TileEntityFuelLoader")) {
+ FMLRelaunchLog.log("[GT++ ASM] Galacticraft Fuel_Loader Patch", Level.INFO, "Transforming %s", transformedName);
+ return new ClassTransformer_GC_FuelLoader(basicClass, obfuscated).getWriter().toByteArray();
+ }
+ if (transformedName.equals("micdoodle8.mods.galacticraft.api.prefab.entity.EntityAutoRocket")) {
+ FMLRelaunchLog.log("[GT++ ASM] Galacticraft EntityAutoRocket Patch", Level.INFO, "Transforming %s", transformedName);
+ return new ClassTransformer_GC_EntityAutoRocket(basicClass, obfuscated).getWriter().toByteArray();
+ }
- } catch (ClassNotFoundException | UnmodifiableClassException e) {
- e.printStackTrace();
- }
- return new ClassTransformer_OB_Sprinkler(obfuscated, basicClass).getWriter().toByteArray();
- }*/
+ //Fix GT NBT Persistency issue
+ if (transformedName.equals("gregtech.common.blocks.GT_Block_Machines")) {
+ FMLRelaunchLog.log("[GT++ ASM] Gregtech NBT Persistency Patch", Level.INFO, "Transforming %s", transformedName);
+ return new ClassTransformer_GT_BlockMachines_NBT(basicClass, obfuscated).getWriter().toByteArray();
}
+
return basicClass;
}
-
+
}
diff --git a/src/Java/gtPlusPlus/xmod/gregtech/api/interfaces/internal/IGregtech_RecipeAdder.java b/src/Java/gtPlusPlus/xmod/gregtech/api/interfaces/internal/IGregtech_RecipeAdder.java
index c442e4f7d4..c03a634ea2 100644
--- a/src/Java/gtPlusPlus/xmod/gregtech/api/interfaces/internal/IGregtech_RecipeAdder.java
+++ b/src/Java/gtPlusPlus/xmod/gregtech/api/interfaces/internal/IGregtech_RecipeAdder.java
@@ -118,8 +118,8 @@ public interface IGregtech_RecipeAdder {
* @return true if the Recipe got added, otherwise false.
*/
public boolean addBlastSmelterRecipe(ItemStack[] aInput, FluidStack aInputFluid, FluidStack aOutput, int aChance, int aDuration, int aEUt, int aSpecialValue);
-
-
+
+
public boolean addLFTRRecipe(ItemStack aInput1, ItemStack aInput2, ItemStack aOutput1, int aDuration, int aEUt);
public boolean addLFTRRecipe(ItemStack aInput1, FluidStack aInput2, ItemStack aOutput1, FluidStack aOutput2, int aDuration, int aEUt);
public boolean addLFTRRecipe(FluidStack aInput1, FluidStack aInput2, FluidStack aOutput1, int aDuration, int aEUt);
@@ -131,17 +131,17 @@ public interface IGregtech_RecipeAdder {
FluidStack aInput7, FluidStack aInput8, FluidStack aInput9,
FluidStack aOutput1, FluidStack aOutput2,
int aDuration, int aEUt);
-
+
public boolean addCyclotronRecipe(ItemStack aInput, FluidStack aFluidInput, ItemStack[] aOutputs,
FluidStack aFluidOutput, int[] aChances, int aDuration, int aEUt, int aSpecialValue);
-
+
boolean addCyclotronRecipe(ItemStack[] aInputs, FluidStack aFluidInput, ItemStack aOutput, FluidStack aFluidOutput,
int[] aChances, int aDuration, int aEUt, int aSpecialValue);
-
+
public boolean addMixerRecipe(ItemStack aInput1, ItemStack aInput2, ItemStack aInput3, ItemStack aInput4,
FluidStack aFluidInput, FluidStack aFluidOutput, ItemStack aOutput1, ItemStack aOutput2, ItemStack aOutput3, ItemStack aOutput4, int aDuration, int aEUt);
-
-
+
+
/**
* Adds a Recipe for the Machine Component Assembler. (up to 6 Inputs)
*
@@ -152,17 +152,20 @@ public interface IGregtech_RecipeAdder {
* @param aEUt = EU per tick needed for heating up (must be >= 0)
* @return true if the Recipe got added, otherwise false.
*/
- public boolean addComponentMakerRecipe(ItemStack[] aInputs, FluidStack aFluidInput, ItemStack aOutput1, int aDuration, int aEUt);
+ public boolean addComponentMakerRecipe(ItemStack[] aInputs, FluidStack aFluidInput, ItemStack aOutput1, int aDuration, int aEUt);
+
+ public boolean addMultiblockCentrifugeRecipe(ItemStack[] aInputs, FluidStack[] aFluidInputs, FluidStack[] aFluidOutputs, ItemStack[] aOutputs, int[] aChances, int aDuration, int aEUtick, int aSpecial);
+
+ public boolean addMultiblockElectrolyzerRecipe(ItemStack[] aInputs, FluidStack[] aFluidInputs, FluidStack[] aFluidOutputs, ItemStack[] aOutputs, int[] aChances, int aDuration, int aEUtick, int aSpecial);
- public boolean addMultiblockCentrifugeRecipe(ItemStack[] aInputs, FluidStack[] aFluidInputs, FluidStack[] aFluidOutputs, ItemStack[] aOutputs, int[] aChances, int aDuration, int aEUtick, int aSpecial);
+ public boolean addAdvancedFreezerRecipe(ItemStack[] aInputs, FluidStack[] aFluidInputs, FluidStack[] aFluidOutputs, ItemStack[] aOutputs, int[] aChances, int aDuration, int aEUtick, int aSpecial);
+
+
+ public boolean addAssemblerRecipeWithOreDict(Object aInput1, int aAmount1, Object aInput2, int aAmount2, ItemStack aOutput, int a1, int a2);
+ public boolean addAssemblerRecipeWithOreDict(Object aInput1, int aAmount1, Object aInput2, int aAmount2, FluidStack aInputFluid, ItemStack aOutput, int a1, int a2);
+
+ public boolean addSixSlotAssemblingRecipe(ItemStack[] aInputs, FluidStack aInputFluid, ItemStack aOutput1, int aDuration, int aEUt);
+
+ public boolean addAssemblylineRecipe(ItemStack aResearchItem, int aResearchTime, ItemStack[] aInputs, FluidStack[] aFluidInputs, ItemStack aOutput, int aDuration, int aEUt);
- public boolean addMultiblockElectrolyzerRecipe(ItemStack[] aInputs, FluidStack[] aFluidInputs, FluidStack[] aFluidOutputs, ItemStack[] aOutputs, int[] aChances, int aDuration, int aEUtick, int aSpecial);
-
- public boolean addAdvancedFreezerRecipe(ItemStack[] aInputs, FluidStack[] aFluidInputs, FluidStack[] aFluidOutputs, ItemStack[] aOutputs, int[] aChances, int aDuration, int aEUtick, int aSpecial);
-
-
- public boolean addAssemblerRecipeWithOreDict(Object aInput1, int aAmount1, Object aInput2, int aAmount2, ItemStack aOutput, int a1, int a2);
- public boolean addAssemblerRecipeWithOreDict(Object aInput1, int aAmount1, Object aInput2, int aAmount2, FluidStack aInputFluid, ItemStack aOutput, int a1, int a2);
-
-
}
diff --git a/src/Java/gtPlusPlus/xmod/gregtech/recipes/GregtechRecipeAdder.java b/src/Java/gtPlusPlus/xmod/gregtech/recipes/GregtechRecipeAdder.java
index 66f08034eb..b7a69d4f87 100644
--- a/src/Java/gtPlusPlus/xmod/gregtech/recipes/GregtechRecipeAdder.java
+++ b/src/Java/gtPlusPlus/xmod/gregtech/recipes/GregtechRecipeAdder.java
@@ -2,6 +2,8 @@ package gtPlusPlus.xmod.gregtech.recipes;
import static gtPlusPlus.core.lib.CORE.GTNH;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
import java.util.List;
import net.minecraft.item.ItemStack;
@@ -9,12 +11,15 @@ import net.minecraft.item.ItemStack;
import gregtech.api.GregTech_API;
import gregtech.api.enums.GT_Values;
import gregtech.api.enums.Materials;
+import gregtech.api.interfaces.internal.IGT_RecipeAdder;
import gregtech.api.util.CustomRecipeMap;
import gregtech.api.util.Recipe_GT;
import gtPlusPlus.api.objects.Logger;
+import gtPlusPlus.core.lib.CORE;
import gtPlusPlus.core.util.data.ArrayUtils;
import gtPlusPlus.core.util.minecraft.ItemUtils;
+import gtPlusPlus.core.util.reflect.ReflectionUtils;
import gtPlusPlus.xmod.gregtech.api.interfaces.internal.IGregtech_RecipeAdder;
import gtPlusPlus.xmod.gregtech.recipes.machines.RECIPEHANDLER_MatterFabricator;
import net.minecraftforge.fluids.FluidStack;
@@ -647,8 +652,90 @@ public class GregtechRecipeAdder implements IGregtech_RecipeAdder {
return GT_Values.RA.addAssemblerRecipe((ItemStack) aInput1, (ItemStack) aInput2, aInputFluid, aOutput, a1, a2);
}
}
+
+ /*
+ * Reflection Based Recipe Additions with Fallbacks
+ */
+ private static final Method mSixSlotAssembly;
+ private static final Method mAssemblyLine;
+
+ static {
+ if (CORE.MAIN_GREGTECH_5U_EXPERIMENTAL_FORK || CORE.GTNH) {
+ //Get GT's RA class;
+ Class<? extends IGT_RecipeAdder> clazz = GT_Values.RA.getClass();
+ //6 Slot Assembler
+ mSixSlotAssembly = ReflectionUtils.getMethod(clazz, "addAssemblerRecipe", ItemStack[].class, FluidStack.class, ItemStack.class, int.class, int.class);
+ //Assembly Line
+ mAssemblyLine = ReflectionUtils.getMethod(clazz, "addAssemblylineRecipe", ItemStack.class, int.class, ItemStack[].class, FluidStack[].class, ItemStack.class, int.class, int.class);
+
+ }
+ else {
+ mSixSlotAssembly = null;
+ mAssemblyLine = null;
+ }
+ }
+
+
+
+
+
+
+ public boolean addSixSlotAssemblingRecipe(ItemStack[] aInputs, FluidStack aInputFluid, ItemStack aOutput1, int aDuration, int aEUt) {
+ if (CORE.MAIN_GREGTECH_5U_EXPERIMENTAL_FORK || CORE.GTNH) {
+ if (mSixSlotAssembly != null) {
+ try {
+ return (boolean) mSixSlotAssembly.invoke(GT_Values.RA, aInputs, aInputFluid, aOutput1, aDuration, aEUt);
+ } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {
+ if (CORE.GTNH) {
+ return false;
+ }
+ }
+ }
+ }
+ return CORE.RA.addComponentMakerRecipe(aInputs, aInputFluid, aOutput1, aDuration, aEUt);
+ }
+ public boolean addAssemblylineRecipe(ItemStack aResearchItem, int aResearchTime, ItemStack[] aInputs, FluidStack[] aFluidInputs, ItemStack aOutput, int aDuration, int aEUt) {
+ if (!CORE.MAIN_GREGTECH_5U_EXPERIMENTAL_FORK) {
+ if (aInputs.length < 6 && aFluidInputs.length < 2) {
+ ItemStack[] aInputStack = new ItemStack[] {aResearchItem, aInputs[0], aInputs[1], aInputs[2], aInputs[3], aInputs[4]};
+ return CORE.RA.addSixSlotAssemblingRecipe(aInputStack, aFluidInputs[0], aOutput, aDuration, aEUt);
+ }
+ return false;
+ }
+ else {
+ if ((aResearchItem==null)||(aResearchTime<=0)||(aInputs == null) || (aOutput == null) || aInputs.length>15 || aInputs.length<4) {
+ return false;
+ }
+ else {
+ if (mAssemblyLine != null) {
+ try {
+ return (boolean) mAssemblyLine.invoke(GT_Values.RA, aResearchItem, aResearchTime, aInputs,
+ aFluidInputs, aOutput, aDuration, aEUt);
+ } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {
+ if (aInputs.length < 6 && aFluidInputs.length < 2) {
+ ItemStack[] aInputStack = new ItemStack[] { aResearchItem, aInputs[0], aInputs[1],
+ aInputs[2], aInputs[3], aInputs[4] };
+ return CORE.RA.addSixSlotAssemblingRecipe(aInputStack, aFluidInputs[0], aOutput, aDuration,
+ aEUt);
+ }
+ return false;
+ }
+ } else {
+ if (aInputs.length < 6 && aFluidInputs.length < 2) {
+ ItemStack[] aInputStack = new ItemStack[] { aResearchItem, aInputs[0], aInputs[1], aInputs[2],
+ aInputs[3], aInputs[4] };
+ return CORE.RA.addSixSlotAssemblingRecipe(aInputStack, aFluidInputs[0], aOutput, aDuration,
+ aEUt);
+ }
+ return false;
+ }
+ }
+ }
+
+
+ }
diff --git a/src/Java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechConduits.java b/src/Java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechConduits.java
index 40ab919677..a800891102 100644
--- a/src/Java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechConduits.java
+++ b/src/Java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechConduits.java
@@ -3,6 +3,8 @@ package gtPlusPlus.xmod.gregtech.registration.gregtech;
import static gtPlusPlus.core.lib.CORE.GTNH;
import static gtPlusPlus.core.lib.LoadedMods.Gregtech;
+import java.lang.reflect.Constructor;
+import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import gregtech.api.enums.*;
@@ -45,6 +47,7 @@ public class GregtechConduits {
private static int BaseWireID = 30600;
private static int BasePipeID = 30700;
+ private static int BasePipeHexadecupleID = 30100;
public static void run()
@@ -56,11 +59,50 @@ public class GregtechConduits {
}
if (CORE.ConfigSwitches.enableCustom_Pipes) {
run2();
+ run3();
}
}
}
+ private static void run3() {
+
+ if (Utils.getGregtechVersionAsInt() >= 50930) {
+ try {
+ Class<GT_MetaPipeEntity_Fluid> aPipeEntity = GT_MetaPipeEntity_Fluid.class;
+ Constructor<GT_MetaPipeEntity_Fluid> constructor = aPipeEntity.getConstructor(new Class[]{int.class, String.class, String.class, float.class, Materials.class, int.class, int.class, boolean.class, int.class});
+ if (constructor != null) {
+ generateFluidMultiPipes(constructor, Materials.Copper, Materials.Copper.mName, "Copper", BasePipeHexadecupleID++, 60, 1000, true);
+ generateFluidMultiPipes(constructor, Materials.Bronze, Materials.Bronze.mName, "Bronze", BasePipeHexadecupleID++, 120, 2000, true);
+ generateFluidMultiPipes(constructor, Materials.Steel, Materials.Steel.mName, "Steel", BasePipeHexadecupleID++, 240, 2500, true);
+ generateFluidMultiPipes(constructor, Materials.StainlessSteel, Materials.StainlessSteel.mName, "StainlessSteel", BasePipeHexadecupleID++, 360, 3000, true);
+ generateFluidMultiPipes(constructor, Materials.Titanium, Materials.Titanium.mName, "Titanium", BasePipeHexadecupleID++, 480, 5000, true);
+ generateFluidMultiPipes(constructor, Materials.TungstenSteel, Materials.TungstenSteel.mName, "Bronze", BasePipeHexadecupleID++, 600, 7500, true);
+ generateFluidMultiPipes(constructor, Materials.Plastic, Materials.Plastic.mName, "Plastic", BasePipeHexadecupleID++, 360, 350, true);
+
+ Materials aPTFE = Materials.get("Polytetrafluoroethylene");
+ if (aPTFE != null) {
+ generateFluidMultiPipes(constructor, aPTFE, aPTFE.mName, "PTFE", BasePipeHexadecupleID++, 480, 600, true);
+ }
+ }
+
+ } catch (NoSuchMethodException | SecurityException e) {
+ }
+ }
+ }
+
+ private static void generateFluidMultiPipes(Constructor<GT_MetaPipeEntity_Fluid> aClazz, Materials aMaterial, String name, String displayName, int startID, int baseCapacity, int heatCapacity, boolean gasProof){
+ GT_MetaPipeEntity_Fluid aPipe;
+ try {
+ aPipe = aClazz.newInstance(startID, "GT_Pipe_" + name + "_Hexadecuple",
+ "Hexadecuple " + displayName + " Fluid Pipe", 1.0F, aMaterial, baseCapacity, heatCapacity, gasProof,
+ 16);
+ GT_OreDictUnificator.registerOre("pipeHexadecuple" + aMaterial, aPipe.getStackForm(1L));
+ } catch (InstantiationException | IllegalAccessException | IllegalArgumentException
+ | InvocationTargetException e) {
+ }
+ }
+
private static void run1(){
if (LoadedMods.Big_Reactors){