diff options
author | Alkalus <3060479+draknyte1@users.noreply.github.com> | 2018-09-12 17:01:27 +1000 |
---|---|---|
committer | Alkalus <3060479+draknyte1@users.noreply.github.com> | 2018-09-12 17:01:27 +1000 |
commit | ed64f971b4298b186f2486dc553c9fab955d36b4 (patch) | |
tree | bc90f24f53bd842b90ae836c044029da0bb5fb30 /src/Java/gtPlusPlus | |
parent | 9f538f72e0274a47da852e8bd67faf2dd4cfdba2 (diff) | |
download | GT5-Unofficial-ed64f971b4298b186f2486dc553c9fab955d36b4.tar.gz GT5-Unofficial-ed64f971b4298b186f2486dc553c9fab955d36b4.tar.bz2 GT5-Unofficial-ed64f971b4298b186f2486dc553c9fab955d36b4.zip |
+ Added total luminosity to all Tinkers Construct fluids via ASM.
$ Recipe fix for Handpump.
% Re-enabled The Pocket Fusion & Generator Arrays.
% Updated .gitignore.
Diffstat (limited to 'src/Java/gtPlusPlus')
7 files changed, 246 insertions, 14 deletions
diff --git a/src/Java/gtPlusPlus/core/handler/COMPAT_HANDLER.java b/src/Java/gtPlusPlus/core/handler/COMPAT_HANDLER.java index 207e2b5bc8..2b442823b4 100644 --- a/src/Java/gtPlusPlus/core/handler/COMPAT_HANDLER.java +++ b/src/Java/gtPlusPlus/core/handler/COMPAT_HANDLER.java @@ -98,9 +98,9 @@ public class COMPAT_HANDLER { GregtechSemiFluidgenerators.run(); GregtechAdvancedMixer.run(); GregtechWirelessChargers.run(); - //GregtechIndustrialGeneratorArray.run(); + GregtechIndustrialGeneratorArray.run(); GregtechIndustrialCuttingFactory.run(); - //GregtechMiniRaFusion.run(); + GregtechMiniRaFusion.run(); GregtechComponentAssembler.run(); GregtechTeslaTower.run(); GregtechSuperChests.run(); diff --git a/src/Java/gtPlusPlus/core/recipe/RECIPES_General.java b/src/Java/gtPlusPlus/core/recipe/RECIPES_General.java index 243e169d48..70df48ed81 100644 --- a/src/Java/gtPlusPlus/core/recipe/RECIPES_General.java +++ b/src/Java/gtPlusPlus/core/recipe/RECIPES_General.java @@ -285,7 +285,7 @@ public class RECIPES_General { } private static void addHandPumpRecipes() { - /*if (RecipeUtils.recipeBuilder( + if (RecipeUtils.recipeBuilder( CI.electricPump_LV, "circuitBasic", null, "ringBrass", CI.electricMotor_LV, "circuitBasic", "plateSteel", "plateSteel", "rodBrass", @@ -306,9 +306,9 @@ public class RECIPES_General { if (RecipeUtils.recipeBuilder( CI.electricPump_EV, "circuitElite", null, "ringTitanium", CI.electricMotor_EV, "circuitElite", - "plateStungstenSteel", "plateTungstenSteel", "rodTitanium", + "plateTungstenSteel", "plateTungstenSteel", "rodTitanium", ItemUtils.simpleMetaStack(ModItems.itemGenericToken, 4, 1))) - Logger.INFO("Added recipe for Hand Pump IV - true");*/ + Logger.INFO("Added recipe for Hand Pump IV - true"); diff --git a/src/Java/gtPlusPlus/preloader/DevHelper.java b/src/Java/gtPlusPlus/preloader/DevHelper.java index 5b6a92b8f5..1be486724a 100644 --- a/src/Java/gtPlusPlus/preloader/DevHelper.java +++ b/src/Java/gtPlusPlus/preloader/DevHelper.java @@ -1,5 +1,6 @@ package gtPlusPlus.preloader; +import java.io.IOException; import java.lang.reflect.Method; import java.util.HashMap; import java.util.Map; @@ -7,6 +8,7 @@ import java.util.Map; import gtPlusPlus.api.objects.data.Pair; import gtPlusPlus.api.objects.data.weakref.WeakAutoMap; import gtPlusPlus.core.util.reflect.ReflectionUtils; +import net.minecraft.launchwrapper.Launch; public class DevHelper { @@ -26,6 +28,24 @@ public class DevHelper { public DevHelper() { } + + + + public boolean IsObfuscatedEnvironment() { + // Are we in a 'decompiled' environment? + boolean deobfuscatedEnvironment = false; + byte[] bs; + try { + bs = Launch.classLoader.getClassBytes("net.minecraft.world.World"); + if (bs != null) { + deobfuscatedEnvironment = true; + } else { + deobfuscatedEnvironment = false; + } + } catch (IOException e) { + } + return !deobfuscatedEnvironment; + } @SuppressWarnings("rawtypes") public Method getForgeMethod(Class c, String s, Class... varags) { diff --git a/src/Java/gtPlusPlus/preloader/asm/transformers/ClassTransformer_TiConFluids.java b/src/Java/gtPlusPlus/preloader/asm/transformers/ClassTransformer_TiConFluids.java new file mode 100644 index 0000000000..673df98c82 --- /dev/null +++ b/src/Java/gtPlusPlus/preloader/asm/transformers/ClassTransformer_TiConFluids.java @@ -0,0 +1,123 @@ +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.ClassWriter; +import org.objectweb.asm.Label; +import org.objectweb.asm.MethodVisitor; + +import cpw.mods.fml.relauncher.FMLRelaunchLog; +import gtPlusPlus.preloader.DevHelper; +import gtPlusPlus.preloader.asm.transformers.Preloader_ClassTransformer.OreDictionaryVisitor; + + +public class ClassTransformer_TiConFluids { + + + //Leftover Code, in case I ever want to inject interfaces. + //private static final String cloneableInterface = "java/lang/Cloneable"; + + //The qualified name of the class we plan to transform. + private static final String className = "tconstruct.smeltery.blocks.TConstructFluid"; + + private final boolean isValid; + private final boolean isObfuscated; + private final String methodName; + private final ClassReader reader; + private final ClassWriter writer; + + public ClassTransformer_TiConFluids(String aMethodName, boolean obfuscated, byte[] basicClass) { + isObfuscated = obfuscated; + methodName = obfuscated ? DevHelper.getInstance().getSRG(aMethodName) : aMethodName; + ClassReader aTempReader = null; + ClassWriter aTempWriter = null; + try { + aTempReader = new ClassReader(className); + aTempWriter = new ClassWriter(aTempReader, ClassWriter.COMPUTE_FRAMES); + new ClassReader(basicClass).accept(new OreDictionaryVisitor(aTempWriter), 0); + } catch (IOException e) {} + if (aTempReader != null && aTempWriter != null) { + isValid = true; + } + else { + isValid = false; + } + reader = aTempReader; + writer = aTempWriter; + + if (reader != null && writer != null) { + injectMethod(); + } + + } + + public boolean isValidTransformer() { + return isValid; + } + + public ClassReader getReader() { + return reader; + } + + public ClassWriter getWriter() { + return writer; + } + + public void injectMethod() { + if (isValidTransformer()) { + FMLRelaunchLog.log("[GT++ ASM] Bright Fluids", Level.INFO, "Injecting "+methodName+" into "+className+". ["+(isObfuscated ? "Obfuscated" : "Unobfuscated")+"]"); + //Account for Obfuscated constructor args. + String IBlockAccessName = isObfuscated ? "ahl" : "net/minecraft/world/IBlockAccess"; + String aConstructorTypes = "(L"+IBlockAccessName+";III)I"; + + MethodVisitor mv = getWriter().visitMethod(ACC_PUBLIC, methodName, aConstructorTypes, null, null); + mv.visitCode(); + Label l0 = new Label(); + mv.visitLabel(l0); + mv.visitLineNumber(17, l0); + mv.visitVarInsn(ALOAD, 0); + mv.visitFieldInsn(GETFIELD, "tconstruct/smeltery/blocks/TConstructFluid", "maxScaledLight", "I"); + mv.visitVarInsn(ISTORE, 5); + Label l1 = new Label(); + mv.visitLabel(l1); + mv.visitLineNumber(18, l1); + mv.visitVarInsn(ILOAD, 5); + Label l2 = new Label(); + mv.visitJumpInsn(IFLE, l2); + Label l3 = new Label(); + mv.visitLabel(l3); + mv.visitLineNumber(19, l3); + mv.visitVarInsn(ILOAD, 5); + mv.visitInsn(IRETURN); + mv.visitLabel(l2); + mv.visitLineNumber(21, l2); + mv.visitFrame(F_APPEND,1, new Object[] {INTEGER}, 0, null); + mv.visitVarInsn(ALOAD, 0); + mv.visitVarInsn(ALOAD, 1); + mv.visitVarInsn(ILOAD, 2); + mv.visitVarInsn(ILOAD, 3); + mv.visitVarInsn(ILOAD, 4); + //net.minecraftforge.fluids.BlockFluidClassic.getLightValue(IBlockAccess, int, int, int) + mv.visitMethodInsn(INVOKESPECIAL, "net/minecraftforge/fluids/BlockFluidClassic", methodName, aConstructorTypes, false); + mv.visitInsn(IRETURN); + Label l4 = new Label(); + mv.visitLabel(l4); + mv.visitLocalVariable("this", "Ltconstruct/smeltery/blocks/TConstructFluid;", null, l0, l4, 0); + mv.visitLocalVariable("world", "L"+IBlockAccessName+";", null, l0, l4, 1); + mv.visitLocalVariable("x", "I", null, l0, l4, 2); + mv.visitLocalVariable("y", "I", null, l0, l4, 3); + mv.visitLocalVariable("z", "I", null, l0, l4, 4); + mv.visitLocalVariable("maxLight", "I", null, l1, l4, 5); + mv.visitMaxs(5, 6); + mv.visitEnd(); + FMLRelaunchLog.log("[GT++ ASM] Bright Fluids", Level.INFO, "Method injection complete."); + + } + } + + +} 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 9222014092..7d7e7b80ca 100644 --- a/src/Java/gtPlusPlus/preloader/asm/transformers/Preloader_Transformer_Handler.java +++ b/src/Java/gtPlusPlus/preloader/asm/transformers/Preloader_Transformer_Handler.java @@ -1,13 +1,16 @@ package gtPlusPlus.preloader.asm.transformers; +import java.io.IOException; + import org.apache.logging.log4j.Level; import org.objectweb.asm.ClassReader; import org.objectweb.asm.ClassWriter; +import cpw.mods.fml.relauncher.CoreModManager; import cpw.mods.fml.relauncher.FMLRelaunchLog; - +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; @@ -17,23 +20,50 @@ public class Preloader_Transformer_Handler implements IClassTransformer { public byte[] transform(String name, String transformedName, byte[] basicClass) { + + // Is this environment obfuscated? (Extra checks just in case some weird shit happens during the check) + boolean obfuscated = false; + try { + obfuscated = !(boolean) ReflectionHelper.findField(CoreModManager.class, "deobfuscatedEnvironment").get(null); + } catch (IllegalArgumentException | IllegalAccessException e) { + e.printStackTrace(); + byte[] bs; + try { + bs = Launch.classLoader.getClassBytes("net.minecraft.world.World"); + if (bs != null) { + obfuscated = false; + } else { + obfuscated = true; + } + } catch (IOException e1) { + e1.printStackTrace(); + obfuscated = false; + } + } - if(transformedName.equals("net.minecraftforge.oredict.OreDictionary")) { + // Fix the OreDictionary + if (transformedName.equals("net.minecraftforge.oredict.OreDictionary")) { FMLRelaunchLog.log("[GT++ ASM] OreDictTransformer", Level.INFO, "Transforming %s", transformedName); ClassWriter classWriter = new ClassWriter(ClassWriter.COMPUTE_FRAMES); new ClassReader(basicClass).accept(new OreDictionaryVisitor(classWriter), 0); return classWriter.toByteArray(); - } + } + + // 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 (mEnabled) { - if(transformedName.equals("gregtech.api.metatileentity.BaseMetaTileEntity")) { + 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")) { + 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); diff --git a/src/Java/gtPlusPlus/xmod/gregtech/HANDLER_GT.java b/src/Java/gtPlusPlus/xmod/gregtech/HANDLER_GT.java index d64fecb032..182d30e5c5 100644 --- a/src/Java/gtPlusPlus/xmod/gregtech/HANDLER_GT.java +++ b/src/Java/gtPlusPlus/xmod/gregtech/HANDLER_GT.java @@ -121,7 +121,7 @@ public class HANDLER_GT { long rotorDurabilityMax = GT_MetaGenerated_Tool.getToolMaxDamage(aI); //Logger.INFO("Found "+aType+"Turbine made out of "+getMaterialName(aMainMaterial)+", using "+getMaterialName(aSecondaryMaterial)); if (rotorDurabilityMax < aCutoff) { - Logger.INFO("[Turbine Cleanup] "+getMaterialName(aMainMaterial)+" "+aType+"Turbines have "+rotorDurabilityMax+", which is below the cutoff durability of "+aCutoff+", disabling."); + Logger.WARNING("[Turbine Cleanup] "+getMaterialName(aMainMaterial)+" "+aType+"Turbines have "+rotorDurabilityMax+", which is below the cutoff durability of "+aCutoff+", disabling."); aG.mEnabled = false; aG.mHidden = true; aG.mCanBeBuffered = false; diff --git a/src/Java/gtPlusPlus/xmod/tinkers/HANDLER_Tinkers.java b/src/Java/gtPlusPlus/xmod/tinkers/HANDLER_Tinkers.java index 3ece2cc61d..501fe6579a 100644 --- a/src/Java/gtPlusPlus/xmod/tinkers/HANDLER_Tinkers.java +++ b/src/Java/gtPlusPlus/xmod/tinkers/HANDLER_Tinkers.java @@ -1,7 +1,13 @@ package gtPlusPlus.xmod.tinkers; +import java.lang.reflect.Field; + +import gtPlusPlus.api.objects.Logger; +import gtPlusPlus.api.objects.data.AutoMap; import gtPlusPlus.core.lib.LoadedMods; +import gtPlusPlus.core.util.reflect.ReflectionUtils; import gtPlusPlus.xmod.tinkers.util.TinkersUtils; +import net.minecraft.block.Block; import net.minecraftforge.fluids.Fluid; import net.minecraftforge.fluids.FluidRegistry; @@ -27,8 +33,61 @@ public class HANDLER_Tinkers { public static final void postInit() { if (LoadedMods.TiCon) { - - } + Class aTinkersSmeltery = ReflectionUtils.getClassByName("tconstruct.smeltery.TinkerSmeltery"); + AutoMap<Fluid> aTweakedFluids = new AutoMap<Fluid>(); + if (aTinkersSmeltery != null) { + try { + Logger.INFO("Manipulating the light levels of fluids in TiCon. Molten 'metals' in world are now very luminescent!"); + Field aFluidArrayField = ReflectionUtils.getField(aTinkersSmeltery, "fluids"); + Field aBlockArrayField = ReflectionUtils.getField(aTinkersSmeltery, "fluidBlocks"); + Fluid[] aTiconFluids = (Fluid[]) aFluidArrayField.get(null); + Block[] aTiconFluidBlocks = (Block[]) aBlockArrayField.get(null); + if (aTiconFluids != null && aTiconFluidBlocks != null) { + for (Fluid a : aTiconFluids) { + if (a == null) { + continue; + } else { + if (a.getLuminosity() <= 15) { + //if (a.getTemperature() >= 500) { + a.setLuminosity(16); + aTweakedFluids.put(a); + //} + } else { + aTweakedFluids.put(a); + continue; + } + } + } + for (Block a : aTiconFluidBlocks) { + if (a == null) { + continue; + } else { + Fluid f = FluidRegistry.lookupFluidForBlock(a); + boolean isHot = false; + if (f != null && f.getTemperature() >= 500) { + if (f.getLuminosity() <= 16 && !aTweakedFluids.containsValue(f)) { + f.setLuminosity(16); + } + isHot = true; + } + if (a.getLightValue() <= 16f) { + if (isHot) { + a.setLightLevel(16f); + } else { + if (a.getLightValue() <= 16f) { + a.setLightLevel(16f); + } + } + } else { + continue; + } + } + } + } + } catch (NoSuchFieldException | IllegalArgumentException | IllegalAccessException e) { + } + } + } } } |