diff --git a/conf/joined.exc b/conf/joined.exc index 7246cd5824..1f65b2c41f 100644 --- a/conf/joined.exc +++ b/conf/joined.exc @@ -109,7 +109,7 @@ net/minecraft/enchantment/EnchantmentHelper=CL_00000107 #net/minecraft/enchantment/EnchantmentHelper$1=CL_00000108 net/minecraft/enchantment/EnchantmentHelper$DamageIterator=CL_00000109 net/minecraft/enchantment/EnchantmentHelper$HurtIterator=CL_00000110 -net/minecraft/enchantment/EnchantmentHelper$IModifier=CL_00000111 +#net/minecraft/enchantment/EnchantmentHelper$IModifier=CL_00000111 net/minecraft/enchantment/EnchantmentHelper$ModifierLiving=CL_00000112 net/minecraft/command/server/CommandAchievement=CL_00000113 net/minecraft/enchantment/EnchantmentHelper$ModifierDamage=CL_00000114 @@ -673,7 +673,7 @@ net/minecraft/client/gui/GuiLabel=CL_00000671 net/minecraft/client/gui/GuiButtonLanguage=CL_00000672 net/minecraft/client/gui/GuiButtonLink=CL_00000673 net/minecraft/client/gui/GuiListExtended=CL_00000674 -net/minecraft/client/gui/GuiListExtended$IGuiListEntry=CL_00000675 +#net/minecraft/client/gui/GuiListExtended$IGuiListEntry=CL_00000675 net/minecraft/client/gui/GuiOptionButton=CL_00000676 net/minecraft/client/gui/GuiOptionsRowList=CL_00000677 net/minecraft/client/gui/GuiOptionsRowList$Row=CL_00000678 @@ -1486,7 +1486,7 @@ net/minecraft/util/CryptManager=CL_00001483 net/minecraft/util/JsonUtils=CL_00001484 net/minecraft/util/HttpUtil=CL_00001485 net/minecraft/util/HttpUtil$1=CL_00001486 -net/minecraft/util/HttpUtil$DownloadListener=CL_00001487 +#net/minecraft/util/HttpUtil$DownloadListener=CL_00001487 net/minecraft/server/management/LowerStringMap=CL_00001488 net/minecraft/crash/CrashReportCategory$Entry=CL_00001489 net/minecraft/util/IntHashMap=CL_00001490 diff --git a/src/main/java/cpw/mods/fml/common/asm/transformers/AccessTransformer.java b/src/main/java/cpw/mods/fml/common/asm/transformers/AccessTransformer.java index 65eee8a470..8573c6ec5a 100644 --- a/src/main/java/cpw/mods/fml/common/asm/transformers/AccessTransformer.java +++ b/src/main/java/cpw/mods/fml/common/asm/transformers/AccessTransformer.java @@ -53,7 +53,7 @@ import cpw.mods.fml.relauncher.FMLRelaunchLog; public class AccessTransformer implements IClassTransformer { - private static final boolean DEBUG = false; + private static final boolean DEBUG = Boolean.parseBoolean(System.getProperty("fml.debugAccessTransformer", "false")); private class Modifier { public String name = ""; @@ -124,20 +124,20 @@ public class AccessTransformer implements IClassTransformer return true; } List parts = Lists.newArrayList(Splitter.on(" ").trimResults().split(line)); - if (parts.size()>2) + if (parts.size()>3) { throw new RuntimeException("Invalid config file line "+ input); } Modifier m = new Modifier(); m.setTargetAccess(parts.get(0)); - List descriptor = Lists.newArrayList(Splitter.on(".").trimResults().split(parts.get(1))); - if (descriptor.size() == 1) + + if (parts.size() == 2) { m.modifyClassVisibility = true; } else { - String nameReference = descriptor.get(1); + String nameReference = parts.get(2); int parenIdx = nameReference.indexOf('('); if (parenIdx>0) { @@ -149,7 +149,9 @@ public class AccessTransformer implements IClassTransformer m.name = nameReference; } } - modifiers.put(descriptor.get(0).replace('/', '.'), m); + String className = parts.get(1).replace('/', '.'); + modifiers.put(className, m); + if (DEBUG) System.out.printf("AT RULE: %s %s %s (type %s)\n", toBinary(m.targetAccess), m.name, m.desc, className); return true; } }); @@ -163,15 +165,15 @@ public class AccessTransformer implements IClassTransformer if (DEBUG) { - FMLRelaunchLog.fine("Considering all methods and fields on %s (%s)\n", name, transformedName); + FMLRelaunchLog.fine("Considering all methods and fields on %s (%s)\n", transformedName, name); } - if (!modifiers.containsKey(name)) { return bytes; } + if (!modifiers.containsKey(transformedName)) { return bytes; } ClassNode classNode = new ClassNode(); ClassReader classReader = new ClassReader(bytes); classReader.accept(classNode, 0); - Collection mods = modifiers.get(name); + Collection mods = modifiers.get(transformedName); for (Modifier m : mods) { if (m.modifyClassVisibility) diff --git a/src/main/java/cpw/mods/fml/common/launcher/FMLDeobfTweaker.java b/src/main/java/cpw/mods/fml/common/launcher/FMLDeobfTweaker.java index 5c1d68d9dd..0a43444c97 100644 --- a/src/main/java/cpw/mods/fml/common/launcher/FMLDeobfTweaker.java +++ b/src/main/java/cpw/mods/fml/common/launcher/FMLDeobfTweaker.java @@ -20,11 +20,12 @@ public class FMLDeobfTweaker implements ITweaker { @Override public void injectIntoClassLoader(LaunchClassLoader classLoader) { - // Deobfuscation transformer, always last + // Deobfuscation transformer, always last, and the access transformer tweaker as well if (!(Boolean)Launch.blackboard.get("fml.deobfuscatedEnvironment")) { classLoader.registerTransformer("cpw.mods.fml.common.asm.transformers.DeobfuscationTransformer"); } + classLoader.registerTransformer("cpw.mods.fml.common.asm.transformers.AccessTransformer"); try { FMLRelaunchLog.fine("Validating minecraft"); diff --git a/src/main/java/cpw/mods/fml/relauncher/FMLCorePlugin.java b/src/main/java/cpw/mods/fml/relauncher/FMLCorePlugin.java index c03e4383cb..60f860bdc1 100644 --- a/src/main/java/cpw/mods/fml/relauncher/FMLCorePlugin.java +++ b/src/main/java/cpw/mods/fml/relauncher/FMLCorePlugin.java @@ -20,7 +20,6 @@ public class FMLCorePlugin implements IFMLLoadingPlugin public String[] getASMTransformerClass() { return new String[] { - "cpw.mods.fml.common.asm.transformers.AccessTransformer", "cpw.mods.fml.common.asm.transformers.MarkerTransformer", "cpw.mods.fml.common.asm.transformers.SideTransformer", }; diff --git a/src/main/resources/fml_at.cfg b/src/main/resources/fml_at.cfg index 79637f56eb..7ecd66091c 100644 --- a/src/main/resources/fml_at.cfg +++ b/src/main/resources/fml_at.cfg @@ -1,34 +1,34 @@ #Main FML Access Transformer configuration file # TileEntity addMapping -public net.minecraft.tileentity.TileEntity.func_145826_a(Ljava/lang/Class;Ljava/lang/String;)V +public net.minecraft.tileentity.TileEntity func_145826_a(Ljava/lang/Class;Ljava/lang/String;)V # EntityList addMappings -public net.minecraft.entity.EntityList.func_75618_a(Ljava/lang/Class;Ljava/lang/String;I)V -public net.minecraft.entity.EntityList.func_75614_a(Ljava/lang/Class;Ljava/lang/String;III)V -public net.minecraft.entity.EntityList.field_75625_b #nameToClassMap -public net.minecraft.entity.EntityList.field_75626_c #classToNameMap -public net.minecraft.entity.EntityList.field_75623_d #idToClassMap +public net.minecraft.entity.EntityList func_75618_a(Ljava/lang/Class;Ljava/lang/String;I)V +public net.minecraft.entity.EntityList func_75614_a(Ljava/lang/Class;Ljava/lang/String;III)V +public net.minecraft.entity.EntityList field_75625_b #nameToClassMap +public net.minecraft.entity.EntityList field_75626_c #classToNameMap +public net.minecraft.entity.EntityList field_75623_d #idToClassMap ## RenderEngine ##public bba.h #FD:RenderEngine/field_78367_h #textureList # -- MISSING MAPPING # -- MISSING MAPPING ##public bge.g #FD:RenderEngine/field_78366_k #texturePack # -- MISSING MAPPING ## RenderManager -public net.minecraft.client.renderer.entity.RenderManager/field_78729_o #renderers +public net.minecraft.client.renderer.entity.RenderManager field_78729_o #renderers ## RenderBlocks - everything #public bfr.* #FD:RenderBlocks/* #public bfr.*() #MD:RenderBlocks/* ##RenderPlayer ##public-f bht.h #FD:RenderPlayer/field_77110_j #armorlist # -- MISSING MAPPING ##RenderBiped -public-f net.minecraft.client.renderer.entity.RenderBiped.field_82424_k #armorlist +public-f net.minecraft.client.renderer.entity.RenderBiped field_82424_k #armorlist ##StringTranslate ##public bp.b #FD:StringTranslate/field_74815_b # -- MISSING MAPPING ##public bp.e #FD:StringTranslate/field_74813_d # -- MISSING MAPPING ## TileEntityRendererDispatcher -public net.minecraft.client.renderer.tileentity.TileEntityRendererDispatcher.field_147559_m +public net.minecraft.client.renderer.tileentity.TileEntityRendererDispatcher field_147559_m ## CraftingManager - make the add recipe methods public -public net.minecraft.item.crafting.CraftingManager.func_92103_a(Lnet.minecraft.item.ItemStack;[Ljava/lang/Object;)Lnet.minecraft.item.crafting.ShapedRecipes; -public net.minecraft.item.crafting.CraftingManager.func_77596_b(Lnet.minecraft.item.ItemStack;[Ljava/lang/Object;)V +public net.minecraft.item.crafting.CraftingManager func_92103_a(Lnet.minecraft.item.ItemStack;[Ljava/lang/Object;)Lnet.minecraft.item.crafting.ShapedRecipes; +public net.minecraft.item.crafting.CraftingManager func_77596_b(Lnet.minecraft.item.ItemStack;[Ljava/lang/Object;)V ## WeightedRandomItem -public net.minecraft.util.WeightedRandom$Item.field_76292_a #probability +public net.minecraft.util.WeightedRandom$Item field_76292_a #probability ## ItemStack ##public+f tv.c #FD:ItemStack/field_77993_c #itemId ## StatBase @@ -37,8 +37,8 @@ public net.minecraft.util.WeightedRandom$Item.field_76292_a #probability #public jy.a(Ljy;Z)Z #MD:NetLoginHandler/func_72531_a #'complete connection' #public jy.g #FD:NetLoginHandler/field_72543_h #userName ## EntityPlayerMP getNextWindowId -public net.minecraft.entity.player.EntityPlayerMP.func_71117_bO()V -public net.minecraft.entity.player.EntityPlayerMP.field_71139_cq +public net.minecraft.entity.player.EntityPlayerMP func_71117_bO()V +public net.minecraft.entity.player.EntityPlayerMP field_71139_cq ## EntityAITaskEntry #public pu #CL:EntityAITaskEntry ## EntityAITasks @@ -65,17 +65,17 @@ public net.minecraft.entity.player.EntityPlayerMP.field_71139_cq ## StructureStart #public aiv.a #FD:StructureStart/field_75075_a ## EntityVillager - minmax lists -public net.minecraft.entity.passive.EntityVillager.func_146091_a(Lnet/minecraft/village/MerchantRecipeList;Lnet/minecraft/item/Item;Ljava/util/Random;F)V # buy -public net.minecraft.entity.passive.EntityVillager.func_146089_b(Lnet/minecraft/village/MerchantRecipeList;Lnet/minecraft/item/Item;Ljava/util/Random;F)V # sell -public net.minecraft.entity.passive.EntityVillager.field_70958_bB -public net.minecraft.entity.passive.EntityVillager.field_70960_bC +public net.minecraft.entity.passive.EntityVillager func_146091_a(Lnet/minecraft/village/MerchantRecipeList;Lnet/minecraft/item/Item;Ljava/util/Random;F)V # buy +public net.minecraft.entity.passive.EntityVillager func_146089_b(Lnet/minecraft/village/MerchantRecipeList;Lnet/minecraft/item/Item;Ljava/util/Random;F)V # sell +public net.minecraft.entity.passive.EntityVillager field_70958_bB +public net.minecraft.entity.passive.EntityVillager field_70960_bC ## GuiButtonMerchant #public axx #CL:GuiButtonMerchant # Minecraft #public atv.D #FD:Minecraft/field_71425_J #running -public net.minecraft.client.Minecraft.field_71446_o # textureManager +public net.minecraft.client.Minecraft field_71446_o # textureManager -protected net.minecraft.util.ObjectIntIdentityMap.field_148749_a # internal map -protected net.minecraft.util.ObjectIntIdentityMap.field_148748_b # internal index list -protected-f net.minecraft.util.RegistryNamespaced.field_148759_a # identitymap -protected net.minecraft.util.RegistryNamespaced.func_148755_c(Ljava/lang/String;)Ljava/lang/String; # prefix if necessary +protected net.minecraft.util.ObjectIntIdentityMap field_148749_a # internal map +protected net.minecraft.util.ObjectIntIdentityMap field_148748_b # internal index list +protected-f net.minecraft.util.RegistryNamespaced field_148759_a # identitymap +protected net.minecraft.util.RegistryNamespaced func_148755_c(Ljava/lang/String;)Ljava/lang/String; # prefix if necessary