aboutsummaryrefslogtreecommitdiff
path: root/src/Java
diff options
context:
space:
mode:
Diffstat (limited to 'src/Java')
-rw-r--r--src/Java/gtPlusPlus/core/item/bauble/MonsterKillerBaseBauble.java6
-rw-r--r--src/Java/gtPlusPlus/core/util/minecraft/HazmatUtils.java19
-rw-r--r--src/Java/gtPlusPlus/preloader/asm/transformers/ClassTransformer_IC2_Hazmat.java132
-rw-r--r--src/Java/gtPlusPlus/preloader/asm/transformers/Preloader_Transformer_Handler.java6
4 files changed, 151 insertions, 12 deletions
diff --git a/src/Java/gtPlusPlus/core/item/bauble/MonsterKillerBaseBauble.java b/src/Java/gtPlusPlus/core/item/bauble/MonsterKillerBaseBauble.java
index 2cffb8737f..aa89ff1627 100644
--- a/src/Java/gtPlusPlus/core/item/bauble/MonsterKillerBaseBauble.java
+++ b/src/Java/gtPlusPlus/core/item/bauble/MonsterKillerBaseBauble.java
@@ -11,6 +11,7 @@ import gtPlusPlus.api.objects.minecraft.AABB;
import gtPlusPlus.core.lib.CORE;
import gtPlusPlus.core.util.math.MathUtils;
import gtPlusPlus.core.util.minecraft.EntityUtils;
+import gtPlusPlus.core.util.minecraft.PlayerUtils;
import ic2.api.item.ElectricItem;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.Entity;
@@ -85,12 +86,12 @@ public class MonsterKillerBaseBauble extends ElectricBaseBauble {
String aEUT = aEU + "/t";
list.add(EnumChatFormatting.GREEN + aString1 + EnumChatFormatting.GRAY);
- list.add(EnumChatFormatting.GREEN + aString2 + " " + (int) getTransferLimit(stack) + aEUT + aString3
+ list.add(EnumChatFormatting.GREEN + aString2 + " " + (int) getTransferLimit(stack) + aEUT + " " + aString3
+ EnumChatFormatting.GRAY);
list.add("");
list.add("" + EnumChatFormatting.GREEN + aString4 + " " + EnumChatFormatting.GRAY);
for (Class cz : mTargets) {
- list.add("- " + EnumChatFormatting.DARK_GREEN + cz.getSimpleName() + EnumChatFormatting.GRAY);
+ list.add("- " + EnumChatFormatting.DARK_GREEN + cz.getSimpleName().replace("Entity", "") + EnumChatFormatting.GRAY);
}
super.addInformation(stack, aPlayer, list, bool);
@@ -151,6 +152,7 @@ public class MonsterKillerBaseBauble extends ElectricBaseBauble {
long aEuUsage = (long) (aEntHealthPerc * 50 * aEntMaxHealth);
if (this.discharge(aBaubleStack, aEuUsage, mTier, true, false, false) > 0) {
aClosest.setDead();
+ PlayerUtils.messagePlayer(aPlayer, "Removed 1x "+aClosest.getCommandSenderName());
break;
}
} else {
diff --git a/src/Java/gtPlusPlus/core/util/minecraft/HazmatUtils.java b/src/Java/gtPlusPlus/core/util/minecraft/HazmatUtils.java
index c37b1271d7..c529f60ba1 100644
--- a/src/Java/gtPlusPlus/core/util/minecraft/HazmatUtils.java
+++ b/src/Java/gtPlusPlus/core/util/minecraft/HazmatUtils.java
@@ -19,7 +19,6 @@ import gtPlusPlus.GTplusplus.INIT_PHASE;
import gtPlusPlus.api.objects.Logger;
import gtPlusPlus.api.objects.data.AutoMap;
import gtPlusPlus.core.util.Utils;
-import ic2.core.Ic2Items;
import ic2.core.item.armor.ItemArmorHazmat;
import ic2.core.item.armor.ItemArmorNanoSuit;
import ic2.core.item.armor.ItemArmorQuantumSuit;
@@ -81,24 +80,24 @@ public class HazmatUtils {
return;
}
if (event.itemStack == null || isVanillaHazmatPiece(event.itemStack)) {
- Logger.INFO("[Hazmat] Invalid Itemstack or vanilla hazmat");
+ //Logger.INFO("[Hazmat] Invalid Itemstack or vanilla hazmat");
return;
} else {
ItemStack aStackTemp = event.itemStack;
GT_ItemStack aStack = new GT_ItemStack(aStackTemp);
if (isNanoArmourPiece(aStackTemp) || isQuantumArmourPiece(aStackTemp)) {
- event.toolTip.add("Provides full hazmat protection.");
+ event.toolTip.add(EnumChatFormatting.DARK_PURPLE+"Provides full hazmat protection.");
}
else {
- Logger.INFO("[Hazmat] Finding Tooltip Data");
+ //Logger.INFO("[Hazmat] Finding Tooltip Data");
String[] aTooltips = getTooltips(aStack);
if (aTooltips == null || aTooltips.length == 0) {
- Logger.INFO("[Hazmat] No Info!");
+ //Logger.INFO("[Hazmat] No Info!");
return;
} else {
- Logger.INFO("[Hazmat] Found Tooltips!");
+ //Logger.INFO("[Hazmat] Found Tooltips!");
if (providesProtection(aStackTemp)) {
- event.toolTip.add("Provides full hazmat protection.");
+ event.toolTip.add(EnumChatFormatting.LIGHT_PURPLE+"Provides full hazmat protection.");
} else {
event.toolTip.add(mToolTipText);
for (String r : aTooltips) {
@@ -301,12 +300,12 @@ public class HazmatUtils {
String aKey = convertGtItemstackToStringData(aStack);
AutoMap<String> aTempTooltipData = mToolTips.get(aKey);
if (aTempTooltipData == null) {
- Logger.INFO("[Hazmat] Item was not mapped for TTs - "+aKey);
+ //Logger.INFO("[Hazmat] Item was not mapped for TTs - "+aKey);
return new String[] {};
} else {
- Logger.INFO("[Hazmat] Item was mapped for TTs");
+ //Logger.INFO("[Hazmat] Item was mapped for TTs");
Collections.sort(aTempTooltipData);
- Logger.INFO("[Hazmat] Sorted TTs");
+ //Logger.INFO("[Hazmat] Sorted TTs");
return aTempTooltipData.toArray();
}
}
diff --git a/src/Java/gtPlusPlus/preloader/asm/transformers/ClassTransformer_IC2_Hazmat.java b/src/Java/gtPlusPlus/preloader/asm/transformers/ClassTransformer_IC2_Hazmat.java
new file mode 100644
index 0000000000..4bb7ef7d46
--- /dev/null
+++ b/src/Java/gtPlusPlus/preloader/asm/transformers/ClassTransformer_IC2_Hazmat.java
@@ -0,0 +1,132 @@
+package gtPlusPlus.preloader.asm.transformers;
+
+import static org.objectweb.asm.Opcodes.*;
+
+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.core.util.minecraft.HazmatUtils;
+import net.minecraft.entity.EntityLivingBase;
+
+public class ClassTransformer_IC2_Hazmat {
+
+ private final boolean isValid;
+ private final ClassReader reader;
+ private final ClassWriter writer;
+ private final String className;
+
+ public boolean hasCompleteHazmat(EntityLivingBase living) {
+ return HazmatUtils.hasCompleteHazmat(living);
+ }
+
+ public ClassTransformer_IC2_Hazmat(byte[] basicClass, String aClassName) {
+ className = aClassName;
+ ClassReader aTempReader = null;
+ ClassWriter aTempWriter = null;
+
+ FMLRelaunchLog.log("[GT++ ASM] IC2 Hazmat Patch", Level.INFO, "Attempting to patch in mode " + className + ".");
+
+ aTempReader = new ClassReader(basicClass);
+ aTempWriter = new ClassWriter(aTempReader, ClassWriter.COMPUTE_FRAMES);
+ aTempReader.accept(new localClassVisitor(aTempWriter, className), 0);
+
+ if (aTempReader != null && aTempWriter != null) {
+ isValid = true;
+ } else {
+ isValid = false;
+ }
+
+ FMLRelaunchLog.log("[GT++ ASM] IC2 Hazmat Patch", Level.INFO, "Valid patch? " + isValid + ".");
+ reader = aTempReader;
+ writer = aTempWriter;
+
+ if (reader != null && writer != null) {
+ FMLRelaunchLog.log("[GT++ ASM] IC2 Hazmat Patch", Level.INFO, "Attempting Method Injection.");
+ injectMethod("hasCompleteHazmat");
+ }
+
+ }
+
+ public boolean isValidTransformer() {
+ return isValid;
+ }
+
+ public ClassReader getReader() {
+ return reader;
+ }
+
+ public ClassWriter getWriter() {
+ return writer;
+ }
+
+ public boolean injectMethod(String aMethodName) {
+ MethodVisitor mv;
+ boolean didInject = false;
+ ClassWriter cw = getWriter();
+
+ boolean isObf;
+ try {
+ isObf = Class.forName("net.minecraft.entity.EntityLivingBase") == null;
+ } catch (ClassNotFoundException e) {
+ isObf = true;
+ }
+ String aEntityLivingBase = "net/minecraft/entity/EntityLivingBase";
+ if (isObf) {
+ aEntityLivingBase = "sv";
+ }
+
+
+ FMLRelaunchLog.log("[GT++ ASM] IC2 Hazmat Patch", Level.INFO, "Injecting " + aMethodName + ".");
+ if (aMethodName.equals("hasCompleteHazmat")) {
+ mv = cw.visitMethod(ACC_PUBLIC, "hasCompleteHazmat", "(L"+aEntityLivingBase+";)Z", null, null);
+ mv.visitCode();
+ Label l0 = new Label();
+ mv.visitLabel(l0);
+ mv.visitLineNumber(23, l0);
+ mv.visitVarInsn(ALOAD, 1);
+ mv.visitMethodInsn(INVOKESTATIC, "gtPlusPlus/core/util/minecraft/HazmatUtils", "hasCompleteHazmat", "(L"+aEntityLivingBase+";)Z", false);
+ mv.visitInsn(IRETURN);
+ Label l1 = new Label();
+ mv.visitLabel(l1);
+ mv.visitLocalVariable("this", "Lic2/core/item/armor/ItemArmorHazmat;", null, l0, l1, 0);
+ mv.visitLocalVariable("living", "L"+aEntityLivingBase+";", null, l0, l1, 1);
+ mv.visitMaxs(1, 2);
+ mv.visitEnd();
+ }
+ FMLRelaunchLog.log("[GT++ ASM] IC2 Hazmat Patch", Level.INFO, "Method injection complete.");
+ return didInject;
+ }
+
+ public final class localClassVisitor extends ClassVisitor {
+
+ String aClassName;
+
+ public localClassVisitor(ClassVisitor cv, String aName) {
+ super(ASM5, cv);
+ aClassName = aName;
+ }
+
+ @Override
+ public MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions) {
+ MethodVisitor methodVisitor;
+
+ if (name.equals("hasCompleteHazmat")) {
+ methodVisitor = null;
+ } else {
+ methodVisitor = super.visitMethod(access, name, desc, signature, exceptions);
+ }
+
+ if (methodVisitor == null) {
+ FMLRelaunchLog.log("[GT++ ASM] IC2 Hazmat Patch", Level.INFO,
+ "Found method " + name + ", removing.");
+ }
+ 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 81302a59d4..3f5897d590 100644
--- a/src/Java/gtPlusPlus/preloader/asm/transformers/Preloader_Transformer_Handler.java
+++ b/src/Java/gtPlusPlus/preloader/asm/transformers/Preloader_Transformer_Handler.java
@@ -201,6 +201,12 @@ public class Preloader_Transformer_Handler implements IClassTransformer {
return new ClassTransformer_IC2_GetHarvestTool(basicClass, obfuscated, transformedName).getWriter().toByteArray();
}
}
+ //Fix IC2 Hazmat
+
+ if (transformedName.equals("ic2.core.item.armor.ItemArmorHazmat")) {
+ FMLRelaunchLog.log("[GT++ ASM] IC2 Hazmat Patch", Level.INFO, "Transforming %s", transformedName);
+ return new ClassTransformer_IC2_Hazmat(basicClass, transformedName).getWriter().toByteArray();
+ }
//Fix Thaumcraft Shit
//Patching ItemWispEssence to allow invalid item handling