aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlkalus <3060479+draknyte1@users.noreply.github.com>2020-01-13 17:03:40 +0000
committerAlkalus <3060479+draknyte1@users.noreply.github.com>2020-01-13 17:03:40 +0000
commit394d6a29a42bd4a9005c13b3f00284fd2bb6b9f4 (patch)
treeb868925fe32e4e958dbb83762e90cc24145436a4
parent9232871f5a734a52ecdc7bc24e35b009bf9c5b66 (diff)
downloadGT5-Unofficial-394d6a29a42bd4a9005c13b3f00284fd2bb6b9f4.tar.gz
GT5-Unofficial-394d6a29a42bd4a9005c13b3f00284fd2bb6b9f4.tar.bz2
GT5-Unofficial-394d6a29a42bd4a9005c13b3f00284fd2bb6b9f4.zip
$ Fixed #606.
-rw-r--r--src/Java/gtPlusPlus/preloader/asm/AsmConfig.java9
-rw-r--r--src/Java/gtPlusPlus/preloader/asm/transformers/ClassTransformer_Forge_EntityLivingBase_SetHealth.java45
-rw-r--r--src/Java/gtPlusPlus/preloader/asm/transformers/ClassTransformer_GT_CharcoalPit.java48
-rw-r--r--src/Java/gtPlusPlus/preloader/asm/transformers/Preloader_Transformer_Handler.java2
4 files changed, 60 insertions, 44 deletions
diff --git a/src/Java/gtPlusPlus/preloader/asm/AsmConfig.java b/src/Java/gtPlusPlus/preloader/asm/AsmConfig.java
index fc7d408cb9..88bcf6b28b 100644
--- a/src/Java/gtPlusPlus/preloader/asm/AsmConfig.java
+++ b/src/Java/gtPlusPlus/preloader/asm/AsmConfig.java
@@ -15,6 +15,7 @@ public class AsmConfig {
public static boolean enableTiConFluidLighting;
public static boolean enableGtTooltipFix;
public static boolean enableGtNbtFix;
+ public static boolean enableGtCharcoalPitFix;
public static boolean enableChunkDebugging;
public static boolean enableCofhPatch;
public static boolean enableGcFuelChanges;
@@ -98,6 +99,14 @@ public class AsmConfig {
enableGtTooltipFix = prop.getBoolean(true);
propOrder.add(prop.getName());
+
+
+ prop = config.get("general", "enableGtCharcoalPitFix", true);
+ prop.comment = "Makes the Charcoal Pile Igniter work better.";
+ prop.setLanguageKey("gtpp.enableGtCharcoalPitFix").setRequiresMcRestart(true);
+ enableGtCharcoalPitFix = prop.getBoolean(true);
+ propOrder.add(prop.getName());
+
prop = config.get("general", "enableGcFuelChanges", true);
prop.comment = "Enable/Disable changes to Galacticraft Rocket Fuels.";
prop.setLanguageKey("gtpp.enableGcFuelChanges").setRequiresMcRestart(true);
diff --git a/src/Java/gtPlusPlus/preloader/asm/transformers/ClassTransformer_Forge_EntityLivingBase_SetHealth.java b/src/Java/gtPlusPlus/preloader/asm/transformers/ClassTransformer_Forge_EntityLivingBase_SetHealth.java
index ff0cd41d2f..d56b9de059 100644
--- a/src/Java/gtPlusPlus/preloader/asm/transformers/ClassTransformer_Forge_EntityLivingBase_SetHealth.java
+++ b/src/Java/gtPlusPlus/preloader/asm/transformers/ClassTransformer_Forge_EntityLivingBase_SetHealth.java
@@ -11,7 +11,7 @@ import net.minecraft.entity.EntityLivingBase;
import net.minecraft.util.DamageSource;
public class ClassTransformer_Forge_EntityLivingBase_SetHealth {
-
+
private boolean isValid = false;
private ClassReader mReader = null;
private ClassWriter mWriter = null;
@@ -21,7 +21,7 @@ public class ClassTransformer_Forge_EntityLivingBase_SetHealth {
if (basicClass == null) {
return;
}
-
+
ClassReader reader = new ClassReader(basicClass);
ClassWriter writer = new ClassWriter(reader, ClassWriter.COMPUTE_MAXS);
ClassVisitor visitor = writer;
@@ -62,67 +62,60 @@ public class ClassTransformer_Forge_EntityLivingBase_SetHealth {
}
@Override
- public void visit(
- int version, int access, String name, String signature, String superName, String[] interfaces
- ) {
+ public void visit(int version, int access, String name, String signature, String superName, String[] interfaces) {
super.visit(
version, access, name, signature, superName, interfaces
- );
+ );
this.clsName = name;
}
@Override
public MethodVisitor visitMethod(
- int mAccess, final String mName, final String mDesc, String mSignature, String[] mExceptions
- ) {
+ int mAccess, final String mName, final String mDesc, String mSignature, String[] mExceptions) {
final boolean warn = !(clsName.equals(
"net/minecraft/entity/EntityLivingBase"
- ));
+ ));
- return new MethodVisitor(
- Opcodes.ASM5, super.visitMethod(
- mAccess, mName, mDesc, mSignature, mExceptions
- )
- ) {
+ return new MethodVisitor(Opcodes.ASM5, super.visitMethod(mAccess, mName, mDesc, mSignature, mExceptions)) {
@Override
public void visitMethodInsn(
int opcode, String owner, String name, String desc, boolean isIntf
- ) {
+ ) {
if (owner.equals(
"net/minecraft/entity/EntityLivingBase"
- ) && name.equals("setHealth") && desc.equals("(F)V")) {
+ ) && name.equals("setHealth") && desc.equals("(F)V")) {
if (warn) {
FMLRelaunchLog.warning(
"============================================================="
- );
+ );
FMLRelaunchLog.warning(
"MOD HAS DIRECT REFERENCE Entity.setHealth() THIS IS NOT ALLOWED!"
- );
+ );
FMLRelaunchLog.warning(
"Offendor: %s.%s%s", SetHealthVisitor.this.clsName, mName, mDesc
- );
+ );
FMLRelaunchLog.warning(
"Use EntityLiving.attackEntityFrom(DamageSource, damageDealt) instead"
- );
+ );
FMLRelaunchLog.warning(
"============================================================="
- );
+ );
}
didPatchInternal = true;
- //opcode = Opcodes.INVOKESTATIC; // Set it static
+ //opcode = Opcodes.INVOKESTATIC; // Set it static
//owner = SetHealthVisitor.callbackOwner;
//name = "setHealthGeneric"; // Replace the method name
//desc = "(Lnet/minecraft/entity/EntityLivingBase;F)V"; // Replace the method desc
-
+
}
super.visitMethodInsn(opcode, owner, name, desc, isIntf);
}
};
}
-
- private final static DamageSource mGenericDamageSource = new DamageSource("gtpp.generic");
-
+
+ private final static DamageSource mGenericDamageSource = new DamageSource("gtpp.generic");
+
public static void setHealthGeneric(EntityLivingBase aEntity, float aValue) {
aEntity.attackEntityFrom(mGenericDamageSource, aValue);
}
diff --git a/src/Java/gtPlusPlus/preloader/asm/transformers/ClassTransformer_GT_CharcoalPit.java b/src/Java/gtPlusPlus/preloader/asm/transformers/ClassTransformer_GT_CharcoalPit.java
index 9c79db265d..45e1608d6b 100644
--- a/src/Java/gtPlusPlus/preloader/asm/transformers/ClassTransformer_GT_CharcoalPit.java
+++ b/src/Java/gtPlusPlus/preloader/asm/transformers/ClassTransformer_GT_CharcoalPit.java
@@ -17,10 +17,9 @@ import org.objectweb.asm.MethodVisitor;
import cpw.mods.fml.relauncher.FMLRelaunchLog;
import gregtech.api.enums.OrePrefixes;
-import gtPlusPlus.api.objects.Logger;
import gtPlusPlus.core.util.minecraft.ItemUtils;
+import gtPlusPlus.core.util.reflect.ReflectionUtils;
import net.minecraft.block.Block;
-import net.minecraft.block.material.Material;
import net.minecraft.item.ItemStack;
import net.minecraftforge.oredict.OreDictionary;
@@ -31,35 +30,48 @@ public class ClassTransformer_GT_CharcoalPit {
private final ClassWriter writer;
public static boolean isWoodLog(Block log) {
- //Logger.INFO("checking for log");
boolean isLog1 = OrePrefixes.log.contains(new ItemStack(log, 1));
if (isLog1) {
- //Logger.INFO("Found 1");
return true;
}
ArrayList<ItemStack> oredict = OreDictionary.getOres("logWood");
if (oredict.contains(ItemUtils.getSimpleStack(log))) {
- //Logger.INFO("found 2");
return true;
- }
- //Logger.INFO("Did not find. "+(log != null ? ""+log.getLocalizedName() : "Null or invalid block?"));
+ }
return false;
}
public ClassTransformer_GT_CharcoalPit(byte[] basicClass, boolean obfuscated) {
ClassReader aTempReader = null;
ClassWriter aTempWriter = null;
+ boolean aBadTime = false;
+ if (ReflectionUtils.doesClassExist("aji")) {
+ obfuscated = true;
+ }
+ else {
+ if (ReflectionUtils.doesClassExist("net.minecraft.block.Block")) {
+ obfuscated = false;
+ }
+ else {
+ // Bad... Like.. very bad..
+ FMLRelaunchLog.log("[GT++ ASM] GT Charcoal Pit Fix", Level.INFO, "Unable to find Block.class/aji.class, this is BAD. Not Patching.");
+ }
+ }
aTempReader = new ClassReader(basicClass);
aTempWriter = new ClassWriter(aTempReader, ClassWriter.COMPUTE_FRAMES);
- aTempReader.accept(new AddFieldAdapter(aTempWriter), 0);
- injectMethod("isWoodLog", obfuscated, aTempWriter);
- if (aTempReader != null && aTempWriter != null) {
- isValid = true;
- } else {
+ if (!aBadTime) {
+ aTempReader.accept(new CustomClassVisitor(aTempWriter), 0);
+ injectMethod("isWoodLog", obfuscated, aTempWriter);
+ if (aTempReader != null && aTempWriter != null) {
+ isValid = true;
+ } else {
+ isValid = false;
+ }
+ }
+ else {
isValid = false;
}
- FMLRelaunchLog.log("[GT++ ASM] GT Charcoal Pit Fix", Level.INFO,
- "Valid? " + isValid + ".");
+ FMLRelaunchLog.log("[GT++ ASM] GT Charcoal Pit Fix", Level.INFO, "Valid? " + isValid + ".");
reader = aTempReader;
writer = aTempWriter;
}
@@ -86,11 +98,12 @@ public class ClassTransformer_GT_CharcoalPit {
aBlockClassName = "aji";
}
if (aMethodName.equals("isWoodLog")) {
+
mv = cw.visitMethod(ACC_PUBLIC, "isWoodLog", "(L"+aBlockClassName+";)Z", null, null);
mv.visitCode();
Label l0 = new Label();
mv.visitLabel(l0);
- mv.visitLineNumber(49, l0);
+ mv.visitLineNumber(197, l0);
mv.visitVarInsn(ALOAD, 1);
mv.visitMethodInsn(INVOKESTATIC, "gtPlusPlus/preloader/asm/transformers/ClassTransformer_GT_CharcoalPit", "isWoodLog", "(L"+aBlockClassName+";)Z", false);
mv.visitInsn(IRETURN);
@@ -101,14 +114,15 @@ public class ClassTransformer_GT_CharcoalPit {
mv.visitMaxs(1, 2);
mv.visitEnd();
didInject = true;
+
}
FMLRelaunchLog.log("[GT++ ASM] GT Charcoal Pit Fix", Level.INFO, "Method injection complete.");
return didInject;
}
- public class AddFieldAdapter extends ClassVisitor {
+ public class CustomClassVisitor extends ClassVisitor {
- public AddFieldAdapter(ClassVisitor cv) {
+ public CustomClassVisitor(ClassVisitor cv) {
super(ASM5, cv);
this.cv = cv;
}
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 7e2914ea30..d8dc71dff0 100644
--- a/src/Java/gtPlusPlus/preloader/asm/transformers/Preloader_Transformer_Handler.java
+++ b/src/Java/gtPlusPlus/preloader/asm/transformers/Preloader_Transformer_Handler.java
@@ -186,7 +186,7 @@ public class Preloader_Transformer_Handler implements IClassTransformer {
}
//Fix log handling on the charcoal pit
- if (transformedName.equals("gregtech.common.tileentities.machines.multi.GT_MetaTileEntity_Charcoal_Pit")) {
+ if (transformedName.equals("gregtech.common.tileentities.machines.multi.GT_MetaTileEntity_Charcoal_Pit") && mConfig.enableGtCharcoalPitFix) {
FMLRelaunchLog.log("[GT++ ASM] GT Charcoal Pit Fix", Level.INFO, "Transforming %s", transformedName);
return new ClassTransformer_GT_CharcoalPit(basicClass, obfuscated).getWriter().toByteArray();
}