From 9a35ac97b16bc21d3b6dac8b02f63c5dfc5a8aa0 Mon Sep 17 00:00:00 2001 From: Adubbz Date: Tue, 14 Oct 2014 18:01:28 +1100 Subject: [PATCH] Removed the ASM hackery as the necessary hooks are now in FML --- build.gradle | 4 +- build.properties | 2 +- src/main/java/biomesoplenty/asm/ASMUtil.java | 44 --------- .../biomesoplenty/asm/BOPLoadingPlugin.java | 49 ---------- .../biomesoplenty/asm/BOPTransformer.java | 91 ------------------- .../client/util/ModelHelper.java | 8 -- .../biomesoplenty/common/init/ModBlocks.java | 5 +- 7 files changed, 6 insertions(+), 197 deletions(-) delete mode 100644 src/main/java/biomesoplenty/asm/ASMUtil.java delete mode 100644 src/main/java/biomesoplenty/asm/BOPLoadingPlugin.java delete mode 100644 src/main/java/biomesoplenty/asm/BOPTransformer.java diff --git a/build.gradle b/build.gradle index a1dc75421..d4f811bca 100644 --- a/build.gradle +++ b/build.gradle @@ -75,8 +75,8 @@ processResources { jar { manifest { - attributes 'FMLCorePlugin': 'biomesoplenty.asm.BOPLoadingPlugin' - attributes 'FMLCorePluginContainsFMLMod': 'true' + //attributes 'FMLCorePlugin': 'biomesoplenty.asm.BOPLoadingPlugin' + //attributes 'FMLCorePluginContainsFMLMod': 'true' } classifier = 'universal' } diff --git a/build.properties b/build.properties index 0231ce683..404bf7490 100644 --- a/build.properties +++ b/build.properties @@ -1,3 +1,3 @@ minecraft_version=1.8 -forge_version=8.0.2.1009-1.8 +forge_version=8.0.2.1011-1.8 mod_version=3.0.0 diff --git a/src/main/java/biomesoplenty/asm/ASMUtil.java b/src/main/java/biomesoplenty/asm/ASMUtil.java deleted file mode 100644 index e73f417a8..000000000 --- a/src/main/java/biomesoplenty/asm/ASMUtil.java +++ /dev/null @@ -1,44 +0,0 @@ -/******************************************************************************* - * Copyright 2014, the Biomes O' Plenty Team - * - * This work is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International Public License. - * - * To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/. - ******************************************************************************/ - -package biomesoplenty.asm; - -import org.objectweb.asm.ClassReader; -import org.objectweb.asm.ClassWriter; -import org.objectweb.asm.tree.ClassNode; -import org.objectweb.asm.tree.MethodNode; - -public class ASMUtil -{ - public static ClassNode getClassNode(byte[] classBytes) - { - ClassReader reader = new ClassReader(classBytes); - ClassNode node = new ClassNode(); - reader.accept(node, 0); - - return node; - } - - public static byte[] getBytes(ClassNode classNode) - { - ClassWriter writer = new ClassWriter(0); - classNode.accept(writer); - - return writer.toByteArray(); - } - - public static MethodNode getMethodNode(ClassNode classNode, String methodName, String desc) - { - for (MethodNode method : classNode.methods) - { - if (method.name.equals(methodName) && method.desc.equals(desc)) return method; - } - - throw new RuntimeException(methodName + " doesn't exist in " + classNode.name + "!"); - } -} diff --git a/src/main/java/biomesoplenty/asm/BOPLoadingPlugin.java b/src/main/java/biomesoplenty/asm/BOPLoadingPlugin.java deleted file mode 100644 index 76daf080f..000000000 --- a/src/main/java/biomesoplenty/asm/BOPLoadingPlugin.java +++ /dev/null @@ -1,49 +0,0 @@ -/******************************************************************************* - * Copyright 2014, the Biomes O' Plenty Team - * - * This work is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International Public License. - * - * To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/. - ******************************************************************************/ - -package biomesoplenty.asm; - -import java.util.Map; - -import net.minecraftforge.fml.relauncher.IFMLLoadingPlugin; -import net.minecraftforge.fml.relauncher.IFMLLoadingPlugin.TransformerExclusions; - -//TODO: Remove this or the BOPTransformer. It shouldn't be needed. -@TransformerExclusions("biomesoplenty.asm") -public class BOPLoadingPlugin implements IFMLLoadingPlugin -{ - @Override - public String[] getASMTransformerClass() - { - return new String[] { BOPTransformer.class.getName() }; - } - - @Override - public String getModContainerClass() - { - return null; - } - - @Override - public String getSetupClass() - { - return null; - } - - @Override - public void injectData(Map data) - { - } - - @Override - public String getAccessTransformerClass() - { - return null; - } - -} diff --git a/src/main/java/biomesoplenty/asm/BOPTransformer.java b/src/main/java/biomesoplenty/asm/BOPTransformer.java deleted file mode 100644 index efa4e0756..000000000 --- a/src/main/java/biomesoplenty/asm/BOPTransformer.java +++ /dev/null @@ -1,91 +0,0 @@ -/******************************************************************************* - * Copyright 2014, the Biomes O' Plenty Team - * - * This work is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International Public License. - * - * To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/. - ******************************************************************************/ - -package biomesoplenty.asm; - -import java.io.IOException; -import java.util.Iterator; - -import org.objectweb.asm.Opcodes; -import org.objectweb.asm.tree.AbstractInsnNode; -import org.objectweb.asm.tree.ClassNode; -import org.objectweb.asm.tree.FieldInsnNode; -import org.objectweb.asm.tree.InsnList; -import org.objectweb.asm.tree.MethodInsnNode; -import org.objectweb.asm.tree.MethodNode; -import org.objectweb.asm.tree.VarInsnNode; - -import net.minecraft.launchwrapper.IClassTransformer; -import net.minecraft.launchwrapper.Launch; - -public class BOPTransformer implements IClassTransformer -{ - private static final boolean isObfuscated; - private static final String modelBakeryName; - private static final String variantNamesName; - private static final String registerVariantNamesName; - - static - { - boolean obfuscated = true; - - try - { - obfuscated = Launch.classLoader.getClassBytes("net.minecraft.world.World") == null; - } - catch (IOException e) - { - e.printStackTrace(); - } - - isObfuscated = obfuscated; - modelBakeryName = isObfuscated ? "cxh" : "net/minecraft/client/resources/model/ModelBakery"; - variantNamesName = isObfuscated ? "u" : "variantNames"; - registerVariantNamesName = isObfuscated ? "e" : "registerVariantNames"; - } - - @Override - public byte[] transform(String name, String transformedName, byte[] basicClass) - { - if (name.equals(modelBakeryName.replace("/", "."))) - { - ClassNode classNode = ASMUtil.getClassNode(basicClass); - MethodNode variantsMethodNode = ASMUtil.getMethodNode(classNode, registerVariantNamesName, "()V"); - - InsnList instructions = new InsnList(); - - instructions.add(new VarInsnNode(Opcodes.ALOAD, 0)); - instructions.add(new FieldInsnNode(Opcodes.GETFIELD, modelBakeryName, variantNamesName, "Ljava/util/Map;")); - instructions.add(new FieldInsnNode(Opcodes.GETSTATIC, "biomesoplenty/client/util/ModelHelper", "customVariantNames", "Ljava/util/HashMap;")); - instructions.add(new MethodInsnNode(Opcodes.INVOKEINTERFACE, "java/util/Map", "putAll", "(Ljava/util/Map;)V", true)); - - variantsMethodNode.instructions.insertBefore(getRegisterVariantsInsertionPoint(variantsMethodNode), instructions); - - return ASMUtil.getBytes(classNode); - } - - return basicClass; - } - - private AbstractInsnNode getRegisterVariantsInsertionPoint(MethodNode methodNode) - { - Iterator iterator = methodNode.instructions.iterator(); - AbstractInsnNode returnNode = null; - - while (iterator.hasNext()) - { - AbstractInsnNode currentNode = iterator.next(); - - if (currentNode.getOpcode() == Opcodes.RETURN) returnNode = currentNode; - } - - if (returnNode != null) return returnNode; - - throw new RuntimeException("The insertion point for registerVariantsNames() in ModelBakery was not found"); - } -} diff --git a/src/main/java/biomesoplenty/client/util/ModelHelper.java b/src/main/java/biomesoplenty/client/util/ModelHelper.java index bc8edc4d7..ecff8bbd7 100644 --- a/src/main/java/biomesoplenty/client/util/ModelHelper.java +++ b/src/main/java/biomesoplenty/client/util/ModelHelper.java @@ -29,14 +29,6 @@ import net.minecraftforge.fml.relauncher.SideOnly; @SideOnly(Side.CLIENT) public class ModelHelper { - public static HashMap> customVariantNames = new HashMap(); - - public static void addVariantName(Item item, String... names) - { - if (customVariantNames.containsKey(item)) customVariantNames.get(item).addAll(Arrays.asList(names)); - else customVariantNames.put(item, Lists.newArrayList(names)); - } - public static void registerItem(Item item, int metadata, String itemName) { getItemModelMesher().register(item, metadata, new ModelResourceLocation(itemName, "inventory")); diff --git a/src/main/java/biomesoplenty/common/init/ModBlocks.java b/src/main/java/biomesoplenty/common/init/ModBlocks.java index e748f4706..bf1c6b6a4 100644 --- a/src/main/java/biomesoplenty/common/init/ModBlocks.java +++ b/src/main/java/biomesoplenty/common/init/ModBlocks.java @@ -10,6 +10,7 @@ package biomesoplenty.common.init; import static biomesoplenty.api.block.BOPBlocks.*; import net.minecraft.block.Block; +import net.minecraft.client.resources.model.ModelBakery; import net.minecraft.item.Item; import net.minecraftforge.fml.common.registry.GameRegistry; import biomesoplenty.api.block.BOPBlock; @@ -52,7 +53,7 @@ public class ModBlocks { String variantName = variant.getName() + (variant.getBaseName() != null ? "_" + variant.getBaseName() : ""); - ModelHelper.addVariantName(Item.getItemFromBlock(block), BiomesOPlenty.MOD_ID + ":" + variantName); + ModelBakery.addVariantName(Item.getItemFromBlock(block), BiomesOPlenty.MOD_ID + ":" + variantName); BiomesOPlenty.proxy.registerBlockForMeshing(block, variant.getDefaultMetadata(), variantName); } } @@ -60,7 +61,7 @@ public class ModBlocks { GameRegistry.registerBlock(block, name); - ModelHelper.addVariantName(Item.getItemFromBlock(block), BiomesOPlenty.MOD_ID + ":" + name); + ModelBakery.addVariantName(Item.getItemFromBlock(block), BiomesOPlenty.MOD_ID + ":" + name); BiomesOPlenty.proxy.registerBlockForMeshing(block, 0, name); }