diff --git a/gradle.properties b/gradle.properties index 7520aad5201..945ed385cbd 100644 --- a/gradle.properties +++ b/gradle.properties @@ -70,7 +70,7 @@ mixinConfigRefmap= generateMixinConfig = false # Specify the core mod entry class if you use a core mod. This class must implement IFMLLoadingPlugin! # Example value: coreModClass = asm.FMLPlugin + modGroup = com.myname.mymodid -> com.myname.mymodid.asm.FMLPlugin -coreModClass = asm.GregTechLoadingPlugin +coreModClass=mixins.GregTechMixinLoadingPlugin # If your project is only a consolidation of mixins or a core mod and does NOT contain a 'normal' mod (meaning that # there is no class annotated with @Mod) you want this to be true. When in doubt: leave it on false! containsMixinsAndOrCoreModOnly=false diff --git a/src/main/java/gregtech/asm/GregTechTransformer.java b/src/main/java/gregtech/asm/GregTechTransformer.java deleted file mode 100644 index c3b906dd4ae..00000000000 --- a/src/main/java/gregtech/asm/GregTechTransformer.java +++ /dev/null @@ -1,245 +0,0 @@ -package gregtech.asm; - -import net.minecraft.launchwrapper.IClassTransformer; - -import org.objectweb.asm.Opcodes; - -public class GregTechTransformer implements IClassTransformer, Opcodes { - - @Override - public byte[] transform(String name, String transformedName, byte[] basicClass) { - String internalName = transformedName.replace('.', '/'); - switch (internalName) { - /* - * case JEIVisitor.TARGET_CLASS_NAME: { - * ClassReader classReader = new ClassReader(basicClass); - * ClassWriter classWriter = new ClassWriter(0); - * classReader.accept(new TargetClassVisitor(classWriter, JEIVisitor.TARGET_METHOD, JEIVisitor::new), 0); - * return classWriter.toByteArray(); - * } - */ - /* - * case ConcretePowderVisitor.TARGET_CLASS_NAME: - * if (ConfigHolder.recipes.disableConcreteInWorld) { - * ClassReader classReader = new ClassReader(basicClass); - * ClassWriter classWriter = new ClassWriter(ClassWriter.COMPUTE_FRAMES | ClassWriter.COMPUTE_MAXS); - * classReader.accept(new TargetClassVisitor(classWriter, ConcretePowderVisitor.TARGET_METHOD, - * ConcretePowderVisitor::new), 0); - * return classWriter.toByteArray(); - * } - * break; - */ - /* - * case LayerCustomHeadVisitor.TARGET_CLASS_NAME: { - * ClassReader classReader = new ClassReader(basicClass); - * ClassWriter classWriter = new ClassWriter(ClassWriter.COMPUTE_FRAMES | ClassWriter.COMPUTE_MAXS); - * classReader.accept(new TargetClassVisitor(classWriter, LayerCustomHeadVisitor.TARGET_METHOD, - * LayerCustomHeadVisitor::new), 0); - * return classWriter.toByteArray(); - * } - */ - /* - * case SpecialArmorApplyVisitor.TARGET_CLASS_NAME: { - * ClassReader classReader = new ClassReader(basicClass); - * ClassWriter classWriter = new ClassWriter(ClassWriter.COMPUTE_FRAMES | ClassWriter.COMPUTE_MAXS); - * classReader.accept(new SpecialArmorClassVisitor(classWriter, SpecialArmorApplyVisitor.TARGET_METHOD, - * SpecialArmorApplyVisitor::new), 0); - * return classWriter.toByteArray(); - * } - */ - /* - * case LayerArmorBaseVisitor.TARGET_CLASS_NAME: { - * ClassReader classReader = new ClassReader(basicClass); - * ClassWriter classWriter = new ClassWriter(ClassWriter.COMPUTE_FRAMES | ClassWriter.COMPUTE_MAXS); - * classReader.accept(new TargetClassVisitor(classWriter, LayerArmorBaseVisitor.TARGET_METHOD, - * LayerArmorBaseVisitor::new), 0); - * return classWriter.toByteArray(); - * } - */ - /* - * case RegionRenderCacheBuilderVisitor.TARGET_CLASS_NAME: { - * ClassReader classReader = new ClassReader(basicClass); - * ClassWriter classWriter = new ClassWriter(ClassWriter.COMPUTE_FRAMES | ClassWriter.COMPUTE_MAXS); - * classReader.accept(new TargetClassVisitor(classWriter, RegionRenderCacheBuilderVisitor.TARGET_METHOD, - * RegionRenderCacheBuilderVisitor::new), 0); - * return classWriter.toByteArray(); - * } - */ - /* - * case RenderChunkVisitor.TARGET_CLASS_NAME: { - * ClassReader classReader = new ClassReader(basicClass); - * ClassWriter classWriter = new ClassWriter(ClassWriter.COMPUTE_FRAMES | ClassWriter.COMPUTE_MAXS); - * classReader.accept( - * new TargetClassVisitor(classWriter, RenderChunkVisitor.TARGET_METHOD, RenderChunkVisitor::new), - * 0); - * return classWriter.toByteArray(); - * } - */ - /* - * case EntityRendererVisitor.TARGET_CLASS_NAME: { - * ClassReader classReader = new ClassReader(basicClass); - * ClassWriter classWriter = new ClassWriter(ClassWriter.COMPUTE_FRAMES | ClassWriter.COMPUTE_MAXS); - * classReader.accept(new TargetClassVisitor(classWriter, EntityRendererVisitor.TARGET_METHOD, - * EntityRendererVisitor::new), 0); - * return classWriter.toByteArray(); - * } - */ - /* - * case BlockVisitor.TARGET_CLASS_NAME: { - * try { - * // must use Class#forName because CTM is client side only, and there is no other way to check - * Class.forName("team.chisel.ctm.CTM", false, Launch.classLoader); - * } catch (ClassNotFoundException ignored) { - * ClassReader classReader = new ClassReader(basicClass); - * ClassWriter classWriter = new ClassWriter(ClassWriter.COMPUTE_FRAMES | ClassWriter.COMPUTE_MAXS); - * ClassNode classNode = new ClassNode(); - * classReader.accept(classNode, 0); - * BlockVisitor.handleClassNode(classNode).accept(classWriter); - * return classWriter.toByteArray(); - * } - * break; - * } - */ - /* - * case WorldVisitor.TARGET_CLASS_NAME: { - * ClassReader classReader = new ClassReader(basicClass); - * ClassWriter classWriter = new ClassWriter(ClassWriter.COMPUTE_FRAMES | ClassWriter.COMPUTE_MAXS); - * classReader.accept(new TargetClassVisitor(classWriter, WorldVisitor.TARGET_METHOD, WorldVisitor::new), - * 0); - * return classWriter.toByteArray(); - * } - */ - /* - * case ModelCTMVisitor.TARGET_CLASS_NAME: { - * ClassReader classReader = new ClassReader(basicClass); - * ClassWriter classWriter = new ClassWriter(ClassWriter.COMPUTE_FRAMES | ClassWriter.COMPUTE_MAXS); - * classReader.accept( - * new TargetClassVisitor(classWriter, ModelCTMVisitor.TARGET_METHOD, ModelCTMVisitor::new), 0); - * return classWriter.toByteArray(); - * } - */ - /* - * case AbstractCTMBakedModelVisitor.TARGET_CLASS_NAME: { - * ClassReader classReader = new ClassReader(basicClass); - * ClassWriter classWriter = new ClassWriter(ClassWriter.COMPUTE_FRAMES | ClassWriter.COMPUTE_MAXS); - * classReader.accept(new TargetClassVisitor(classWriter, AbstractCTMBakedModelVisitor.TARGET_METHOD, - * AbstractCTMBakedModelVisitor::new), 0); - * return classWriter.toByteArray(); - * } - */ - /* - * case LittleTilesVisitor.TARGET_CLASS_NAME: { - * ClassReader classReader = new ClassReader(basicClass); - * ClassWriter classWriter = new ClassWriter(ClassWriter.COMPUTE_FRAMES | ClassWriter.COMPUTE_MAXS); - * classReader.accept( - * new TargetClassVisitor(classWriter, LittleTilesVisitor.TARGET_METHOD, LittleTilesVisitor::new), - * 0); - * return classWriter.toByteArray(); - * } - */ - /* - * case CCLVisitor.TARGET_CLASS_NAME: { - * ClassReader classReader = new ClassReader(basicClass); - * ClassWriter classWriter = new ClassWriter(ClassWriter.COMPUTE_FRAMES | ClassWriter.COMPUTE_MAXS); - * classReader.accept(new TargetClassVisitor(classWriter, CCLVisitor.TARGET_METHOD, CCLVisitor::new), 0); - * return classWriter.toByteArray(); - * } - * case RenderItemVisitor.TARGET_CLASS_NAME: { - * ClassNode classNode = new ClassNode(); - * ClassReader classReader = new ClassReader(basicClass); - * classReader.accept(classNode, 0); - * Iterator methods = classNode.methods.iterator(); - * RenderItemVisitor.transform(methods); - * ClassWriter classWriter = new ClassWriter(0); - * classNode.accept(classWriter); - * return classWriter.toByteArray(); - * } - */ - /* - * case RecipeRepairItemVisitor.TARGET_CLASS_NAME: { - * ClassReader classReader = new ClassReader(basicClass); - * ClassWriter classWriter = new ClassWriter(ClassWriter.COMPUTE_FRAMES | ClassWriter.COMPUTE_MAXS); - * ClassNode classNode = new ClassNode(); - * classReader.accept(classNode, 0); - * RecipeRepairItemVisitor.handleClassNode(classNode).accept(classWriter); - * return classWriter.toByteArray(); - * } - */ - /* - * case DamageSourceVisitor.TARGET_CLASS_NAME: { - * ClassReader classReader = new ClassReader(basicClass); - * ClassWriter classWriter = new ClassWriter(ClassWriter.COMPUTE_FRAMES | ClassWriter.COMPUTE_MAXS); - * ClassNode classNode = new ClassNode(); - * classReader.accept(classNode, 0); - * DamageSourceVisitor.handleClassNode(classNode).accept(classWriter); - * return classWriter.toByteArray(); - * } - */ - /* - * case TheOneProbeVisitor.TARGET_CLASS_NAME: { - * ClassReader classReader = new ClassReader(basicClass); - * ClassWriter classWriter = new ClassWriter(0); - * classReader.accept( - * new TargetClassVisitor(classWriter, TheOneProbeVisitor.TARGET_METHOD, TheOneProbeVisitor::new), - * 0); - * return classWriter.toByteArray(); - * } - */ - /* - * case MinecraftVisitor.TARGET_CLASS_NAME: { - * ClassReader classReader = new ClassReader(basicClass); - * ClassWriter classWriter = new ClassWriter(0); - * classReader.accept( - * new TargetClassVisitor(classWriter, MinecraftVisitor.PROCESS_KEY_F3, MinecraftVisitor::new), - * ClassReader.EXPAND_FRAMES); - * return classWriter.toByteArray(); - * } - */ - /* - * case ModelLoaderRegistryVisitor.TARGET_CLASS_NAME: { - * ClassReader classReader = new ClassReader(basicClass); - * ClassWriter classWriter = new ClassWriter(0); - * classReader.accept(new TargetClassVisitor(classWriter, ModelLoaderRegistryVisitor.TARGET_METHOD, - * ModelLoaderRegistryVisitor::new), ClassReader.EXPAND_FRAMES); - * return classWriter.toByteArray(); - * } - */ - // TODO: Remove when vintagium has proper support for other rendering layers - // case VintagiumPassManagerVisitor.TARGET_CLASS_NAME: { - // ClassReader classReader = new ClassReader(basicClass); - // ClassWriter classWriter = new ClassWriter(ClassWriter.COMPUTE_FRAMES | ClassWriter.COMPUTE_MAXS); - // classReader.accept( - // new TargetClassVisitor(classWriter, VintagiumPassManagerVisitor.TARGET_METHOD, - // VintagiumPassManagerVisitor::new), - // ClassReader.EXPAND_FRAMES); - // return classWriter.toByteArray(); - // } - // case VintagiumManagerVistor.TARGET_CLASS_NAME: { - // ClassReader classReader = new ClassReader(basicClass); - // ClassWriter classWriter = new ClassWriter(ClassWriter.COMPUTE_FRAMES | ClassWriter.COMPUTE_MAXS); - // classReader.accept( - // new VintagiumManagerVistor(classWriter), - // 0); - // return classWriter.toByteArray(); - // } - // case OreIngredientVisitor.TARGET_CLASS_NAME: { - // ClassReader classReader = new ClassReader(basicClass); - // ClassWriter classWriter = new ClassWriter(0); - // classReader.accept(new TargetClassVisitor(classWriter, OreIngredientVisitor.TARGET_METHOD, - // OreIngredientVisitor::new), 0); - // return classWriter.toByteArray(); - // } - /* - * if (EnchantmentCanApplyVisitor.CLASS_TO_MAPPING_MAP.containsKey(internalName)) { - * ObfMapping methodMapping = EnchantmentCanApplyVisitor.CLASS_TO_MAPPING_MAP.get(internalName); - * ClassReader classReader = new ClassReader(basicClass); - * ClassWriter classWriter = new ClassWriter(ClassWriter.COMPUTE_FRAMES | ClassWriter.COMPUTE_MAXS); - * classReader.accept(new TargetClassVisitor(classWriter, methodMapping, - * mv -> new EnchantmentCanApplyVisitor(mv, methodMapping)), ClassReader.EXPAND_FRAMES); - * return classWriter.toByteArray(); - * } - */ - } - return basicClass; - } -} diff --git a/src/main/java/gregtech/asm/hooks/ArmorHooks.java b/src/main/java/gregtech/asm/hooks/ArmorHooks.java deleted file mode 100644 index 5eec5ddeff6..00000000000 --- a/src/main/java/gregtech/asm/hooks/ArmorHooks.java +++ /dev/null @@ -1,26 +0,0 @@ -package gregtech.asm.hooks; - -import gregtech.api.items.armor.IArmorItem; - -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.item.ItemStack; -import net.minecraft.util.DamageSource; -import net.minecraft.util.NonNullList; - -@SuppressWarnings("unused") -public class ArmorHooks { - - public static void damageArmor(float damage, EntityLivingBase entity, NonNullList inventory, - DamageSource damageSource) { - double armorDamage = Math.max(1.0F, damage / 4.0F); - for (int i = 0; i < inventory.size(); i++) { - ItemStack itemStack = inventory.get(i); - if (itemStack.getItem() instanceof IArmorItem) { - ((IArmorItem) itemStack.getItem()).damageArmor(entity, itemStack, damageSource, (int) armorDamage, i); - if (inventory.get(i).getCount() == 0) { - inventory.set(i, ItemStack.EMPTY); - } - } - } - } -} diff --git a/src/main/java/gregtech/asm/hooks/ArmorRenderHooks.java b/src/main/java/gregtech/asm/hooks/ArmorRenderHooks.java deleted file mode 100644 index 57b6728fc31..00000000000 --- a/src/main/java/gregtech/asm/hooks/ArmorRenderHooks.java +++ /dev/null @@ -1,85 +0,0 @@ -package gregtech.asm.hooks; - -import gregtech.api.items.armor.IArmorItem; - -import net.minecraft.client.model.ModelBase; -import net.minecraft.client.model.ModelBiped; -import net.minecraft.client.renderer.GlStateManager; -import net.minecraft.client.renderer.GlStateManager.DestFactor; -import net.minecraft.client.renderer.GlStateManager.SourceFactor; -import net.minecraft.client.renderer.entity.layers.LayerArmorBase; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.inventory.EntityEquipmentSlot; -import net.minecraft.item.ItemStack; -import net.minecraft.util.ResourceLocation; -import net.minecraftforge.client.ForgeHooksClient; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; - -@SuppressWarnings("unused") -@SideOnly(Side.CLIENT) -public class ArmorRenderHooks { - - public static boolean shouldNotRenderHeadItem(EntityLivingBase entityLivingBase) { - ItemStack itemStack = entityLivingBase.getItemStackFromSlot(EntityEquipmentSlot.HEAD); - return isArmorItem(itemStack, EntityEquipmentSlot.HEAD); - } - - public static boolean isArmorItem(ItemStack itemStack, EntityEquipmentSlot slot) { - return (itemStack.getItem() instanceof IArmorItem && itemStack.getItem().getEquipmentSlot(itemStack) == slot); - } - - public static void renderArmorLayer(LayerArmorBase layer, EntityLivingBase entity, float limbSwing, - float limbSwingAmount, float partialTicks, float ageInTicks, float netHeadYaw, - float headPitch, float scale, EntityEquipmentSlot slotIn) { - ItemStack itemStack = entity.getItemStackFromSlot(slotIn); - - if (isArmorItem(itemStack, slotIn)) { - IArmorItem armorItem = (IArmorItem) itemStack.getItem(); - ModelBase armorModel = layer.getModelFromSlot(slotIn); - if (armorModel instanceof ModelBiped) { - armorModel = ForgeHooksClient.getArmorModel(entity, itemStack, slotIn, (ModelBiped) armorModel); - } - armorModel.setModelAttributes(layer.renderer.getMainModel()); - armorModel.setLivingAnimations(entity, limbSwing, limbSwingAmount, partialTicks); - layer.setModelSlotVisible(armorModel, slotIn); - - GlStateManager.enableBlend(); - GlStateManager.blendFunc(SourceFactor.ONE, DestFactor.ONE_MINUS_SRC_ALPHA); - - int layers = armorItem.getArmorLayersAmount(itemStack); - for (int layerIndex = 0; layerIndex < layers; layerIndex++) { - int i = armorItem.getArmorLayerColor(itemStack, layerIndex); - float f = (float) (i >> 16 & 255) / 255.0F; - float f1 = (float) (i >> 8 & 255) / 255.0F; - float f2 = (float) (i & 255) / 255.0F; - GlStateManager.color(f, f1, f2, 1.0f); - String type = layerIndex == 0 ? null : "layer_" + layerIndex; - layer.renderer.bindTexture(getArmorTexture(entity, itemStack, slotIn, type)); - armorModel.render(entity, limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch, scale); - } - if (itemStack.hasEffect()) { - LayerArmorBase.renderEnchantedGlint(layer.renderer, entity, armorModel, limbSwing, limbSwingAmount, - partialTicks, ageInTicks, netHeadYaw, headPitch, scale); - } - } - } - - private static boolean isLegSlot(EntityEquipmentSlot equipmentSlot) { - return equipmentSlot == EntityEquipmentSlot.LEGS; - } - - private static ResourceLocation getArmorTexture(EntityLivingBase entity, ItemStack itemStack, - EntityEquipmentSlot slot, String type) { - ResourceLocation registryName = itemStack.getItem().getRegistryName(); - if (registryName == null) { - throw new IllegalArgumentException( - "ItemStack " + itemStack.getTranslationKey() + "has a null registry name"); - } - - String s1 = String.format("%s:textures/models/armor/%s_layer_%d%s.png", registryName.getNamespace(), - registryName.getPath(), - (isLegSlot(slot) ? 2 : 1), type == null ? "" : String.format("_%s", type)); - return new ResourceLocation(ForgeHooksClient.getArmorTexture(entity, itemStack, s1, slot, type)); - } -} diff --git a/src/main/java/gregtech/asm/hooks/CTMModHooks.java b/src/main/java/gregtech/asm/hooks/CTMModHooks.java deleted file mode 100644 index 339a94e1ac3..00000000000 --- a/src/main/java/gregtech/asm/hooks/CTMModHooks.java +++ /dev/null @@ -1,39 +0,0 @@ -package gregtech.asm.hooks; - -import gregtech.api.util.GTLog; - -import net.minecraft.block.state.IBlockState; -import net.minecraft.util.BlockRenderLayer; - -import team.chisel.ctm.api.model.IModelCTM; -import team.chisel.ctm.client.model.ModelCTM; - -import java.lang.reflect.Field; - -@SuppressWarnings("unused") -public class CTMModHooks { - - private static Field layers; - - static { - try { - layers = ModelCTM.class.getDeclaredField("layers"); - layers.setAccessible(true); - } catch (NoSuchFieldException e) { - GTLog.logger.error("CTMModHooks no such field"); - } - } - - public static boolean canRenderInLayer(IModelCTM model, IBlockState state, BlockRenderLayer layer) { - boolean canRenderInLayer = model.canRenderInLayer(state, layer); - if (model instanceof ModelCTM && layers != null) { - try { - return CTMHooks.checkLayerWithOptiFine(canRenderInLayer, layers.getByte(model), layer); - } catch (Exception ignored) { - layers = null; - GTLog.logger.error("CTMModHooks Field error"); - } - } - return canRenderInLayer; - } -} diff --git a/src/main/java/gregtech/asm/hooks/EnchantmentHooks.java b/src/main/java/gregtech/asm/hooks/EnchantmentHooks.java deleted file mode 100644 index 45a9bd9e92a..00000000000 --- a/src/main/java/gregtech/asm/hooks/EnchantmentHooks.java +++ /dev/null @@ -1,17 +0,0 @@ -package gregtech.asm.hooks; - -import gregtech.api.items.toolitem.IGTTool; - -import net.minecraft.enchantment.Enchantment; -import net.minecraft.item.ItemStack; - -@SuppressWarnings("unused") -public class EnchantmentHooks { - - public static boolean checkTool(boolean initialReturn, ItemStack stack, Enchantment enchantment) { - if (stack.getItem() instanceof IGTTool) { - return initialReturn && stack.getItem().canApplyAtEnchantingTable(stack, enchantment); - } - return initialReturn; - } -} diff --git a/src/main/java/gregtech/asm/hooks/JEIHooks.java b/src/main/java/gregtech/asm/hooks/JEIHooks.java deleted file mode 100644 index 9fd33875382..00000000000 --- a/src/main/java/gregtech/asm/hooks/JEIHooks.java +++ /dev/null @@ -1,23 +0,0 @@ -package gregtech.asm.hooks; - -import gregtech.api.util.FluidTooltipUtil; - -import net.minecraftforge.fluids.FluidStack; - -import java.util.List; - -@SuppressWarnings("unused") -public class JEIHooks { - - public static void addFluidTooltip(List tooltip, Object ingredient) { - if (ingredient instanceof FluidStack) { - List formula = FluidTooltipUtil.getFluidTooltip((FluidStack) ingredient); - if (formula != null) { - for (String s : formula) { - if (s.isEmpty()) continue; - tooltip.add(s); - } - } - } - } -} diff --git a/src/main/java/gregtech/asm/hooks/MinecraftHooks.java b/src/main/java/gregtech/asm/hooks/MinecraftHooks.java deleted file mode 100644 index 01d0fef77d9..00000000000 --- a/src/main/java/gregtech/asm/hooks/MinecraftHooks.java +++ /dev/null @@ -1,17 +0,0 @@ -package gregtech.asm.hooks; - -import net.minecraft.client.Minecraft; -import net.minecraft.util.text.TextComponentTranslation; - -import org.lwjgl.input.Keyboard; - -@SuppressWarnings("unused") -public class MinecraftHooks { - - public static void sendF3HMessage(int keyCode) { - if (keyCode == Keyboard.KEY_H && Minecraft.getMinecraft().gameSettings.advancedItemTooltips) { - Minecraft.getMinecraft().ingameGUI.getChatGUI() - .printChatMessage(new TextComponentTranslation("gregtech.debug.f3_h.enabled")); - } - } -} diff --git a/src/main/java/gregtech/asm/hooks/RecipeRepairItemHooks.java b/src/main/java/gregtech/asm/hooks/RecipeRepairItemHooks.java deleted file mode 100644 index 7956c412a68..00000000000 --- a/src/main/java/gregtech/asm/hooks/RecipeRepairItemHooks.java +++ /dev/null @@ -1,127 +0,0 @@ -package gregtech.asm.hooks; - -import gregtech.api.items.toolitem.IGTTool; -import gregtech.api.items.toolitem.ToolHelper; - -import net.minecraft.inventory.InventoryCrafting; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.NonNullList; -import net.minecraftforge.common.ForgeHooks; -import net.minecraftforge.event.ForgeEventFactory; - -import com.google.common.collect.Lists; - -import java.util.List; - -@SuppressWarnings("unused") -public class RecipeRepairItemHooks { - - public static boolean matches(InventoryCrafting inv) { - // from MC - List list = Lists.newArrayList(); - - for (int i = 0; i < inv.getSizeInventory(); ++i) { - ItemStack itemstack = inv.getStackInSlot(i); - - if (!itemstack.isEmpty()) { - list.add(itemstack); - - if (list.size() > 1) { - ItemStack stack = list.get(0); - if (!stack.getItem().isRepairable()) return false; - if (stack.getCount() != 1 || itemstack.getCount() != 1) return false; - if (itemstack.getItem() != stack.getItem()) return false; - if (itemstack.getItem() instanceof IGTTool && stack.getItem() instanceof IGTTool) { - // require the same materials - IGTTool first = (IGTTool) itemstack.getItem(); - IGTTool second = (IGTTool) stack.getItem(); - - // electric tools are invalid - if (first.isElectric() || second.isElectric()) return false; - - return first.getToolMaterial(itemstack) == second.getToolMaterial(stack); - } - } - } - } - - return list.size() == 2; - } - - public static ItemStack getCraftingResult(InventoryCrafting inv) { - List list = Lists.newArrayList(); - - for (int i = 0; i < inv.getSizeInventory(); ++i) { - ItemStack itemstack = inv.getStackInSlot(i); - - if (!itemstack.isEmpty()) { - list.add(itemstack); - - if (list.size() > 1) { - ItemStack stack = list.get(0); - if (itemstack.getItem() != stack.getItem()) return ItemStack.EMPTY; - if (stack.getCount() != 1 || itemstack.getCount() != 1) return ItemStack.EMPTY; - if (!stack.getItem().isRepairable()) return ItemStack.EMPTY; - - // electric tools are invalid - if (itemstack.getItem() instanceof IGTTool && ((IGTTool) itemstack.getItem()).isElectric()) { - return ItemStack.EMPTY; - } - if (stack.getItem() instanceof IGTTool && ((IGTTool) stack.getItem()).isElectric()) { - return ItemStack.EMPTY; - } - } - } - } - - if (list.size() == 2) { - ItemStack first = list.get(0); - ItemStack second = list.get(1); - - if (first.getItem() == second.getItem() && first.getCount() == 1 && second.getCount() == 1 && - first.getItem().isRepairable()) { - int j = first.getMaxDamage() - first.getItemDamage(); - int k = first.getMaxDamage() - second.getItemDamage(); - int l = j + k + first.getMaxDamage() * 5 / 100; - int i1 = first.getMaxDamage() - l; - - if (i1 < 0) { - i1 = 0; - } - - if (first.getItem() instanceof IGTTool && second.getItem() instanceof IGTTool) { - // do not allow repairing tools if both are full durability - if (first.getItemDamage() == 0 && second.getItemDamage() == 0) return ItemStack.EMPTY; - - // two GT tools, so use own logic to produce the correct output - IGTTool tool = (IGTTool) first.getItem(); - ItemStack output = tool.get(tool.getToolMaterial(first)); - - NBTTagCompound outputTag = ToolHelper.getToolTag(output); - outputTag.setInteger(ToolHelper.DURABILITY_KEY, i1); - - return output; - } - - return new ItemStack(first.getItem(), 1, i1); - } - } - - return ItemStack.EMPTY; - } - - public static NonNullList getRemainingItems(InventoryCrafting inv) { - NonNullList list = NonNullList.withSize(inv.getSizeInventory(), ItemStack.EMPTY); - for (int i = 0; i < list.size(); i++) { - ItemStack stack = inv.getStackInSlot(i); - if (stack.getItem() instanceof IGTTool) { - // bypass GT tools not disappearing in crafting recipes - ForgeEventFactory.onPlayerDestroyItem(ForgeHooks.getCraftingPlayer(), stack, null); - } else { - list.set(i, ForgeHooks.getContainerItem(stack)); - } - } - return list; - } -} diff --git a/src/main/java/gregtech/asm/hooks/RenderChunkHooks.java b/src/main/java/gregtech/asm/hooks/RenderChunkHooks.java deleted file mode 100644 index 2f9cd50d88c..00000000000 --- a/src/main/java/gregtech/asm/hooks/RenderChunkHooks.java +++ /dev/null @@ -1,22 +0,0 @@ -package gregtech.asm.hooks; - -import gregtech.api.metatileentity.MetaTileEntityHolder; - -import net.minecraft.client.renderer.tileentity.TileEntityRendererDispatcher; -import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; -import net.minecraft.tileentity.TileEntity; - -import org.jetbrains.annotations.Nullable; - -@SuppressWarnings("unused") -public class RenderChunkHooks { - - public static TileEntitySpecialRenderer getRenderer(TileEntityRendererDispatcher renderer, - @Nullable TileEntity tileEntityIn) { - // TODO - if (tileEntityIn instanceof MetaTileEntityHolder && !((MetaTileEntityHolder) tileEntityIn).hasTESR()) { - return null; - } - return renderer.getRenderer(tileEntityIn); - } -} diff --git a/src/main/java/gregtech/asm/hooks/RenderItemHooks.java b/src/main/java/gregtech/asm/hooks/RenderItemHooks.java deleted file mode 100644 index 0eb7b9c708d..00000000000 --- a/src/main/java/gregtech/asm/hooks/RenderItemHooks.java +++ /dev/null @@ -1,29 +0,0 @@ -package gregtech.asm.hooks; - -import gregtech.api.items.metaitem.MetaItem; -import gregtech.api.items.toolitem.IGTTool; -import gregtech.client.renderer.handler.LampItemOverlayRenderer; -import gregtech.client.utils.ToolChargeBarRenderer; - -import net.minecraft.item.ItemStack; - -import org.jetbrains.annotations.NotNull; - -@SuppressWarnings("unused") -public class RenderItemHooks { - - public static void renderElectricBar(@NotNull ItemStack stack, int xPosition, int yPosition) { - if (stack.getItem() instanceof IGTTool) { - ToolChargeBarRenderer.renderBarsTool((IGTTool) stack.getItem(), stack, xPosition, yPosition); - } else if (stack.getItem() instanceof MetaItem) { - ToolChargeBarRenderer.renderBarsItem((MetaItem) stack.getItem(), stack, xPosition, yPosition); - } - } - - public static void renderLampOverlay(@NotNull ItemStack stack, int xPosition, int yPosition) { - LampItemOverlayRenderer.OverlayType overlayType = LampItemOverlayRenderer.getOverlayType(stack); - if (overlayType != LampItemOverlayRenderer.OverlayType.NONE) { - LampItemOverlayRenderer.renderOverlay(overlayType, xPosition, yPosition); - } - } -} diff --git a/src/main/java/gregtech/asm/hooks/SoundHooks.java b/src/main/java/gregtech/asm/hooks/SoundHooks.java deleted file mode 100644 index 31bbc697dbb..00000000000 --- a/src/main/java/gregtech/asm/hooks/SoundHooks.java +++ /dev/null @@ -1,37 +0,0 @@ -package gregtech.asm.hooks; - -import gregtech.api.items.metaitem.MetaItem; -import gregtech.api.items.metaitem.MusicDiscStats; -import gregtech.api.items.metaitem.stats.IItemBehaviour; - -import net.minecraft.client.multiplayer.WorldClient; -import net.minecraft.client.renderer.RenderGlobal; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.IWorldEventListener; -import net.minecraftforge.fml.common.FMLCommonHandler; -import net.minecraftforge.fml.common.ObfuscationReflectionHelper; - -@SuppressWarnings("unused") -public class SoundHooks { - - public static void playRecord(IWorldEventListener listener, EntityPlayer player, int type, BlockPos pos, int data) { - if (type == MusicDiscStats.SOUND_TYPE && FMLCommonHandler.instance().getSide().isClient() && - listener instanceof RenderGlobal) { - for (MetaItem metaItem : MetaItem.getMetaItems()) { - MetaItem.MetaValueItem valueItem = metaItem.getItem((short) data); - if (valueItem != null) { - for (IItemBehaviour behavior : valueItem.getBehaviours()) { - if (behavior instanceof MusicDiscStats) { - WorldClient world = ObfuscationReflectionHelper.getPrivateValue(RenderGlobal.class, - (RenderGlobal) listener, "field_72769_h"); - world.playRecord(pos, ((MusicDiscStats) behavior).getSound()); - return; - } - } - } - } - } - listener.playEvent(player, type, pos, data); - } -} diff --git a/src/main/java/gregtech/asm/hooks/TheOneProbeHooks.java b/src/main/java/gregtech/asm/hooks/TheOneProbeHooks.java deleted file mode 100644 index fd83510be73..00000000000 --- a/src/main/java/gregtech/asm/hooks/TheOneProbeHooks.java +++ /dev/null @@ -1,20 +0,0 @@ -package gregtech.asm.hooks; - -import gregtech.api.block.machines.BlockMachine; - -import net.minecraft.block.state.IBlockState; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; - -@SuppressWarnings("unused") -public class TheOneProbeHooks { - - @SuppressWarnings("deprecation") - public static IBlockState getActualState(World world, BlockPos pos) { - IBlockState state = world.getBlockState(pos); - if (state.getBlock() instanceof BlockMachine) { - state = state.getBlock().getActualState(state, world, pos); - } - return state; - } -} diff --git a/src/main/java/gregtech/asm/package-info.java b/src/main/java/gregtech/asm/package-info.java deleted file mode 100644 index 059180a0555..00000000000 --- a/src/main/java/gregtech/asm/package-info.java +++ /dev/null @@ -1,6 +0,0 @@ -/** - * This package contains the GregTech: CE Unofficial CoreMod. - * - * If you are importing anything from this package, you are probably looking in the wrong place. - */ -package gregtech.asm; diff --git a/src/main/java/gregtech/asm/util/ObfMapping.java b/src/main/java/gregtech/asm/util/ObfMapping.java deleted file mode 100644 index b788ccb3d24..00000000000 --- a/src/main/java/gregtech/asm/util/ObfMapping.java +++ /dev/null @@ -1,382 +0,0 @@ -package gregtech.asm.util; - -import net.minecraft.launchwrapper.Launch; -import net.minecraftforge.fml.common.FMLLog; -import net.minecraftforge.fml.common.asm.transformers.deobf.FMLDeobfuscatingRemapper; - -import com.google.common.base.Charsets; -import com.google.common.base.Objects; -import com.google.common.io.LineProcessor; -import com.google.common.io.Resources; -import org.jetbrains.annotations.NotNull; -import org.objectweb.asm.ClassVisitor; -import org.objectweb.asm.FieldVisitor; -import org.objectweb.asm.MethodVisitor; -import org.objectweb.asm.Opcodes; -import org.objectweb.asm.commons.Remapper; -import org.objectweb.asm.tree.*; - -import java.io.File; -import java.io.IOException; -import java.lang.reflect.Field; -import java.util.HashMap; -import java.util.Map; -import java.util.Map.Entry; - -/** - * @apiNote codechicken.asm.ObfMapping - */ -@SuppressWarnings({ "unused", "UnstableApiUsage" }) -public class ObfMapping extends Remapper { - - public static final ObfRemapper obfMapper = new ObfRemapper(); - public static MCPRemapper mcpMapper = null; - public static final boolean obfuscated; - - public String s_owner; - public String s_name; - public String s_desc; - - public static void loadMCPRemapper() { - if (mcpMapper == null) { - mcpMapper = new MCPRemapper(); - } - } - - public ObfMapping(String owner) { - this(owner, "", ""); - } - - public ObfMapping(String owner, String name) { - this(owner, name, ""); - } - - public ObfMapping(String owner, String name, String desc) { - this.s_owner = owner; - this.s_name = name; - this.s_desc = desc; - - if (s_owner.contains(".")) { - throw new IllegalArgumentException(s_owner); - } - } - - public ObfMapping(ObfMapping descmap, String subclass) { - this(subclass, descmap.s_name, descmap.s_desc); - } - - public static ObfMapping fromDesc(String s) { - int lastDot = s.lastIndexOf('.'); - if (lastDot < 0) { - return new ObfMapping(s, "", ""); - } - int sep = s.indexOf('(');// methods - int sep_end = sep; - if (sep < 0) { - sep = s.indexOf(' ');// some stuffs - sep_end = sep + 1; - } - if (sep < 0) { - sep = s.indexOf(':');// fields - sep_end = sep + 1; - } - if (sep < 0) { - return new ObfMapping(s.substring(0, lastDot), s.substring(lastDot + 1), ""); - } - - return new ObfMapping(s.substring(0, lastDot), s.substring(lastDot + 1, sep), s.substring(sep_end)); - } - - public ObfMapping subclass(String subclass) { - return new ObfMapping(this, subclass); - } - - public boolean matches(MethodNode node) { - return s_name.equals(node.name) && s_desc.equals(node.desc); - } - - public boolean matches(MethodInsnNode node) { - return s_owner.equals(node.owner) && s_name.equals(node.name) && s_desc.equals(node.desc); - } - - public AbstractInsnNode toInsn(int opcode) { - if (isClass()) { - return new TypeInsnNode(opcode, s_owner); - } else if (isMethod()) { - return new MethodInsnNode(opcode, s_owner, s_name, s_desc, opcode == Opcodes.INVOKEINTERFACE); - } else { - return new FieldInsnNode(opcode, s_owner, s_name, s_desc); - } - } - - public void visitTypeInsn(MethodVisitor mv, int opcode) { - mv.visitTypeInsn(opcode, s_owner); - } - - public void visitMethodInsn(MethodVisitor mv, int opcode) { - mv.visitMethodInsn(opcode, s_owner, s_name, s_desc, opcode == Opcodes.INVOKEINTERFACE); - } - - public void visitFieldInsn(MethodVisitor mv, int opcode) { - mv.visitFieldInsn(opcode, s_owner, s_name, s_desc); - } - - public MethodVisitor visitMethod(ClassVisitor visitor, int access, String[] exceptions) { - return visitor.visitMethod(access, s_name, s_desc, null, exceptions); - } - - public FieldVisitor visitField(ClassVisitor visitor, int access, Object value) { - return visitor.visitField(access, s_name, s_desc, null, value); - } - - public boolean isClass(String name) { - return name.replace('.', '/').equals(s_owner); - } - - public boolean matches(String name, String desc) { - return s_name.equals(name) && s_desc.equals(desc); - } - - public boolean matches(FieldNode node) { - return s_name.equals(node.name) && s_desc.equals(node.desc); - } - - public boolean matches(FieldInsnNode node) { - return s_owner.equals(node.owner) && s_name.equals(node.name) && s_desc.equals(node.desc); - } - - public String javaClass() { - return s_owner.replace('/', '.'); - } - - public String methodDesc() { - return s_owner + "." + s_name + s_desc; - } - - public String fieldDesc() { - return s_owner + "." + s_name + ":" + s_desc; - } - - public boolean isClass() { - return s_name.length() == 0; - } - - public boolean isMethod() { - return s_desc.contains("("); - } - - public boolean isField() { - return !isClass() && !isMethod(); - } - - public ObfMapping map(Remapper mapper) { - if (mapper == null) { - return this; - } - - if (isMethod()) { - s_name = mapper.mapMethodName(s_owner, s_name, s_desc); - } else if (isField()) { - s_name = mapper.mapFieldName(s_owner, s_name, s_desc); - } - - s_owner = mapper.mapType(s_owner); - - if (isMethod()) { - s_desc = mapper.mapMethodDesc(s_desc); - } else if (s_desc.length() > 0) { - s_desc = mapper.mapDesc(s_desc); - } - - return this; - } - - public ObfMapping toRuntime() { - map(mcpMapper); - return this; - } - - public ObfMapping toClassloading() { - if (!obfuscated) { - map(mcpMapper); - } else if (obfMapper.isObf(s_owner)) { - map(obfMapper); - } - return this; - } - - public ObfMapping copy() { - return new ObfMapping(s_owner, s_name, s_desc); - } - - @Override - public boolean equals(Object obj) { - if (!(obj instanceof ObfMapping)) { - return false; - } - - ObfMapping desc = (ObfMapping) obj; - return s_owner.equals(desc.s_owner) && s_name.equals(desc.s_name) && s_desc.equals(desc.s_desc); - } - - @Override - public int hashCode() { - return Objects.hashCode(s_desc, s_name, s_owner); - } - - @Override - public String toString() { - if (s_name.length() == 0) { - return "[" + s_owner + "]"; - } - if (s_desc.length() == 0) { - return "[" + s_owner + "." + s_name + "]"; - } - return "[" + (isMethod() ? methodDesc() : fieldDesc()) + "]"; - } - - public static class ObfRemapper extends Remapper { - - private final HashMap fields = new HashMap<>(); - private final HashMap funcs = new HashMap<>(); - - @SuppressWarnings("unchecked") - public ObfRemapper() { - try { - Field rawFieldMapsField = FMLDeobfuscatingRemapper.class.getDeclaredField("rawFieldMaps"); - Field rawMethodMapsField = FMLDeobfuscatingRemapper.class.getDeclaredField("rawMethodMaps"); - rawFieldMapsField.setAccessible(true); - rawMethodMapsField.setAccessible(true); - Map> rawFieldMaps = (Map>) rawFieldMapsField - .get(FMLDeobfuscatingRemapper.INSTANCE); - Map> rawMethodMaps = (Map>) rawMethodMapsField - .get(FMLDeobfuscatingRemapper.INSTANCE); - - if (rawFieldMaps == null) { - throw new IllegalStateException( - "gregtech.asm.util.ObfMapping loaded too early. Make sure all references are in or after the asm transformer load stage"); - } - - for (Map map : rawFieldMaps.values()) { - for (Entry entry : map.entrySet()) { - if (entry.getValue().startsWith("field")) { - fields.put(entry.getValue(), entry.getKey().substring(0, entry.getKey().indexOf(':'))); - } - } - } - - for (Map map : rawMethodMaps.values()) { - for (Entry entry : map.entrySet()) { - if (entry.getValue().startsWith("func")) { - funcs.put(entry.getValue(), entry.getKey().substring(0, entry.getKey().indexOf('('))); - } - } - } - - } catch (Exception e) { - throw new RuntimeException(e); - } - } - - @Override - public String mapMethodName(String owner, String name, String desc) { - String s = funcs.get(name); - return s == null ? name : s; - } - - @Override - public String mapFieldName(String owner, String name, String desc) { - String s = fields.get(name); - return s == null ? name : s; - } - - @Override - public String map(String typeName) { - return FMLDeobfuscatingRemapper.INSTANCE.unmap(typeName); - } - - public static String unmap(String typeName) { - return FMLDeobfuscatingRemapper.INSTANCE.map(typeName); - } - - public boolean isObf(String typeName) { - return !map(typeName).equals(typeName) || !unmap(typeName).equals(typeName); - } - } - - public static class MCPRemapper extends Remapper implements LineProcessor { - - private final HashMap fields = new HashMap<>(); - private final HashMap funcs = new HashMap<>(); - - public MCPRemapper() { - File[] mappings = getConfFiles(); - try { - Resources.readLines(mappings[1].toURI().toURL(), Charsets.UTF_8, this); - Resources.readLines(mappings[2].toURI().toURL(), Charsets.UTF_8, this); - } catch (IOException e) { - FMLLog.log.error("Could not instantiate GregTech MCPRemapper", e); - } - } - - public static File[] getConfFiles() { - // check for GradleStart system vars - File notchSrg = new File(System.getProperty("net.minecraftforge.gradle.GradleStart.srg.notch-srg")); - File csvDir = new File(System.getProperty("net.minecraftforge.gradle.GradleStart.csvDir")); - - if (notchSrg.exists() && csvDir.exists()) { - File fieldCsv = new File(csvDir, "fields.csv"); - File methodCsv = new File(csvDir, "methods.csv"); - - if (notchSrg.exists() && fieldCsv.exists() && methodCsv.exists()) { - return new File[] { notchSrg, fieldCsv, methodCsv }; - } - } - - throw new RuntimeException("Failed to grab mappings from GradleStart args."); - } - - public String mapMethodName(String name) { - String s = funcs.get(name); - return s == null ? name : s; - } - - @Override - public String mapMethodName(String owner, String name, String desc) { - return mapMethodName(name); - } - - @Override - public String mapFieldName(String owner, String name, String desc) { - String s = fields.get(name); - return s == null ? name : s; - } - - @Override - public boolean processLine(@NotNull String line) { - int i = line.indexOf(','); - String srg = line.substring(0, i); - int i2 = i + 1; - i = line.indexOf(',', i2); - String mcp = line.substring(i2, i); - (srg.startsWith("func") ? funcs : fields).put(srg, mcp); - return true; - } - - @Override - public Void getResult() { - return null; - } - } - - static { - boolean obf = true; - try { - obf = Launch.classLoader.getClassBytes("net.minecraft.world.World") == null; - } catch (Exception ignored) {} - obfuscated = obf; - if (!obf) { - loadMCPRemapper(); - } - } -} diff --git a/src/main/java/gregtech/asm/util/SafeMethodVisitor.java b/src/main/java/gregtech/asm/util/SafeMethodVisitor.java deleted file mode 100644 index 13bac7191b8..00000000000 --- a/src/main/java/gregtech/asm/util/SafeMethodVisitor.java +++ /dev/null @@ -1,26 +0,0 @@ -package gregtech.asm.util; - -import org.objectweb.asm.MethodVisitor; - -public abstract class SafeMethodVisitor extends MethodVisitor { - - private boolean patchedSuccessfully = false; - - public SafeMethodVisitor(int api, MethodVisitor mv) { - super(api, mv); - } - - protected void markPatchedSuccessfully() { - this.patchedSuccessfully = true; - } - - @Override - public void visitEnd() { - super.visitEnd(); - if (!patchedSuccessfully) { - throw new RuntimeException("Patching failed, patch code wasn't injected " + getInjectTargetString()); - } - } - - protected abstract String getInjectTargetString(); -} diff --git a/src/main/java/gregtech/asm/util/TargetClassVisitor.java b/src/main/java/gregtech/asm/util/TargetClassVisitor.java deleted file mode 100644 index 5fcbd9fea68..00000000000 --- a/src/main/java/gregtech/asm/util/TargetClassVisitor.java +++ /dev/null @@ -1,55 +0,0 @@ -package gregtech.asm.util; - -import net.minecraftforge.fml.common.FMLLog; - -import org.apache.logging.log4j.Level; -import org.objectweb.asm.ClassVisitor; -import org.objectweb.asm.MethodVisitor; -import org.objectweb.asm.Opcodes; - -import java.util.function.Function; - -public class TargetClassVisitor extends ClassVisitor { - - private String className; - private final ObfMapping methodKey; - private final Function visitorCreator; - private boolean foundMethod = false; - - public TargetClassVisitor(ClassVisitor cv, ObfMapping methodKey, - Function visitorCreator) { - super(Opcodes.ASM5, cv); - this.methodKey = methodKey.toRuntime(); - this.visitorCreator = visitorCreator; - } - - @Override - public void visit(int version, int access, String name, String signature, String superName, String[] interfaces) { - super.visit(version, access, name, signature, superName, interfaces); - this.className = name; - } - - @SuppressWarnings("deprecation") - @Override - public MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions) { - MethodVisitor visitor = super.visitMethod(access, name, desc, signature, exceptions); - String methodKey = name + desc; - if (this.methodKey.matches(name, desc)) { - FMLLog.log("GregTechTransformer", Level.INFO, "Patched method %s in %s successfully", methodKey, className); - this.foundMethod = true; - return visitorCreator.apply(visitor); - } - return visitor; - } - - @SuppressWarnings("deprecation") - @Override - public void visitEnd() { - super.visitEnd(); - if (!foundMethod) { - FMLLog.log("GregTechTransformer", Level.FATAL, "Failed to find method %s in %s.", methodKey, className); - throw new RuntimeException("Failed to patch method " + methodKey + - ", loading cannot continue. Check your environment is correct."); - } - } -} diff --git a/src/main/java/gregtech/asm/visitors/AbstractCTMBakedModelVisitor.java b/src/main/java/gregtech/asm/visitors/AbstractCTMBakedModelVisitor.java deleted file mode 100644 index ebc2f40c274..00000000000 --- a/src/main/java/gregtech/asm/visitors/AbstractCTMBakedModelVisitor.java +++ /dev/null @@ -1,44 +0,0 @@ -package gregtech.asm.visitors; - -import gregtech.asm.util.ObfMapping; - -import org.objectweb.asm.MethodVisitor; -import org.objectweb.asm.Opcodes; - -public class AbstractCTMBakedModelVisitor extends MethodVisitor implements Opcodes { - - public static final String TARGET_CLASS_NAME = "team/chisel/ctm/client/model/AbstractCTMBakedModel"; - public static final ObfMapping TARGET_METHOD = new ObfMapping(TARGET_CLASS_NAME, - "func_188616_a", - "(Lnet/minecraft/block/state/IBlockState;Lnet/minecraft/util/EnumFacing;J)Ljava/util/List;"); - - private static final ObfMapping METHOD_GET_QUADS_HOOKS = new ObfMapping( - "gregtech/asm/hooks/CTMHooks", - "getQuadsWithOptiFine", - "(Ljava/util/List;" + - "Lnet/minecraft/util/BlockRenderLayer;" + - "Lnet/minecraft/client/renderer/block/model/IBakedModel;" + - "Lnet/minecraft/block/state/IBlockState;" + - "Lnet/minecraft/util/EnumFacing;" + - "J" + - ")Ljava/util/List;"); - - public AbstractCTMBakedModelVisitor(MethodVisitor mv) { - super(ASM5, mv); - } - - int times = 0; - - @Override - public void visitInsn(int opcode) { - if (opcode == ARETURN && times++ == 1) { - visitVarInsn(ALOAD, 7); - visitVarInsn(ALOAD, 0); - visitVarInsn(ALOAD, 1); - visitVarInsn(ALOAD, 2); - visitVarInsn(LLOAD, 3); - METHOD_GET_QUADS_HOOKS.visitMethodInsn(this, INVOKESTATIC); - } - super.visitInsn(opcode); - } -} diff --git a/src/main/java/gregtech/asm/visitors/BlockVisitor.java b/src/main/java/gregtech/asm/visitors/BlockVisitor.java deleted file mode 100644 index 272aa8d3944..00000000000 --- a/src/main/java/gregtech/asm/visitors/BlockVisitor.java +++ /dev/null @@ -1,44 +0,0 @@ -package gregtech.asm.visitors; - -import gregtech.asm.util.ObfMapping; - -import org.objectweb.asm.Opcodes; -import org.objectweb.asm.tree.*; - -public class BlockVisitor implements Opcodes { - - public static final String TARGET_CLASS_NAME = "net/minecraft/block/Block"; - public static final ObfMapping TARGET_METHOD = new ObfMapping(TARGET_CLASS_NAME, "canRenderInLayer", - "(Lnet/minecraft/block/state/IBlockState;Lnet/minecraft/util/BlockRenderLayer;)Z"); - - private static final String BLOCK_HOOKS_OWNER = "gregtech/asm/hooks/BlockHooks"; - private static final String BLOCK_HOOKS_SIGNATURE = "(Lnet/minecraft/block/state/IBlockState;Lnet/minecraft/util/BlockRenderLayer;)Ljava/lang/Boolean;"; - private static final String BLOCK_HOOKS_METHOD_NAME = "canRenderInLayer"; - - public static ClassNode handleClassNode(ClassNode classNode) { - for (MethodNode m : classNode.methods) { - if (m.name.equals(TARGET_METHOD.s_name) && m.desc.equals(TARGET_METHOD.s_desc)) { - InsnList toAdd = new InsnList(); - toAdd.add(new VarInsnNode(ALOAD, 1)); // Load state - toAdd.add(new VarInsnNode(ALOAD, 2)); // Load layer - // Invoke hook - toAdd.add(new MethodInsnNode(INVOKESTATIC, BLOCK_HOOKS_OWNER, BLOCK_HOOKS_METHOD_NAME, - BLOCK_HOOKS_SIGNATURE, false)); - toAdd.add(new InsnNode(DUP)); // Copy value on stack, avoids need for local var - toAdd.add(new JumpInsnNode(IFNULL, (LabelNode) m.instructions.getFirst())); // Check if return is null, - // if it is, jump to vanilla - // code - toAdd.add(new MethodInsnNode(INVOKEVIRTUAL, "java/lang/Boolean", "booleanValue", "()Z", false)); // Otherwise - // evaluate - // the - // bool - toAdd.add(new InsnNode(IRETURN)); // And return it - AbstractInsnNode first = m.instructions.getFirst(); // First vanilla instruction - m.instructions.insertBefore(first, toAdd); // Put this before the first instruction (L1 label node) - m.instructions.insert(first, new InsnNode(POP)); // Pop the extra value that vanilla doesn't need - break; - } - } - return classNode; - } -} diff --git a/src/main/java/gregtech/asm/visitors/CCLVisitor.java b/src/main/java/gregtech/asm/visitors/CCLVisitor.java deleted file mode 100644 index 181a92b796a..00000000000 --- a/src/main/java/gregtech/asm/visitors/CCLVisitor.java +++ /dev/null @@ -1,22 +0,0 @@ -package gregtech.asm.visitors; - -import gregtech.asm.util.ObfMapping; - -import org.objectweb.asm.MethodVisitor; -import org.objectweb.asm.Opcodes; - -public class CCLVisitor extends MethodVisitor { - - public static final String TARGET_CLASS_NAME = "codechicken/lib/internal/ModDescriptionEnhancer"; - public static final String TARGET_SIGNATURE = "()V"; - public static final ObfMapping TARGET_METHOD = new ObfMapping(TARGET_CLASS_NAME, "init", TARGET_SIGNATURE); - - public CCLVisitor(MethodVisitor mv) { - super(Opcodes.ASM5, mv); - } - - @Override - public void visitCode() { - mv.visitInsn(Opcodes.RETURN); - } -} diff --git a/src/main/java/gregtech/asm/visitors/ConcretePowderVisitor.java b/src/main/java/gregtech/asm/visitors/ConcretePowderVisitor.java deleted file mode 100644 index 6f79f47abda..00000000000 --- a/src/main/java/gregtech/asm/visitors/ConcretePowderVisitor.java +++ /dev/null @@ -1,23 +0,0 @@ -package gregtech.asm.visitors; - -import gregtech.asm.util.ObfMapping; - -import org.objectweb.asm.MethodVisitor; -import org.objectweb.asm.Opcodes; - -public class ConcretePowderVisitor extends MethodVisitor implements Opcodes { - - public static final String TARGET_CLASS_NAME = "net/minecraft/block/BlockConcretePowder"; - public static final String TARGET_SIGNATURE = "(Lnet/minecraft/world/World;Lnet/minecraft/util/math/BlockPos;Lnet/minecraft/block/state/IBlockState;)Z"; - public static final ObfMapping TARGET_METHOD = new ObfMapping(TARGET_CLASS_NAME, "tryTouchWater", TARGET_SIGNATURE); - - public ConcretePowderVisitor(MethodVisitor mv) { - super(Opcodes.ASM5, mv); - } - - @Override - public void visitCode() { - mv.visitInsn(Opcodes.ICONST_0); - mv.visitInsn(Opcodes.IRETURN); - } -} diff --git a/src/main/java/gregtech/asm/visitors/DamageSourceVisitor.java b/src/main/java/gregtech/asm/visitors/DamageSourceVisitor.java deleted file mode 100644 index 121e459dc8f..00000000000 --- a/src/main/java/gregtech/asm/visitors/DamageSourceVisitor.java +++ /dev/null @@ -1,54 +0,0 @@ -package gregtech.asm.visitors; - -import gregtech.asm.util.ObfMapping; - -import org.objectweb.asm.Opcodes; -import org.objectweb.asm.tree.*; - -public class DamageSourceVisitor implements Opcodes { - - public static final String TARGET_CLASS_NAME = "net/minecraft/util/DamageSource"; - private static final String DAMAGE_SOURCE_OWNER = "gregtech/api/damagesources/DamageSources"; - - private static final ObfMapping TARGET_METHOD_PLAYER = new ObfMapping(TARGET_CLASS_NAME, "func_76365_a", - "(Lnet/minecraft/entity/player/EntityPlayer;)Lnet/minecraft/util/DamageSource;").toRuntime(); - private static final String TARGET_SIGNATURE_PLAYER = "(Lnet/minecraft/entity/player/EntityPlayer;)Lnet/minecraft/util/DamageSource;"; - private static final String TARGET_NAME_PLAYER = "getPlayerDamage"; - - private static final ObfMapping TARGET_METHOD_MOB = new ObfMapping(TARGET_CLASS_NAME, "func_76358_a", - "(Lnet/minecraft/entity/EntityLivingBase;)Lnet/minecraft/util/DamageSource;").toRuntime(); - private static final String TARGET_SIGNATURE_MOB = "(Lnet/minecraft/entity/EntityLivingBase;)Lnet/minecraft/util/DamageSource;"; - private static final String TARGET_NAME_MOB = "getMobDamage"; - - public static ClassNode handleClassNode(ClassNode classNode) { - int done = 0; - for (MethodNode m : classNode.methods) { - if (done == 2) break; - - // causePlayerDamage() - if (m.name.equals(TARGET_METHOD_PLAYER.s_name) && m.desc.equals(TARGET_METHOD_PLAYER.s_desc)) { - InsnList insns = new InsnList(); - insns.add(new VarInsnNode(ALOAD, 0)); - insns.add(new MethodInsnNode(INVOKESTATIC, DAMAGE_SOURCE_OWNER, TARGET_NAME_PLAYER, - TARGET_SIGNATURE_PLAYER, false)); - insns.add(new InsnNode(ARETURN)); - AbstractInsnNode first = m.instructions.getFirst(); - m.instructions.insertBefore(first, insns); - done++; - } - - // causeMobDamage() - if (m.name.equals(TARGET_METHOD_MOB.s_name) && m.desc.equals(TARGET_METHOD_MOB.s_desc)) { - InsnList insns = new InsnList(); - insns.add(new VarInsnNode(ALOAD, 0)); - insns.add(new MethodInsnNode(INVOKESTATIC, DAMAGE_SOURCE_OWNER, TARGET_NAME_MOB, TARGET_SIGNATURE_MOB, - false)); - insns.add(new InsnNode(ARETURN)); - AbstractInsnNode first = m.instructions.getFirst(); - m.instructions.insertBefore(first, insns); - done++; - } - } - return classNode; - } -} diff --git a/src/main/java/gregtech/asm/visitors/EnchantmentCanApplyVisitor.java b/src/main/java/gregtech/asm/visitors/EnchantmentCanApplyVisitor.java deleted file mode 100644 index 3b2e69563f9..00000000000 --- a/src/main/java/gregtech/asm/visitors/EnchantmentCanApplyVisitor.java +++ /dev/null @@ -1,52 +0,0 @@ -package gregtech.asm.visitors; - -import gregtech.asm.util.ObfMapping; - -import org.objectweb.asm.MethodVisitor; -import org.objectweb.asm.Opcodes; -import org.objectweb.asm.commons.AdviceAdapter; - -import java.util.HashMap; -import java.util.Map; - -/** - * Class needed for when a specific Enchantment class does not behave well, and - * {@link net.minecraft.enchantment.Enchantment#canApply} does not also check - * {@link net.minecraft.item.Item#canApplyAtEnchantingTable}. - *

