diff options
Diffstat (limited to 'src/main/java/gtPlusPlus/preloader/asm')
12 files changed, 1168 insertions, 2069 deletions
diff --git a/src/main/java/gtPlusPlus/preloader/asm/AsmConfig.java b/src/main/java/gtPlusPlus/preloader/asm/AsmConfig.java index 35684c267a..8cdc772c39 100644 --- a/src/main/java/gtPlusPlus/preloader/asm/AsmConfig.java +++ b/src/main/java/gtPlusPlus/preloader/asm/AsmConfig.java @@ -13,7 +13,6 @@ import gtPlusPlus.preloader.Preloader_Logger; public class AsmConfig { - public static boolean loaded; public static Configuration config; public static boolean enableOreDictPatch; @@ -30,16 +29,14 @@ public class AsmConfig { public static boolean disableAllLogging; public static boolean debugMode; - public AsmConfig(File file) { - if (!loaded) { - config = new Configuration(file); - syncConfig(true); - } + static { + config = new Configuration(new File("config/GTplusplus/asm.cfg")); + syncConfig(true); } public static void syncConfig(boolean load) { - ArrayList<String> propOrder = new ArrayList<String>(); - ArrayList<String> propOrderDebug = new ArrayList<String>(); + ArrayList<String> propOrder = new ArrayList<>(); + ArrayList<String> propOrderDebug = new ArrayList<>(); try { if (!config.isChild && load) { diff --git a/src/main/java/gtPlusPlus/preloader/asm/ClassesToTransform.java b/src/main/java/gtPlusPlus/preloader/asm/ClassesToTransform.java deleted file mode 100644 index d2a03b2522..0000000000 --- a/src/main/java/gtPlusPlus/preloader/asm/ClassesToTransform.java +++ /dev/null @@ -1,37 +0,0 @@ -package gtPlusPlus.preloader.asm; - -public class ClassesToTransform { - - public static final String LWJGL_KEYBOARD = "org.lwjgl.input.Keyboard"; - - public static final String MINECRAFT_GAMESETTINGS = "net.minecraft.client.settings.GameSettings"; - public static final String MINECRAFT_GAMESETTINGS_OBF = "bbj"; - - public static final String FORGE_CHUNK_MANAGER = "net.minecraftforge.common.ForgeChunkManager"; - public static final String FORGE_ORE_DICTIONARY = "net.minecraftforge.oredict.OreDictionary"; - - public static final String COFH_ORE_DICTIONARY_ARBITER = "cofh.core.util.oredict.OreDictionaryArbiter"; - - public static final String THAUMCRAFT_ITEM_WISP_ESSENCE = "thaumcraft.common.items.ItemWispEssence"; - public static final String THAUMCRAFT_CRAFTING_MANAGER = "thaumcraft.common.lib.crafting.ThaumcraftCraftingManager"; - public static final String THAUMCRAFT_TILE_ALCHEMY_FURNACE = "thaumcraft.common.tiles.TileAlchemyFurnace"; - public static final String THAUMICTINKERER_TILE_REPAIRER = "thaumic.tinkerer.common.block.tile.TileRepairer"; - - public static final String IC2_ITEM_ARMOUR_HAZMAT = "ic2.core.item.armor.ItemArmorHazmat"; - public static final String IC2_BLOCK_BASE_TILE_ENTITY = "ic2.core.block.BlockTileEntity"; - public static final String IC2_BLOCK_MACHINE1 = "ic2.core.block.machine.BlockMachine"; - public static final String IC2_BLOCK_MACHINE2 = "ic2.core.block.machine.BlockMachine2"; - public static final String IC2_BLOCK_MACHINE3 = "ic2.core.block.machine.BlockMachine3"; - public static final String IC2_BLOCK_KINETIC_GENERATOR = "ic2.core.block.kineticgenerator.block.BlockKineticGenerator"; - public static final String IC2_BLOCK_HEAT_GENERATOR = "ic2.core.block.heatgenerator.block.BlockHeatGenerator"; - public static final String IC2_BLOCK_GENERATOR = "ic2.core.block.generator.block.BlockGenerator"; - public static final String IC2_BLOCK_REACTOR_ACCESS_HATCH = "ic2.core.block.reactor.block.BlockReactorAccessHatch"; - public static final String IC2_BLOCK_REACTOR_CHAMBER = "ic2.core.block.reactor.block.BlockReactorChamber"; - public static final String IC2_BLOCK_REACTOR_FLUID_PORT = "ic2.core.block.reactor.block.BlockReactorFluidPort"; - public static final String IC2_BLOCK_REACTOR_REDSTONE_PORT = "ic2.core.block.reactor.block.BlockReactorRedstonePort"; - public static final String IC2_BLOCK_REACTOR_VESSEL = "ic2.core.block.reactor.block.BlockReactorVessel"; - public static final String IC2_BLOCK_PERSONAL = "ic2.core.block.personal.BlockPersonal.class"; - public static final String IC2_BLOCK_CHARGEPAD = "ic2.core.block.wiring.BlockChargepad.class"; - public static final String IC2_BLOCK_ELECTRIC = "ic2.core.block.wiring.BlockElectric.class"; - public static final String IC2_BLOCK_LUMINATOR = "ic2.core.block.wiring.BlockLuminator.class"; -} diff --git a/src/main/java/gtPlusPlus/preloader/asm/Preloader_DummyContainer.java b/src/main/java/gtPlusPlus/preloader/asm/Preloader_DummyContainer.java index 41cba8d85b..b157424e6e 100644 --- a/src/main/java/gtPlusPlus/preloader/asm/Preloader_DummyContainer.java +++ b/src/main/java/gtPlusPlus/preloader/asm/Preloader_DummyContainer.java @@ -4,7 +4,7 @@ import static gregtech.api.enums.Mods.GTPlusPlus; import static gregtech.api.enums.Mods.GregTech; import java.io.File; -import java.util.Arrays; +import java.util.Collections; import net.minecraftforge.common.config.Configuration; @@ -14,9 +14,6 @@ import com.google.common.eventbus.Subscribe; import cpw.mods.fml.common.DummyModContainer; import cpw.mods.fml.common.LoadController; import cpw.mods.fml.common.ModMetadata; -import cpw.mods.fml.common.event.FMLConstructionEvent; -import cpw.mods.fml.common.event.FMLInitializationEvent; -import cpw.mods.fml.common.event.FMLPostInitializationEvent; import cpw.mods.fml.common.event.FMLPreInitializationEvent; import gtPlusPlus.preloader.CORE_Preloader; import gtPlusPlus.preloader.Preloader_Logger; @@ -30,15 +27,9 @@ public class Preloader_DummyContainer extends DummyModContainer { meta.name = CORE_Preloader.NAME; meta.version = CORE_Preloader.VERSION; meta.credits = "Roll Credits ..."; - meta.authorList = Arrays.asList("Alkalus"); - meta.description = ""; - meta.url = ""; - meta.updateUrl = ""; + meta.authorList = Collections.singletonList("Alkalus"); meta.screenshots = new String[0]; - meta.logoFile = ""; meta.parent = GTPlusPlus.ID; - // meta.dependencies = (List<ArtifactVersion>) CORE_Preloader.DEPENDENCIES; - Preloader_Logger.INFO("Initializing DummyModContainer"); } @Override @@ -48,27 +39,12 @@ public class Preloader_DummyContainer extends DummyModContainer { } @Subscribe - public void modConstruction(FMLConstructionEvent evt) { - Preloader_Logger.INFO("Constructing DummyModContainer"); - } - - @Subscribe public void preInit(FMLPreInitializationEvent event) { Preloader_Logger.INFO("Loading " + CORE_Preloader.MODID + " V" + CORE_Preloader.VERSION); // Handle GT++ Config handleConfigFile(event); } - @Subscribe - public void init(FMLInitializationEvent evt) { - Preloader_Logger.INFO("Begin resource allocation for " + CORE_Preloader.MODID + " V" + CORE_Preloader.VERSION); - } - - @Subscribe - public void postInit(FMLPostInitializationEvent evt) { - Preloader_Logger.INFO("Finished loading."); - } - public static void handleConfigFile(final FMLPreInitializationEvent event) { final Configuration config = new Configuration( new File(event.getModConfigurationDirectory(), "GTplusplus/GTplusplus.cfg")); @@ -91,29 +67,4 @@ public class Preloader_DummyContainer extends DummyModContainer { "Restores circuits and their recipes from Pre-5.09.28 times."); } - public static boolean getConfig() { - final Configuration config = new Configuration( - new File(gtPlusPlus.preloader.CORE_Preloader.MC_DIR, "config/GTplusplus/GTplusplus.cfg")); - if (config != null) { - config.load(); - // Circuits - CORE_Preloader.enableOldGTcircuits = config.getBoolean( - "enableOldGTcircuits", - GregTech.ID, - false, - "Restores circuits and their recipes from Pre-5.09.28 times."); - CORE_Preloader.enableWatchdogBGM = config.getInt( - "enableWatchdogBGM", - "features", - 0, - 0, - Short.MAX_VALUE, - "Set to a value greater than 0 to reduce the ticks taken to delay between BGM tracks. Acceptable Values are 1-32767, where 0 is disabled. Vanilla Uses 12,000 & 24,000. 200 is 10s."); - - Preloader_Logger.INFO("Loaded the configuration file."); - return true; - } - Preloader_Logger.INFO("Failed loading the configuration file."); - return false; - } } diff --git a/src/main/java/gtPlusPlus/preloader/asm/Preloader_FMLLoadingPlugin.java b/src/main/java/gtPlusPlus/preloader/asm/Preloader_FMLLoadingPlugin.java index 16095d00e4..cdd25bb268 100644 --- a/src/main/java/gtPlusPlus/preloader/asm/Preloader_FMLLoadingPlugin.java +++ b/src/main/java/gtPlusPlus/preloader/asm/Preloader_FMLLoadingPlugin.java @@ -1,18 +1,12 @@ package gtPlusPlus.preloader.asm; import java.io.File; -import java.text.NumberFormat; -import java.util.Locale; import java.util.Map; -import net.minecraft.launchwrapper.Launch; - import cpw.mods.fml.relauncher.IFMLLoadingPlugin; import cpw.mods.fml.relauncher.IFMLLoadingPlugin.MCVersion; import cpw.mods.fml.relauncher.IFMLLoadingPlugin.SortingIndex; -import gtPlusPlus.core.util.reflect.ReflectionUtils; import gtPlusPlus.preloader.CORE_Preloader; -import gtPlusPlus.preloader.Preloader_Logger; import gtPlusPlus.preloader.asm.transformers.Preloader_Transformer_Handler; @SortingIndex(10097) @@ -21,12 +15,6 @@ import gtPlusPlus.preloader.asm.transformers.Preloader_Transformer_Handler; @IFMLLoadingPlugin.Name(CORE_Preloader.NAME) public class Preloader_FMLLoadingPlugin implements IFMLLoadingPlugin { - // -Dfml.coreMods.load=gtPlusPlus.preloader.asm.Preloader_FMLLoadingPlugin - - static { - Preloader_Logger.INFO("Initializing IFMLLoadingPlugin"); - } - @Override public String getAccessTransformerClass() { return null; @@ -34,61 +22,26 @@ public class Preloader_FMLLoadingPlugin implements IFMLLoadingPlugin { @Override public String[] getASMTransformerClass() { - // This will return the name of the class return new String[] { Preloader_Transformer_Handler.class.getName() }; } @Override public String getModContainerClass() { - // This is the name of our dummy container return Preloader_DummyContainer.class.getName(); } @Override public String getSetupClass() { - // return Preloader_SetupClass.class.getName(); return null; } @Override public void injectData(Map<String, Object> data) { - boolean isDeObf = (boolean) data.get("runtimeDeobfuscationEnabled"); + CORE_Preloader.DEV_ENVIRONMENT = !(boolean) data.get("runtimeDeobfuscationEnabled"); File mcDir = (File) data.get("mcLocation"); - // LaunchClassLoader classLoader = (LaunchClassLoader) data.get("classLoader"); - File coremodLocation = (File) data.get("coremodLocation"); - String deobfuscationFileName = (String) data.get("deobfuscationFileName"); if (mcDir != null && mcDir.exists()) { CORE_Preloader.setMinecraftDirectory(mcDir); - Preloader_Logger.INFO("Set McDir via Preloader_SetupClass"); - } - Preloader_Logger.INFO("runtimeDeobfuscationEnabled: " + isDeObf); - Preloader_Logger.INFO("deobfuscationFileName: " + deobfuscationFileName); - if (coremodLocation != null && coremodLocation.exists()) { - Preloader_Logger.INFO("coremodLocation: " + coremodLocation.getPath()); - } else { - Preloader_Logger.INFO("coremodLocation: null"); - Preloader_Logger.ERROR("Unable to determine CoreMod location"); } - CORE_Preloader.DEV_ENVIRONMENT = (Boolean) Launch.blackboard.get("fml.deobfuscatedEnvironment"); CORE_Preloader.DEBUG_MODE = AsmConfig.debugMode; - Preloader_Logger.INFO( - "Running on " + gtPlusPlus.preloader.CORE_Preloader.JAVA_VERSION - + " | Development Environment: " - + CORE_Preloader.DEV_ENVIRONMENT); - // Preloader_Logger.INFO("Is Client? "+Utils.isClient()+" | Is Server? "+Utils.isServer()); - Locale aDefaultLocale = Locale.getDefault(); - NumberFormat aFormat = NumberFormat.getInstance(); - Locale aDisplayLocale = ReflectionUtils - .getFieldValue(ReflectionUtils.getField(Locale.class, "defaultDisplayLocale")); - Locale aFormatLocale = ReflectionUtils - .getFieldValue(ReflectionUtils.getField(Locale.class, "defaultFormatLocale")); - Preloader_Logger.INFO( - "Locale: " + aDefaultLocale - + " | Test: " - + aFormat.format(1000000000) - + " | Display: " - + aDisplayLocale - + " | Format: " - + aFormatLocale); } } diff --git a/src/main/java/gtPlusPlus/preloader/asm/Preloader_SetupClass.java b/src/main/java/gtPlusPlus/preloader/asm/Preloader_SetupClass.java deleted file mode 100644 index 28f28e783b..0000000000 --- a/src/main/java/gtPlusPlus/preloader/asm/Preloader_SetupClass.java +++ /dev/null @@ -1,18 +0,0 @@ -package gtPlusPlus.preloader.asm; - -import java.util.Map; - -import cpw.mods.fml.relauncher.IFMLCallHook; -import gtPlusPlus.preloader.Preloader_Logger; - -public class Preloader_SetupClass implements IFMLCallHook { - - @Override - public Void call() throws Exception { - Preloader_Logger.INFO("Executing IFMLCallHook"); - return null; - } - - @Override - public void injectData(Map<String, Object> data) {} -} diff --git a/src/main/java/gtPlusPlus/preloader/asm/transformers/ClassTransformer_COFH_OreDictionaryArbiter.java b/src/main/java/gtPlusPlus/preloader/asm/transformers/ClassTransformer_COFH_OreDictionaryArbiter.java index 29998800a0..84fecda974 100644 --- a/src/main/java/gtPlusPlus/preloader/asm/transformers/ClassTransformer_COFH_OreDictionaryArbiter.java +++ b/src/main/java/gtPlusPlus/preloader/asm/transformers/ClassTransformer_COFH_OreDictionaryArbiter.java @@ -29,7 +29,6 @@ import cpw.mods.fml.relauncher.FMLRelaunchLog; import gnu.trove.map.TMap; import gnu.trove.map.hash.THashMap; import gtPlusPlus.core.util.reflect.ReflectionUtils; -import gtPlusPlus.preloader.DevHelper; public class ClassTransformer_COFH_OreDictionaryArbiter { @@ -75,14 +74,7 @@ public class ClassTransformer_COFH_OreDictionaryArbiter { public void injectMethod(String aMethodName) { - boolean isObfuscated; - try { - isObfuscated = Class.forName("net.minecraft.item.ItemStack") != null ? false : true; - } catch (ClassNotFoundException e) { - isObfuscated = true; - } - String aItemStack = isObfuscated ? DevHelper.getObfuscated("net/minecraft/item/ItemStack") - : "net/minecraft/item/ItemStack"; + String aItemStack = "net/minecraft/item/ItemStack"; MethodVisitor mv; if (aMethodName.equals("registerOreDictionaryEntry")) { FMLRelaunchLog.log( @@ -158,9 +150,9 @@ public class ClassTransformer_COFH_OreDictionaryArbiter { .getField(OreDictionaryArbiter.class, "stackNames").get(null); } catch (Throwable t) { oreIDs = HashBiMap.create(); - oreStacks = new THashMap<Integer, ArrayList<ItemStack>>(); - stackIDs = new THashMap<ItemWrapper, ArrayList<Integer>>(); - stackNames = new THashMap<ItemWrapper, ArrayList<String>>(); + oreStacks = new THashMap<>(); + stackIDs = new THashMap<>(); + stackNames = new THashMap<>(); } } @@ -173,13 +165,13 @@ public class ClassTransformer_COFH_OreDictionaryArbiter { int arg1 = OreDictionary.getOreID(arg0); oreIDs.put(arg0, Integer.valueOf(arg1)); if (!oreStacks.containsKey(Integer.valueOf(arg1))) { - oreStacks.put(Integer.valueOf(arg1), new ArrayList<ItemStack>()); + oreStacks.put(Integer.valueOf(arg1), new ArrayList<>()); } ((ArrayList<ItemStack>) oreStacks.get(Integer.valueOf(arg1))).add(arg); ItemWrapper arg2 = ItemWrapper.fromItemStack(arg); if (!stackIDs.containsKey(arg2)) { - stackIDs.put(arg2, new ArrayList<Integer>()); - stackNames.put(arg2, new ArrayList<String>()); + stackIDs.put(arg2, new ArrayList<>()); + stackNames.put(arg2, new ArrayList<>()); } ((ArrayList<Integer>) stackIDs.get(arg2)).add(Integer.valueOf(arg1)); ((ArrayList<String>) stackNames.get(arg2)).add(arg0); diff --git a/src/main/java/gtPlusPlus/preloader/asm/transformers/ClassTransformer_Forge_ChunkLoading.java b/src/main/java/gtPlusPlus/preloader/asm/transformers/ClassTransformer_Forge_ChunkLoading.java index cda4384f7d..9b6ec4bb25 100644 --- a/src/main/java/gtPlusPlus/preloader/asm/transformers/ClassTransformer_Forge_ChunkLoading.java +++ b/src/main/java/gtPlusPlus/preloader/asm/transformers/ClassTransformer_Forge_ChunkLoading.java @@ -50,7 +50,6 @@ import org.objectweb.asm.Label; import org.objectweb.asm.MethodVisitor; import cpw.mods.fml.relauncher.FMLRelaunchLog; -import gtPlusPlus.preloader.DevHelper; public class ClassTransformer_Forge_ChunkLoading { @@ -71,8 +70,8 @@ public class ClassTransformer_Forge_ChunkLoading { public ClassTransformer_Forge_ChunkLoading(byte[] basicClass, boolean obfuscated) { - ClassReader aTempReader = null; - ClassWriter aTempWriter = null; + ClassReader aTempReader; + ClassWriter aTempWriter; aTempReader = new ClassReader(basicClass); aTempWriter = new ClassWriter(aTempReader, ClassWriter.COMPUTE_FRAMES); @@ -88,11 +87,9 @@ public class ClassTransformer_Forge_ChunkLoading { if (reader != null && writer != null && !doesMethodAlreadyExist) { - aChunkCoordIntPair = obfuscated ? DevHelper.getObfuscated("net/minecraft/world/ChunkCoordIntPair") - : "net/minecraft/world/ChunkCoordIntPair"; - aWorld = obfuscated ? DevHelper.getObfuscated("net/minecraft/world/World") : "net/minecraft/world/World"; - aEntity = obfuscated ? DevHelper.getObfuscated("net/minecraft/entity/Entity") - : "net/minecraft/entity/Entity"; + aChunkCoordIntPair = "net/minecraft/world/ChunkCoordIntPair"; + aWorld = "net/minecraft/world/World"; + aEntity = "net/minecraft/entity/Entity"; injectMethod("forceChunk"); injectMethod("unforceChunk"); @@ -101,14 +98,6 @@ public class ClassTransformer_Forge_ChunkLoading { } } - public boolean isValidTransformer() { - return isValid; - } - - public ClassReader getReader() { - return reader; - } - public ClassWriter getWriter() { return writer; } @@ -119,993 +108,1115 @@ public class ClassTransformer_Forge_ChunkLoading { "[GT++ ASM] Chunkloading Patch", Level.INFO, "Injecting " + aMethodName + " into " + className + "."); - if (aMethodName.equals("forceChunk")) { + switch (aMethodName) { + case "forceChunk" -> { - mv = getWriter().visitMethod( - ACC_PUBLIC + ACC_STATIC, - "forceChunk", - "(Lnet/minecraftforge/common/ForgeChunkManager$Ticket;L" + aChunkCoordIntPair + ";)V", - null, - null); - mv.visitCode(); - Label l0 = new Label(); - mv.visitLabel(l0); - mv.visitLineNumber(730, l0); - mv.visitVarInsn(ALOAD, 0); - Label l1 = new Label(); - mv.visitJumpInsn(IFNULL, l1); - mv.visitVarInsn(ALOAD, 1); - Label l2 = new Label(); - mv.visitJumpInsn(IFNONNULL, l2); - mv.visitLabel(l1); - mv.visitLineNumber(732, l1); - mv.visitFrame(F_SAME, 0, null, 0, null); - mv.visitInsn(RETURN); - mv.visitLabel(l2); - mv.visitLineNumber(734, l2); - mv.visitFrame(F_SAME, 0, null, 0, null); - mv.visitVarInsn(ALOAD, 0); - mv.visitMethodInsn( - INVOKESTATIC, - "net/minecraftforge/common/ForgeChunkManager$Ticket", - "access$500", - "(Lnet/minecraftforge/common/ForgeChunkManager$Ticket;)Lnet/minecraftforge/common/ForgeChunkManager$Type;", - false); - mv.visitFieldInsn( - GETSTATIC, - "net/minecraftforge/common/ForgeChunkManager$Type", - "ENTITY", - "Lnet/minecraftforge/common/ForgeChunkManager$Type;"); - Label l3 = new Label(); - mv.visitJumpInsn(IF_ACMPNE, l3); - mv.visitVarInsn(ALOAD, 0); - mv.visitMethodInsn( - INVOKESTATIC, - "net/minecraftforge/common/ForgeChunkManager$Ticket", - "access$600", - "(Lnet/minecraftforge/common/ForgeChunkManager$Ticket;)L" + aEntity + ";", - false); - mv.visitJumpInsn(IFNONNULL, l3); - Label l4 = new Label(); - mv.visitLabel(l4); - mv.visitLineNumber(736, l4); - mv.visitTypeInsn(NEW, "java/lang/RuntimeException"); - mv.visitInsn(DUP); - mv.visitLdcInsn("Attempted to use an entity ticket to force a chunk, without an entity"); - mv.visitMethodInsn(INVOKESPECIAL, "java/lang/RuntimeException", "<init>", "(Ljava/lang/String;)V", false); - mv.visitInsn(ATHROW); - mv.visitLabel(l3); - mv.visitLineNumber(738, l3); - mv.visitFrame(F_SAME, 0, null, 0, null); - mv.visitVarInsn(ALOAD, 0); - mv.visitMethodInsn( - INVOKEVIRTUAL, - "net/minecraftforge/common/ForgeChunkManager$Ticket", - "isPlayerTicket", - "()Z", - false); - Label l5 = new Label(); - mv.visitJumpInsn(IFEQ, l5); - mv.visitFieldInsn( - GETSTATIC, - "net/minecraftforge/common/ForgeChunkManager", - "playerTickets", - "Lcom/google/common/collect/SetMultimap;"); - mv.visitVarInsn(ALOAD, 0); - mv.visitMethodInsn( - INVOKEINTERFACE, - "com/google/common/collect/SetMultimap", - "containsValue", - "(Ljava/lang/Object;)Z", - true); - Label l6 = new Label(); - mv.visitJumpInsn(IFNE, l6); - Label l7 = new Label(); - mv.visitJumpInsn(GOTO, l7); - mv.visitLabel(l5); - mv.visitFrame(F_SAME, 0, null, 0, null); - mv.visitFieldInsn(GETSTATIC, "net/minecraftforge/common/ForgeChunkManager", "tickets", "Ljava/util/Map;"); - mv.visitVarInsn(ALOAD, 0); - mv.visitFieldInsn( - GETFIELD, - "net/minecraftforge/common/ForgeChunkManager$Ticket", - "world", - "L" + aWorld + ";"); - mv.visitMethodInsn(INVOKEINTERFACE, "java/util/Map", "get", "(Ljava/lang/Object;)Ljava/lang/Object;", true); - mv.visitTypeInsn(CHECKCAST, "com/google/common/collect/Multimap"); - mv.visitVarInsn(ALOAD, 0); - mv.visitMethodInsn( - INVOKESTATIC, - "net/minecraftforge/common/ForgeChunkManager$Ticket", - "access$200", - "(Lnet/minecraftforge/common/ForgeChunkManager$Ticket;)Ljava/lang/String;", - false); - mv.visitVarInsn(ALOAD, 0); - mv.visitMethodInsn( - INVOKEINTERFACE, - "com/google/common/collect/Multimap", - "containsEntry", - "(Ljava/lang/Object;Ljava/lang/Object;)Z", - true); - mv.visitJumpInsn(IFNE, l6); - mv.visitLabel(l7); - mv.visitLineNumber(740, l7); - mv.visitFrame(F_SAME, 0, null, 0, null); - mv.visitLdcInsn( - "The mod %s attempted to force load a chunk with an invalid ticket. This is not permitted."); - mv.visitInsn(ICONST_1); - mv.visitTypeInsn(ANEWARRAY, "java/lang/Object"); - mv.visitInsn(DUP); - mv.visitInsn(ICONST_0); - mv.visitVarInsn(ALOAD, 0); - mv.visitMethodInsn( - INVOKESTATIC, - "net/minecraftforge/common/ForgeChunkManager$Ticket", - "access$200", - "(Lnet/minecraftforge/common/ForgeChunkManager$Ticket;)Ljava/lang/String;", - false); - mv.visitInsn(AASTORE); - mv.visitMethodInsn( - INVOKESTATIC, - "cpw/mods/fml/common/FMLLog", - "severe", - "(Ljava/lang/String;[Ljava/lang/Object;)V", - false); - Label l8 = new Label(); - mv.visitLabel(l8); - mv.visitLineNumber(741, l8); - mv.visitInsn(RETURN); - mv.visitLabel(l6); - mv.visitLineNumber(743, l6); - mv.visitFrame(F_SAME, 0, null, 0, null); - mv.visitVarInsn(ALOAD, 0); - mv.visitMethodInsn( - INVOKESTATIC, - "net/minecraftforge/common/ForgeChunkManager$Ticket", - "access$700", - "(Lnet/minecraftforge/common/ForgeChunkManager$Ticket;)Ljava/util/LinkedHashSet;", - false); - mv.visitVarInsn(ALOAD, 1); - mv.visitMethodInsn(INVOKEVIRTUAL, "java/util/LinkedHashSet", "add", "(Ljava/lang/Object;)Z", false); - mv.visitInsn(POP); - Label l9 = new Label(); - mv.visitLabel(l9); - mv.visitLineNumber(744, l9); - mv.visitVarInsn(ALOAD, 0); - mv.visitVarInsn(ALOAD, 1); - mv.visitMethodInsn( - INVOKESTATIC, - "gtPlusPlus/preloader/ChunkDebugger", - "storeLoadChunkToCache", - "(Lnet/minecraftforge/common/ForgeChunkManager$Ticket;L" + aChunkCoordIntPair + ";)V", - false); - Label l10 = new Label(); - mv.visitLabel(l10); - mv.visitLineNumber(745, l10); - mv.visitFieldInsn( - GETSTATIC, - "net/minecraftforge/common/MinecraftForge", - "EVENT_BUS", - "Lcpw/mods/fml/common/eventhandler/EventBus;"); - mv.visitTypeInsn(NEW, "net/minecraftforge/common/ForgeChunkManager$ForceChunkEvent"); - mv.visitInsn(DUP); - mv.visitVarInsn(ALOAD, 0); - mv.visitVarInsn(ALOAD, 1); - mv.visitMethodInsn( - INVOKESPECIAL, - "net/minecraftforge/common/ForgeChunkManager$ForceChunkEvent", - "<init>", - "(Lnet/minecraftforge/common/ForgeChunkManager$Ticket;L" + aChunkCoordIntPair + ";)V", - false); - mv.visitMethodInsn( - INVOKEVIRTUAL, - "cpw/mods/fml/common/eventhandler/EventBus", - "post", - "(Lcpw/mods/fml/common/eventhandler/Event;)Z", - false); - mv.visitInsn(POP); - Label l11 = new Label(); - mv.visitLabel(l11); - mv.visitLineNumber(747, l11); - mv.visitMethodInsn( - INVOKESTATIC, - "com/google/common/collect/ImmutableSetMultimap", - "builder", - "()Lcom/google/common/collect/ImmutableSetMultimap$Builder;", - false); - mv.visitFieldInsn( - GETSTATIC, - "net/minecraftforge/common/ForgeChunkManager", - "forcedChunks", - "Ljava/util/Map;"); - mv.visitVarInsn(ALOAD, 0); - mv.visitFieldInsn( - GETFIELD, - "net/minecraftforge/common/ForgeChunkManager$Ticket", - "world", - "L" + aWorld + ";"); - mv.visitMethodInsn(INVOKEINTERFACE, "java/util/Map", "get", "(Ljava/lang/Object;)Ljava/lang/Object;", true); - mv.visitTypeInsn(CHECKCAST, "com/google/common/collect/Multimap"); - mv.visitMethodInsn( - INVOKEVIRTUAL, - "com/google/common/collect/ImmutableSetMultimap$Builder", - "putAll", - "(Lcom/google/common/collect/Multimap;)Lcom/google/common/collect/ImmutableSetMultimap$Builder;", - false); - mv.visitVarInsn(ALOAD, 1); - mv.visitVarInsn(ALOAD, 0); - mv.visitMethodInsn( - INVOKEVIRTUAL, - "com/google/common/collect/ImmutableSetMultimap$Builder", - "put", - "(Ljava/lang/Object;Ljava/lang/Object;)Lcom/google/common/collect/ImmutableSetMultimap$Builder;", - false); - mv.visitMethodInsn( - INVOKEVIRTUAL, - "com/google/common/collect/ImmutableSetMultimap$Builder", - "build", - "()Lcom/google/common/collect/ImmutableSetMultimap;", - false); - mv.visitVarInsn(ASTORE, 2); - Label l12 = new Label(); - mv.visitLabel(l12); - mv.visitLineNumber(748, l12); - mv.visitFieldInsn( - GETSTATIC, - "net/minecraftforge/common/ForgeChunkManager", - "forcedChunks", - "Ljava/util/Map;"); - mv.visitVarInsn(ALOAD, 0); - mv.visitFieldInsn( - GETFIELD, - "net/minecraftforge/common/ForgeChunkManager$Ticket", - "world", - "L" + aWorld + ";"); - mv.visitVarInsn(ALOAD, 2); - mv.visitMethodInsn( - INVOKEINTERFACE, - "java/util/Map", - "put", - "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;", - true); - mv.visitInsn(POP); - Label l13 = new Label(); - mv.visitLabel(l13); - mv.visitLineNumber(749, l13); - mv.visitVarInsn(ALOAD, 0); - mv.visitMethodInsn( - INVOKESTATIC, - "net/minecraftforge/common/ForgeChunkManager$Ticket", - "access$800", - "(Lnet/minecraftforge/common/ForgeChunkManager$Ticket;)I", - false); - Label l14 = new Label(); - mv.visitJumpInsn(IFLE, l14); - mv.visitVarInsn(ALOAD, 0); - mv.visitMethodInsn( - INVOKESTATIC, - "net/minecraftforge/common/ForgeChunkManager$Ticket", - "access$700", - "(Lnet/minecraftforge/common/ForgeChunkManager$Ticket;)Ljava/util/LinkedHashSet;", - false); - mv.visitMethodInsn(INVOKEVIRTUAL, "java/util/LinkedHashSet", "size", "()I", false); - mv.visitVarInsn(ALOAD, 0); - mv.visitMethodInsn( - INVOKESTATIC, - "net/minecraftforge/common/ForgeChunkManager$Ticket", - "access$800", - "(Lnet/minecraftforge/common/ForgeChunkManager$Ticket;)I", - false); - mv.visitJumpInsn(IF_ICMPLE, l14); - Label l15 = new Label(); - mv.visitLabel(l15); - mv.visitLineNumber(751, l15); - mv.visitVarInsn(ALOAD, 0); - mv.visitMethodInsn( - INVOKESTATIC, - "net/minecraftforge/common/ForgeChunkManager$Ticket", - "access$700", - "(Lnet/minecraftforge/common/ForgeChunkManager$Ticket;)Ljava/util/LinkedHashSet;", - false); - mv.visitMethodInsn(INVOKEVIRTUAL, "java/util/LinkedHashSet", "iterator", "()Ljava/util/Iterator;", false); - mv.visitMethodInsn(INVOKEINTERFACE, "java/util/Iterator", "next", "()Ljava/lang/Object;", true); - mv.visitTypeInsn(CHECKCAST, "" + aChunkCoordIntPair + ""); - mv.visitVarInsn(ASTORE, 3); - Label l16 = new Label(); - mv.visitLabel(l16); - mv.visitLineNumber(752, l16); - mv.visitVarInsn(ALOAD, 0); - mv.visitVarInsn(ALOAD, 3); - mv.visitMethodInsn( - INVOKESTATIC, - "net/minecraftforge/common/ForgeChunkManager", - "unforceChunk", - "(Lnet/minecraftforge/common/ForgeChunkManager$Ticket;L" + aChunkCoordIntPair + ";)V", - false); - mv.visitLabel(l14); - mv.visitLineNumber(754, l14); - mv.visitFrame(F_APPEND, 1, new Object[] { "com/google/common/collect/ImmutableSetMultimap" }, 0, null); - mv.visitInsn(RETURN); - Label l17 = new Label(); - mv.visitLabel(l17); - mv.visitLocalVariable("ticket", "Lnet/minecraftforge/common/ForgeChunkManager$Ticket;", null, l0, l17, 0); - mv.visitLocalVariable("chunk", "L" + aChunkCoordIntPair + ";", null, l0, l17, 1); - mv.visitLocalVariable( - "newMap", - "Lcom/google/common/collect/ImmutableSetMultimap;", - "Lcom/google/common/collect/ImmutableSetMultimap<L" + aChunkCoordIntPair - + ";Lnet/minecraftforge/common/ForgeChunkManager$Ticket;>;", - l12, - l17, - 2); - mv.visitLocalVariable("removed", "L" + aChunkCoordIntPair + ";", null, l16, l14, 3); - mv.visitMaxs(5, 4); - mv.visitEnd(); + mv = getWriter().visitMethod( + ACC_PUBLIC + ACC_STATIC, + "forceChunk", + "(Lnet/minecraftforge/common/ForgeChunkManager$Ticket;L" + aChunkCoordIntPair + ";)V", + null, + null); + mv.visitCode(); + Label l0 = new Label(); + mv.visitLabel(l0); + mv.visitLineNumber(730, l0); + mv.visitVarInsn(ALOAD, 0); + Label l1 = new Label(); + mv.visitJumpInsn(IFNULL, l1); + mv.visitVarInsn(ALOAD, 1); + Label l2 = new Label(); + mv.visitJumpInsn(IFNONNULL, l2); + mv.visitLabel(l1); + mv.visitLineNumber(732, l1); + mv.visitFrame(F_SAME, 0, null, 0, null); + mv.visitInsn(RETURN); + mv.visitLabel(l2); + mv.visitLineNumber(734, l2); + mv.visitFrame(F_SAME, 0, null, 0, null); + mv.visitVarInsn(ALOAD, 0); + mv.visitMethodInsn( + INVOKESTATIC, + "net/minecraftforge/common/ForgeChunkManager$Ticket", + "access$500", + "(Lnet/minecraftforge/common/ForgeChunkManager$Ticket;)Lnet/minecraftforge/common/ForgeChunkManager$Type;", + false); + mv.visitFieldInsn( + GETSTATIC, + "net/minecraftforge/common/ForgeChunkManager$Type", + "ENTITY", + "Lnet/minecraftforge/common/ForgeChunkManager$Type;"); + Label l3 = new Label(); + mv.visitJumpInsn(IF_ACMPNE, l3); + mv.visitVarInsn(ALOAD, 0); + mv.visitMethodInsn( + INVOKESTATIC, + "net/minecraftforge/common/ForgeChunkManager$Ticket", + "access$600", + "(Lnet/minecraftforge/common/ForgeChunkManager$Ticket;)L" + aEntity + ";", + false); + mv.visitJumpInsn(IFNONNULL, l3); + Label l4 = new Label(); + mv.visitLabel(l4); + mv.visitLineNumber(736, l4); + mv.visitTypeInsn(NEW, "java/lang/RuntimeException"); + mv.visitInsn(DUP); + mv.visitLdcInsn("Attempted to use an entity ticket to force a chunk, without an entity"); + mv.visitMethodInsn( + INVOKESPECIAL, + "java/lang/RuntimeException", + "<init>", + "(Ljava/lang/String;)V", + false); + mv.visitInsn(ATHROW); + mv.visitLabel(l3); + mv.visitLineNumber(738, l3); + mv.visitFrame(F_SAME, 0, null, 0, null); + mv.visitVarInsn(ALOAD, 0); + mv.visitMethodInsn( + INVOKEVIRTUAL, + "net/minecraftforge/common/ForgeChunkManager$Ticket", + "isPlayerTicket", + "()Z", + false); + Label l5 = new Label(); + mv.visitJumpInsn(IFEQ, l5); + mv.visitFieldInsn( + GETSTATIC, + "net/minecraftforge/common/ForgeChunkManager", + "playerTickets", + "Lcom/google/common/collect/SetMultimap;"); + mv.visitVarInsn(ALOAD, 0); + mv.visitMethodInsn( + INVOKEINTERFACE, + "com/google/common/collect/SetMultimap", + "containsValue", + "(Ljava/lang/Object;)Z", + true); + Label l6 = new Label(); + mv.visitJumpInsn(IFNE, l6); + Label l7 = new Label(); + mv.visitJumpInsn(GOTO, l7); + mv.visitLabel(l5); + mv.visitFrame(F_SAME, 0, null, 0, null); + mv.visitFieldInsn( + GETSTATIC, + "net/minecraftforge/common/ForgeChunkManager", + "tickets", + "Ljava/util/Map;"); + mv.visitVarInsn(ALOAD, 0); + mv.visitFieldInsn( + GETFIELD, + "net/minecraftforge/common/ForgeChunkManager$Ticket", + "world", + "L" + aWorld + ";"); + mv.visitMethodInsn( + INVOKEINTERFACE, + "java/util/Map", + "get", + "(Ljava/lang/Object;)Ljava/lang/Object;", + true); + mv.visitTypeInsn(CHECKCAST, "com/google/common/collect/Multimap"); + mv.visitVarInsn(ALOAD, 0); + mv.visitMethodInsn( + INVOKESTATIC, + "net/minecraftforge/common/ForgeChunkManager$Ticket", + "access$200", + "(Lnet/minecraftforge/common/ForgeChunkManager$Ticket;)Ljava/lang/String;", + false); + mv.visitVarInsn(ALOAD, 0); + mv.visitMethodInsn( + INVOKEINTERFACE, + "com/google/common/collect/Multimap", + "containsEntry", + "(Ljava/lang/Object;Ljava/lang/Object;)Z", + true); + mv.visitJumpInsn(IFNE, l6); + mv.visitLabel(l7); + mv.visitLineNumber(740, l7); + mv.visitFrame(F_SAME, 0, null, 0, null); + mv.visitLdcInsn( + "The mod %s attempted to force load a chunk with an invalid ticket. This is not permitted."); + mv.visitInsn(ICONST_1); + mv.visitTypeInsn(ANEWARRAY, "java/lang/Object"); + mv.visitInsn(DUP); + mv.visitInsn(ICONST_0); + mv.visitVarInsn(ALOAD, 0); + mv.visitMethodInsn( + INVOKESTATIC, + "net/minecraftforge/common/ForgeChunkManager$Ticket", + "access$200", + "(Lnet/minecraftforge/common/ForgeChunkManager$Ticket;)Ljava/lang/String;", + false); + mv.visitInsn(AASTORE); + mv.visitMethodInsn( + INVOKESTATIC, + "cpw/mods/fml/common/FMLLog", + "severe", + "(Ljava/lang/String;[Ljava/lang/Object;)V", + false); + Label l8 = new Label(); + mv.visitLabel(l8); + mv.visitLineNumber(741, l8); + mv.visitInsn(RETURN); + mv.visitLabel(l6); + mv.visitLineNumber(743, l6); + mv.visitFrame(F_SAME, 0, null, 0, null); + mv.visitVarInsn(ALOAD, 0); + mv.visitMethodInsn( + INVOKESTATIC, + "net/minecraftforge/common/ForgeChunkManager$Ticket", + "access$700", + "(Lnet/minecraftforge/common/ForgeChunkManager$Ticket;)Ljava/util/LinkedHashSet;", + false); + mv.visitVarInsn(ALOAD, 1); + mv.visitMethodInsn(INVOKEVIRTUAL, "java/util/LinkedHashSet", "add", "(Ljava/lang/Object;)Z", false); + mv.visitInsn(POP); + Label l9 = new Label(); + mv.visitLabel(l9); + mv.visitLineNumber(744, l9); + mv.visitVarInsn(ALOAD, 0); + mv.visitVarInsn(ALOAD, 1); + mv.visitMethodInsn( + INVOKESTATIC, + "gtPlusPlus/preloader/ChunkDebugger", + "storeLoadChunkToCache", + "(Lnet/minecraftforge/common/ForgeChunkManager$Ticket;L" + aChunkCoordIntPair + ";)V", + false); + Label l10 = new Label(); + mv.visitLabel(l10); + mv.visitLineNumber(745, l10); + mv.visitFieldInsn( + GETSTATIC, + "net/minecraftforge/common/MinecraftForge", + "EVENT_BUS", + "Lcpw/mods/fml/common/eventhandler/EventBus;"); + mv.visitTypeInsn(NEW, "net/minecraftforge/common/ForgeChunkManager$ForceChunkEvent"); + mv.visitInsn(DUP); + mv.visitVarInsn(ALOAD, 0); + mv.visitVarInsn(ALOAD, 1); + mv.visitMethodInsn( + INVOKESPECIAL, + "net/minecraftforge/common/ForgeChunkManager$ForceChunkEvent", + "<init>", + "(Lnet/minecraftforge/common/ForgeChunkManager$Ticket;L" + aChunkCoordIntPair + ";)V", + false); + mv.visitMethodInsn( + INVOKEVIRTUAL, + "cpw/mods/fml/common/eventhandler/EventBus", + "post", + "(Lcpw/mods/fml/common/eventhandler/Event;)Z", + false); + mv.visitInsn(POP); + Label l11 = new Label(); + mv.visitLabel(l11); + mv.visitLineNumber(747, l11); + mv.visitMethodInsn( + INVOKESTATIC, + "com/google/common/collect/ImmutableSetMultimap", + "builder", + "()Lcom/google/common/collect/ImmutableSetMultimap$Builder;", + false); + mv.visitFieldInsn( + GETSTATIC, + "net/minecraftforge/common/ForgeChunkManager", + "forcedChunks", + "Ljava/util/Map;"); + mv.visitVarInsn(ALOAD, 0); + mv.visitFieldInsn( + GETFIELD, + "net/minecraftforge/common/ForgeChunkManager$Ticket", + "world", + "L" + aWorld + ";"); + mv.visitMethodInsn( + INVOKEINTERFACE, + "java/util/Map", + "get", + "(Ljava/lang/Object;)Ljava/lang/Object;", + true); + mv.visitTypeInsn(CHECKCAST, "com/google/common/collect/Multimap"); + mv.visitMethodInsn( + INVOKEVIRTUAL, + "com/google/common/collect/ImmutableSetMultimap$Builder", + "putAll", + "(Lcom/google/common/collect/Multimap;)Lcom/google/common/collect/ImmutableSetMultimap$Builder;", + false); + mv.visitVarInsn(ALOAD, 1); + mv.visitVarInsn(ALOAD, 0); + mv.visitMethodInsn( + INVOKEVIRTUAL, + "com/google/common/collect/ImmutableSetMultimap$Builder", + "put", + "(Ljava/lang/Object;Ljava/lang/Object;)Lcom/google/common/collect/ImmutableSetMultimap$Builder;", + false); + mv.visitMethodInsn( + INVOKEVIRTUAL, + "com/google/common/collect/ImmutableSetMultimap$Builder", + "build", + "()Lcom/google/common/collect/ImmutableSetMultimap;", + false); + mv.visitVarInsn(ASTORE, 2); + Label l12 = new Label(); + mv.visitLabel(l12); + mv.visitLineNumber(748, l12); + mv.visitFieldInsn( + GETSTATIC, + "net/minecraftforge/common/ForgeChunkManager", + "forcedChunks", + "Ljava/util/Map;"); + mv.visitVarInsn(ALOAD, 0); + mv.visitFieldInsn( + GETFIELD, + "net/minecraftforge/common/ForgeChunkManager$Ticket", + "world", + "L" + aWorld + ";"); + mv.visitVarInsn(ALOAD, 2); + mv.visitMethodInsn( + INVOKEINTERFACE, + "java/util/Map", + "put", + "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;", + true); + mv.visitInsn(POP); + Label l13 = new Label(); + mv.visitLabel(l13); + mv.visitLineNumber(749, l13); + mv.visitVarInsn(ALOAD, 0); + mv.visitMethodInsn( + INVOKESTATIC, + "net/minecraftforge/common/ForgeChunkManager$Ticket", + "access$800", + "(Lnet/minecraftforge/common/ForgeChunkManager$Ticket;)I", + false); + Label l14 = new Label(); + mv.visitJumpInsn(IFLE, l14); + mv.visitVarInsn(ALOAD, 0); + mv.visitMethodInsn( + INVOKESTATIC, + "net/minecraftforge/common/ForgeChunkManager$Ticket", + "access$700", + "(Lnet/minecraftforge/common/ForgeChunkManager$Ticket;)Ljava/util/LinkedHashSet;", + false); + mv.visitMethodInsn(INVOKEVIRTUAL, "java/util/LinkedHashSet", "size", "()I", false); + mv.visitVarInsn(ALOAD, 0); + mv.visitMethodInsn( + INVOKESTATIC, + "net/minecraftforge/common/ForgeChunkManager$Ticket", + "access$800", + "(Lnet/minecraftforge/common/ForgeChunkManager$Ticket;)I", + false); + mv.visitJumpInsn(IF_ICMPLE, l14); + Label l15 = new Label(); + mv.visitLabel(l15); + mv.visitLineNumber(751, l15); + mv.visitVarInsn(ALOAD, 0); + mv.visitMethodInsn( + INVOKESTATIC, + "net/minecraftforge/common/ForgeChunkManager$Ticket", + "access$700", + "(Lnet/minecraftforge/common/ForgeChunkManager$Ticket;)Ljava/util/LinkedHashSet;", + false); + mv.visitMethodInsn( + INVOKEVIRTUAL, + "java/util/LinkedHashSet", + "iterator", + "()Ljava/util/Iterator;", + false); + mv.visitMethodInsn(INVOKEINTERFACE, "java/util/Iterator", "next", "()Ljava/lang/Object;", true); + mv.visitTypeInsn(CHECKCAST, "" + aChunkCoordIntPair + ""); + mv.visitVarInsn(ASTORE, 3); + Label l16 = new Label(); + mv.visitLabel(l16); + mv.visitLineNumber(752, l16); + mv.visitVarInsn(ALOAD, 0); + mv.visitVarInsn(ALOAD, 3); + mv.visitMethodInsn( + INVOKESTATIC, + "net/minecraftforge/common/ForgeChunkManager", + "unforceChunk", + "(Lnet/minecraftforge/common/ForgeChunkManager$Ticket;L" + aChunkCoordIntPair + ";)V", + false); + mv.visitLabel(l14); + mv.visitLineNumber(754, l14); + mv.visitFrame(F_APPEND, 1, new Object[] { "com/google/common/collect/ImmutableSetMultimap" }, 0, null); + mv.visitInsn(RETURN); + Label l17 = new Label(); + mv.visitLabel(l17); + mv.visitLocalVariable( + "ticket", + "Lnet/minecraftforge/common/ForgeChunkManager$Ticket;", + null, + l0, + l17, + 0); + mv.visitLocalVariable("chunk", "L" + aChunkCoordIntPair + ";", null, l0, l17, 1); + mv.visitLocalVariable( + "newMap", + "Lcom/google/common/collect/ImmutableSetMultimap;", + "Lcom/google/common/collect/ImmutableSetMultimap<L" + aChunkCoordIntPair + + ";Lnet/minecraftforge/common/ForgeChunkManager$Ticket;>;", + l12, + l17, + 2); + mv.visitLocalVariable("removed", "L" + aChunkCoordIntPair + ";", null, l16, l14, 3); + mv.visitMaxs(5, 4); + mv.visitEnd(); - } else if (aMethodName.equals("unforceChunk")) { + } + case "unforceChunk" -> { - mv = getWriter().visitMethod( - ACC_PUBLIC + ACC_STATIC, - "unforceChunk", - "(Lnet/minecraftforge/common/ForgeChunkManager$Ticket;L" + aChunkCoordIntPair + ";)V", - null, - null); - mv.visitCode(); - Label l0 = new Label(); - mv.visitLabel(l0); - mv.visitLineNumber(781, l0); - mv.visitVarInsn(ALOAD, 0); - Label l1 = new Label(); - mv.visitJumpInsn(IFNULL, l1); - mv.visitVarInsn(ALOAD, 1); - Label l2 = new Label(); - mv.visitJumpInsn(IFNONNULL, l2); - mv.visitLabel(l1); - mv.visitLineNumber(783, l1); - mv.visitFrame(F_SAME, 0, null, 0, null); - mv.visitInsn(RETURN); - mv.visitLabel(l2); - mv.visitLineNumber(785, l2); - mv.visitFrame(F_SAME, 0, null, 0, null); - mv.visitVarInsn(ALOAD, 0); - mv.visitMethodInsn( - INVOKESTATIC, - "net/minecraftforge/common/ForgeChunkManager$Ticket", - "access$700", - "(Lnet/minecraftforge/common/ForgeChunkManager$Ticket;)Ljava/util/LinkedHashSet;", - false); - mv.visitVarInsn(ALOAD, 1); - mv.visitMethodInsn(INVOKEVIRTUAL, "java/util/LinkedHashSet", "remove", "(Ljava/lang/Object;)Z", false); - mv.visitInsn(POP); - Label l3 = new Label(); - mv.visitLabel(l3); - mv.visitLineNumber(786, l3); - mv.visitVarInsn(ALOAD, 1); - mv.visitMethodInsn( - INVOKESTATIC, - "gtPlusPlus/preloader/ChunkDebugger", - "removeLoadedChunkFromCache", - "(L" + aChunkCoordIntPair + ";)V", - false); - Label l4 = new Label(); - mv.visitLabel(l4); - mv.visitLineNumber(787, l4); - mv.visitFieldInsn( - GETSTATIC, - "net/minecraftforge/common/MinecraftForge", - "EVENT_BUS", - "Lcpw/mods/fml/common/eventhandler/EventBus;"); - mv.visitTypeInsn(NEW, "net/minecraftforge/common/ForgeChunkManager$UnforceChunkEvent"); - mv.visitInsn(DUP); - mv.visitVarInsn(ALOAD, 0); - mv.visitVarInsn(ALOAD, 1); - mv.visitMethodInsn( - INVOKESPECIAL, - "net/minecraftforge/common/ForgeChunkManager$UnforceChunkEvent", - "<init>", - "(Lnet/minecraftforge/common/ForgeChunkManager$Ticket;L" + aChunkCoordIntPair + ";)V", - false); - mv.visitMethodInsn( - INVOKEVIRTUAL, - "cpw/mods/fml/common/eventhandler/EventBus", - "post", - "(Lcpw/mods/fml/common/eventhandler/Event;)Z", - false); - mv.visitInsn(POP); - Label l5 = new Label(); - mv.visitLabel(l5); - mv.visitLineNumber(788, l5); - mv.visitFieldInsn( - GETSTATIC, - "net/minecraftforge/common/ForgeChunkManager", - "forcedChunks", - "Ljava/util/Map;"); - mv.visitVarInsn(ALOAD, 0); - mv.visitFieldInsn( - GETFIELD, - "net/minecraftforge/common/ForgeChunkManager$Ticket", - "world", - "L" + aWorld + ";"); - mv.visitMethodInsn(INVOKEINTERFACE, "java/util/Map", "get", "(Ljava/lang/Object;)Ljava/lang/Object;", true); - mv.visitTypeInsn(CHECKCAST, "com/google/common/collect/Multimap"); - mv.visitMethodInsn( - INVOKESTATIC, - "com/google/common/collect/LinkedHashMultimap", - "create", - "(Lcom/google/common/collect/Multimap;)Lcom/google/common/collect/LinkedHashMultimap;", - false); - mv.visitVarInsn(ASTORE, 2); - Label l6 = new Label(); - mv.visitLabel(l6); - mv.visitLineNumber(789, l6); - mv.visitVarInsn(ALOAD, 2); - mv.visitVarInsn(ALOAD, 1); - mv.visitVarInsn(ALOAD, 0); - mv.visitMethodInsn( - INVOKEVIRTUAL, - "com/google/common/collect/LinkedHashMultimap", - "remove", - "(Ljava/lang/Object;Ljava/lang/Object;)Z", - false); - mv.visitInsn(POP); - Label l7 = new Label(); - mv.visitLabel(l7); - mv.visitLineNumber(790, l7); - mv.visitVarInsn(ALOAD, 2); - mv.visitMethodInsn( - INVOKESTATIC, - "com/google/common/collect/ImmutableSetMultimap", - "copyOf", - "(Lcom/google/common/collect/Multimap;)Lcom/google/common/collect/ImmutableSetMultimap;", - false); - mv.visitVarInsn(ASTORE, 3); - Label l8 = new Label(); - mv.visitLabel(l8); - mv.visitLineNumber(791, l8); - mv.visitFieldInsn( - GETSTATIC, - "net/minecraftforge/common/ForgeChunkManager", - "forcedChunks", - "Ljava/util/Map;"); - mv.visitVarInsn(ALOAD, 0); - mv.visitFieldInsn( - GETFIELD, - "net/minecraftforge/common/ForgeChunkManager$Ticket", - "world", - "L" + aWorld + ";"); - mv.visitVarInsn(ALOAD, 3); - mv.visitMethodInsn( - INVOKEINTERFACE, - "java/util/Map", - "put", - "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;", - true); - mv.visitInsn(POP); - Label l9 = new Label(); - mv.visitLabel(l9); - mv.visitLineNumber(792, l9); - mv.visitInsn(RETURN); - Label l10 = new Label(); - mv.visitLabel(l10); - mv.visitLocalVariable("ticket", "Lnet/minecraftforge/common/ForgeChunkManager$Ticket;", null, l0, l10, 0); - mv.visitLocalVariable("chunk", "L" + aChunkCoordIntPair + ";", null, l0, l10, 1); - mv.visitLocalVariable( - "copy", - "Lcom/google/common/collect/LinkedHashMultimap;", - "Lcom/google/common/collect/LinkedHashMultimap<L" + aChunkCoordIntPair - + ";Lnet/minecraftforge/common/ForgeChunkManager$Ticket;>;", - l6, - l10, - 2); - mv.visitLocalVariable( - "newMap", - "Lcom/google/common/collect/ImmutableSetMultimap;", - "Lcom/google/common/collect/ImmutableSetMultimap<L" + aChunkCoordIntPair - + ";Lnet/minecraftforge/common/ForgeChunkManager$Ticket;>;", - l8, - l10, - 3); - mv.visitMaxs(5, 4); - mv.visitEnd(); + mv = getWriter().visitMethod( + ACC_PUBLIC + ACC_STATIC, + "unforceChunk", + "(Lnet/minecraftforge/common/ForgeChunkManager$Ticket;L" + aChunkCoordIntPair + ";)V", + null, + null); + mv.visitCode(); + Label l0 = new Label(); + mv.visitLabel(l0); + mv.visitLineNumber(781, l0); + mv.visitVarInsn(ALOAD, 0); + Label l1 = new Label(); + mv.visitJumpInsn(IFNULL, l1); + mv.visitVarInsn(ALOAD, 1); + Label l2 = new Label(); + mv.visitJumpInsn(IFNONNULL, l2); + mv.visitLabel(l1); + mv.visitLineNumber(783, l1); + mv.visitFrame(F_SAME, 0, null, 0, null); + mv.visitInsn(RETURN); + mv.visitLabel(l2); + mv.visitLineNumber(785, l2); + mv.visitFrame(F_SAME, 0, null, 0, null); + mv.visitVarInsn(ALOAD, 0); + mv.visitMethodInsn( + INVOKESTATIC, + "net/minecraftforge/common/ForgeChunkManager$Ticket", + "access$700", + "(Lnet/minecraftforge/common/ForgeChunkManager$Ticket;)Ljava/util/LinkedHashSet;", + false); + mv.visitVarInsn(ALOAD, 1); + mv.visitMethodInsn(INVOKEVIRTUAL, "java/util/LinkedHashSet", "remove", "(Ljava/lang/Object;)Z", false); + mv.visitInsn(POP); + Label l3 = new Label(); + mv.visitLabel(l3); + mv.visitLineNumber(786, l3); + mv.visitVarInsn(ALOAD, 1); + mv.visitMethodInsn( + INVOKESTATIC, + "gtPlusPlus/preloader/ChunkDebugger", + "removeLoadedChunkFromCache", + "(L" + aChunkCoordIntPair + ";)V", + false); + Label l4 = new Label(); + mv.visitLabel(l4); + mv.visitLineNumber(787, l4); + mv.visitFieldInsn( + GETSTATIC, + "net/minecraftforge/common/MinecraftForge", + "EVENT_BUS", + "Lcpw/mods/fml/common/eventhandler/EventBus;"); + mv.visitTypeInsn(NEW, "net/minecraftforge/common/ForgeChunkManager$UnforceChunkEvent"); + mv.visitInsn(DUP); + mv.visitVarInsn(ALOAD, 0); + mv.visitVarInsn(ALOAD, 1); + mv.visitMethodInsn( + INVOKESPECIAL, + "net/minecraftforge/common/ForgeChunkManager$UnforceChunkEvent", + "<init>", + "(Lnet/minecraftforge/common/ForgeChunkManager$Ticket;L" + aChunkCoordIntPair + ";)V", + false); + mv.visitMethodInsn( + INVOKEVIRTUAL, + "cpw/mods/fml/common/eventhandler/EventBus", + "post", + "(Lcpw/mods/fml/common/eventhandler/Event;)Z", + false); + mv.visitInsn(POP); + Label l5 = new Label(); + mv.visitLabel(l5); + mv.visitLineNumber(788, l5); + mv.visitFieldInsn( + GETSTATIC, + "net/minecraftforge/common/ForgeChunkManager", + "forcedChunks", + "Ljava/util/Map;"); + mv.visitVarInsn(ALOAD, 0); + mv.visitFieldInsn( + GETFIELD, + "net/minecraftforge/common/ForgeChunkManager$Ticket", + "world", + "L" + aWorld + ";"); + mv.visitMethodInsn( + INVOKEINTERFACE, + "java/util/Map", + "get", + "(Ljava/lang/Object;)Ljava/lang/Object;", + true); + mv.visitTypeInsn(CHECKCAST, "com/google/common/collect/Multimap"); + mv.visitMethodInsn( + INVOKESTATIC, + "com/google/common/collect/LinkedHashMultimap", + "create", + "(Lcom/google/common/collect/Multimap;)Lcom/google/common/collect/LinkedHashMultimap;", + false); + mv.visitVarInsn(ASTORE, 2); + Label l6 = new Label(); + mv.visitLabel(l6); + mv.visitLineNumber(789, l6); + mv.visitVarInsn(ALOAD, 2); + mv.visitVarInsn(ALOAD, 1); + mv.visitVarInsn(ALOAD, 0); + mv.visitMethodInsn( + INVOKEVIRTUAL, + "com/google/common/collect/LinkedHashMultimap", + "remove", + "(Ljava/lang/Object;Ljava/lang/Object;)Z", + false); + mv.visitInsn(POP); + Label l7 = new Label(); + mv.visitLabel(l7); + mv.visitLineNumber(790, l7); + mv.visitVarInsn(ALOAD, 2); + mv.visitMethodInsn( + INVOKESTATIC, + "com/google/common/collect/ImmutableSetMultimap", + "copyOf", + "(Lcom/google/common/collect/Multimap;)Lcom/google/common/collect/ImmutableSetMultimap;", + false); + mv.visitVarInsn(ASTORE, 3); + Label l8 = new Label(); + mv.visitLabel(l8); + mv.visitLineNumber(791, l8); + mv.visitFieldInsn( + GETSTATIC, + "net/minecraftforge/common/ForgeChunkManager", + "forcedChunks", + "Ljava/util/Map;"); + mv.visitVarInsn(ALOAD, 0); + mv.visitFieldInsn( + GETFIELD, + "net/minecraftforge/common/ForgeChunkManager$Ticket", + "world", + "L" + aWorld + ";"); + mv.visitVarInsn(ALOAD, 3); + mv.visitMethodInsn( + INVOKEINTERFACE, + "java/util/Map", + "put", + "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;", + true); + mv.visitInsn(POP); + Label l9 = new Label(); + mv.visitLabel(l9); + mv.visitLineNumber(792, l9); + mv.visitInsn(RETURN); + Label l10 = new Label(); + mv.visitLabel(l10); + mv.visitLocalVariable( + "ticket", + "Lnet/minecraftforge/common/ForgeChunkManager$Ticket;", + null, + l0, + l10, + 0); + mv.visitLocalVariable("chunk", "L" + aChunkCoordIntPair + ";", null, l0, l10, 1); + mv.visitLocalVariable( + "copy", + "Lcom/google/common/collect/LinkedHashMultimap;", + "Lcom/google/common/collect/LinkedHashMultimap<L" + aChunkCoordIntPair + + ";Lnet/minecraftforge/common/ForgeChunkManager$Ticket;>;", + l6, + l10, + 2); + mv.visitLocalVariable( + "newMap", + "Lcom/google/common/collect/ImmutableSetMultimap;", + "Lcom/google/common/collect/ImmutableSetMultimap<L" + aChunkCoordIntPair + + ";Lnet/minecraftforge/common/ForgeChunkManager$Ticket;>;", + l8, + l10, + 3); + mv.visitMaxs(5, 4); + mv.visitEnd(); - } else if (aMethodName.equals("requestTicket")) { + } + case "requestTicket" -> { - mv = getWriter().visitMethod( - ACC_PUBLIC + ACC_STATIC, - "requestTicket", - "(Ljava/lang/Object;L" + aWorld - + ";Lnet/minecraftforge/common/ForgeChunkManager$Type;)Lnet/minecraftforge/common/ForgeChunkManager$Ticket;", - null, - null); - mv.visitCode(); - Label l0 = new Label(); - mv.visitLabel(l0); - mv.visitLineNumber(656, l0); - mv.visitVarInsn(ALOAD, 0); - mv.visitMethodInsn( - INVOKESTATIC, - "net/minecraftforge/common/ForgeChunkManager", - "getContainer", - "(Ljava/lang/Object;)Lcpw/mods/fml/common/ModContainer;", - false); - mv.visitVarInsn(ASTORE, 3); - Label l1 = new Label(); - mv.visitLabel(l1); - mv.visitLineNumber(657, l1); - mv.visitVarInsn(ALOAD, 3); - Label l2 = new Label(); - mv.visitJumpInsn(IFNONNULL, l2); - Label l3 = new Label(); - mv.visitLabel(l3); - mv.visitLineNumber(659, l3); - mv.visitFieldInsn(GETSTATIC, "org/apache/logging/log4j/Level", "ERROR", "Lorg/apache/logging/log4j/Level;"); - mv.visitLdcInsn("Failed to locate the container for mod instance %s (%s : %x)"); - mv.visitInsn(ICONST_3); - mv.visitTypeInsn(ANEWARRAY, "java/lang/Object"); - mv.visitInsn(DUP); - mv.visitInsn(ICONST_0); - mv.visitVarInsn(ALOAD, 0); - mv.visitInsn(AASTORE); - mv.visitInsn(DUP); - mv.visitInsn(ICONST_1); - mv.visitVarInsn(ALOAD, 0); - mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/Object", "getClass", "()Ljava/lang/Class;", false); - mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/Class", "getName", "()Ljava/lang/String;", false); - mv.visitInsn(AASTORE); - mv.visitInsn(DUP); - mv.visitInsn(ICONST_2); - mv.visitVarInsn(ALOAD, 0); - mv.visitMethodInsn(INVOKESTATIC, "java/lang/System", "identityHashCode", "(Ljava/lang/Object;)I", false); - mv.visitMethodInsn(INVOKESTATIC, "java/lang/Integer", "valueOf", "(I)Ljava/lang/Integer;", false); - mv.visitInsn(AASTORE); - mv.visitMethodInsn( - INVOKESTATIC, - "cpw/mods/fml/common/FMLLog", - "log", - "(Lorg/apache/logging/log4j/Level;Ljava/lang/String;[Ljava/lang/Object;)V", - false); - Label l4 = new Label(); - mv.visitLabel(l4); - mv.visitLineNumber(660, l4); - mv.visitInsn(ACONST_NULL); - mv.visitInsn(ARETURN); - mv.visitLabel(l2); - mv.visitLineNumber(662, l2); - mv.visitFrame(F_APPEND, 1, new Object[] { "cpw/mods/fml/common/ModContainer" }, 0, null); - mv.visitVarInsn(ALOAD, 3); - mv.visitMethodInsn( - INVOKEINTERFACE, - "cpw/mods/fml/common/ModContainer", - "getModId", - "()Ljava/lang/String;", - true); - mv.visitVarInsn(ASTORE, 4); - Label l5 = new Label(); - mv.visitLabel(l5); - mv.visitLineNumber(663, l5); - mv.visitFieldInsn(GETSTATIC, "net/minecraftforge/common/ForgeChunkManager", "callbacks", "Ljava/util/Map;"); - mv.visitVarInsn(ALOAD, 4); - mv.visitMethodInsn(INVOKEINTERFACE, "java/util/Map", "containsKey", "(Ljava/lang/Object;)Z", true); - Label l6 = new Label(); - mv.visitJumpInsn(IFNE, l6); - Label l7 = new Label(); - mv.visitLabel(l7); - mv.visitLineNumber(665, l7); - mv.visitLdcInsn("The mod %s has attempted to request a ticket without a listener in place"); - mv.visitInsn(ICONST_1); - mv.visitTypeInsn(ANEWARRAY, "java/lang/Object"); - mv.visitInsn(DUP); - mv.visitInsn(ICONST_0); - mv.visitVarInsn(ALOAD, 4); - mv.visitInsn(AASTORE); - mv.visitMethodInsn( - INVOKESTATIC, - "cpw/mods/fml/common/FMLLog", - "severe", - "(Ljava/lang/String;[Ljava/lang/Object;)V", - false); - Label l8 = new Label(); - mv.visitLabel(l8); - mv.visitLineNumber(666, l8); - mv.visitTypeInsn(NEW, "java/lang/RuntimeException"); - mv.visitInsn(DUP); - mv.visitLdcInsn("Invalid ticket request"); - mv.visitMethodInsn(INVOKESPECIAL, "java/lang/RuntimeException", "<init>", "(Ljava/lang/String;)V", false); - mv.visitInsn(ATHROW); - mv.visitLabel(l6); - mv.visitLineNumber(669, l6); - mv.visitFrame(F_APPEND, 1, new Object[] { "java/lang/String" }, 0, null); - mv.visitVarInsn(ALOAD, 4); - mv.visitMethodInsn( - INVOKESTATIC, - "net/minecraftforge/common/ForgeChunkManager", - "getMaxTicketLengthFor", - "(Ljava/lang/String;)I", - false); - mv.visitVarInsn(ISTORE, 5); - Label l9 = new Label(); - mv.visitLabel(l9); - mv.visitLineNumber(671, l9); - mv.visitFieldInsn(GETSTATIC, "net/minecraftforge/common/ForgeChunkManager", "tickets", "Ljava/util/Map;"); - mv.visitVarInsn(ALOAD, 1); - mv.visitMethodInsn(INVOKEINTERFACE, "java/util/Map", "get", "(Ljava/lang/Object;)Ljava/lang/Object;", true); - mv.visitTypeInsn(CHECKCAST, "com/google/common/collect/Multimap"); - mv.visitVarInsn(ALOAD, 4); - mv.visitMethodInsn( - INVOKEINTERFACE, - "com/google/common/collect/Multimap", - "get", - "(Ljava/lang/Object;)Ljava/util/Collection;", - true); - mv.visitMethodInsn(INVOKEINTERFACE, "java/util/Collection", "size", "()I", true); - mv.visitVarInsn(ILOAD, 5); - Label l10 = new Label(); - mv.visitJumpInsn(IF_ICMPLT, l10); - Label l11 = new Label(); - mv.visitLabel(l11); - mv.visitLineNumber(673, l11); - mv.visitFieldInsn( - GETSTATIC, - "net/minecraftforge/common/ForgeChunkManager", - "warnedMods", - "Ljava/util/Set;"); - mv.visitVarInsn(ALOAD, 4); - mv.visitMethodInsn(INVOKEINTERFACE, "java/util/Set", "contains", "(Ljava/lang/Object;)Z", true); - Label l12 = new Label(); - mv.visitJumpInsn(IFNE, l12); - Label l13 = new Label(); - mv.visitLabel(l13); - mv.visitLineNumber(675, l13); - mv.visitLdcInsn( - "The mod %s has attempted to allocate a chunkloading ticket beyond it's currently allocated maximum : %d"); - mv.visitInsn(ICONST_2); - mv.visitTypeInsn(ANEWARRAY, "java/lang/Object"); - mv.visitInsn(DUP); - mv.visitInsn(ICONST_0); - mv.visitVarInsn(ALOAD, 4); - mv.visitInsn(AASTORE); - mv.visitInsn(DUP); - mv.visitInsn(ICONST_1); - mv.visitVarInsn(ILOAD, 5); - mv.visitMethodInsn(INVOKESTATIC, "java/lang/Integer", "valueOf", "(I)Ljava/lang/Integer;", false); - mv.visitInsn(AASTORE); - mv.visitMethodInsn( - INVOKESTATIC, - "cpw/mods/fml/common/FMLLog", - "info", - "(Ljava/lang/String;[Ljava/lang/Object;)V", - false); - Label l14 = new Label(); - mv.visitLabel(l14); - mv.visitLineNumber(676, l14); - mv.visitFieldInsn( - GETSTATIC, - "net/minecraftforge/common/ForgeChunkManager", - "warnedMods", - "Ljava/util/Set;"); - mv.visitVarInsn(ALOAD, 4); - mv.visitMethodInsn(INVOKEINTERFACE, "java/util/Set", "add", "(Ljava/lang/Object;)Z", true); - mv.visitInsn(POP); - mv.visitLabel(l12); - mv.visitLineNumber(678, l12); - mv.visitFrame(F_APPEND, 1, new Object[] { INTEGER }, 0, null); - mv.visitInsn(ACONST_NULL); - mv.visitInsn(ARETURN); - mv.visitLabel(l10); - mv.visitLineNumber(680, l10); - mv.visitFrame(F_SAME, 0, null, 0, null); - mv.visitTypeInsn(NEW, "net/minecraftforge/common/ForgeChunkManager$Ticket"); - mv.visitInsn(DUP); - mv.visitVarInsn(ALOAD, 4); - mv.visitVarInsn(ALOAD, 2); - mv.visitVarInsn(ALOAD, 1); - mv.visitMethodInsn( - INVOKESPECIAL, - "net/minecraftforge/common/ForgeChunkManager$Ticket", - "<init>", - "(Ljava/lang/String;Lnet/minecraftforge/common/ForgeChunkManager$Type;L" + aWorld + ";)V", - false); - mv.visitVarInsn(ASTORE, 6); - Label l15 = new Label(); - mv.visitLabel(l15); - mv.visitLineNumber(681, l15); - mv.visitVarInsn(ALOAD, 6); - mv.visitVarInsn(ALOAD, 1); - mv.visitMethodInsn( - INVOKESTATIC, - "gtPlusPlus/preloader/ChunkDebugger", - "storeTicketToCache", - "(Lnet/minecraftforge/common/ForgeChunkManager$Ticket;L" + aWorld + ";)V", - false); - Label l16 = new Label(); - mv.visitLabel(l16); - mv.visitLineNumber(682, l16); - mv.visitFieldInsn(GETSTATIC, "net/minecraftforge/common/ForgeChunkManager", "tickets", "Ljava/util/Map;"); - mv.visitVarInsn(ALOAD, 1); - mv.visitMethodInsn(INVOKEINTERFACE, "java/util/Map", "get", "(Ljava/lang/Object;)Ljava/lang/Object;", true); - mv.visitTypeInsn(CHECKCAST, "com/google/common/collect/Multimap"); - mv.visitVarInsn(ALOAD, 4); - mv.visitVarInsn(ALOAD, 6); - mv.visitMethodInsn( - INVOKEINTERFACE, - "com/google/common/collect/Multimap", - "put", - "(Ljava/lang/Object;Ljava/lang/Object;)Z", - true); - mv.visitInsn(POP); - Label l17 = new Label(); - mv.visitLabel(l17); - mv.visitLineNumber(683, l17); - mv.visitVarInsn(ALOAD, 6); - mv.visitInsn(ARETURN); - Label l18 = new Label(); - mv.visitLabel(l18); - mv.visitLocalVariable("mod", "Ljava/lang/Object;", null, l0, l18, 0); - mv.visitLocalVariable("world", "L" + aWorld + ";", null, l0, l18, 1); - mv.visitLocalVariable("type", "Lnet/minecraftforge/common/ForgeChunkManager$Type;", null, l0, l18, 2); - mv.visitLocalVariable("container", "Lcpw/mods/fml/common/ModContainer;", null, l1, l18, 3); - mv.visitLocalVariable("modId", "Ljava/lang/String;", null, l5, l18, 4); - mv.visitLocalVariable("allowedCount", "I", null, l9, l18, 5); - mv.visitLocalVariable("ticket", "Lnet/minecraftforge/common/ForgeChunkManager$Ticket;", null, l15, l18, 6); - mv.visitMaxs(6, 7); - mv.visitEnd(); + mv = getWriter().visitMethod( + ACC_PUBLIC + ACC_STATIC, + "requestTicket", + "(Ljava/lang/Object;L" + aWorld + + ";Lnet/minecraftforge/common/ForgeChunkManager$Type;)Lnet/minecraftforge/common/ForgeChunkManager$Ticket;", + null, + null); + mv.visitCode(); + Label l0 = new Label(); + mv.visitLabel(l0); + mv.visitLineNumber(656, l0); + mv.visitVarInsn(ALOAD, 0); + mv.visitMethodInsn( + INVOKESTATIC, + "net/minecraftforge/common/ForgeChunkManager", + "getContainer", + "(Ljava/lang/Object;)Lcpw/mods/fml/common/ModContainer;", + false); + mv.visitVarInsn(ASTORE, 3); + Label l1 = new Label(); + mv.visitLabel(l1); + mv.visitLineNumber(657, l1); + mv.visitVarInsn(ALOAD, 3); + Label l2 = new Label(); + mv.visitJumpInsn(IFNONNULL, l2); + Label l3 = new Label(); + mv.visitLabel(l3); + mv.visitLineNumber(659, l3); + mv.visitFieldInsn( + GETSTATIC, + "org/apache/logging/log4j/Level", + "ERROR", + "Lorg/apache/logging/log4j/Level;"); + mv.visitLdcInsn("Failed to locate the container for mod instance %s (%s : %x)"); + mv.visitInsn(ICONST_3); + mv.visitTypeInsn(ANEWARRAY, "java/lang/Object"); + mv.visitInsn(DUP); + mv.visitInsn(ICONST_0); + mv.visitVarInsn(ALOAD, 0); + mv.visitInsn(AASTORE); + mv.visitInsn(DUP); + mv.visitInsn(ICONST_1); + mv.visitVarInsn(ALOAD, 0); + mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/Object", "getClass", "()Ljava/lang/Class;", false); + mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/Class", "getName", "()Ljava/lang/String;", false); + mv.visitInsn(AASTORE); + mv.visitInsn(DUP); + mv.visitInsn(ICONST_2); + mv.visitVarInsn(ALOAD, 0); + mv.visitMethodInsn( + INVOKESTATIC, + "java/lang/System", + "identityHashCode", + "(Ljava/lang/Object;)I", + false); + mv.visitMethodInsn(INVOKESTATIC, "java/lang/Integer", "valueOf", "(I)Ljava/lang/Integer;", false); + mv.visitInsn(AASTORE); + mv.visitMethodInsn( + INVOKESTATIC, + "cpw/mods/fml/common/FMLLog", + "log", + "(Lorg/apache/logging/log4j/Level;Ljava/lang/String;[Ljava/lang/Object;)V", + false); + Label l4 = new Label(); + mv.visitLabel(l4); + mv.visitLineNumber(660, l4); + mv.visitInsn(ACONST_NULL); + mv.visitInsn(ARETURN); + mv.visitLabel(l2); + mv.visitLineNumber(662, l2); + mv.visitFrame(F_APPEND, 1, new Object[] { "cpw/mods/fml/common/ModContainer" }, 0, null); + mv.visitVarInsn(ALOAD, 3); + mv.visitMethodInsn( + INVOKEINTERFACE, + "cpw/mods/fml/common/ModContainer", + "getModId", + "()Ljava/lang/String;", + true); + mv.visitVarInsn(ASTORE, 4); + Label l5 = new Label(); + mv.visitLabel(l5); + mv.visitLineNumber(663, l5); + mv.visitFieldInsn( + GETSTATIC, + "net/minecraftforge/common/ForgeChunkManager", + "callbacks", + "Ljava/util/Map;"); + mv.visitVarInsn(ALOAD, 4); + mv.visitMethodInsn(INVOKEINTERFACE, "java/util/Map", "containsKey", "(Ljava/lang/Object;)Z", true); + Label l6 = new Label(); + mv.visitJumpInsn(IFNE, l6); + Label l7 = new Label(); + mv.visitLabel(l7); + mv.visitLineNumber(665, l7); + mv.visitLdcInsn("The mod %s has attempted to request a ticket without a listener in place"); + mv.visitInsn(ICONST_1); + mv.visitTypeInsn(ANEWARRAY, "java/lang/Object"); + mv.visitInsn(DUP); + mv.visitInsn(ICONST_0); + mv.visitVarInsn(ALOAD, 4); + mv.visitInsn(AASTORE); + mv.visitMethodInsn( + INVOKESTATIC, + "cpw/mods/fml/common/FMLLog", + "severe", + "(Ljava/lang/String;[Ljava/lang/Object;)V", + false); + Label l8 = new Label(); + mv.visitLabel(l8); + mv.visitLineNumber(666, l8); + mv.visitTypeInsn(NEW, "java/lang/RuntimeException"); + mv.visitInsn(DUP); + mv.visitLdcInsn("Invalid ticket request"); + mv.visitMethodInsn( + INVOKESPECIAL, + "java/lang/RuntimeException", + "<init>", + "(Ljava/lang/String;)V", + false); + mv.visitInsn(ATHROW); + mv.visitLabel(l6); + mv.visitLineNumber(669, l6); + mv.visitFrame(F_APPEND, 1, new Object[] { "java/lang/String" }, 0, null); + mv.visitVarInsn(ALOAD, 4); + mv.visitMethodInsn( + INVOKESTATIC, + "net/minecraftforge/common/ForgeChunkManager", + "getMaxTicketLengthFor", + "(Ljava/lang/String;)I", + false); + mv.visitVarInsn(ISTORE, 5); + Label l9 = new Label(); + mv.visitLabel(l9); + mv.visitLineNumber(671, l9); + mv.visitFieldInsn( + GETSTATIC, + "net/minecraftforge/common/ForgeChunkManager", + "tickets", + "Ljava/util/Map;"); + mv.visitVarInsn(ALOAD, 1); + mv.visitMethodInsn( + INVOKEINTERFACE, + "java/util/Map", + "get", + "(Ljava/lang/Object;)Ljava/lang/Object;", + true); + mv.visitTypeInsn(CHECKCAST, "com/google/common/collect/Multimap"); + mv.visitVarInsn(ALOAD, 4); + mv.visitMethodInsn( + INVOKEINTERFACE, + "com/google/common/collect/Multimap", + "get", + "(Ljava/lang/Object;)Ljava/util/Collection;", + true); + mv.visitMethodInsn(INVOKEINTERFACE, "java/util/Collection", "size", "()I", true); + mv.visitVarInsn(ILOAD, 5); + Label l10 = new Label(); + mv.visitJumpInsn(IF_ICMPLT, l10); + Label l11 = new Label(); + mv.visitLabel(l11); + mv.visitLineNumber(673, l11); + mv.visitFieldInsn( + GETSTATIC, + "net/minecraftforge/common/ForgeChunkManager", + "warnedMods", + "Ljava/util/Set;"); + mv.visitVarInsn(ALOAD, 4); + mv.visitMethodInsn(INVOKEINTERFACE, "java/util/Set", "contains", "(Ljava/lang/Object;)Z", true); + Label l12 = new Label(); + mv.visitJumpInsn(IFNE, l12); + Label l13 = new Label(); + mv.visitLabel(l13); + mv.visitLineNumber(675, l13); + mv.visitLdcInsn( + "The mod %s has attempted to allocate a chunkloading ticket beyond it's currently allocated maximum : %d"); + mv.visitInsn(ICONST_2); + mv.visitTypeInsn(ANEWARRAY, "java/lang/Object"); + mv.visitInsn(DUP); + mv.visitInsn(ICONST_0); + mv.visitVarInsn(ALOAD, 4); + mv.visitInsn(AASTORE); + mv.visitInsn(DUP); + mv.visitInsn(ICONST_1); + mv.visitVarInsn(ILOAD, 5); + mv.visitMethodInsn(INVOKESTATIC, "java/lang/Integer", "valueOf", "(I)Ljava/lang/Integer;", false); + mv.visitInsn(AASTORE); + mv.visitMethodInsn( + INVOKESTATIC, + "cpw/mods/fml/common/FMLLog", + "info", + "(Ljava/lang/String;[Ljava/lang/Object;)V", + false); + Label l14 = new Label(); + mv.visitLabel(l14); + mv.visitLineNumber(676, l14); + mv.visitFieldInsn( + GETSTATIC, + "net/minecraftforge/common/ForgeChunkManager", + "warnedMods", + "Ljava/util/Set;"); + mv.visitVarInsn(ALOAD, 4); + mv.visitMethodInsn(INVOKEINTERFACE, "java/util/Set", "add", "(Ljava/lang/Object;)Z", true); + mv.visitInsn(POP); + mv.visitLabel(l12); + mv.visitLineNumber(678, l12); + mv.visitFrame(F_APPEND, 1, new Object[] { INTEGER }, 0, null); + mv.visitInsn(ACONST_NULL); + mv.visitInsn(ARETURN); + mv.visitLabel(l10); + mv.visitLineNumber(680, l10); + mv.visitFrame(F_SAME, 0, null, 0, null); + mv.visitTypeInsn(NEW, "net/minecraftforge/common/ForgeChunkManager$Ticket"); + mv.visitInsn(DUP); + mv.visitVarInsn(ALOAD, 4); + mv.visitVarInsn(ALOAD, 2); + mv.visitVarInsn(ALOAD, 1); + mv.visitMethodInsn( + INVOKESPECIAL, + "net/minecraftforge/common/ForgeChunkManager$Ticket", + "<init>", + "(Ljava/lang/String;Lnet/minecraftforge/common/ForgeChunkManager$Type;L" + aWorld + ";)V", + false); + mv.visitVarInsn(ASTORE, 6); + Label l15 = new Label(); + mv.visitLabel(l15); + mv.visitLineNumber(681, l15); + mv.visitVarInsn(ALOAD, 6); + mv.visitVarInsn(ALOAD, 1); + mv.visitMethodInsn( + INVOKESTATIC, + "gtPlusPlus/preloader/ChunkDebugger", + "storeTicketToCache", + "(Lnet/minecraftforge/common/ForgeChunkManager$Ticket;L" + aWorld + ";)V", + false); + Label l16 = new Label(); + mv.visitLabel(l16); + mv.visitLineNumber(682, l16); + mv.visitFieldInsn( + GETSTATIC, + "net/minecraftforge/common/ForgeChunkManager", + "tickets", + "Ljava/util/Map;"); + mv.visitVarInsn(ALOAD, 1); + mv.visitMethodInsn( + INVOKEINTERFACE, + "java/util/Map", + "get", + "(Ljava/lang/Object;)Ljava/lang/Object;", + true); + mv.visitTypeInsn(CHECKCAST, "com/google/common/collect/Multimap"); + mv.visitVarInsn(ALOAD, 4); + mv.visitVarInsn(ALOAD, 6); + mv.visitMethodInsn( + INVOKEINTERFACE, + "com/google/common/collect/Multimap", + "put", + "(Ljava/lang/Object;Ljava/lang/Object;)Z", + true); + mv.visitInsn(POP); + Label l17 = new Label(); + mv.visitLabel(l17); + mv.visitLineNumber(683, l17); + mv.visitVarInsn(ALOAD, 6); + mv.visitInsn(ARETURN); + Label l18 = new Label(); + mv.visitLabel(l18); + mv.visitLocalVariable("mod", "Ljava/lang/Object;", null, l0, l18, 0); + mv.visitLocalVariable("world", "L" + aWorld + ";", null, l0, l18, 1); + mv.visitLocalVariable("type", "Lnet/minecraftforge/common/ForgeChunkManager$Type;", null, l0, l18, 2); + mv.visitLocalVariable("container", "Lcpw/mods/fml/common/ModContainer;", null, l1, l18, 3); + mv.visitLocalVariable("modId", "Ljava/lang/String;", null, l5, l18, 4); + mv.visitLocalVariable("allowedCount", "I", null, l9, l18, 5); + mv.visitLocalVariable( + "ticket", + "Lnet/minecraftforge/common/ForgeChunkManager$Ticket;", + null, + l15, + l18, + 6); + mv.visitMaxs(6, 7); + mv.visitEnd(); - } else if (aMethodName.equals("releaseTicket")) { + } + case "releaseTicket" -> { - mv = getWriter().visitMethod( - ACC_PUBLIC + ACC_STATIC, - "releaseTicket", - "(Lnet/minecraftforge/common/ForgeChunkManager$Ticket;)V", - null, - null); - mv.visitCode(); - Label l0 = new Label(); - mv.visitLabel(l0); - mv.visitLineNumber(693, l0); - mv.visitVarInsn(ALOAD, 0); - Label l1 = new Label(); - mv.visitJumpInsn(IFNONNULL, l1); - Label l2 = new Label(); - mv.visitLabel(l2); - mv.visitLineNumber(695, l2); - mv.visitInsn(RETURN); - mv.visitLabel(l1); - mv.visitLineNumber(697, l1); - mv.visitFrame(F_SAME, 0, null, 0, null); - mv.visitVarInsn(ALOAD, 0); - mv.visitMethodInsn( - INVOKEVIRTUAL, - "net/minecraftforge/common/ForgeChunkManager$Ticket", - "isPlayerTicket", - "()Z", - false); - Label l3 = new Label(); - mv.visitJumpInsn(IFEQ, l3); - mv.visitFieldInsn( - GETSTATIC, - "net/minecraftforge/common/ForgeChunkManager", - "playerTickets", - "Lcom/google/common/collect/SetMultimap;"); - mv.visitVarInsn(ALOAD, 0); - mv.visitMethodInsn( - INVOKEINTERFACE, - "com/google/common/collect/SetMultimap", - "containsValue", - "(Ljava/lang/Object;)Z", - true); - Label l4 = new Label(); - mv.visitJumpInsn(IFNE, l4); - Label l5 = new Label(); - mv.visitJumpInsn(GOTO, l5); - mv.visitLabel(l3); - mv.visitFrame(F_SAME, 0, null, 0, null); - mv.visitFieldInsn(GETSTATIC, "net/minecraftforge/common/ForgeChunkManager", "tickets", "Ljava/util/Map;"); - mv.visitVarInsn(ALOAD, 0); - mv.visitFieldInsn( - GETFIELD, - "net/minecraftforge/common/ForgeChunkManager$Ticket", - "world", - "L" + aWorld + ";"); - mv.visitMethodInsn(INVOKEINTERFACE, "java/util/Map", "get", "(Ljava/lang/Object;)Ljava/lang/Object;", true); - mv.visitTypeInsn(CHECKCAST, "com/google/common/collect/Multimap"); - mv.visitVarInsn(ALOAD, 0); - mv.visitMethodInsn( - INVOKESTATIC, - "net/minecraftforge/common/ForgeChunkManager$Ticket", - "access$200", - "(Lnet/minecraftforge/common/ForgeChunkManager$Ticket;)Ljava/lang/String;", - false); - mv.visitVarInsn(ALOAD, 0); - mv.visitMethodInsn( - INVOKEINTERFACE, - "com/google/common/collect/Multimap", - "containsEntry", - "(Ljava/lang/Object;Ljava/lang/Object;)Z", - true); - mv.visitJumpInsn(IFNE, l4); - mv.visitLabel(l5); - mv.visitLineNumber(699, l5); - mv.visitFrame(F_SAME, 0, null, 0, null); - mv.visitInsn(RETURN); - mv.visitLabel(l4); - mv.visitLineNumber(701, l4); - mv.visitFrame(F_SAME, 0, null, 0, null); - mv.visitVarInsn(ALOAD, 0); - mv.visitMethodInsn( - INVOKESTATIC, - "net/minecraftforge/common/ForgeChunkManager$Ticket", - "access$700", - "(Lnet/minecraftforge/common/ForgeChunkManager$Ticket;)Ljava/util/LinkedHashSet;", - false); - Label l6 = new Label(); - mv.visitJumpInsn(IFNULL, l6); - Label l7 = new Label(); - mv.visitLabel(l7); - mv.visitLineNumber(703, l7); - mv.visitVarInsn(ALOAD, 0); - mv.visitMethodInsn( - INVOKESTATIC, - "net/minecraftforge/common/ForgeChunkManager$Ticket", - "access$700", - "(Lnet/minecraftforge/common/ForgeChunkManager$Ticket;)Ljava/util/LinkedHashSet;", - false); - mv.visitMethodInsn( - INVOKESTATIC, - "com/google/common/collect/ImmutableSet", - "copyOf", - "(Ljava/util/Collection;)Lcom/google/common/collect/ImmutableSet;", - false); - mv.visitMethodInsn( - INVOKEVIRTUAL, - "com/google/common/collect/ImmutableSet", - "iterator", - "()Ljava/util/Iterator;", - false); - mv.visitVarInsn(ASTORE, 2); - Label l8 = new Label(); - mv.visitJumpInsn(GOTO, l8); - Label l9 = new Label(); - mv.visitLabel(l9); - mv.visitFrame( - F_FULL, - 3, - new Object[] { "net/minecraftforge/common/ForgeChunkManager$Ticket", TOP, "java/util/Iterator" }, - 0, - new Object[] {}); - mv.visitVarInsn(ALOAD, 2); - mv.visitMethodInsn(INVOKEINTERFACE, "java/util/Iterator", "next", "()Ljava/lang/Object;", true); - mv.visitTypeInsn(CHECKCAST, "" + aChunkCoordIntPair + ""); - mv.visitVarInsn(ASTORE, 1); - Label l10 = new Label(); - mv.visitLabel(l10); - mv.visitLineNumber(705, l10); - mv.visitVarInsn(ALOAD, 0); - mv.visitVarInsn(ALOAD, 1); - mv.visitMethodInsn( - INVOKESTATIC, - "net/minecraftforge/common/ForgeChunkManager", - "unforceChunk", - "(Lnet/minecraftforge/common/ForgeChunkManager$Ticket;L" + aChunkCoordIntPair + ";)V", - false); - mv.visitLabel(l8); - mv.visitLineNumber(703, l8); - mv.visitFrame(F_SAME, 0, null, 0, null); - mv.visitVarInsn(ALOAD, 2); - mv.visitMethodInsn(INVOKEINTERFACE, "java/util/Iterator", "hasNext", "()Z", true); - mv.visitJumpInsn(IFNE, l9); - mv.visitLabel(l6); - mv.visitLineNumber(708, l6); - mv.visitFrame( - F_FULL, - 1, - new Object[] { "net/minecraftforge/common/ForgeChunkManager$Ticket" }, - 0, - new Object[] {}); - mv.visitVarInsn(ALOAD, 0); - mv.visitMethodInsn( - INVOKESTATIC, - "gtPlusPlus/preloader/ChunkDebugger", - "removeTicketFromCache", - "(Lnet/minecraftforge/common/ForgeChunkManager$Ticket;)V", - false); - Label l11 = new Label(); - mv.visitLabel(l11); - mv.visitLineNumber(709, l11); - mv.visitVarInsn(ALOAD, 0); - mv.visitMethodInsn( - INVOKEVIRTUAL, - "net/minecraftforge/common/ForgeChunkManager$Ticket", - "isPlayerTicket", - "()Z", - false); - Label l12 = new Label(); - mv.visitJumpInsn(IFEQ, l12); - Label l13 = new Label(); - mv.visitLabel(l13); - mv.visitLineNumber(711, l13); - mv.visitFieldInsn( - GETSTATIC, - "net/minecraftforge/common/ForgeChunkManager", - "playerTickets", - "Lcom/google/common/collect/SetMultimap;"); - mv.visitVarInsn(ALOAD, 0); - mv.visitMethodInsn( - INVOKESTATIC, - "net/minecraftforge/common/ForgeChunkManager$Ticket", - "access$100", - "(Lnet/minecraftforge/common/ForgeChunkManager$Ticket;)Ljava/lang/String;", - false); - mv.visitVarInsn(ALOAD, 0); - mv.visitMethodInsn( - INVOKEINTERFACE, - "com/google/common/collect/SetMultimap", - "remove", - "(Ljava/lang/Object;Ljava/lang/Object;)Z", - true); - mv.visitInsn(POP); - Label l14 = new Label(); - mv.visitLabel(l14); - mv.visitLineNumber(712, l14); - mv.visitFieldInsn(GETSTATIC, "net/minecraftforge/common/ForgeChunkManager", "tickets", "Ljava/util/Map;"); - mv.visitVarInsn(ALOAD, 0); - mv.visitFieldInsn( - GETFIELD, - "net/minecraftforge/common/ForgeChunkManager$Ticket", - "world", - "L" + aWorld + ";"); - mv.visitMethodInsn(INVOKEINTERFACE, "java/util/Map", "get", "(Ljava/lang/Object;)Ljava/lang/Object;", true); - mv.visitTypeInsn(CHECKCAST, "com/google/common/collect/Multimap"); - mv.visitLdcInsn("Forge"); - mv.visitVarInsn(ALOAD, 0); - mv.visitMethodInsn( - INVOKEINTERFACE, - "com/google/common/collect/Multimap", - "remove", - "(Ljava/lang/Object;Ljava/lang/Object;)Z", - true); - mv.visitInsn(POP); - Label l15 = new Label(); - mv.visitLabel(l15); - mv.visitLineNumber(713, l15); - Label l16 = new Label(); - mv.visitJumpInsn(GOTO, l16); - mv.visitLabel(l12); - mv.visitLineNumber(716, l12); - mv.visitFrame(F_SAME, 0, null, 0, null); - mv.visitFieldInsn(GETSTATIC, "net/minecraftforge/common/ForgeChunkManager", "tickets", "Ljava/util/Map;"); - mv.visitVarInsn(ALOAD, 0); - mv.visitFieldInsn( - GETFIELD, - "net/minecraftforge/common/ForgeChunkManager$Ticket", - "world", - "L" + aWorld + ";"); - mv.visitMethodInsn(INVOKEINTERFACE, "java/util/Map", "get", "(Ljava/lang/Object;)Ljava/lang/Object;", true); - mv.visitTypeInsn(CHECKCAST, "com/google/common/collect/Multimap"); - mv.visitVarInsn(ALOAD, 0); - mv.visitMethodInsn( - INVOKESTATIC, - "net/minecraftforge/common/ForgeChunkManager$Ticket", - "access$200", - "(Lnet/minecraftforge/common/ForgeChunkManager$Ticket;)Ljava/lang/String;", - false); - mv.visitVarInsn(ALOAD, 0); - mv.visitMethodInsn( - INVOKEINTERFACE, - "com/google/common/collect/Multimap", - "remove", - "(Ljava/lang/Object;Ljava/lang/Object;)Z", - true); - mv.visitInsn(POP); - mv.visitLabel(l16); - mv.visitLineNumber(718, l16); - mv.visitFrame(F_SAME, 0, null, 0, null); - mv.visitInsn(RETURN); - Label l17 = new Label(); - mv.visitLabel(l17); - mv.visitLocalVariable("ticket", "Lnet/minecraftforge/common/ForgeChunkManager$Ticket;", null, l0, l17, 0); - mv.visitLocalVariable("chunk", "L" + aChunkCoordIntPair + ";", null, l10, l8, 1); - mv.visitMaxs(3, 3); - mv.visitEnd(); + mv = getWriter().visitMethod( + ACC_PUBLIC + ACC_STATIC, + "releaseTicket", + "(Lnet/minecraftforge/common/ForgeChunkManager$Ticket;)V", + null, + null); + mv.visitCode(); + Label l0 = new Label(); + mv.visitLabel(l0); + mv.visitLineNumber(693, l0); + mv.visitVarInsn(ALOAD, 0); + Label l1 = new Label(); + mv.visitJumpInsn(IFNONNULL, l1); + Label l2 = new Label(); + mv.visitLabel(l2); + mv.visitLineNumber(695, l2); + mv.visitInsn(RETURN); + mv.visitLabel(l1); + mv.visitLineNumber(697, l1); + mv.visitFrame(F_SAME, 0, null, 0, null); + mv.visitVarInsn(ALOAD, 0); + mv.visitMethodInsn( + INVOKEVIRTUAL, + "net/minecraftforge/common/ForgeChunkManager$Ticket", + "isPlayerTicket", + "()Z", + false); + Label l3 = new Label(); + mv.visitJumpInsn(IFEQ, l3); + mv.visitFieldInsn( + GETSTATIC, + "net/minecraftforge/common/ForgeChunkManager", + "playerTickets", + "Lcom/google/common/collect/SetMultimap;"); + mv.visitVarInsn(ALOAD, 0); + mv.visitMethodInsn( + INVOKEINTERFACE, + "com/google/common/collect/SetMultimap", + "containsValue", + "(Ljava/lang/Object;)Z", + true); + Label l4 = new Label(); + mv.visitJumpInsn(IFNE, l4); + Label l5 = new Label(); + mv.visitJumpInsn(GOTO, l5); + mv.visitLabel(l3); + mv.visitFrame(F_SAME, 0, null, 0, null); + mv.visitFieldInsn( + GETSTATIC, + "net/minecraftforge/common/ForgeChunkManager", + "tickets", + "Ljava/util/Map;"); + mv.visitVarInsn(ALOAD, 0); + mv.visitFieldInsn( + GETFIELD, + "net/minecraftforge/common/ForgeChunkManager$Ticket", + "world", + "L" + aWorld + ";"); + mv.visitMethodInsn( + INVOKEINTERFACE, + "java/util/Map", + "get", + "(Ljava/lang/Object;)Ljava/lang/Object;", + true); + mv.visitTypeInsn(CHECKCAST, "com/google/common/collect/Multimap"); + mv.visitVarInsn(ALOAD, 0); + mv.visitMethodInsn( + INVOKESTATIC, + "net/minecraftforge/common/ForgeChunkManager$Ticket", + "access$200", + "(Lnet/minecraftforge/common/ForgeChunkManager$Ticket;)Ljava/lang/String;", + false); + mv.visitVarInsn(ALOAD, 0); + mv.visitMethodInsn( + INVOKEINTERFACE, + "com/google/common/collect/Multimap", + "containsEntry", + "(Ljava/lang/Object;Ljava/lang/Object;)Z", + true); + mv.visitJumpInsn(IFNE, l4); + mv.visitLabel(l5); + mv.visitLineNumber(699, l5); + mv.visitFrame(F_SAME, 0, null, 0, null); + mv.visitInsn(RETURN); + mv.visitLabel(l4); + mv.visitLineNumber(701, l4); + mv.visitFrame(F_SAME, 0, null, 0, null); + mv.visitVarInsn(ALOAD, 0); + mv.visitMethodInsn( + INVOKESTATIC, + "net/minecraftforge/common/ForgeChunkManager$Ticket", + "access$700", + "(Lnet/minecraftforge/common/ForgeChunkManager$Ticket;)Ljava/util/LinkedHashSet;", + false); + Label l6 = new Label(); + mv.visitJumpInsn(IFNULL, l6); + Label l7 = new Label(); + mv.visitLabel(l7); + mv.visitLineNumber(703, l7); + mv.visitVarInsn(ALOAD, 0); + mv.visitMethodInsn( + INVOKESTATIC, + "net/minecraftforge/common/ForgeChunkManager$Ticket", + "access$700", + "(Lnet/minecraftforge/common/ForgeChunkManager$Ticket;)Ljava/util/LinkedHashSet;", + false); + mv.visitMethodInsn( + INVOKESTATIC, + "com/google/common/collect/ImmutableSet", + "copyOf", + "(Ljava/util/Collection;)Lcom/google/common/collect/ImmutableSet;", + false); + mv.visitMethodInsn( + INVOKEVIRTUAL, + "com/google/common/collect/ImmutableSet", + "iterator", + "()Ljava/util/Iterator;", + false); + mv.visitVarInsn(ASTORE, 2); + Label l8 = new Label(); + mv.visitJumpInsn(GOTO, l8); + Label l9 = new Label(); + mv.visitLabel(l9); + mv.visitFrame( + F_FULL, + 3, + new Object[] { "net/minecraftforge/common/ForgeChunkManager$Ticket", TOP, + "java/util/Iterator" }, + 0, + new Object[] {}); + mv.visitVarInsn(ALOAD, 2); + mv.visitMethodInsn(INVOKEINTERFACE, "java/util/Iterator", "next", "()Ljava/lang/Object;", true); + mv.visitTypeInsn(CHECKCAST, "" + aChunkCoordIntPair + ""); + mv.visitVarInsn(ASTORE, 1); + Label l10 = new Label(); + mv.visitLabel(l10); + mv.visitLineNumber(705, l10); + mv.visitVarInsn(ALOAD, 0); + mv.visitVarInsn(ALOAD, 1); + mv.visitMethodInsn( + INVOKESTATIC, + "net/minecraftforge/common/ForgeChunkManager", + "unforceChunk", + "(Lnet/minecraftforge/common/ForgeChunkManager$Ticket;L" + aChunkCoordIntPair + ";)V", + false); + mv.visitLabel(l8); + mv.visitLineNumber(703, l8); + mv.visitFrame(F_SAME, 0, null, 0, null); + mv.visitVarInsn(ALOAD, 2); + mv.visitMethodInsn(INVOKEINTERFACE, "java/util/Iterator", "hasNext", "()Z", true); + mv.visitJumpInsn(IFNE, l9); + mv.visitLabel(l6); + mv.visitLineNumber(708, l6); + mv.visitFrame( + F_FULL, + 1, + new Object[] { "net/minecraftforge/common/ForgeChunkManager$Ticket" }, + 0, + new Object[] {}); + mv.visitVarInsn(ALOAD, 0); + mv.visitMethodInsn( + INVOKESTATIC, + "gtPlusPlus/preloader/ChunkDebugger", + "removeTicketFromCache", + "(Lnet/minecraftforge/common/ForgeChunkManager$Ticket;)V", + false); + Label l11 = new Label(); + mv.visitLabel(l11); + mv.visitLineNumber(709, l11); + mv.visitVarInsn(ALOAD, 0); + mv.visitMethodInsn( + INVOKEVIRTUAL, + "net/minecraftforge/common/ForgeChunkManager$Ticket", + "isPlayerTicket", + "()Z", + false); + Label l12 = new Label(); + mv.visitJumpInsn(IFEQ, l12); + Label l13 = new Label(); + mv.visitLabel(l13); + mv.visitLineNumber(711, l13); + mv.visitFieldInsn( + GETSTATIC, + "net/minecraftforge/common/ForgeChunkManager", + "playerTickets", + "Lcom/google/common/collect/SetMultimap;"); + mv.visitVarInsn(ALOAD, 0); + mv.visitMethodInsn( + INVOKESTATIC, + "net/minecraftforge/common/ForgeChunkManager$Ticket", + "access$100", + "(Lnet/minecraftforge/common/ForgeChunkManager$Ticket;)Ljava/lang/String;", + false); + mv.visitVarInsn(ALOAD, 0); + mv.visitMethodInsn( + INVOKEINTERFACE, + "com/google/common/collect/SetMultimap", + "remove", + "(Ljava/lang/Object;Ljava/lang/Object;)Z", + true); + mv.visitInsn(POP); + Label l14 = new Label(); + mv.visitLabel(l14); + mv.visitLineNumber(712, l14); + mv.visitFieldInsn( + GETSTATIC, + "net/minecraftforge/common/ForgeChunkManager", + "tickets", + "Ljava/util/Map;"); + mv.visitVarInsn(ALOAD, 0); + mv.visitFieldInsn( + GETFIELD, + "net/minecraftforge/common/ForgeChunkManager$Ticket", + "world", + "L" + aWorld + ";"); + mv.visitMethodInsn( + INVOKEINTERFACE, + "java/util/Map", + "get", + "(Ljava/lang/Object;)Ljava/lang/Object;", + true); + mv.visitTypeInsn(CHECKCAST, "com/google/common/collect/Multimap"); + mv.visitLdcInsn("Forge"); + mv.visitVarInsn(ALOAD, 0); + mv.visitMethodInsn( + INVOKEINTERFACE, + "com/google/common/collect/Multimap", + "remove", + "(Ljava/lang/Object;Ljava/lang/Object;)Z", + true); + mv.visitInsn(POP); + Label l15 = new Label(); + mv.visitLabel(l15); + mv.visitLineNumber(713, l15); + Label l16 = new Label(); + mv.visitJumpInsn(GOTO, l16); + mv.visitLabel(l12); + mv.visitLineNumber(716, l12); + mv.visitFrame(F_SAME, 0, null, 0, null); + mv.visitFieldInsn( + GETSTATIC, + "net/minecraftforge/common/ForgeChunkManager", + "tickets", + "Ljava/util/Map;"); + mv.visitVarInsn(ALOAD, 0); + mv.visitFieldInsn( + GETFIELD, + "net/minecraftforge/common/ForgeChunkManager$Ticket", + "world", + "L" + aWorld + ";"); + mv.visitMethodInsn( + INVOKEINTERFACE, + "java/util/Map", + "get", + "(Ljava/lang/Object;)Ljava/lang/Object;", + true); + mv.visitTypeInsn(CHECKCAST, "com/google/common/collect/Multimap"); + mv.visitVarInsn(ALOAD, 0); + mv.visitMethodInsn( + INVOKESTATIC, + "net/minecraftforge/common/ForgeChunkManager$Ticket", + "access$200", + "(Lnet/minecraftforge/common/ForgeChunkManager$Ticket;)Ljava/lang/String;", + false); + mv.visitVarInsn(ALOAD, 0); + mv.visitMethodInsn( + INVOKEINTERFACE, + "com/google/common/collect/Multimap", + "remove", + "(Ljava/lang/Object;Ljava/lang/Object;)Z", + true); + mv.visitInsn(POP); + mv.visitLabel(l16); + mv.visitLineNumber(718, l16); + mv.visitFrame(F_SAME, 0, null, 0, null); + mv.visitInsn(RETURN); + Label l17 = new Label(); + mv.visitLabel(l17); + mv.visitLocalVariable( + "ticket", + "Lnet/minecraftforge/common/ForgeChunkManager$Ticket;", + null, + l0, + l17, + 0); + mv.visitLocalVariable("chunk", "L" + aChunkCoordIntPair + ";", null, l10, l8, 1); + mv.visitMaxs(3, 3); + mv.visitEnd(); + } } FMLRelaunchLog.log("[GT++ ASM] Chunkloading Patch", Level.INFO, "Method injection complete."); @@ -1125,8 +1236,7 @@ public class ClassTransformer_Forge_ChunkLoading { FMLRelaunchLog.log("[GT++ ASM] Chunkloading Patch", Level.INFO, "Found method " + name + ", Patching."); return null; } - MethodVisitor methodVisitor = super.visitMethod(access, name, desc, signature, exceptions); - return methodVisitor; + return super.visitMethod(access, name, desc, signature, exceptions); } } } diff --git a/src/main/java/gtPlusPlus/preloader/asm/transformers/ClassTransformer_LWJGL_Keyboard.java b/src/main/java/gtPlusPlus/preloader/asm/transformers/ClassTransformer_LWJGL_Keyboard.java index 3f6de75f9d..f478a0f1f1 100644 --- a/src/main/java/gtPlusPlus/preloader/asm/transformers/ClassTransformer_LWJGL_Keyboard.java +++ b/src/main/java/gtPlusPlus/preloader/asm/transformers/ClassTransformer_LWJGL_Keyboard.java @@ -32,7 +32,7 @@ public class ClassTransformer_LWJGL_Keyboard { private final ClassReader reader; private final ClassWriter writer; - private static final HashMap<String, String> mBadKeyCache = new HashMap<String, String>(); + private static final HashMap<String, String> mBadKeyCache = new HashMap<>(); /** * Gets a key's name @@ -74,8 +74,7 @@ public class ClassTransformer_LWJGL_Keyboard { GameSettings options = Minecraft.getMinecraft().gameSettings; KeyBinding[] akeybinding = Minecraft.getMinecraft().gameSettings.keyBindings; int i = akeybinding.length; - for (int j = 0; j < i; ++j) { - KeyBinding keybinding = akeybinding[j]; + for (KeyBinding keybinding : akeybinding) { if (keybinding != null && keybinding.getKeyCode() == aKey) { options.setOptionKeyBinding(keybinding, 0); FMLRelaunchLog.log( @@ -113,8 +112,7 @@ public class ClassTransformer_LWJGL_Keyboard { if (init()) { try { Object o = mKeyName.get(null); - if (o instanceof String[]) { - String[] y = (String[]) o; + if (o instanceof String[]y) { return y; } } catch (IllegalArgumentException | IllegalAccessException e) {} diff --git a/src/main/java/gtPlusPlus/preloader/asm/transformers/ClassTransformer_TC_ItemWispEssence.java b/src/main/java/gtPlusPlus/preloader/asm/transformers/ClassTransformer_TC_ItemWispEssence.java index cb88d7bc07..98e1e7d473 100644 --- a/src/main/java/gtPlusPlus/preloader/asm/transformers/ClassTransformer_TC_ItemWispEssence.java +++ b/src/main/java/gtPlusPlus/preloader/asm/transformers/ClassTransformer_TC_ItemWispEssence.java @@ -41,7 +41,6 @@ import org.objectweb.asm.Label; import org.objectweb.asm.MethodVisitor; import cpw.mods.fml.relauncher.FMLRelaunchLog; -import gtPlusPlus.preloader.DevHelper; public class ClassTransformer_TC_ItemWispEssence { @@ -52,17 +51,16 @@ public class ClassTransformer_TC_ItemWispEssence { public ClassTransformer_TC_ItemWispEssence(byte[] basicClass, boolean obfuscated2) { ClassReader aTempReader = null; ClassWriter aTempWriter = null; - boolean obfuscated = obfuscated2; FMLRelaunchLog.log( "[GT++ ASM] Thaumcraft WispEssence_Patch", Level.INFO, - "Are we patching obfuscated methods? " + obfuscated); - String aGetColour = obfuscated ? DevHelper.getSRG("getColorFromItemStack") : "getColorFromItemStack"; + "Are we patching obfuscated methods? " + obfuscated2); + String aGetColour = obfuscated2 ? "func_82790_a" : "getColorFromItemStack"; aTempReader = new ClassReader(basicClass); aTempWriter = new ClassWriter(aTempReader, ClassWriter.COMPUTE_FRAMES); aTempReader.accept(new AddAdapter(aTempWriter, new String[] { "getAspects", aGetColour }), 0); - injectMethod("getAspects", aTempWriter, obfuscated); - injectMethod(aGetColour, aTempWriter, obfuscated); + injectMethod("getAspects", aTempWriter, obfuscated2); + injectMethod(aGetColour, aTempWriter, obfuscated2); if (aTempReader != null && aTempWriter != null) { isValid = true; } else { diff --git a/src/main/java/gtPlusPlus/preloader/asm/transformers/ClassTransformer_TT_ThaumicRestorer.java b/src/main/java/gtPlusPlus/preloader/asm/transformers/ClassTransformer_TT_ThaumicRestorer.java deleted file mode 100644 index 9f48313f8f..0000000000 --- a/src/main/java/gtPlusPlus/preloader/asm/transformers/ClassTransformer_TT_ThaumicRestorer.java +++ /dev/null @@ -1,769 +0,0 @@ -package gtPlusPlus.preloader.asm.transformers; - -import static gregtech.api.enums.Mods.TinkerConstruct; -import static org.objectweb.asm.Opcodes.AALOAD; -import static org.objectweb.asm.Opcodes.ACC_PUBLIC; -import static org.objectweb.asm.Opcodes.ALOAD; -import static org.objectweb.asm.Opcodes.ASM5; -import static org.objectweb.asm.Opcodes.BIPUSH; -import static org.objectweb.asm.Opcodes.D2F; -import static org.objectweb.asm.Opcodes.DADD; -import static org.objectweb.asm.Opcodes.DDIV; -import static org.objectweb.asm.Opcodes.DUP; -import static org.objectweb.asm.Opcodes.DUP_X1; -import static org.objectweb.asm.Opcodes.GETFIELD; -import static org.objectweb.asm.Opcodes.GETSTATIC; -import static org.objectweb.asm.Opcodes.GOTO; -import static org.objectweb.asm.Opcodes.I2D; -import static org.objectweb.asm.Opcodes.IADD; -import static org.objectweb.asm.Opcodes.ICONST_0; -import static org.objectweb.asm.Opcodes.ICONST_1; -import static org.objectweb.asm.Opcodes.IFEQ; -import static org.objectweb.asm.Opcodes.IFLE; -import static org.objectweb.asm.Opcodes.IFNE; -import static org.objectweb.asm.Opcodes.IFNONNULL; -import static org.objectweb.asm.Opcodes.IFNULL; -import static org.objectweb.asm.Opcodes.IF_ICMPEQ; -import static org.objectweb.asm.Opcodes.ILOAD; -import static org.objectweb.asm.Opcodes.INVOKESTATIC; -import static org.objectweb.asm.Opcodes.INVOKEVIRTUAL; -import static org.objectweb.asm.Opcodes.IREM; -import static org.objectweb.asm.Opcodes.ISTORE; -import static org.objectweb.asm.Opcodes.ISUB; -import static org.objectweb.asm.Opcodes.POP; -import static org.objectweb.asm.Opcodes.PUTFIELD; -import static org.objectweb.asm.Opcodes.RETURN; - -import java.lang.reflect.Field; -import java.lang.reflect.Method; - -import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntity; - -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 org.objectweb.asm.Opcodes; - -import gtPlusPlus.core.util.reflect.ReflectionUtils; -import gtPlusPlus.preloader.Preloader_Logger; - -public class ClassTransformer_TT_ThaumicRestorer { - - private final boolean isValid; - private final ClassReader reader; - private final ClassWriter writer; - - private static boolean mInit = false; - - private static Class mTileRepairerClass; - private static Class mTTConfigHandler; - private static Class mTinkersConstructCompat; - private static Class mThaumicTinkerer; - private static Class mTCProxy; - - private static Method mIsTcTool; - private static Method mGetTcDamage; - private static Method mFixTcDamage; - private static Method mSparkle; - private static Method mDrawEssentia; - - private static Field mRepairTiconTools; - private static Field mTicksExisted; - private static Field mInventory; - private static Field mTookLastTick; - private static Field mDamageLastTick; - private static Field mProxyTC; - - private static boolean repairTConTools = false; - - // thaumic.tinkerer.common.block.tile.TileRepairer - - private static final boolean isTConstructTool(ItemStack aStack) { - return ReflectionUtils.invoke(null, mIsTcTool, new Object[] { aStack }); - } - - private static final int getDamage(ItemStack aStack) { - return (int) ReflectionUtils.invokeNonBool(null, mGetTcDamage, new Object[] { aStack }); - } - - private static final boolean fixDamage(ItemStack aStack, int aAmount) { - return ReflectionUtils.invoke(null, mFixTcDamage, new Object[] { aStack, aAmount }); - } - - private static final int drawEssentia(TileEntity aTile) { - return (int) ReflectionUtils.invokeNonBool(aTile, mDrawEssentia, new Object[] {}); - } - - private static final void sparkle(float a, float b, float c, int d) { - ReflectionUtils.invokeVoid(ReflectionUtils.getFieldValue(mProxyTC), mSparkle, new Object[] { a, b, c, d }); - } - - public static void updateEntity(TileEntity aTile) { - if (!mInit) { - // Set the classes we need - mTileRepairerClass = ReflectionUtils.getClass("thaumic.tinkerer.common.block.tile.TileRepairer"); - mTTConfigHandler = ReflectionUtils.getClass("thaumic.tinkerer.common.core.handler.ConfigHandler"); - mTinkersConstructCompat = ReflectionUtils.getClass("thaumic.tinkerer.common.compat.TinkersConstructCompat"); - mThaumicTinkerer = ReflectionUtils.getClass("thaumic.tinkerer.common.ThaumicTinkerer"); - mTCProxy = ReflectionUtils.getClass("thaumcraft.common.CommonProxy"); - // Set the methods we need - mIsTcTool = ReflectionUtils - .getMethod(mTinkersConstructCompat, "isTConstructTool", new Class[] { ItemStack.class }); - mGetTcDamage = ReflectionUtils - .getMethod(mTinkersConstructCompat, "getDamage", new Class[] { ItemStack.class }); - mFixTcDamage = ReflectionUtils - .getMethod(mTinkersConstructCompat, "fixDamage", new Class[] { ItemStack.class, int.class }); - mSparkle = ReflectionUtils - .getMethod(mTCProxy, "sparkle", new Class[] { float.class, float.class, float.class, int.class }); - mDrawEssentia = ReflectionUtils.getMethod(mTileRepairerClass, "drawEssentia", new Class[] {}); - // Set the fields we need - mRepairTiconTools = ReflectionUtils.getField(mTTConfigHandler, "repairTConTools"); - mTicksExisted = ReflectionUtils.getField(mTileRepairerClass, "ticksExisted"); - mInventory = ReflectionUtils.getField(mTileRepairerClass, "inventorySlots"); - mTookLastTick = ReflectionUtils.getField(mTileRepairerClass, "tookLastTick"); - mDamageLastTick = ReflectionUtils.getField(mTileRepairerClass, "dmgLastTick"); - mProxyTC = ReflectionUtils.getField(mThaumicTinkerer, "tcProxy"); - repairTConTools = ReflectionUtils.getFieldValue(mRepairTiconTools); - mInit = true; - } - if (mInit) { - if (mTileRepairerClass.isInstance(aTile)) { - int ticksExisted = (int) ReflectionUtils.getFieldValue(mTicksExisted, aTile); - ItemStack[] inventorySlots = (ItemStack[]) ReflectionUtils.getFieldValue(mInventory, aTile); - boolean tookLastTick = (boolean) ReflectionUtils.getFieldValue(mTookLastTick, aTile); - int dmgLastTick = (int) ReflectionUtils.getFieldValue(mDamageLastTick, aTile); - ticksExisted++; - ReflectionUtils.setField(aTile, mTicksExisted, ticksExisted); - boolean aDidRun = false; - if (ticksExisted % 10 == 0) { - if (TinkerConstruct.isModLoaded() && repairTConTools - && inventorySlots[0] != null - && isTConstructTool(inventorySlots[0])) { - final int dmg = getDamage(inventorySlots[0]); - if (dmg > 0) { - final int essentia = drawEssentia(aTile); - fixDamage(inventorySlots[0], essentia); - aTile.markDirty(); - if (dmgLastTick != 0 && dmgLastTick != dmg) { - sparkle( - (float) (aTile.xCoord + 0.25 + Math.random() / 2.0), - (float) (aTile.yCoord + 1 + Math.random() / 2.0), - (float) (aTile.zCoord + 0.25 + Math.random() / 2.0), - 0); - tookLastTick = true; - } else { - tookLastTick = false; - } - } else { - tookLastTick = false; - } - dmgLastTick = ((inventorySlots[0] == null) ? 0 : getDamage(inventorySlots[0])); - aDidRun = true; - } - if (inventorySlots[0] != null && inventorySlots[0].getItemDamage() > 0 - && inventorySlots[0].getItem().isRepairable()) { - final int essentia2 = drawEssentia(aTile); - final int dmg2 = inventorySlots[0].getItemDamage(); - inventorySlots[0].setItemDamage(Math.max(0, dmg2 - essentia2)); - aTile.markDirty(); - if (dmgLastTick != 0 && dmgLastTick != dmg2) { - sparkle( - (float) (aTile.xCoord + 0.25 + Math.random() / 2.0), - (float) (aTile.yCoord + 1 + Math.random() / 2.0), - (float) (aTile.zCoord + 0.25 + Math.random() / 2.0), - 0); - tookLastTick = true; - } else { - tookLastTick = false; - } - } else { - tookLastTick = false; - } - dmgLastTick = ((inventorySlots[0] == null) ? 0 : inventorySlots[0].getItemDamage()); - aDidRun = true; - } - if (aDidRun) { - ReflectionUtils.setField(aTile, mInventory, inventorySlots); - ReflectionUtils.setField(aTile, mTookLastTick, tookLastTick); - ReflectionUtils.setField(aTile, mDamageLastTick, dmgLastTick); - } - } - } - } - - public ClassTransformer_TT_ThaumicRestorer(byte[] basicClass) { - ClassReader aTempReader = null; - ClassWriter aTempWriter = null; - boolean obfuscated = false; - aTempReader = new ClassReader(basicClass); - aTempWriter = new ClassWriter(aTempReader, ClassWriter.COMPUTE_FRAMES); - AddAdapter aMethodStripper = new AddAdapter(aTempWriter); - aTempReader.accept(aMethodStripper, 0); - obfuscated = aMethodStripper.isObfuscated; - String aUpdateEntity = obfuscated ? "func_145845_h" : "updateEntity"; - Preloader_Logger.LOG( - "Thaumic Tinkerer RepairItem Patch", - Level.INFO, - "Patching: " + aUpdateEntity + ", Are we patching obfuscated methods? " + obfuscated); - // injectMethod(aUpdateEntity, aTempWriter, obfuscated); - injectMethodNew(aTempWriter, obfuscated); - if (aTempReader != null && aTempWriter != null) { - isValid = true; - } else { - isValid = false; - } - Preloader_Logger.LOG("Thaumic Tinkerer RepairItem Patch", Level.INFO, "Valid? " + isValid + "."); - reader = aTempReader; - writer = aTempWriter; - } - - public boolean isValidTransformer() { - return isValid; - } - - public ClassReader getReader() { - return reader; - } - - public ClassWriter getWriter() { - return writer; - } - - public boolean injectMethodNew(ClassWriter cw, boolean obfuscated) { - MethodVisitor mv; - boolean didInject = false; - String aUpdateEntity = obfuscated ? "func_145845_h" : "updateEntity"; - String aTileEntity = obfuscated ? "aor" : "net/minecraft/tileentity/TileEntity"; - Preloader_Logger.LOG("Thaumic Tinkerer RepairItem Patch", Level.INFO, "Injecting " + aUpdateEntity + "."); - mv = cw.visitMethod(ACC_PUBLIC, aUpdateEntity, "()V", null, null); - mv.visitCode(); - Label l0 = new Label(); - mv.visitLabel(l0); - mv.visitLineNumber(60, l0); - mv.visitVarInsn(ALOAD, 0); - mv.visitMethodInsn( - INVOKESTATIC, - "gtPlusPlus/preloader/asm/transformers/ClassTransformer_TT_ThaumicRestorer", - "updateEntity", - "(L" + aTileEntity + ";)V", - false); - Label l1 = new Label(); - mv.visitLabel(l1); - mv.visitLineNumber(61, l1); - mv.visitInsn(RETURN); - Label l2 = new Label(); - mv.visitLabel(l2); - mv.visitLocalVariable("this", "Lthaumic/tinkerer/common/block/tile/TileRepairer;", null, l0, l2, 0); - mv.visitMaxs(1, 1); - mv.visitEnd(); - didInject = true; - Preloader_Logger.LOG( - "Thaumic Tinkerer RepairItem Patch", - Level.INFO, - "Method injection complete. " + (obfuscated ? "Obfuscated" : "Non-Obfuscated")); - return didInject; - } - - public boolean injectMethod(String aMethodName, ClassWriter cw, boolean obfuscated) { - MethodVisitor mv; - boolean didInject = false; - Preloader_Logger.LOG("Thaumic Tinkerer RepairItem Patch", Level.INFO, "Injecting " + aMethodName + "."); - - String aItemStack = obfuscated ? "add" : "net/minecraft/item/ItemStack"; - String aItem = obfuscated ? "adb" : "net/minecraft/item/Item"; - String aGetItemDamage = obfuscated ? "func_150976_a" : "getItemDamage"; - String aGetItem = obfuscated ? "func_77973_b" : "getItem"; - String aSetItemDamage = obfuscated ? "func_77964_b" : "setItemDamage"; - String aIsRepairable = obfuscated ? "func_82789_a" : "isRepairable"; - - mv = cw.visitMethod(ACC_PUBLIC, aMethodName, "()V", null, null); - mv.visitCode(); - Label l0 = new Label(); - mv.visitLabel(l0); - mv.visitLineNumber(59, l0); - mv.visitVarInsn(ALOAD, 0); - mv.visitInsn(DUP); - mv.visitFieldInsn(GETFIELD, "thaumic/tinkerer/common/block/tile/TileRepairer", "ticksExisted", "I"); - mv.visitInsn(ICONST_1); - mv.visitInsn(IADD); - mv.visitInsn(DUP_X1); - mv.visitFieldInsn(PUTFIELD, "thaumic/tinkerer/common/block/tile/TileRepairer", "ticksExisted", "I"); - mv.visitIntInsn(BIPUSH, 10); - mv.visitInsn(IREM); - Label l1 = new Label(); - mv.visitJumpInsn(IFNE, l1); - Label l2 = new Label(); - mv.visitLabel(l2); - mv.visitLineNumber(60, l2); - mv.visitLdcInsn(TinkerConstruct.ID); - mv.visitMethodInsn(INVOKESTATIC, "cpw/mods/fml/common/Loader", "isModLoaded", "(Ljava/lang/String;)Z", false); - Label l3 = new Label(); - mv.visitJumpInsn(IFEQ, l3); - mv.visitFieldInsn(GETSTATIC, "thaumic/tinkerer/common/core/handler/ConfigHandler", "repairTConTools", "Z"); - mv.visitJumpInsn(IFEQ, l3); - Label l4 = new Label(); - mv.visitLabel(l4); - mv.visitLineNumber(61, l4); - mv.visitVarInsn(ALOAD, 0); - mv.visitFieldInsn( - GETFIELD, - "thaumic/tinkerer/common/block/tile/TileRepairer", - "inventorySlots", - "[L" + aItemStack + ";"); - mv.visitInsn(ICONST_0); - mv.visitInsn(AALOAD); - mv.visitJumpInsn(IFNULL, l3); - Label l5 = new Label(); - mv.visitLabel(l5); - mv.visitLineNumber(62, l5); - mv.visitVarInsn(ALOAD, 0); - mv.visitFieldInsn( - GETFIELD, - "thaumic/tinkerer/common/block/tile/TileRepairer", - "inventorySlots", - "[L" + aItemStack + ";"); - mv.visitInsn(ICONST_0); - mv.visitInsn(AALOAD); - mv.visitMethodInsn( - INVOKESTATIC, - "thaumic/tinkerer/common/compat/TinkersConstructCompat", - "isTConstructTool", - "(L" + aItemStack + ";)Z", - false); - mv.visitJumpInsn(IFEQ, l3); - Label l6 = new Label(); - mv.visitLabel(l6); - mv.visitLineNumber(63, l6); - mv.visitVarInsn(ALOAD, 0); - mv.visitFieldInsn( - GETFIELD, - "thaumic/tinkerer/common/block/tile/TileRepairer", - "inventorySlots", - "[L" + aItemStack + ";"); - mv.visitInsn(ICONST_0); - mv.visitInsn(AALOAD); - mv.visitMethodInsn( - INVOKESTATIC, - "thaumic/tinkerer/common/compat/TinkersConstructCompat", - "getDamage", - "(L" + aItemStack + ";)I", - false); - mv.visitVarInsn(ISTORE, 1); - Label l7 = new Label(); - mv.visitLabel(l7); - mv.visitLineNumber(64, l7); - mv.visitVarInsn(ILOAD, 1); - Label l8 = new Label(); - mv.visitJumpInsn(IFLE, l8); - Label l9 = new Label(); - mv.visitLabel(l9); - mv.visitLineNumber(65, l9); - mv.visitVarInsn(ALOAD, 0); - mv.visitMethodInsn( - INVOKEVIRTUAL, - "thaumic/tinkerer/common/block/tile/TileRepairer", - "drawEssentia", - "()I", - false); - mv.visitVarInsn(ISTORE, 2); - Label l10 = new Label(); - mv.visitLabel(l10); - mv.visitLineNumber(66, l10); - mv.visitVarInsn(ALOAD, 0); - mv.visitFieldInsn( - GETFIELD, - "thaumic/tinkerer/common/block/tile/TileRepairer", - "inventorySlots", - "[L" + aItemStack + ";"); - mv.visitInsn(ICONST_0); - mv.visitInsn(AALOAD); - mv.visitVarInsn(ILOAD, 2); - mv.visitMethodInsn( - INVOKESTATIC, - "thaumic/tinkerer/common/compat/TinkersConstructCompat", - "fixDamage", - "(L" + aItemStack + ";I)Z", - false); - mv.visitInsn(POP); - Label l11 = new Label(); - mv.visitLabel(l11); - mv.visitLineNumber(67, l11); - mv.visitVarInsn(ALOAD, 0); - mv.visitMethodInsn(INVOKEVIRTUAL, "thaumic/tinkerer/common/block/tile/TileRepairer", "markDirty", "()V", false); - Label l12 = new Label(); - mv.visitLabel(l12); - mv.visitLineNumber(68, l12); - mv.visitVarInsn(ALOAD, 0); - mv.visitFieldInsn(GETFIELD, "thaumic/tinkerer/common/block/tile/TileRepairer", "dmgLastTick", "I"); - Label l13 = new Label(); - mv.visitJumpInsn(IFEQ, l13); - mv.visitVarInsn(ALOAD, 0); - mv.visitFieldInsn(GETFIELD, "thaumic/tinkerer/common/block/tile/TileRepairer", "dmgLastTick", "I"); - mv.visitVarInsn(ILOAD, 1); - mv.visitJumpInsn(IF_ICMPEQ, l13); - Label l14 = new Label(); - mv.visitLabel(l14); - mv.visitLineNumber(69, l14); - mv.visitFieldInsn( - GETSTATIC, - "thaumic/tinkerer/common/ThaumicTinkerer", - "tcProxy", - "Lthaumcraft/common/CommonProxy;"); - mv.visitVarInsn(ALOAD, 0); - mv.visitFieldInsn(GETFIELD, "thaumic/tinkerer/common/block/tile/TileRepairer", "xCoord", "I"); - mv.visitInsn(I2D); - mv.visitLdcInsn(new Double("0.25")); - mv.visitInsn(DADD); - mv.visitMethodInsn(INVOKESTATIC, "java/lang/Math", "random", "()D", false); - mv.visitLdcInsn(new Double("2.0")); - mv.visitInsn(DDIV); - mv.visitInsn(DADD); - mv.visitInsn(D2F); - mv.visitVarInsn(ALOAD, 0); - mv.visitFieldInsn(GETFIELD, "thaumic/tinkerer/common/block/tile/TileRepairer", "yCoord", "I"); - mv.visitInsn(ICONST_1); - mv.visitInsn(IADD); - mv.visitInsn(I2D); - mv.visitMethodInsn(INVOKESTATIC, "java/lang/Math", "random", "()D", false); - mv.visitLdcInsn(new Double("2.0")); - mv.visitInsn(DDIV); - mv.visitInsn(DADD); - mv.visitInsn(D2F); - mv.visitVarInsn(ALOAD, 0); - mv.visitFieldInsn(GETFIELD, "thaumic/tinkerer/common/block/tile/TileRepairer", "zCoord", "I"); - mv.visitInsn(I2D); - mv.visitLdcInsn(new Double("0.25")); - mv.visitInsn(DADD); - mv.visitMethodInsn(INVOKESTATIC, "java/lang/Math", "random", "()D", false); - mv.visitLdcInsn(new Double("2.0")); - mv.visitInsn(DDIV); - mv.visitInsn(DADD); - mv.visitInsn(D2F); - mv.visitInsn(ICONST_0); - mv.visitMethodInsn(INVOKEVIRTUAL, "thaumcraft/common/CommonProxy", "sparkle", "(FFFI)V", false); - Label l15 = new Label(); - mv.visitLabel(l15); - mv.visitLineNumber(70, l15); - mv.visitVarInsn(ALOAD, 0); - mv.visitInsn(ICONST_1); - mv.visitFieldInsn(PUTFIELD, "thaumic/tinkerer/common/block/tile/TileRepairer", "tookLastTick", "Z"); - Label l16 = new Label(); - mv.visitLabel(l16); - mv.visitLineNumber(71, l16); - Label l17 = new Label(); - mv.visitJumpInsn(GOTO, l17); - mv.visitLabel(l13); - mv.visitFrame(Opcodes.F_APPEND, 2, new Object[] { Opcodes.INTEGER, Opcodes.INTEGER }, 0, null); - mv.visitVarInsn(ALOAD, 0); - mv.visitInsn(ICONST_0); - mv.visitFieldInsn(PUTFIELD, "thaumic/tinkerer/common/block/tile/TileRepairer", "tookLastTick", "Z"); - Label l18 = new Label(); - mv.visitLabel(l18); - mv.visitLineNumber(72, l18); - mv.visitJumpInsn(GOTO, l17); - mv.visitLabel(l8); - mv.visitFrame(Opcodes.F_CHOP, 1, null, 0, null); - mv.visitVarInsn(ALOAD, 0); - mv.visitInsn(ICONST_0); - mv.visitFieldInsn(PUTFIELD, "thaumic/tinkerer/common/block/tile/TileRepairer", "tookLastTick", "Z"); - mv.visitLabel(l17); - mv.visitLineNumber(73, l17); - mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null); - mv.visitVarInsn(ALOAD, 0); - mv.visitVarInsn(ALOAD, 0); - mv.visitFieldInsn( - GETFIELD, - "thaumic/tinkerer/common/block/tile/TileRepairer", - "inventorySlots", - "[L" + aItemStack + ";"); - mv.visitInsn(ICONST_0); - mv.visitInsn(AALOAD); - Label l19 = new Label(); - mv.visitJumpInsn(IFNONNULL, l19); - mv.visitInsn(ICONST_0); - Label l20 = new Label(); - mv.visitJumpInsn(GOTO, l20); - mv.visitLabel(l19); - mv.visitFrame(Opcodes.F_SAME1, 0, null, 1, new Object[] { "thaumic/tinkerer/common/block/tile/TileRepairer" }); - mv.visitVarInsn(ALOAD, 0); - mv.visitFieldInsn( - GETFIELD, - "thaumic/tinkerer/common/block/tile/TileRepairer", - "inventorySlots", - "[L" + aItemStack + ";"); - mv.visitInsn(ICONST_0); - mv.visitInsn(AALOAD); - mv.visitMethodInsn( - INVOKESTATIC, - "thaumic/tinkerer/common/compat/TinkersConstructCompat", - "getDamage", - "(L" + aItemStack + ";)I", - false); - mv.visitLabel(l20); - mv.visitFrame( - Opcodes.F_FULL, - 2, - new Object[] { "thaumic/tinkerer/common/block/tile/TileRepairer", Opcodes.INTEGER }, - 2, - new Object[] { "thaumic/tinkerer/common/block/tile/TileRepairer", Opcodes.INTEGER }); - mv.visitFieldInsn(PUTFIELD, "thaumic/tinkerer/common/block/tile/TileRepairer", "dmgLastTick", "I"); - Label l21 = new Label(); - mv.visitLabel(l21); - mv.visitLineNumber(74, l21); - mv.visitInsn(RETURN); - mv.visitLabel(l3); - mv.visitLineNumber(78, l3); - mv.visitFrame(Opcodes.F_CHOP, 1, null, 0, null); - mv.visitVarInsn(ALOAD, 0); - mv.visitFieldInsn( - GETFIELD, - "thaumic/tinkerer/common/block/tile/TileRepairer", - "inventorySlots", - "[L" + aItemStack + ";"); - mv.visitInsn(ICONST_0); - mv.visitInsn(AALOAD); - Label l22 = new Label(); - mv.visitJumpInsn(IFNULL, l22); - mv.visitVarInsn(ALOAD, 0); - mv.visitFieldInsn( - GETFIELD, - "thaumic/tinkerer/common/block/tile/TileRepairer", - "inventorySlots", - "[L" + aItemStack + ";"); - mv.visitInsn(ICONST_0); - mv.visitInsn(AALOAD); - mv.visitMethodInsn(INVOKEVIRTUAL, "" + aItemStack + "", "" + aGetItemDamage + "", "()I", false); - mv.visitJumpInsn(IFLE, l22); - mv.visitVarInsn(ALOAD, 0); - mv.visitFieldInsn( - GETFIELD, - "thaumic/tinkerer/common/block/tile/TileRepairer", - "inventorySlots", - "[L" + aItemStack + ";"); - mv.visitInsn(ICONST_0); - mv.visitInsn(AALOAD); - mv.visitMethodInsn(INVOKEVIRTUAL, "" + aItemStack + "", "" + aGetItem + "", "()L" + aItem + ";", false); - mv.visitMethodInsn(INVOKEVIRTUAL, "" + aItem + "", "" + aIsRepairable + "", "()Z", false); - mv.visitJumpInsn(IFEQ, l22); - Label l23 = new Label(); - mv.visitLabel(l23); - mv.visitLineNumber(79, l23); - mv.visitVarInsn(ALOAD, 0); - mv.visitMethodInsn( - INVOKEVIRTUAL, - "thaumic/tinkerer/common/block/tile/TileRepairer", - "drawEssentia", - "()I", - false); - mv.visitVarInsn(ISTORE, 1); - Label l24 = new Label(); - mv.visitLabel(l24); - mv.visitLineNumber(80, l24); - mv.visitVarInsn(ALOAD, 0); - mv.visitFieldInsn( - GETFIELD, - "thaumic/tinkerer/common/block/tile/TileRepairer", - "inventorySlots", - "[L" + aItemStack + ";"); - mv.visitInsn(ICONST_0); - mv.visitInsn(AALOAD); - mv.visitMethodInsn(INVOKEVIRTUAL, "" + aItemStack + "", "" + aGetItemDamage + "", "()I", false); - mv.visitVarInsn(ISTORE, 2); - Label l25 = new Label(); - mv.visitLabel(l25); - mv.visitLineNumber(81, l25); - mv.visitVarInsn(ALOAD, 0); - mv.visitFieldInsn( - GETFIELD, - "thaumic/tinkerer/common/block/tile/TileRepairer", - "inventorySlots", - "[L" + aItemStack + ";"); - mv.visitInsn(ICONST_0); - mv.visitInsn(AALOAD); - mv.visitInsn(ICONST_0); - mv.visitVarInsn(ILOAD, 2); - mv.visitVarInsn(ILOAD, 1); - mv.visitInsn(ISUB); - mv.visitMethodInsn(INVOKESTATIC, "java/lang/Math", "max", "(II)I", false); - mv.visitMethodInsn(INVOKEVIRTUAL, "" + aItemStack + "", "" + aSetItemDamage + "", "(I)V", false); - Label l26 = new Label(); - mv.visitLabel(l26); - mv.visitLineNumber(82, l26); - mv.visitVarInsn(ALOAD, 0); - mv.visitMethodInsn(INVOKEVIRTUAL, "thaumic/tinkerer/common/block/tile/TileRepairer", "markDirty", "()V", false); - Label l27 = new Label(); - mv.visitLabel(l27); - mv.visitLineNumber(84, l27); - mv.visitVarInsn(ALOAD, 0); - mv.visitFieldInsn(GETFIELD, "thaumic/tinkerer/common/block/tile/TileRepairer", "dmgLastTick", "I"); - Label l28 = new Label(); - mv.visitJumpInsn(IFEQ, l28); - mv.visitVarInsn(ALOAD, 0); - mv.visitFieldInsn(GETFIELD, "thaumic/tinkerer/common/block/tile/TileRepairer", "dmgLastTick", "I"); - mv.visitVarInsn(ILOAD, 2); - mv.visitJumpInsn(IF_ICMPEQ, l28); - Label l29 = new Label(); - mv.visitLabel(l29); - mv.visitLineNumber(85, l29); - mv.visitFieldInsn( - GETSTATIC, - "thaumic/tinkerer/common/ThaumicTinkerer", - "tcProxy", - "Lthaumcraft/common/CommonProxy;"); - mv.visitVarInsn(ALOAD, 0); - mv.visitFieldInsn(GETFIELD, "thaumic/tinkerer/common/block/tile/TileRepairer", "xCoord", "I"); - mv.visitInsn(I2D); - mv.visitLdcInsn(new Double("0.25")); - mv.visitInsn(DADD); - mv.visitMethodInsn(INVOKESTATIC, "java/lang/Math", "random", "()D", false); - mv.visitLdcInsn(new Double("2.0")); - mv.visitInsn(DDIV); - mv.visitInsn(DADD); - mv.visitInsn(D2F); - mv.visitVarInsn(ALOAD, 0); - mv.visitFieldInsn(GETFIELD, "thaumic/tinkerer/common/block/tile/TileRepairer", "yCoord", "I"); - mv.visitInsn(ICONST_1); - mv.visitInsn(IADD); - mv.visitInsn(I2D); - mv.visitMethodInsn(INVOKESTATIC, "java/lang/Math", "random", "()D", false); - mv.visitLdcInsn(new Double("2.0")); - mv.visitInsn(DDIV); - mv.visitInsn(DADD); - mv.visitInsn(D2F); - mv.visitVarInsn(ALOAD, 0); - mv.visitFieldInsn(GETFIELD, "thaumic/tinkerer/common/block/tile/TileRepairer", "zCoord", "I"); - mv.visitInsn(I2D); - mv.visitLdcInsn(new Double("0.25")); - mv.visitInsn(DADD); - mv.visitMethodInsn(INVOKESTATIC, "java/lang/Math", "random", "()D", false); - mv.visitLdcInsn(new Double("2.0")); - mv.visitInsn(DDIV); - mv.visitInsn(DADD); - mv.visitInsn(D2F); - mv.visitInsn(ICONST_0); - mv.visitMethodInsn(INVOKEVIRTUAL, "thaumcraft/common/CommonProxy", "sparkle", "(FFFI)V", false); - Label l30 = new Label(); - mv.visitLabel(l30); - mv.visitLineNumber(86, l30); - mv.visitVarInsn(ALOAD, 0); - mv.visitInsn(ICONST_1); - mv.visitFieldInsn(PUTFIELD, "thaumic/tinkerer/common/block/tile/TileRepairer", "tookLastTick", "Z"); - Label l31 = new Label(); - mv.visitLabel(l31); - mv.visitLineNumber(87, l31); - Label l32 = new Label(); - mv.visitJumpInsn(GOTO, l32); - mv.visitLabel(l28); - mv.visitFrame(Opcodes.F_APPEND, 2, new Object[] { Opcodes.INTEGER, Opcodes.INTEGER }, 0, null); - mv.visitVarInsn(ALOAD, 0); - mv.visitInsn(ICONST_0); - mv.visitFieldInsn(PUTFIELD, "thaumic/tinkerer/common/block/tile/TileRepairer", "tookLastTick", "Z"); - Label l33 = new Label(); - mv.visitLabel(l33); - mv.visitLineNumber(88, l33); - mv.visitJumpInsn(GOTO, l32); - mv.visitLabel(l22); - mv.visitFrame(Opcodes.F_CHOP, 2, null, 0, null); - mv.visitVarInsn(ALOAD, 0); - mv.visitInsn(ICONST_0); - mv.visitFieldInsn(PUTFIELD, "thaumic/tinkerer/common/block/tile/TileRepairer", "tookLastTick", "Z"); - mv.visitLabel(l32); - mv.visitLineNumber(90, l32); - mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null); - mv.visitVarInsn(ALOAD, 0); - mv.visitVarInsn(ALOAD, 0); - mv.visitFieldInsn( - GETFIELD, - "thaumic/tinkerer/common/block/tile/TileRepairer", - "inventorySlots", - "[L" + aItemStack + ";"); - mv.visitInsn(ICONST_0); - mv.visitInsn(AALOAD); - Label l34 = new Label(); - mv.visitJumpInsn(IFNONNULL, l34); - mv.visitInsn(ICONST_0); - Label l35 = new Label(); - mv.visitJumpInsn(GOTO, l35); - mv.visitLabel(l34); - mv.visitFrame(Opcodes.F_SAME1, 0, null, 1, new Object[] { "thaumic/tinkerer/common/block/tile/TileRepairer" }); - mv.visitVarInsn(ALOAD, 0); - mv.visitFieldInsn( - GETFIELD, - "thaumic/tinkerer/common/block/tile/TileRepairer", - "inventorySlots", - "[L" + aItemStack + ";"); - mv.visitInsn(ICONST_0); - mv.visitInsn(AALOAD); - mv.visitMethodInsn(INVOKEVIRTUAL, "" + aItemStack + "", "" + aGetItemDamage + "", "()I", false); - mv.visitLabel(l35); - mv.visitFrame( - Opcodes.F_FULL, - 1, - new Object[] { "thaumic/tinkerer/common/block/tile/TileRepairer" }, - 2, - new Object[] { "thaumic/tinkerer/common/block/tile/TileRepairer", Opcodes.INTEGER }); - mv.visitFieldInsn(PUTFIELD, "thaumic/tinkerer/common/block/tile/TileRepairer", "dmgLastTick", "I"); - mv.visitLabel(l1); - mv.visitLineNumber(92, l1); - mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null); - mv.visitInsn(RETURN); - Label l36 = new Label(); - mv.visitLabel(l36); - mv.visitLocalVariable("this", "Lthaumic/tinkerer/common/block/tile/TileRepairer;", null, l0, l36, 0); - mv.visitLocalVariable("dmg", "I", null, l7, l3, 1); - mv.visitLocalVariable("essentia", "I", null, l10, l18, 2); - mv.visitLocalVariable("essentia", "I", null, l24, l33, 1); - mv.visitLocalVariable("dmg", "I", null, l25, l33, 2); - mv.visitMaxs(9, 3); - mv.visitEnd(); - didInject = true; - Preloader_Logger.LOG( - "Thaumic Tinkerer RepairItem Patch", - Level.INFO, - "Method injection complete. " + (obfuscated ? "Obfuscated" : "Non-Obfuscated")); - return didInject; - } - - public class AddAdapter extends ClassVisitor { - - public AddAdapter(ClassVisitor cv) { - super(ASM5, cv); - this.cv = cv; - } - - private final String[] aMethodsToStrip = new String[] { "updateEntity", "func_145845_h" }; - public boolean isObfuscated = false; - - @Override - public MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions) { - - MethodVisitor methodVisitor; - boolean found = false; - - for (String s : aMethodsToStrip) { - if (name.equals(s)) { - found = true; - if (s.equals(aMethodsToStrip[1])) { - isObfuscated = true; - } - break; - } - } - if (!found) { - methodVisitor = super.visitMethod(access, name, desc, signature, exceptions); - } else { - methodVisitor = null; - } - - if (found) { - Preloader_Logger - .LOG("Thaumic Tinkerer RepairItem Patch", Level.INFO, "Found method " + name + ", removing."); - } - return methodVisitor; - } - } -} diff --git a/src/main/java/gtPlusPlus/preloader/asm/transformers/Preloader_ClassTransformer2.java b/src/main/java/gtPlusPlus/preloader/asm/transformers/Preloader_ClassTransformer2.java deleted file mode 100644 index 7e5f4d3f6f..0000000000 --- a/src/main/java/gtPlusPlus/preloader/asm/transformers/Preloader_ClassTransformer2.java +++ /dev/null @@ -1,14 +0,0 @@ -package gtPlusPlus.preloader.asm.transformers; - -public class Preloader_ClassTransformer2 { - - /** - * - * So what I'd try is something like patch a new field into BaseMetaTileEntity to hold the ItemNBT, then patch - * GT_Block_Machines.breakBlock to store the ItemNBT into that field by calling setItemNBT, and then patch - * BaseMetaTileEntity.getDrops to retrieve that field instead of calling setItemNBT But there's probably a simpler - * solution if all you want to do is fix this for your super tanks rather than for all GT machines (which would only - * include saving the output count for chest buffers and item distributors...) - * - */ -} diff --git a/src/main/java/gtPlusPlus/preloader/asm/transformers/Preloader_Transformer_Handler.java b/src/main/java/gtPlusPlus/preloader/asm/transformers/Preloader_Transformer_Handler.java index 405a804329..30a5bae031 100644 --- a/src/main/java/gtPlusPlus/preloader/asm/transformers/Preloader_Transformer_Handler.java +++ b/src/main/java/gtPlusPlus/preloader/asm/transformers/Preloader_Transformer_Handler.java @@ -1,117 +1,56 @@ package gtPlusPlus.preloader.asm.transformers; -import static gtPlusPlus.preloader.asm.ClassesToTransform.COFH_ORE_DICTIONARY_ARBITER; -import static gtPlusPlus.preloader.asm.ClassesToTransform.FORGE_CHUNK_MANAGER; -import static gtPlusPlus.preloader.asm.ClassesToTransform.FORGE_ORE_DICTIONARY; -import static gtPlusPlus.preloader.asm.ClassesToTransform.IC2_BLOCK_BASE_TILE_ENTITY; -import static gtPlusPlus.preloader.asm.ClassesToTransform.IC2_BLOCK_CHARGEPAD; -import static gtPlusPlus.preloader.asm.ClassesToTransform.IC2_BLOCK_ELECTRIC; -import static gtPlusPlus.preloader.asm.ClassesToTransform.IC2_BLOCK_GENERATOR; -import static gtPlusPlus.preloader.asm.ClassesToTransform.IC2_BLOCK_HEAT_GENERATOR; -import static gtPlusPlus.preloader.asm.ClassesToTransform.IC2_BLOCK_KINETIC_GENERATOR; -import static gtPlusPlus.preloader.asm.ClassesToTransform.IC2_BLOCK_LUMINATOR; -import static gtPlusPlus.preloader.asm.ClassesToTransform.IC2_BLOCK_MACHINE1; -import static gtPlusPlus.preloader.asm.ClassesToTransform.IC2_BLOCK_MACHINE2; -import static gtPlusPlus.preloader.asm.ClassesToTransform.IC2_BLOCK_MACHINE3; -import static gtPlusPlus.preloader.asm.ClassesToTransform.IC2_BLOCK_PERSONAL; -import static gtPlusPlus.preloader.asm.ClassesToTransform.IC2_BLOCK_REACTOR_ACCESS_HATCH; -import static gtPlusPlus.preloader.asm.ClassesToTransform.IC2_BLOCK_REACTOR_CHAMBER; -import static gtPlusPlus.preloader.asm.ClassesToTransform.IC2_BLOCK_REACTOR_FLUID_PORT; -import static gtPlusPlus.preloader.asm.ClassesToTransform.IC2_BLOCK_REACTOR_REDSTONE_PORT; -import static gtPlusPlus.preloader.asm.ClassesToTransform.IC2_BLOCK_REACTOR_VESSEL; -import static gtPlusPlus.preloader.asm.ClassesToTransform.LWJGL_KEYBOARD; -import static gtPlusPlus.preloader.asm.ClassesToTransform.MINECRAFT_GAMESETTINGS; -import static gtPlusPlus.preloader.asm.ClassesToTransform.MINECRAFT_GAMESETTINGS_OBF; -import static gtPlusPlus.preloader.asm.ClassesToTransform.THAUMCRAFT_ITEM_WISP_ESSENCE; - -import java.io.File; -import java.io.IOException; +import java.util.HashSet; +import java.util.Set; import net.minecraft.launchwrapper.IClassTransformer; -import net.minecraft.launchwrapper.Launch; import org.objectweb.asm.ClassReader; import org.objectweb.asm.ClassWriter; -import cpw.mods.fml.relauncher.CoreModManager; -import cpw.mods.fml.relauncher.ReflectionHelper; -import gtPlusPlus.api.objects.data.AutoMap; import gtPlusPlus.core.util.reflect.ReflectionUtils; -import gtPlusPlus.preloader.DevHelper; +import gtPlusPlus.preloader.CORE_Preloader; import gtPlusPlus.preloader.Preloader_Logger; import gtPlusPlus.preloader.asm.AsmConfig; import gtPlusPlus.preloader.asm.transformers.Preloader_ClassTransformer.OreDictionaryVisitor; public class Preloader_Transformer_Handler implements IClassTransformer { - public static final AsmConfig mConfig; - public static final AutoMap<String> IC2_WRENCH_PATCH_CLASS_NAMES = new AutoMap<String>(); + private static final Set<String> IC2_WRENCH_PATCH_CLASS_NAMES = new HashSet<>(); + private static final String LWJGL_KEYBOARD = "org.lwjgl.input.Keyboard"; + private static final String MINECRAFT_GAMESETTINGS = "net.minecraft.client.settings.GameSettings"; + private static final String FORGE_CHUNK_MANAGER = "net.minecraftforge.common.ForgeChunkManager"; + private static final String FORGE_ORE_DICTIONARY = "net.minecraftforge.oredict.OreDictionary"; + private static final String COFH_ORE_DICTIONARY_ARBITER = "cofh.core.util.oredict.OreDictionaryArbiter"; + private static final String THAUMCRAFT_ITEM_WISP_ESSENCE = "thaumcraft.common.items.ItemWispEssence"; static { - mConfig = new AsmConfig(new File("config/GTplusplus/asm.cfg")); - Preloader_Logger.INFO("Config Location: " + AsmConfig.config.getConfigFile().getAbsolutePath()); - Preloader_Logger.INFO("Is DevHelper Valid? " + DevHelper.mIsValidHelper); - IC2_WRENCH_PATCH_CLASS_NAMES.add(IC2_BLOCK_BASE_TILE_ENTITY); - IC2_WRENCH_PATCH_CLASS_NAMES.add(IC2_BLOCK_MACHINE1); - IC2_WRENCH_PATCH_CLASS_NAMES.add(IC2_BLOCK_MACHINE2); - IC2_WRENCH_PATCH_CLASS_NAMES.add(IC2_BLOCK_MACHINE3); - IC2_WRENCH_PATCH_CLASS_NAMES.add(IC2_BLOCK_KINETIC_GENERATOR); - IC2_WRENCH_PATCH_CLASS_NAMES.add(IC2_BLOCK_HEAT_GENERATOR); - IC2_WRENCH_PATCH_CLASS_NAMES.add(IC2_BLOCK_GENERATOR); - IC2_WRENCH_PATCH_CLASS_NAMES.add(IC2_BLOCK_REACTOR_ACCESS_HATCH); - IC2_WRENCH_PATCH_CLASS_NAMES.add(IC2_BLOCK_REACTOR_CHAMBER); - IC2_WRENCH_PATCH_CLASS_NAMES.add(IC2_BLOCK_REACTOR_FLUID_PORT); - IC2_WRENCH_PATCH_CLASS_NAMES.add(IC2_BLOCK_REACTOR_REDSTONE_PORT); - IC2_WRENCH_PATCH_CLASS_NAMES.add(IC2_BLOCK_REACTOR_VESSEL); - IC2_WRENCH_PATCH_CLASS_NAMES.add(IC2_BLOCK_PERSONAL); - IC2_WRENCH_PATCH_CLASS_NAMES.add(IC2_BLOCK_CHARGEPAD); - IC2_WRENCH_PATCH_CLASS_NAMES.add(IC2_BLOCK_ELECTRIC); - IC2_WRENCH_PATCH_CLASS_NAMES.add(IC2_BLOCK_LUMINATOR); - } - - private static Boolean mObf = null; - - public boolean checkObfuscated() { - if (mObf != null) { - return mObf; - } - 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; - } - } - mObf = obfuscated; - return obfuscated; + IC2_WRENCH_PATCH_CLASS_NAMES.add("ic2.core.block.BlockTileEntity"); + IC2_WRENCH_PATCH_CLASS_NAMES.add("ic2.core.block.machine.BlockMachine"); + IC2_WRENCH_PATCH_CLASS_NAMES.add("ic2.core.block.machine.BlockMachine2"); + IC2_WRENCH_PATCH_CLASS_NAMES.add("ic2.core.block.machine.BlockMachine3"); + IC2_WRENCH_PATCH_CLASS_NAMES.add("ic2.core.block.kineticgenerator.block.BlockKineticGenerator"); + IC2_WRENCH_PATCH_CLASS_NAMES.add("ic2.core.block.heatgenerator.block.BlockHeatGenerator"); + IC2_WRENCH_PATCH_CLASS_NAMES.add("ic2.core.block.generator.block.BlockGenerator"); + IC2_WRENCH_PATCH_CLASS_NAMES.add("ic2.core.block.reactor.block.BlockReactorAccessHatch"); + IC2_WRENCH_PATCH_CLASS_NAMES.add("ic2.core.block.reactor.block.BlockReactorChamber"); + IC2_WRENCH_PATCH_CLASS_NAMES.add("ic2.core.block.reactor.block.BlockReactorFluidPort"); + IC2_WRENCH_PATCH_CLASS_NAMES.add("ic2.core.block.reactor.block.BlockReactorRedstonePort"); + IC2_WRENCH_PATCH_CLASS_NAMES.add("ic2.core.block.reactor.block.BlockReactorVessel"); + IC2_WRENCH_PATCH_CLASS_NAMES.add("ic2.core.block.personal.BlockPersonal.class"); + IC2_WRENCH_PATCH_CLASS_NAMES.add("ic2.core.block.wiring.BlockChargepad.class"); + IC2_WRENCH_PATCH_CLASS_NAMES.add("ic2.core.block.wiring.BlockElectric.class"); + IC2_WRENCH_PATCH_CLASS_NAMES.add("ic2.core.block.wiring.BlockLuminator.class"); } @Override public byte[] transform(String name, String transformedName, byte[] basicClass) { - // Is this environment obfuscated? (Extra checks just in case some weird stuff happens during the check) - final boolean obfuscated = checkObfuscated(); - // Fix LWJGL index array out of bounds on keybinding IDs - if ((transformedName.equals(LWJGL_KEYBOARD) || transformedName.equals(MINECRAFT_GAMESETTINGS_OBF) - || transformedName.equals(MINECRAFT_GAMESETTINGS)) && AsmConfig.enabledLwjglKeybindingFix - // Do not transform if using lwjgl3 + if ((transformedName.equals(LWJGL_KEYBOARD) || transformedName.equals(MINECRAFT_GAMESETTINGS)) + && AsmConfig.enabledLwjglKeybindingFix + // Do not transform if using lwjgl3 && !ReflectionUtils.doesClassExist("org.lwjgl.system.Platform")) { - boolean isClientSettingsClass = false; - if (!transformedName.equals("org.lwjgl.input.Keyboard")) { - isClientSettingsClass = true; - } + boolean isClientSettingsClass = !transformedName.equals("org.lwjgl.input.Keyboard"); Preloader_Logger.INFO("LWJGL Keybinding index out of bounds fix", "Transforming " + transformedName); return new ClassTransformer_LWJGL_Keyboard(basicClass, isClientSettingsClass).getWriter().toByteArray(); } @@ -131,25 +70,24 @@ public class Preloader_Transformer_Handler implements IClassTransformer { } // Fix the OreDictionary COFH - if (transformedName.equals(COFH_ORE_DICTIONARY_ARBITER) && (AsmConfig.enableCofhPatch || !obfuscated)) { + if (transformedName.equals(COFH_ORE_DICTIONARY_ARBITER) + && (AsmConfig.enableCofhPatch || CORE_Preloader.DEV_ENVIRONMENT)) { Preloader_Logger.INFO("COFH", "Transforming " + transformedName); return new ClassTransformer_COFH_OreDictionaryArbiter(basicClass).getWriter().toByteArray(); } - // Fix IC2 Wrench Harvesting - for (String y : IC2_WRENCH_PATCH_CLASS_NAMES) { - if (transformedName.equals(y)) { - Preloader_Logger.INFO("IC2 getHarvestTool Patch", "Transforming " + transformedName); - return new ClassTransformer_IC2_GetHarvestTool(basicClass, obfuscated, transformedName).getWriter() - .toByteArray(); - } + if (IC2_WRENCH_PATCH_CLASS_NAMES.contains(transformedName)) { + Preloader_Logger.INFO("IC2 getHarvestTool Patch", "Transforming " + transformedName); + return new ClassTransformer_IC2_GetHarvestTool(basicClass, !CORE_Preloader.DEV_ENVIRONMENT, transformedName) + .getWriter().toByteArray(); } // Fix Thaumcraft stuff // Patching ItemWispEssence to allow invalid item handling if (transformedName.equals(THAUMCRAFT_ITEM_WISP_ESSENCE) && AsmConfig.enableTcAspectSafety) { Preloader_Logger.INFO("Thaumcraft WispEssence_Patch", "Transforming " + transformedName); - return new ClassTransformer_TC_ItemWispEssence(basicClass, obfuscated).getWriter().toByteArray(); + return new ClassTransformer_TC_ItemWispEssence(basicClass, !CORE_Preloader.DEV_ENVIRONMENT).getWriter() + .toByteArray(); } return basicClass; |