- * Any enchantments modified here, must also implement the desired behavior in - * {@link gregtech.api.items.toolitem.IGTTool#definition$canApplyAtEnchantingTable} - * for this ASM to make a change in-game. - */ -public final class EnchantmentCanApplyVisitor extends AdviceAdapter implements Opcodes { - - public static final Map CLASS_TO_MAPPING_MAP = new HashMap<>(); - - static { - createMapping("net/minecraft/enchantment/EnchantmentDurability"); // Minecraft Unbreaking - createMapping("cofh/core/enchantment/EnchantmentSmelting"); // CoFHCore Smelting - createMapping("cofh/core/enchantment/EnchantmentSmashing"); // CoFHCore Smashing - } - - private static void createMapping(String className) { - CLASS_TO_MAPPING_MAP.put(className, - new ObfMapping(className, "func_92089_a", "(Lnet/minecraft/item/ItemStack;)Z").toRuntime()); - } - - public EnchantmentCanApplyVisitor(MethodVisitor mv, ObfMapping mapping) { - super(ASM5, mv, ACC_PUBLIC, mapping.s_name, mapping.s_desc); - } - - @Override - protected void onMethodExit(int opcode) { - if (opcode == IRETURN) { - visitInsn(DUP); // load return value - visitVarInsn(ALOAD, 1); // load ItemStack - visitVarInsn(ALOAD, 0); // load this (Enchantment) - visitMethodInsn(INVOKESTATIC, "gregtech/asm/hooks/EnchantmentHooks", "checkTool", - "(ZLnet/minecraft/item/ItemStack;Lnet/minecraft/enchantment/Enchantment;)Z", false); // do GT tool - // checking - // logic - } - } -} diff --git a/src/main/java/gregtech/asm/visitors/EntityRendererVisitor.java b/src/main/java/gregtech/asm/visitors/EntityRendererVisitor.java deleted file mode 100644 index a859ff5d4d4..00000000000 --- a/src/main/java/gregtech/asm/visitors/EntityRendererVisitor.java +++ /dev/null @@ -1,44 +0,0 @@ -package gregtech.asm.visitors; - -import gregtech.asm.util.ObfMapping; - -import org.objectweb.asm.MethodVisitor; -import org.objectweb.asm.Opcodes; - -public class EntityRendererVisitor extends MethodVisitor implements Opcodes { - - public static final String TARGET_CLASS_NAME = "net/minecraft/client/renderer/EntityRenderer"; - public static final ObfMapping TARGET_METHOD = new ObfMapping(TARGET_CLASS_NAME, "func_175068_a", "(IFJ)V"); - private static final ObfMapping METHOD_RENDER_BLOCK_LAYER = new ObfMapping( - "net/minecraft/client/renderer/RenderGlobal", - "func_174977_a", - "(Lnet/minecraft/util/BlockRenderLayer;DILnet/minecraft/entity/Entity;)I").toRuntime(); - private static final ObfMapping METHOD_RENDER_BLOCK_LAYER2 = new ObfMapping( - "net/minecraft/client/renderer/RenderGlobal", - "func_174982_a", - "(Lnet/minecraft/util/BlockRenderLayer;DILnet/minecraft/entity/Entity;)I").toRuntime(); - - private static final ObfMapping METHOD_BLOOM_HOOKS = new ObfMapping( - "gregtech/client/utils/BloomEffectUtil", - "renderBloomBlockLayer", - "(Lnet/minecraft/client/renderer/RenderGlobal;Lnet/minecraft/util/BlockRenderLayer;DILnet/minecraft/entity/Entity;)I"); - - public EntityRendererVisitor(MethodVisitor mv) { - super(ASM5, mv); - } - - private int time = 0; - - @Override - public void visitMethodInsn(int opcode, String owner, String name, String desc, boolean itf) { - if (opcode == INVOKEVIRTUAL && - (METHOD_RENDER_BLOCK_LAYER.matches(name, desc) || METHOD_RENDER_BLOCK_LAYER2.matches(name, desc))) { - time++; - if (time == 4) { - METHOD_BLOOM_HOOKS.visitMethodInsn(this, INVOKESTATIC); - return; - } - } - super.visitMethodInsn(opcode, owner, name, desc, itf); - } -} diff --git a/src/main/java/gregtech/asm/visitors/JEIVisitor.java b/src/main/java/gregtech/asm/visitors/JEIVisitor.java deleted file mode 100644 index 26fc156f89a..00000000000 --- a/src/main/java/gregtech/asm/visitors/JEIVisitor.java +++ /dev/null @@ -1,52 +0,0 @@ -package gregtech.asm.visitors; - -import gregtech.asm.util.ObfMapping; - -import org.objectweb.asm.MethodVisitor; -import org.objectweb.asm.Opcodes; - -public class JEIVisitor extends MethodVisitor implements Opcodes { - - public static final String TARGET_CLASS_NAME = "mezz/jei/startup/ForgeModIdHelper"; - public static final ObfMapping TARGET_METHOD = new ObfMapping(TARGET_CLASS_NAME, "addModNameToIngredientTooltip", - targetSignature()); - - private static final String FLUID_TOOLTIP_OWNER = "gregtech/asm/hooks/JEIHooks"; - private static final String FLUID_TOOLTIP_SIGNATURE = tooltipSignature(); - private static final String FLUID_TOOLTIP_METHOD_NAME = "addFluidTooltip"; - - public JEIVisitor(MethodVisitor mv) { - super(Opcodes.ASM5, mv); - } - - // Need to call JEIHooks#addFluidTooltip(List, Object) - @Override - public void visitCode() { - mv.visitVarInsn(ALOAD, 1); // List tooltip - mv.visitVarInsn(ALOAD, 2); // T ingredient - - // statically call addFluidTooltip(List, Object) - mv.visitMethodInsn(INVOKESTATIC, FLUID_TOOLTIP_OWNER, FLUID_TOOLTIP_METHOD_NAME, FLUID_TOOLTIP_SIGNATURE, - false); - - mv.visitCode(); - } - - // public List addModNameToIngredientTooltip(List tooltip, E ingredient, IIngredientHelper - // ingredientHelper) - private static String targetSignature() { - return "(" + - "Ljava/util/List;" + // List - "Ljava/lang/Object;" + // E - "Lmezz/jei/api/ingredients/IIngredientHelper;" + // IIngredientHelper - ")Ljava/util/List;"; // return List - } - - // public void addFluidTooltip(List tooltip, Object ingredient) - private static String tooltipSignature() { - return "(" + - "Ljava/util/List;" + // List - "Ljava/lang/Object;" + // Object - ")V"; // return void - } -} diff --git a/src/main/java/gregtech/asm/visitors/LayerArmorBaseVisitor.java b/src/main/java/gregtech/asm/visitors/LayerArmorBaseVisitor.java deleted file mode 100644 index aef7ff3395e..00000000000 --- a/src/main/java/gregtech/asm/visitors/LayerArmorBaseVisitor.java +++ /dev/null @@ -1,36 +0,0 @@ -package gregtech.asm.visitors; - -import gregtech.asm.util.ObfMapping; - -import org.objectweb.asm.MethodVisitor; -import org.objectweb.asm.Opcodes; - -public class LayerArmorBaseVisitor extends MethodVisitor implements Opcodes { - - public static final String TARGET_CLASS_NAME = "net/minecraft/client/renderer/entity/layers/LayerArmorBase"; - public static final ObfMapping TARGET_METHOD = new ObfMapping(TARGET_CLASS_NAME, "func_188361_a", - "(Lnet/minecraft/entity/EntityLivingBase;FFFFFFFLnet/minecraft/inventory/EntityEquipmentSlot;)V"); - - private static final String ARMOR_HOOKS_OWNER = "gregtech/asm/hooks/ArmorRenderHooks"; - private static final String ARMOR_HOOKS_SIGNATURE = "(Lnet/minecraft/client/renderer/entity/layers/LayerArmorBase;Lnet/minecraft/entity/EntityLivingBase;FFFFFFFLnet/minecraft/inventory/EntityEquipmentSlot;)V"; - private static final String ARMOR_HOOKS_METHOD_NAME = "renderArmorLayer"; - - public LayerArmorBaseVisitor(MethodVisitor mv) { - super(Opcodes.ASM5, mv); - } - - @Override - public void visitInsn(int opcode) { - if (opcode == Opcodes.RETURN) { - super.visitVarInsn(ALOAD, 0); // this - super.visitVarInsn(ALOAD, 1); // entityLivingBaseIn - for (int i = 0; i < 7; i++) - super.visitVarInsn(FLOAD, 2 + i); // limbSwing, limbSwingAmount, partialTicks, ageInTicks, netHeadYaw, - // headPitch, scale - super.visitVarInsn(ALOAD, 9); // slotIn - super.visitMethodInsn(INVOKESTATIC, ARMOR_HOOKS_OWNER, ARMOR_HOOKS_METHOD_NAME, ARMOR_HOOKS_SIGNATURE, - false); - } - super.visitInsn(opcode); - } -} diff --git a/src/main/java/gregtech/asm/visitors/LayerCustomHeadVisitor.java b/src/main/java/gregtech/asm/visitors/LayerCustomHeadVisitor.java deleted file mode 100644 index ce253343216..00000000000 --- a/src/main/java/gregtech/asm/visitors/LayerCustomHeadVisitor.java +++ /dev/null @@ -1,59 +0,0 @@ -package gregtech.asm.visitors; - -import gregtech.asm.util.ObfMapping; -import gregtech.asm.util.SafeMethodVisitor; - -import org.objectweb.asm.Label; -import org.objectweb.asm.MethodVisitor; -import org.objectweb.asm.Opcodes; - -public class LayerCustomHeadVisitor extends SafeMethodVisitor { - - public static final String TARGET_CLASS_NAME = "net/minecraft/client/renderer/entity/layers/LayerCustomHead"; - public static final ObfMapping TARGET_METHOD = new ObfMapping(TARGET_CLASS_NAME, "func_177141_a", - "(Lnet/minecraft/entity/EntityLivingBase;FFFFFFF)V"); - - private static final String METHOD_OWNER = "net/minecraft/client/renderer/ItemRenderer"; - private static final String METHOD_SIGNATURE = "(Lnet/minecraft/entity/EntityLivingBase;Lnet/minecraft/item/ItemStack;Lnet/minecraft/client/renderer/block/model/ItemCameraTransforms$TransformType;)V"; - private static final String METHOD_NAME = "func_178099_a"; - private static final ObfMapping METHOD_MAPPING = new ObfMapping(METHOD_OWNER, METHOD_NAME, METHOD_SIGNATURE) - .toRuntime(); - - private static final String ARMOR_HOOKS_OWNER = "gregtech/asm/hooks/ArmorRenderHooks"; - private static final String ARMOR_HOOKS_SIGNATURE = "(Lnet/minecraft/entity/EntityLivingBase;)Z"; - private static final String ARMOR_HOOKS_METHOD_NAME = "shouldNotRenderHeadItem"; - - public LayerCustomHeadVisitor(MethodVisitor mv) { - super(Opcodes.ASM5, mv); - } - - private static boolean checkTargetInsn(int opcode, String owner, String name, String desc) { - return opcode == Opcodes.INVOKEVIRTUAL && METHOD_MAPPING.s_owner.equals(owner) && - METHOD_MAPPING.matches(name, desc); - } - - @Override - public void visitMethodInsn(int opcode, String owner, String name, String desc, boolean itf) { - if (checkTargetInsn(opcode, owner, name, desc)) { - markPatchedSuccessfully(); - Label endLabel = new Label(); - Label skipLabel = new Label(); - super.visitVarInsn(Opcodes.ALOAD, 1); // load entity - super.visitMethodInsn(Opcodes.INVOKESTATIC, ARMOR_HOOKS_OWNER, ARMOR_HOOKS_METHOD_NAME, - ARMOR_HOOKS_SIGNATURE, false); - super.visitJumpInsn(Opcodes.IFEQ, skipLabel); - for (int i = 0; i < 4; i++) super.visitInsn(Opcodes.POP); // pop this, entity, stack, transformType - super.visitJumpInsn(Opcodes.GOTO, endLabel); - super.visitLabel(skipLabel); - super.visitMethodInsn(opcode, owner, name, desc, itf); - super.visitLabel(endLabel); - return; - } - super.visitMethodInsn(opcode, owner, name, desc, itf); - } - - @Override - protected String getInjectTargetString() { - return String.format("Patch target: %s; injection point: %s; (point not found)", TARGET_METHOD, METHOD_MAPPING); - } -} diff --git a/src/main/java/gregtech/asm/visitors/LittleTilesVisitor.java b/src/main/java/gregtech/asm/visitors/LittleTilesVisitor.java deleted file mode 100644 index a4d09e93ff1..00000000000 --- a/src/main/java/gregtech/asm/visitors/LittleTilesVisitor.java +++ /dev/null @@ -1,37 +0,0 @@ -package gregtech.asm.visitors; - -import gregtech.asm.util.ObfMapping; - -import org.objectweb.asm.MethodVisitor; -import org.objectweb.asm.Opcodes; - -public class LittleTilesVisitor extends MethodVisitor implements Opcodes { - - public static final String TARGET_CLASS_NAME = "com/creativemd/littletiles/client/render/world/TileEntityRenderManager"; - public static final ObfMapping TARGET_METHOD = new ObfMapping( - TARGET_CLASS_NAME, - "", - "(Lcom/creativemd/littletiles/common/tileentity/TileEntityLittleTiles;)V"); - private static final ObfMapping FIELD_LAYER_RENDER_BOX_CACHE = new ObfMapping( - TARGET_CLASS_NAME, - "boxCache", - "Lcom/creativemd/littletiles/client/render/cache/LayeredRenderBoxCache;"); - private static final ObfMapping METHOD_LAYER_RENDER_BOX_CACHE_HOOKS = new ObfMapping( - "gregtech/asm/hooks/LittleTilesHooks", - "initLayeredRenderBoxCache", - "()Lcom/creativemd/littletiles/client/render/cache/LayeredRenderBoxCache;"); - - public LittleTilesVisitor(MethodVisitor mv) { - super(ASM5, mv); - } - - @Override - public void visitInsn(int opcode) { - if (opcode == RETURN) { - super.visitVarInsn(ALOAD, 0); - METHOD_LAYER_RENDER_BOX_CACHE_HOOKS.visitMethodInsn(this, INVOKESTATIC); - FIELD_LAYER_RENDER_BOX_CACHE.visitFieldInsn(this, PUTFIELD); - } - super.visitInsn(opcode); - } -} diff --git a/src/main/java/gregtech/asm/visitors/MinecraftVisitor.java b/src/main/java/gregtech/asm/visitors/MinecraftVisitor.java deleted file mode 100644 index 05670191a4a..00000000000 --- a/src/main/java/gregtech/asm/visitors/MinecraftVisitor.java +++ /dev/null @@ -1,26 +0,0 @@ -package gregtech.asm.visitors; - -import gregtech.asm.util.ObfMapping; - -import org.objectweb.asm.MethodVisitor; -import org.objectweb.asm.Opcodes; -import org.objectweb.asm.commons.AdviceAdapter; - -public final class MinecraftVisitor extends AdviceAdapter implements Opcodes { - - public static final String TARGET_CLASS_NAME = "net/minecraft/client/Minecraft"; - - public static final ObfMapping PROCESS_KEY_F3 = new ObfMapping(TARGET_CLASS_NAME, "func_184122_c", "(I)Z"); - - public MinecraftVisitor(MethodVisitor mv) { - super(ASM5, mv, ACC_PRIVATE, PROCESS_KEY_F3.s_name, PROCESS_KEY_F3.s_desc); - } - - @Override - protected void onMethodExit(int opcode) { - if (opcode == IRETURN) { - visitVarInsn(ILOAD, 1); // load key pressed - visitMethodInsn(INVOKESTATIC, "gregtech/asm/hooks/MinecraftHooks", "sendF3HMessage", "(I)V", false); - } - } -} diff --git a/src/main/java/gregtech/asm/visitors/ModelCTMVisitor.java b/src/main/java/gregtech/asm/visitors/ModelCTMVisitor.java deleted file mode 100644 index 06470b38e29..00000000000 --- a/src/main/java/gregtech/asm/visitors/ModelCTMVisitor.java +++ /dev/null @@ -1,36 +0,0 @@ -package gregtech.asm.visitors; - -import gregtech.asm.util.ObfMapping; - -import org.objectweb.asm.MethodVisitor; -import org.objectweb.asm.Opcodes; - -public class ModelCTMVisitor extends MethodVisitor implements Opcodes { - - public static final String TARGET_CLASS_NAME = "team/chisel/ctm/client/asm/CTMCoreMethods"; - public static final ObfMapping TARGET_METHOD = new ObfMapping(TARGET_CLASS_NAME, - "canRenderInLayer", - "(Lnet/minecraft/block/state/IBlockState;Lnet/minecraft/util/BlockRenderLayer;)Ljava/lang/Boolean;"); - private static final ObfMapping METHOD_CAN_RENDER_IN_LAYER = new ObfMapping( - "team/chisel/ctm/api/model/IModelCTM", - "canRenderInLayer", - "(Lnet/minecraft/block/state/IBlockState;Lnet/minecraft/util/BlockRenderLayer;)Z"); - - private static final ObfMapping METHOD_CAN_RENDERER_IN_LAYER_HOOKS = new ObfMapping( - "gregtech/asm/hooks/CTMModHooks", - "canRenderInLayer", - "(Lteam/chisel/ctm/api/model/IModelCTM;Lnet/minecraft/block/state/IBlockState;Lnet/minecraft/util/BlockRenderLayer;)Z"); - - public ModelCTMVisitor(MethodVisitor mv) { - super(ASM5, mv); - } - - @Override - public void visitMethodInsn(int opcode, String owner, String name, String desc, boolean itf) { - if (opcode == INVOKEINTERFACE && (METHOD_CAN_RENDER_IN_LAYER.matches(name, desc))) { - METHOD_CAN_RENDERER_IN_LAYER_HOOKS.visitMethodInsn(this, INVOKESTATIC); - return; - } - super.visitMethodInsn(opcode, owner, name, desc, itf); - } -} diff --git a/src/main/java/gregtech/asm/visitors/ModelLoaderRegistryVisitor.java b/src/main/java/gregtech/asm/visitors/ModelLoaderRegistryVisitor.java deleted file mode 100644 index 7b68ba70bac..00000000000 --- a/src/main/java/gregtech/asm/visitors/ModelLoaderRegistryVisitor.java +++ /dev/null @@ -1,32 +0,0 @@ -package gregtech.asm.visitors; - -import gregtech.asm.util.ObfMapping; - -import org.objectweb.asm.MethodVisitor; - -import static org.objectweb.asm.Opcodes.*; - -public class ModelLoaderRegistryVisitor extends MethodVisitor { - - public static final String TARGET_CLASS_NAME = "net/minecraftforge/client/model/ModelLoaderRegistry"; - - public static final ObfMapping TARGET_METHOD = new ObfMapping(TARGET_CLASS_NAME, - "clearModelCache", - "(Lnet/minecraft/client/resources/IResourceManager;)V"); - - private static final String CLEAR_CACHE_OWNER = "gregtech/api/unification/material/info/MaterialIconType"; - private static final String CLEAR_CACHE_METHOD_NAME = "clearCache"; - private static final String CLEAR_CACHE_DESC = "()V"; - - public ModelLoaderRegistryVisitor(MethodVisitor mv) { - super(ASM5, mv); - } - - @Override - public void visitInsn(int opcode) { - if (opcode == RETURN) { - visitMethodInsn(INVOKESTATIC, CLEAR_CACHE_OWNER, CLEAR_CACHE_METHOD_NAME, CLEAR_CACHE_DESC, false); - } - super.visitInsn(opcode); - } -} diff --git a/src/main/java/gregtech/asm/visitors/RecipeRepairItemVisitor.java b/src/main/java/gregtech/asm/visitors/RecipeRepairItemVisitor.java deleted file mode 100644 index 94ba37b61c8..00000000000 --- a/src/main/java/gregtech/asm/visitors/RecipeRepairItemVisitor.java +++ /dev/null @@ -1,71 +0,0 @@ -package gregtech.asm.visitors; - -import gregtech.asm.util.ObfMapping; - -import org.objectweb.asm.Opcodes; -import org.objectweb.asm.tree.*; - -public class RecipeRepairItemVisitor implements Opcodes { - - public static final String TARGET_CLASS_NAME = "net/minecraft/item/crafting/RecipeRepairItem"; - private static final String HOOK_CLASS_NAME = "gregtech/asm/hooks/RecipeRepairItemHooks"; - - private static final ObfMapping MATCHES_METHOD = new ObfMapping(TARGET_CLASS_NAME, "func_77569_a", - "(Lnet/minecraft/inventory/InventoryCrafting;Lnet/minecraft/world/World;)Z").toRuntime(); - private static final String MATCHES_HOOK_SIGNATURE = "(Lnet/minecraft/inventory/InventoryCrafting;)Z"; - private static final String MATCHES_HOOK_METHOD_NAME = "matches"; - - private static final ObfMapping RESULT_METHOD = new ObfMapping(TARGET_CLASS_NAME, "func_77572_b", - "(Lnet/minecraft/inventory/InventoryCrafting;)Lnet/minecraft/item/ItemStack;").toRuntime(); - private static final String RESULT_HOOK_SIGNATURE = "(Lnet/minecraft/inventory/InventoryCrafting;)Lnet/minecraft/item/ItemStack;"; - private static final String RESULT_HOOK_METHOD_NAME = "getCraftingResult"; - - private static final ObfMapping REMAINING_METHOD = new ObfMapping(TARGET_CLASS_NAME, "func_179532_b", - "(Lnet/minecraft/inventory/InventoryCrafting;)Lnet/minecraft/util/NonNullList;").toRuntime(); - private static final String REMAINING_HOOK_SIGNATURE = "(Lnet/minecraft/inventory/InventoryCrafting;)Lnet/minecraft/util/NonNullList;"; - private static final String REMAINING_HOOK_METHOD_NAME = "getRemainingItems"; - - public static ClassNode handleClassNode(ClassNode classNode) { - int done = 0; - for (MethodNode m : classNode.methods) { - if (done == 3) break; - - // matches() method - if (m.name.equals(MATCHES_METHOD.s_name) && m.desc.equals(MATCHES_METHOD.s_desc)) { - InsnList insns = new InsnList(); - insns.add(new VarInsnNode(ALOAD, 1)); - insns.add(new MethodInsnNode(INVOKESTATIC, HOOK_CLASS_NAME, MATCHES_HOOK_METHOD_NAME, - MATCHES_HOOK_SIGNATURE, false)); - insns.add(new InsnNode(IRETURN)); - AbstractInsnNode first = m.instructions.getFirst(); - m.instructions.insertBefore(first, insns); - done++; - } - - // getCraftingResult() method - if (m.name.equals(RESULT_METHOD.s_name) && m.desc.equals(RESULT_METHOD.s_desc)) { - InsnList insns = new InsnList(); - insns.add(new VarInsnNode(ALOAD, 1)); - insns.add(new MethodInsnNode(INVOKESTATIC, HOOK_CLASS_NAME, RESULT_HOOK_METHOD_NAME, - RESULT_HOOK_SIGNATURE, false)); - insns.add(new InsnNode(ARETURN)); - AbstractInsnNode first = m.instructions.getFirst(); - m.instructions.insertBefore(first, insns); - done++; - } - - // getRemainingItems() method - if (m.name.equals(REMAINING_METHOD.s_name) && m.desc.equals(REMAINING_METHOD.s_desc)) { - InsnList insns = new InsnList(); - insns.add(new VarInsnNode(ALOAD, 1)); - insns.add(new MethodInsnNode(INVOKESTATIC, HOOK_CLASS_NAME, REMAINING_HOOK_METHOD_NAME, - REMAINING_HOOK_SIGNATURE, false)); - insns.add(new InsnNode(ARETURN)); - AbstractInsnNode first = m.instructions.getFirst(); - m.instructions.insertBefore(first, insns); - done++; - } - } - return classNode; - } -} diff --git a/src/main/java/gregtech/asm/visitors/RegionRenderCacheBuilderVisitor.java b/src/main/java/gregtech/asm/visitors/RegionRenderCacheBuilderVisitor.java deleted file mode 100644 index 27db622cfa3..00000000000 --- a/src/main/java/gregtech/asm/visitors/RegionRenderCacheBuilderVisitor.java +++ /dev/null @@ -1,34 +0,0 @@ -package gregtech.asm.visitors; - -import gregtech.asm.util.ObfMapping; - -import org.objectweb.asm.MethodVisitor; -import org.objectweb.asm.Opcodes; - -public class RegionRenderCacheBuilderVisitor extends MethodVisitor implements Opcodes { - - public static final String TARGET_CLASS_NAME = "net/minecraft/client/renderer/RegionRenderCacheBuilder"; - public static final ObfMapping TARGET_METHOD = new ObfMapping(TARGET_CLASS_NAME, "", "()V"); - - private static final ObfMapping FIELD_WORLD_RENDERERS = new ObfMapping(TARGET_CLASS_NAME, - "field_179040_a", - "[Lnet/minecraft/client/renderer/BufferBuilder;").toRuntime(); - private static final ObfMapping METHOD_BLOOM_HOOKS = new ObfMapping( - "gregtech/client/utils/BloomEffectUtil", - "initBloomRenderLayer", - "([Lnet/minecraft/client/renderer/BufferBuilder;)V"); - - public RegionRenderCacheBuilderVisitor(MethodVisitor mv) { - super(ASM5, mv); - } - - @Override - public void visitInsn(int opcode) { - if (opcode == RETURN) { - super.visitVarInsn(ALOAD, 0); - FIELD_WORLD_RENDERERS.visitFieldInsn(this, GETFIELD); - METHOD_BLOOM_HOOKS.visitMethodInsn(this, INVOKESTATIC); - } - super.visitInsn(opcode); - } -} diff --git a/src/main/java/gregtech/asm/visitors/RenderChunkVisitor.java b/src/main/java/gregtech/asm/visitors/RenderChunkVisitor.java deleted file mode 100644 index 8f37a9ff9ad..00000000000 --- a/src/main/java/gregtech/asm/visitors/RenderChunkVisitor.java +++ /dev/null @@ -1,35 +0,0 @@ -package gregtech.asm.visitors; - -import gregtech.asm.util.ObfMapping; - -import org.objectweb.asm.MethodVisitor; -import org.objectweb.asm.Opcodes; - -public class RenderChunkVisitor extends MethodVisitor implements Opcodes { - - public static final String TARGET_CLASS_NAME = "net/minecraft/client/renderer/chunk/RenderChunk"; - public static final ObfMapping TARGET_METHOD = new ObfMapping(TARGET_CLASS_NAME, "func_178581_b", - "(FFFLnet/minecraft/client/renderer/chunk/ChunkCompileTaskGenerator;)V"); - private static final ObfMapping METHOD_GET_RENDERER = new ObfMapping( - "net/minecraft/client/renderer/tileentity/TileEntityRendererDispatcher", - "func_147546_a", - "(Lnet/minecraft/tileentity/TileEntity;)Lnet/minecraft/client/renderer/tileentity/TileEntitySpecialRenderer;") - .toRuntime(); - private static final ObfMapping METHOD_GET_RENDERER_HOOKS = new ObfMapping( - "gregtech/asm/hooks/RenderChunkHooks", - "getRenderer", - "(Lnet/minecraft/client/renderer/tileentity/TileEntityRendererDispatcher;Lnet/minecraft/tileentity/TileEntity;)Lnet/minecraft/client/renderer/tileentity/TileEntitySpecialRenderer;"); - - public RenderChunkVisitor(MethodVisitor mv) { - super(ASM5, mv); - } - - @Override - public void visitMethodInsn(int opcode, String owner, String name, String desc, boolean itf) { - if (opcode == INVOKEVIRTUAL && (METHOD_GET_RENDERER.matches(name, desc))) { - METHOD_GET_RENDERER_HOOKS.visitMethodInsn(this, INVOKESTATIC); - return; - } - super.visitMethodInsn(opcode, owner, name, desc, itf); - } -} diff --git a/src/main/java/gregtech/asm/visitors/RenderItemVisitor.java b/src/main/java/gregtech/asm/visitors/RenderItemVisitor.java deleted file mode 100644 index 750de53af3b..00000000000 --- a/src/main/java/gregtech/asm/visitors/RenderItemVisitor.java +++ /dev/null @@ -1,118 +0,0 @@ -package gregtech.asm.visitors; - -import gregtech.api.util.Mods; -import gregtech.asm.util.ObfMapping; - -import net.minecraftforge.fml.common.Loader; - -import org.objectweb.asm.Label; -import org.objectweb.asm.Opcodes; -import org.objectweb.asm.tree.*; - -import java.util.Iterator; - -public class RenderItemVisitor implements Opcodes { - - public static final String TARGET_CLASS_NAME = "net/minecraft/client/renderer/RenderItem"; - public static final ObfMapping TARGET_METHOD = new ObfMapping(TARGET_CLASS_NAME, "func_180453_a", - "(Lnet/minecraft/client/gui/FontRenderer;Lnet/minecraft/item/ItemStack;IILjava/lang/String;)V").toRuntime(); // renderItemOverlayIntoGUI - - public static void transform(Iterator methods) { - while (methods.hasNext()) { - MethodNode m = methods.next(); - if (TARGET_METHOD.matches(m)) { - InsnList callRenderLampOverlay = new InsnList(); - callRenderLampOverlay.add(new VarInsnNode(ALOAD, 2)); - callRenderLampOverlay.add(new VarInsnNode(ILOAD, 3)); - callRenderLampOverlay.add(new VarInsnNode(ILOAD, 4)); - callRenderLampOverlay.add(new MethodInsnNode(INVOKESTATIC, "gregtech/asm/hooks/RenderItemHooks", - "renderLampOverlay", "(Lnet/minecraft/item/ItemStack;II)V", false)); - - boolean enderCoreLoaded = Loader.instance().getIndexedModList().containsKey(Mods.Names.ENDER_CORE); - - // do not conflict with EnderCore's changes, which already do what we need - InsnList callRenderElectricBar; - if (!enderCoreLoaded) { - callRenderElectricBar = new InsnList(); - callRenderElectricBar.add(new VarInsnNode(ALOAD, 2)); - callRenderElectricBar.add(new VarInsnNode(ILOAD, 3)); - callRenderElectricBar.add(new VarInsnNode(ILOAD, 4)); - callRenderElectricBar.add(new MethodInsnNode(INVOKESTATIC, "gregtech/asm/hooks/RenderItemHooks", - "renderElectricBar", "(Lnet/minecraft/item/ItemStack;II)V", false)); - } else { - callRenderElectricBar = null; - } - - boolean ifne = false, l2 = false, renderLampOverlayApplied = false; - - boolean primed, onFrame, renderElectricBarApplied; - primed = onFrame = renderElectricBarApplied = enderCoreLoaded; - Label target = null; - - for (int i = 0; i < m.instructions.size(); i++) { - AbstractInsnNode next = m.instructions.get(i); - - if (!ifne) { - if (next.getOpcode() == IFNE) { - ifne = true; - } - continue; - } - - if (!l2) { - if (next instanceof LabelNode) { - l2 = true; - m.instructions.insert(next, callRenderLampOverlay); - } - continue; - } - - if (!renderLampOverlayApplied) { - if (next instanceof FrameNode) { - m.instructions.insert(next, callRenderLampOverlay); - renderLampOverlayApplied = true; - } - continue; - } - - if (renderElectricBarApplied) { - break; - } - - if (!primed) { - if (next.getOpcode() == INVOKEVIRTUAL && - next instanceof MethodInsnNode && - "showDurabilityBar".equals(((MethodInsnNode) next).name)) { - primed = true; - } - continue; - } - - if (target == null) { - if (next.getOpcode() == IFEQ && next instanceof JumpInsnNode) { - target = ((JumpInsnNode) next).label.getLabel(); - } - continue; - } - - if (!onFrame) { - if (next instanceof LabelNode && ((LabelNode) next).getLabel() == target) { - onFrame = true; - } - continue; - } - - if (next instanceof FrameNode) { - m.instructions.insert(next, callRenderElectricBar); - renderElectricBarApplied = true; - break; - } - } - if (!renderElectricBarApplied) { - m.instructions.insert(callRenderElectricBar); - } - break; - } - } - } -} diff --git a/src/main/java/gregtech/asm/visitors/SpecialArmorApplyVisitor.java b/src/main/java/gregtech/asm/visitors/SpecialArmorApplyVisitor.java deleted file mode 100644 index 4be3efac79d..00000000000 --- a/src/main/java/gregtech/asm/visitors/SpecialArmorApplyVisitor.java +++ /dev/null @@ -1,57 +0,0 @@ -package gregtech.asm.visitors; - -import gregtech.asm.util.ObfMapping; -import gregtech.asm.util.SafeMethodVisitor; - -import org.objectweb.asm.MethodVisitor; -import org.objectweb.asm.Opcodes; - -public class SpecialArmorApplyVisitor extends SafeMethodVisitor { - - public static final String TARGET_CLASS_NAME = "net/minecraftforge/common/ISpecialArmor$ArmorProperties"; - public static final ObfMapping TARGET_METHOD = new ObfMapping(TARGET_CLASS_NAME, "applyArmor", - "(Lnet/minecraft/entity/EntityLivingBase;Lnet/minecraft/util/NonNullList;Lnet/minecraft/util/DamageSource;D)F"); - - private static final ObfMapping METHOD_MAPPING = new ObfMapping("net/minecraft/util/CombatRules", "func_189427_a", - "(FFF)F").toRuntime(); - - private static final String ARMOR_HOOKS_OWNER = "gregtech/asm/hooks/ArmorHooks"; - private static final String ARMOR_HOOKS_SIGNATURE = "(FLnet/minecraft/entity/EntityLivingBase;Lnet/minecraft/util/NonNullList;Lnet/minecraft/util/DamageSource;)V"; - private static final String ARMOR_HOOKS_METHOD_NAME = "damageArmor"; - - public SpecialArmorApplyVisitor(MethodVisitor mv) { - super(Opcodes.ASM5, mv); - } - - private static boolean checkTargetInsn(int opcode, String owner, String name, String desc) { - return opcode == Opcodes.INVOKESTATIC && METHOD_MAPPING.s_owner.equals(owner) && - METHOD_MAPPING.matches(name, desc); - } - - @Override - public void visitMethodInsn(int opcode, String owner, String name, String desc, boolean itf) { - if (checkTargetInsn(opcode, owner, name, desc)) { - markPatchedSuccessfully(); - super.visitFieldInsn(Opcodes.PUTSTATIC, TARGET_CLASS_NAME, - SpecialArmorClassVisitor.CACHED_TOUGHNESS_FIELD_NAME, "F"); // store armorToughness - super.visitFieldInsn(Opcodes.PUTSTATIC, TARGET_CLASS_NAME, - SpecialArmorClassVisitor.CACHED_TOTAL_ARMOR_FIELD_NAME, "F"); // store totalArmor - super.visitInsn(Opcodes.DUP); // duplicate damage - super.visitVarInsn(Opcodes.ALOAD, 0); // load entity - super.visitVarInsn(Opcodes.ALOAD, 1); // load inventory - super.visitVarInsn(Opcodes.ALOAD, 2); // load damageSource - super.visitMethodInsn(Opcodes.INVOKESTATIC, ARMOR_HOOKS_OWNER, ARMOR_HOOKS_METHOD_NAME, - ARMOR_HOOKS_SIGNATURE, false); // call ArmorHooks - super.visitFieldInsn(Opcodes.GETSTATIC, TARGET_CLASS_NAME, - SpecialArmorClassVisitor.CACHED_TOTAL_ARMOR_FIELD_NAME, "F"); // load totalArmor back - super.visitFieldInsn(Opcodes.GETSTATIC, TARGET_CLASS_NAME, - SpecialArmorClassVisitor.CACHED_TOUGHNESS_FIELD_NAME, "F"); // load armorToughness back - } - super.visitMethodInsn(opcode, owner, name, desc, itf); - } - - @Override - protected String getInjectTargetString() { - return String.format("Patch target: %s; injection point: %s; (point not found)", TARGET_METHOD, METHOD_MAPPING); - } -} diff --git a/src/main/java/gregtech/asm/visitors/SpecialArmorClassVisitor.java b/src/main/java/gregtech/asm/visitors/SpecialArmorClassVisitor.java deleted file mode 100644 index fbc66c71ab1..00000000000 --- a/src/main/java/gregtech/asm/visitors/SpecialArmorClassVisitor.java +++ /dev/null @@ -1,28 +0,0 @@ -package gregtech.asm.visitors; - -import gregtech.asm.util.ObfMapping; -import gregtech.asm.util.TargetClassVisitor; - -import org.objectweb.asm.ClassVisitor; -import org.objectweb.asm.MethodVisitor; -import org.objectweb.asm.Opcodes; - -import java.util.function.Function; - -public class SpecialArmorClassVisitor extends TargetClassVisitor { - - public static final String CACHED_TOUGHNESS_FIELD_NAME = "gregtech__cachedToughness"; - public static final String CACHED_TOTAL_ARMOR_FIELD_NAME = "gregtech__cachedTotalArmor"; - - public SpecialArmorClassVisitor(ClassVisitor cv, ObfMapping methodKey, - Function visitorCreator) { - super(cv, methodKey, visitorCreator); - } - - @Override - public void visitEnd() { - visitField(Opcodes.ACC_STATIC | Opcodes.ACC_PRIVATE, CACHED_TOUGHNESS_FIELD_NAME, "F", null, null); - visitField(Opcodes.ACC_STATIC | Opcodes.ACC_PRIVATE, CACHED_TOTAL_ARMOR_FIELD_NAME, "F", null, null); - super.visitEnd(); - } -} diff --git a/src/main/java/gregtech/asm/visitors/TheOneProbeVisitor.java b/src/main/java/gregtech/asm/visitors/TheOneProbeVisitor.java deleted file mode 100644 index 15f7ae71799..00000000000 --- a/src/main/java/gregtech/asm/visitors/TheOneProbeVisitor.java +++ /dev/null @@ -1,36 +0,0 @@ -package gregtech.asm.visitors; - -import gregtech.asm.util.ObfMapping; - -import org.objectweb.asm.MethodVisitor; -import org.objectweb.asm.Opcodes; - -public class TheOneProbeVisitor extends MethodVisitor implements Opcodes { - - public static final String TARGET_CLASS_NAME = "mcjty/theoneprobe/network/PacketGetInfo"; - public static final ObfMapping TARGET_METHOD = new ObfMapping(TARGET_CLASS_NAME, "getProbeInfo", getSignature()); - - private static final ObfMapping GET_BLOCK_STATE_METHOD = new ObfMapping("net/minecraft/world/World", - "func_180495_p", "(Lnet/minecraft/util/math/BlockPos;)Lnet/minecraft/block/state/IBlockState;").toRuntime(); - - public TheOneProbeVisitor(MethodVisitor mv) { - super(ASM5, mv); - } - - @Override - public void visitMethodInsn(int opcode, String owner, String name, String desc, boolean itf) { - if (opcode == INVOKEVIRTUAL && name.equals(GET_BLOCK_STATE_METHOD.s_name) && - desc.equals(GET_BLOCK_STATE_METHOD.s_desc)) { - visitMethodInsn(INVOKESTATIC, "gregtech/asm/hooks/TheOneProbeHooks", "getActualState", - "(Lnet/minecraft/world/World;Lnet/minecraft/util/math/BlockPos;)Lnet/minecraft/block/state/IBlockState;", - false); - } else super.visitMethodInsn(opcode, owner, name, desc, itf); - } - - private static String getSignature() { - return "(" + "Lnet/minecraft/entity/player/EntityPlayer;" + "Lmcjty/theoneprobe/api/ProbeMode;" + - "Lnet/minecraft/world/World;" + "Lnet/minecraft/util/math/BlockPos;" + - "Lnet/minecraft/util/EnumFacing;" + "Lnet/minecraft/util/math/Vec3d;" + - "Lnet/minecraft/item/ItemStack;" + ")Lmcjty/theoneprobe/apiimpl/ProbeInfo;"; - } -} diff --git a/src/main/java/gregtech/asm/visitors/VintagiumManagerVistor.java b/src/main/java/gregtech/asm/visitors/VintagiumManagerVistor.java deleted file mode 100644 index 4d8d53edf47..00000000000 --- a/src/main/java/gregtech/asm/visitors/VintagiumManagerVistor.java +++ /dev/null @@ -1,24 +0,0 @@ -package gregtech.asm.visitors; - -import org.objectweb.asm.ClassVisitor; -import org.objectweb.asm.FieldVisitor; -import org.objectweb.asm.Opcodes; - -public class VintagiumManagerVistor extends ClassVisitor implements Opcodes { - - public static final String TARGET_CLASS_NAME = "me/jellysquid/mods/sodium/client/render/chunk/passes/BlockRenderPass"; - - public VintagiumManagerVistor(ClassVisitor cv) { - super(ASM5, cv); - } - - @Override - public FieldVisitor visitField(int access, String name, String desc, String signature, Object value) { - // Make BlockRenderPass.VALUES and BlockRenderPass.COUNT not final - if (name.equals("VALUES") || name.equals("COUNT")) { - return super.visitField(access & ~ACC_FINAL, name, desc, signature, value); - } else { - return super.visitField(access, name, desc, signature, value); - } - } -} diff --git a/src/main/java/gregtech/asm/visitors/VintagiumPassManagerVisitor.java b/src/main/java/gregtech/asm/visitors/VintagiumPassManagerVisitor.java deleted file mode 100644 index eb103ffb651..00000000000 --- a/src/main/java/gregtech/asm/visitors/VintagiumPassManagerVisitor.java +++ /dev/null @@ -1,35 +0,0 @@ -package gregtech.asm.visitors; - -import gregtech.asm.util.ObfMapping; - -import org.objectweb.asm.MethodVisitor; -import org.objectweb.asm.Opcodes; - -public class VintagiumPassManagerVisitor extends MethodVisitor implements Opcodes { - - public static final String TARGET_CLASS_NAME = "me/jellysquid/mods/sodium/client/render/chunk/passes/BlockRenderPassManager"; - public static final ObfMapping TARGET_METHOD = new ObfMapping(TARGET_CLASS_NAME, "createDefaultMappings", - "()Lme/jellysquid/mods/sodium/client/render/chunk/passes/BlockRenderPassManager;"); - public static final ObfMapping GET_BLOOM_LAYER = new ObfMapping("gregtech/client/utils/BloomEffectUtil", - "getBloomLayer", "()Lnet/minecraft/util/BlockRenderLayer;"); - public static final ObfMapping GET_BLOOM_PASS = new ObfMapping("gregtech/client/utils/BloomEffectVintagiumUtil", - "getBloomPass", "()Lme/jellysquid/mods/sodium/client/render/chunk/passes/BlockRenderPass;"); - public static final ObfMapping ADD_MAPPING = new ObfMapping(TARGET_CLASS_NAME, "addMapping", - "(Lnet/minecraft/util/BlockRenderLayer;Lme/jellysquid/mods/sodium/client/render/chunk/passes/BlockRenderPass;)V"); - - public VintagiumPassManagerVisitor(MethodVisitor mv) { - super(ASM5, mv); - } - - @Override - public void visitInsn(int opcode) { - // add mapper.addMapping(BloomEffectUtil.getBloomLayer(), BloomEffectVintagiumUtil.getBloomPass()); - if (opcode == ARETURN) { - GET_BLOOM_LAYER.visitMethodInsn(this, INVOKESTATIC); - GET_BLOOM_PASS.visitMethodInsn(this, INVOKESTATIC); - ADD_MAPPING.visitMethodInsn(this, INVOKESPECIAL); - super.visitVarInsn(ALOAD, 0); - } - super.visitInsn(opcode); - } -} diff --git a/src/main/java/gregtech/asm/visitors/WorldVisitor.java b/src/main/java/gregtech/asm/visitors/WorldVisitor.java deleted file mode 100644 index 1fc3f5395db..00000000000 --- a/src/main/java/gregtech/asm/visitors/WorldVisitor.java +++ /dev/null @@ -1,34 +0,0 @@ -package gregtech.asm.visitors; - -import gregtech.asm.util.ObfMapping; - -import org.objectweb.asm.MethodVisitor; -import org.objectweb.asm.Opcodes; - -public class WorldVisitor extends MethodVisitor implements Opcodes { - - public static final String TARGET_CLASS_NAME = "net/minecraft/world/World"; - public static final ObfMapping TARGET_METHOD = new ObfMapping( - TARGET_CLASS_NAME, - "func_180498_a", - "(Lnet/minecraft/entity/player/EntityPlayer;ILnet/minecraft/util/math/BlockPos;I)V"); - - private static final ObfMapping METHOD_PLAY_RECORD_HOOKS = new ObfMapping( - "gregtech/asm/hooks/SoundHooks", - "playRecord", - "(Lnet/minecraft/world/IWorldEventListener;Lnet/minecraft/entity/player/EntityPlayer;ILnet/minecraft/util/math/BlockPos;I)V"); - - public WorldVisitor(MethodVisitor mv) { - super(Opcodes.ASM5, mv); - } - - @Override - public void visitMethodInsn(int opcode, String owner, String name, String desc, boolean itf) { - if (opcode == INVOKEINTERFACE && - desc.equals("(Lnet/minecraft/entity/player/EntityPlayer;ILnet/minecraft/util/math/BlockPos;I)V")) { - METHOD_PLAY_RECORD_HOOKS.visitMethodInsn(this, INVOKESTATIC); - } else { - super.visitMethodInsn(opcode, owner, name, desc, itf); - } - } -} diff --git a/src/main/java/gregtech/client/model/customtexture/CustomTextureBakedModel.java b/src/main/java/gregtech/client/model/customtexture/CustomTextureBakedModel.java index 26974bdd1ae..a1dd6015836 100644 --- a/src/main/java/gregtech/client/model/customtexture/CustomTextureBakedModel.java +++ b/src/main/java/gregtech/client/model/customtexture/CustomTextureBakedModel.java @@ -1,11 +1,16 @@ package gregtech.client.model.customtexture; import gregtech.api.util.GTLog; -import gregtech.asm.hooks.BlockHooks; -import gregtech.asm.hooks.CTMHooks; +import gregtech.client.utils.BlockHooks; +import gregtech.client.utils.CTMHooks; import net.minecraft.block.state.IBlockState; -import net.minecraft.client.renderer.block.model.*; +import net.minecraft.client.renderer.block.model.BakedQuad; +import net.minecraft.client.renderer.block.model.BakedQuadRetextured; +import net.minecraft.client.renderer.block.model.IBakedModel; +import net.minecraft.client.renderer.block.model.ItemCameraTransforms; +import net.minecraft.client.renderer.block.model.ItemOverrideList; +import net.minecraft.client.renderer.block.model.WeightedBakedModel; import net.minecraft.client.renderer.texture.TextureAtlasSprite; import net.minecraft.util.BlockRenderLayer; import net.minecraft.util.EnumFacing; @@ -15,12 +20,22 @@ import com.google.common.cache.Cache; import com.google.common.cache.CacheBuilder; -import com.google.common.collect.*; +import com.google.common.collect.ImmutableList; +import com.google.common.collect.ListMultimap; +import com.google.common.collect.Maps; +import com.google.common.collect.MultimapBuilder; +import com.google.common.collect.Table; +import com.google.common.collect.Tables; import org.apache.commons.lang3.tuple.Pair; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import java.util.*; +import java.util.Collections; +import java.util.EnumMap; +import java.util.LinkedHashMap; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; import java.util.concurrent.ExecutionException; import java.util.concurrent.TimeUnit; import java.util.function.Function; diff --git a/src/main/java/gregtech/client/model/customtexture/CustomTextureModel.java b/src/main/java/gregtech/client/model/customtexture/CustomTextureModel.java index 3d168c6fa58..bee35f483cf 100644 --- a/src/main/java/gregtech/client/model/customtexture/CustomTextureModel.java +++ b/src/main/java/gregtech/client/model/customtexture/CustomTextureModel.java @@ -1,7 +1,7 @@ package gregtech.client.model.customtexture; import gregtech.api.util.GTLog; -import gregtech.asm.hooks.CTMHooks; +import gregtech.client.utils.CTMHooks; import net.minecraft.block.state.IBlockState; import net.minecraft.client.renderer.block.model.BlockPart; @@ -26,7 +26,14 @@ import java.io.IOException; import java.lang.invoke.MethodHandle; import java.lang.invoke.MethodHandles; -import java.util.*; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Optional; import java.util.function.Function; @SideOnly(Side.CLIENT) diff --git a/src/main/java/gregtech/asm/hooks/BlockHooks.java b/src/main/java/gregtech/client/utils/BlockHooks.java similarity index 95% rename from src/main/java/gregtech/asm/hooks/BlockHooks.java rename to src/main/java/gregtech/client/utils/BlockHooks.java index dfc04afa483..0135cd0c849 100644 --- a/src/main/java/gregtech/asm/hooks/BlockHooks.java +++ b/src/main/java/gregtech/client/utils/BlockHooks.java @@ -1,4 +1,4 @@ -package gregtech.asm.hooks; +package gregtech.client.utils; import gregtech.client.model.customtexture.CustomTextureBakedModel; @@ -10,7 +10,6 @@ import org.jetbrains.annotations.NotNull; -@SuppressWarnings("unused") public class BlockHooks { public static boolean ENABLE = true; diff --git a/src/main/java/gregtech/client/utils/BloomEffectUtil.java b/src/main/java/gregtech/client/utils/BloomEffectUtil.java index cf673944599..b660f3bc26f 100644 --- a/src/main/java/gregtech/client/utils/BloomEffectUtil.java +++ b/src/main/java/gregtech/client/utils/BloomEffectUtil.java @@ -295,14 +295,6 @@ public static void init() { bloom = BlockRenderLayer.valueOf("BLOOM"); } - // Calls injected via ASM - @SuppressWarnings("unused") - public static void initBloomRenderLayer(BufferBuilder[] worldRenderers) { - worldRenderers[bloom.ordinal()] = new BufferBuilder(131072); - } - - // Calls injected via ASM - @SuppressWarnings("unused") public static int renderBloomBlockLayer(RenderGlobal renderGlobal, BlockRenderLayer blockRenderLayer, // 70% sure it's translucent uh yeah double partialTicks, diff --git a/src/main/java/gregtech/asm/hooks/CTMHooks.java b/src/main/java/gregtech/client/utils/CTMHooks.java similarity index 64% rename from src/main/java/gregtech/asm/hooks/CTMHooks.java rename to src/main/java/gregtech/client/utils/CTMHooks.java index bf254934d5c..12489186352 100644 --- a/src/main/java/gregtech/asm/hooks/CTMHooks.java +++ b/src/main/java/gregtech/client/utils/CTMHooks.java @@ -1,7 +1,7 @@ -package gregtech.asm.hooks; +package gregtech.client.utils; +import gregtech.api.util.GTLog; import gregtech.api.util.Mods; -import gregtech.client.utils.BloomEffectUtil; import net.minecraft.block.state.IBlockState; import net.minecraft.client.renderer.block.model.BakedQuad; @@ -10,13 +10,29 @@ import net.minecraft.util.EnumFacing; import net.minecraftforge.client.ForgeHooksClient; +import team.chisel.ctm.api.model.IModelCTM; +import team.chisel.ctm.client.model.ModelCTM; + +import java.lang.reflect.Field; import java.util.ArrayList; import java.util.Collections; import java.util.List; -@SuppressWarnings("unused") public class CTMHooks { + private static Field layers; + + static { + if (Mods.CTM.isModLoaded()) { + try { + layers = ModelCTM.class.getDeclaredField("layers"); + layers.setAccessible(true); + } catch (NoSuchFieldException e) { + GTLog.logger.error("CTMHooks no such field"); + } + } + } + public static ThreadLocal ENABLE = new ThreadLocal<>(); public static boolean checkLayerWithOptiFine(boolean canRenderInLayer, byte layers, BlockRenderLayer layer) { @@ -49,4 +65,17 @@ public static List getQuadsWithOptiFine(List ret, BlockRen } return ret; } + + public static boolean canRenderInLayer(IModelCTM model, IBlockState state, BlockRenderLayer layer) { + boolean canRenderInLayer = model.canRenderInLayer(state, layer); + if (model instanceof ModelCTM && layers != null) { + try { + return CTMHooks.checkLayerWithOptiFine(canRenderInLayer, layers.getByte(model), layer); + } catch (Exception ignored) { + layers = null; + GTLog.logger.error("CTMHooks Field error"); + } + } + return canRenderInLayer; + } } diff --git a/src/main/java/gregtech/asm/hooks/LittleTilesHooks.java b/src/main/java/gregtech/client/utils/LittleTilesHooks.java similarity index 85% rename from src/main/java/gregtech/asm/hooks/LittleTilesHooks.java rename to src/main/java/gregtech/client/utils/LittleTilesHooks.java index 489cdb69a37..8ca4f4201e5 100644 --- a/src/main/java/gregtech/asm/hooks/LittleTilesHooks.java +++ b/src/main/java/gregtech/client/utils/LittleTilesHooks.java @@ -1,6 +1,4 @@ -package gregtech.asm.hooks; - -import gregtech.client.utils.BloomEffectUtil; +package gregtech.client.utils; import net.minecraft.util.BlockRenderLayer; @@ -29,17 +27,12 @@ public List get(BlockRenderLayer layer) { if (layer == BloomEffectUtil.getBloomLayer()) { return bloom; } - switch (layer) { - case SOLID: - return solid; - case CUTOUT_MIPPED: - return cutout_mipped; - case CUTOUT: - return cutout; - case TRANSLUCENT: - return translucent; - } - return null; + return switch (layer) { + case SOLID -> solid; + case CUTOUT_MIPPED -> cutout_mipped; + case CUTOUT -> cutout; + case TRANSLUCENT -> translucent; + }; } public void set(List cubes, BlockRenderLayer layer) { diff --git a/src/main/java/gregtech/asm/GregTechLoadingPlugin.java b/src/main/java/gregtech/mixins/GregTechMixinLoadingPlugin.java similarity index 79% rename from src/main/java/gregtech/asm/GregTechLoadingPlugin.java rename to src/main/java/gregtech/mixins/GregTechMixinLoadingPlugin.java index ab48a079c83..69fbb618f64 100644 --- a/src/main/java/gregtech/asm/GregTechLoadingPlugin.java +++ b/src/main/java/gregtech/mixins/GregTechMixinLoadingPlugin.java @@ -1,11 +1,10 @@ -package gregtech.asm; +package gregtech.mixins; import net.minecraftforge.common.ForgeVersion; import net.minecraftforge.fml.relauncher.IFMLLoadingPlugin; import net.minecraftforge.fml.relauncher.IFMLLoadingPlugin.MCVersion; import net.minecraftforge.fml.relauncher.IFMLLoadingPlugin.Name; import net.minecraftforge.fml.relauncher.IFMLLoadingPlugin.SortingIndex; -import net.minecraftforge.fml.relauncher.IFMLLoadingPlugin.TransformerExclusions; import org.jetbrains.annotations.Nullable; import zone.rong.mixinbooter.IEarlyMixinLoader; @@ -14,16 +13,14 @@ import java.util.List; import java.util.Map; -@Name("GregTechLoadingPlugin") +@Name("GregTechMixinLoadingPlugin") @MCVersion(ForgeVersion.mcVersion) -@TransformerExclusions("gregtech.asm.") @SortingIndex(1001) -// TODO, move to mixin package -public class GregTechLoadingPlugin implements IFMLLoadingPlugin, IEarlyMixinLoader { +public class GregTechMixinLoadingPlugin implements IFMLLoadingPlugin, IEarlyMixinLoader { @Override public String[] getASMTransformerClass() { - return new String[] { "gregtech.asm.GregTechTransformer" }; + return null; } @Override diff --git a/src/main/java/gregtech/mixins/ctm/AbstractCTMBakedModelMixin.java b/src/main/java/gregtech/mixins/ctm/AbstractCTMBakedModelMixin.java index 038f9d90023..030b74cc61c 100644 --- a/src/main/java/gregtech/mixins/ctm/AbstractCTMBakedModelMixin.java +++ b/src/main/java/gregtech/mixins/ctm/AbstractCTMBakedModelMixin.java @@ -1,6 +1,6 @@ package gregtech.mixins.ctm; -import gregtech.asm.hooks.CTMHooks; +import gregtech.client.utils.CTMHooks; import net.minecraft.block.state.IBlockState; import net.minecraft.client.renderer.block.model.BakedQuad; diff --git a/src/main/java/gregtech/mixins/ctm/CTMRenderInLayerMixin.java b/src/main/java/gregtech/mixins/ctm/CTMRenderInLayerMixin.java index 12914a5cc5f..c22227e3cd0 100644 --- a/src/main/java/gregtech/mixins/ctm/CTMRenderInLayerMixin.java +++ b/src/main/java/gregtech/mixins/ctm/CTMRenderInLayerMixin.java @@ -1,6 +1,6 @@ package gregtech.mixins.ctm; -import gregtech.asm.hooks.CTMModHooks; +import gregtech.client.utils.CTMHooks; import net.minecraft.block.state.IBlockState; import net.minecraft.client.renderer.block.model.IBakedModel; @@ -23,6 +23,6 @@ public class CTMRenderInLayerMixin { remap = false) private static Boolean checkRenderInLayer(Boolean originalResult, @NotNull IBlockState state, @NotNull BlockRenderLayer layer, @Local(ordinal = 0) IBakedModel model) { - return CTMModHooks.canRenderInLayer(((AbstractCTMBakedModel) model).getModel(), state, layer); + return CTMHooks.canRenderInLayer(((AbstractCTMBakedModel) model).getModel(), state, layer); } } diff --git a/src/main/java/gregtech/mixins/littletiles/LittleTilesRenderMangerMixin.java b/src/main/java/gregtech/mixins/littletiles/LittleTilesRenderMangerMixin.java index 8f09a26d1fa..9436ac64864 100644 --- a/src/main/java/gregtech/mixins/littletiles/LittleTilesRenderMangerMixin.java +++ b/src/main/java/gregtech/mixins/littletiles/LittleTilesRenderMangerMixin.java @@ -1,6 +1,6 @@ package gregtech.mixins.littletiles; -import gregtech.asm.hooks.LittleTilesHooks; +import gregtech.client.utils.LittleTilesHooks; import com.creativemd.littletiles.client.render.cache.LayeredRenderBoxCache; import com.creativemd.littletiles.client.render.world.TileEntityRenderManager; diff --git a/src/main/java/gregtech/mixins/minecraft/BlockMixin.java b/src/main/java/gregtech/mixins/minecraft/BlockMixin.java index f2271c71f49..0286a33e809 100644 --- a/src/main/java/gregtech/mixins/minecraft/BlockMixin.java +++ b/src/main/java/gregtech/mixins/minecraft/BlockMixin.java @@ -1,7 +1,7 @@ package gregtech.mixins.minecraft; import gregtech.api.util.Mods; -import gregtech.asm.hooks.BlockHooks; +import gregtech.client.utils.BlockHooks; import net.minecraft.block.Block; import net.minecraft.block.state.IBlockState; diff --git a/src/main/java/gregtech/mixins/minecraft/RenderItemMixin.java b/src/main/java/gregtech/mixins/minecraft/RenderItemMixin.java index 5bbea635153..a5ef0e88d21 100644 --- a/src/main/java/gregtech/mixins/minecraft/RenderItemMixin.java +++ b/src/main/java/gregtech/mixins/minecraft/RenderItemMixin.java @@ -1,13 +1,18 @@ package gregtech.mixins.minecraft; +import gregtech.api.items.metaitem.MetaItem; +import gregtech.api.items.toolitem.IGTTool; import gregtech.api.util.Mods; -import gregtech.asm.hooks.RenderItemHooks; +import gregtech.client.renderer.handler.LampItemOverlayRenderer; +import gregtech.client.utils.ToolChargeBarRenderer; import net.minecraft.client.gui.FontRenderer; import net.minecraft.client.renderer.RenderItem; import net.minecraft.item.ItemStack; +import org.jetbrains.annotations.NotNull; import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Unique; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @@ -20,7 +25,7 @@ public class RenderItemMixin { private void renderItemOverlayIntoGUIInject(FontRenderer fr, ItemStack stack, int xPosition, int yPosition, String text, CallbackInfo ci) { if (!stack.isEmpty()) { - RenderItemHooks.renderLampOverlay(stack, xPosition, yPosition); + gregTechCEu$renderLampOverlay(stack, xPosition, yPosition); } } @@ -32,7 +37,24 @@ private void renderItemOverlayIntoGUIInject(FontRenderer fr, ItemStack stack, in public void showDurabilityBarMixin(FontRenderer fr, ItemStack stack, int xPosition, int yPosition, String text, CallbackInfo ci) { if (!Mods.EnderCore.isModLoaded()) { - RenderItemHooks.renderElectricBar(stack, xPosition, yPosition); + gregTechCEu$renderElectricBar(stack, xPosition, yPosition); + } + } + + @Unique + private static void gregTechCEu$renderElectricBar(@NotNull ItemStack stack, int xPosition, int yPosition) { + if (stack.getItem() instanceof IGTTool) { + ToolChargeBarRenderer.renderBarsTool((IGTTool) stack.getItem(), stack, xPosition, yPosition); + } else if (stack.getItem() instanceof MetaItem) { + ToolChargeBarRenderer.renderBarsItem((MetaItem) stack.getItem(), stack, xPosition, yPosition); + } + } + + @Unique + private static void gregTechCEu$renderLampOverlay(@NotNull ItemStack stack, int xPosition, int yPosition) { + LampItemOverlayRenderer.OverlayType overlayType = LampItemOverlayRenderer.getOverlayType(stack); + if (overlayType != LampItemOverlayRenderer.OverlayType.NONE) { + LampItemOverlayRenderer.renderOverlay(overlayType, xPosition, yPosition); } } }