From 183010b1534067de072979f16783a34872eecc6b Mon Sep 17 00:00:00 2001 From: alongstringofnumbers Date: Fri, 21 Jul 2023 21:06:00 -0700 Subject: [PATCH 01/46] Change some ASM to Mixins --- gradle.properties | 6 +-- .../gregtech/asm/GregTechLoadingPlugin.java | 16 +++++++- .../gregtech/asm/GregTechTransformer.java | 8 ++-- .../mixins/minecraft/DamageSourceMixin.java | 38 ++++++++++++++++++ .../mixins/minecraft/RenderGlobalMixin.java | 40 +++++++++++++++++++ src/main/resources/mixins.gregtech.forge.json | 10 +++++ .../resources/mixins.gregtech.minecraft.json | 10 +++++ 7 files changed, 120 insertions(+), 8 deletions(-) create mode 100644 src/main/java/gregtech/mixins/minecraft/DamageSourceMixin.java create mode 100644 src/main/java/gregtech/mixins/minecraft/RenderGlobalMixin.java create mode 100644 src/main/resources/mixins.gregtech.forge.json create mode 100644 src/main/resources/mixins.gregtech.minecraft.json diff --git a/gradle.properties b/gradle.properties index 9de88c6bf58..52dd89e1741 100644 --- a/gradle.properties +++ b/gradle.properties @@ -51,11 +51,11 @@ useSrcApiPath=false accessTransformersFile = gregtech_at.cfg # Provides setup for Mixins if enabled. If you don't know what mixins are: Keep it disabled! -usesMixins = false +usesMixins = true # Specify the package that contains all of your Mixins. You may only place Mixins in this package or the build will fail! -mixinsPackage = +mixinsPackage = mixins # Automatically generates a mixin config json if enabled, with the name mixins.modid.json -generateMixinConfig=false +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 diff --git a/src/main/java/gregtech/asm/GregTechLoadingPlugin.java b/src/main/java/gregtech/asm/GregTechLoadingPlugin.java index b1e461c7954..2f924d0c844 100644 --- a/src/main/java/gregtech/asm/GregTechLoadingPlugin.java +++ b/src/main/java/gregtech/asm/GregTechLoadingPlugin.java @@ -6,16 +6,20 @@ import net.minecraftforge.fml.relauncher.IFMLLoadingPlugin.Name; import net.minecraftforge.fml.relauncher.IFMLLoadingPlugin.SortingIndex; import net.minecraftforge.fml.relauncher.IFMLLoadingPlugin.TransformerExclusions; +import zone.rong.mixinbooter.IEarlyMixinLoader; import org.jetbrains.annotations.Nullable; +import java.util.ArrayList; +import java.util.List; import java.util.Map; @Name("GregTechLoadingPlugin") @MCVersion(ForgeVersion.mcVersion) @TransformerExclusions("gregtech.asm.") @SortingIndex(1001) -public class GregTechLoadingPlugin implements IFMLLoadingPlugin { +// TODO, move to mixin package +public class GregTechLoadingPlugin implements IFMLLoadingPlugin, IEarlyMixinLoader { @Override public String[] getASMTransformerClass() { @@ -40,4 +44,14 @@ public void injectData(Map data) {} public String getAccessTransformerClass() { return null; } + + @Override + public List getMixinConfigs() { + List configs = new ArrayList<>(); + + configs.add("mixins.gregtech.forge.json"); + configs.add("mixins.gregtech.minecraft.json"); + + return configs; + } } diff --git a/src/main/java/gregtech/asm/GregTechTransformer.java b/src/main/java/gregtech/asm/GregTechTransformer.java index 5f9d5e1ba3f..169c165e484 100644 --- a/src/main/java/gregtech/asm/GregTechTransformer.java +++ b/src/main/java/gregtech/asm/GregTechTransformer.java @@ -94,13 +94,13 @@ public byte[] transform(String name, String transformedName, byte[] basicClass) } break; } - case WorldVisitor.TARGET_CLASS_NAME: { + /*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); @@ -147,14 +147,14 @@ public byte[] transform(String name, String transformedName, byte[] basicClass) RecipeRepairItemVisitor.handleClassNode(classNode).accept(classWriter); return classWriter.toByteArray(); } - case DamageSourceVisitor.TARGET_CLASS_NAME: { + /*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); diff --git a/src/main/java/gregtech/mixins/minecraft/DamageSourceMixin.java b/src/main/java/gregtech/mixins/minecraft/DamageSourceMixin.java new file mode 100644 index 00000000000..593773a2cba --- /dev/null +++ b/src/main/java/gregtech/mixins/minecraft/DamageSourceMixin.java @@ -0,0 +1,38 @@ +package gregtech.mixins.minecraft; + + +import com.llamalad7.mixinextras.injector.ModifyReturnValue; +import gregtech.api.damagesources.DamageSourceTool; +import gregtech.api.items.toolitem.IGTTool; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.EntityEquipmentSlot; +import net.minecraft.item.ItemStack; +import net.minecraft.util.DamageSource; +import net.minecraft.util.EntityDamageSource; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; + +@Mixin(DamageSource.class) +@SuppressWarnings("unused") +public class DamageSourceMixin { + + @ModifyReturnValue(method = "causePlayerDamage", at = @At("RETURN")) + private static DamageSource modifyPlayerDamageWithTool(DamageSource originalReturnValue, EntityPlayer source) { + ItemStack stack = source != null ? source.getHeldItemMainhand() : ItemStack.EMPTY; + if (!stack.isEmpty() && stack.getItem() instanceof IGTTool tool) { + return new DamageSourceTool("player", source, String.format("death.attack.%s", tool.getId())); + } + return originalReturnValue; + } + + @ModifyReturnValue(method = "causeMobDamage", at = @At("RETURN")) + private static DamageSource modifyMobDamageWithTool(DamageSource originalReturnValue, EntityLivingBase source) { + ItemStack stack = source != null ? source.getItemStackFromSlot(EntityEquipmentSlot.MAINHAND) : ItemStack.EMPTY; + if (!stack.isEmpty() && stack.getItem() instanceof IGTTool tool) { + return new DamageSourceTool("mob", source, String.format("death.attack.%s", tool.getId())); + } + return new EntityDamageSource("mob", source); + + } +} diff --git a/src/main/java/gregtech/mixins/minecraft/RenderGlobalMixin.java b/src/main/java/gregtech/mixins/minecraft/RenderGlobalMixin.java new file mode 100644 index 00000000000..4c9ad59c32a --- /dev/null +++ b/src/main/java/gregtech/mixins/minecraft/RenderGlobalMixin.java @@ -0,0 +1,40 @@ +package gregtech.mixins.minecraft; + +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 org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +@Mixin(RenderGlobal.class) +public class RenderGlobalMixin { + + @Shadow + private WorldClient world; + + @Inject(method = "playEvent", at = @At("HEAD"), cancellable = true) + public void playMusicDisc(EntityPlayer player, int type, BlockPos blockPosIn, int data, CallbackInfo ci) { + if (type == MusicDiscStats.SOUND_TYPE) { + for (MetaItem metaItem : MetaItem.getMetaItems()) { + MetaItem.MetaValueItem valueItem = metaItem.getItem((short) data); + if (valueItem != null) { + for (IItemBehaviour behavior : valueItem.getBehaviours()) { + if (behavior instanceof MusicDiscStats) { + world.playRecord(blockPosIn, ((MusicDiscStats) behavior).getSound()); + ci.cancel(); + return; + } + } + + } + } + } + } +} diff --git a/src/main/resources/mixins.gregtech.forge.json b/src/main/resources/mixins.gregtech.forge.json new file mode 100644 index 00000000000..19ff293902c --- /dev/null +++ b/src/main/resources/mixins.gregtech.forge.json @@ -0,0 +1,10 @@ +{ + "package": "gregtech.mixins", + "refmap": "mixins.gregtech.refmap.json", + "target": "@env(DEFAULT)", + "minVersion": "0.8", + "compatibilityLevel": "JAVA_8", + "mixins": [], + "client": [], + "server": [] +} diff --git a/src/main/resources/mixins.gregtech.minecraft.json b/src/main/resources/mixins.gregtech.minecraft.json new file mode 100644 index 00000000000..b882c69d74f --- /dev/null +++ b/src/main/resources/mixins.gregtech.minecraft.json @@ -0,0 +1,10 @@ +{ + "package": "gregtech.mixins", + "refmap": "mixins.gregtech.refmap.json", + "target": "@env(DEFAULT)", + "minVersion": "0.8", + "compatibilityLevel": "JAVA_8", + "mixins": ["minecraft.DamageSourceMixin"], + "client": ["minecraft.RenderGlobalMixin"], + "server": [] +} From c092ec800e64ba8ad1618c184d2ae983d9b0742c Mon Sep 17 00:00:00 2001 From: alongstringofnumbers Date: Fri, 21 Jul 2023 21:37:54 -0700 Subject: [PATCH 02/46] In progress --- addon.gradle | 21 +++++++++++++++++++ .../api/items/metaitem/MusicDiscStats.java | 4 ++++ .../mixins/minecraft/RenderGlobalMixin.java | 11 ++++++++-- 3 files changed, 34 insertions(+), 2 deletions(-) create mode 100644 addon.gradle diff --git a/addon.gradle b/addon.gradle new file mode 100644 index 00000000000..53a3512dac7 --- /dev/null +++ b/addon.gradle @@ -0,0 +1,21 @@ + +minecraft { + // ASM debug + extraRunJvmArguments.addAll([ + "-Dlegacy.debugClassLoading=true", + "-Dlegacy.debugClassLoadingFiner=true", + "-Dlegacy.debugClassLoadingSave=true" + ]) + + // Include the dep string version for addons to use + injectedTags.put('DEP_VERSION_STRING', "required-after:gregtech@[${modVersion},);") +} + +configurations { + compileClassPath { + // exclude GNU trove, FastUtil is superior and still updated + exclude group: "net.sf.trove4j", module: "trove4j" + } +} + + diff --git a/src/main/java/gregtech/api/items/metaitem/MusicDiscStats.java b/src/main/java/gregtech/api/items/metaitem/MusicDiscStats.java index a505896cb24..b90f1ce5f88 100644 --- a/src/main/java/gregtech/api/items/metaitem/MusicDiscStats.java +++ b/src/main/java/gregtech/api/items/metaitem/MusicDiscStats.java @@ -31,6 +31,10 @@ public SoundEvent getSound() { return sound; } + public String getName() { + return sound.getSoundName().getPath(); + } + @Override public ActionResult onItemUse(EntityPlayer player, World world, BlockPos pos, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ) { diff --git a/src/main/java/gregtech/mixins/minecraft/RenderGlobalMixin.java b/src/main/java/gregtech/mixins/minecraft/RenderGlobalMixin.java index 4c9ad59c32a..68fd832f38d 100644 --- a/src/main/java/gregtech/mixins/minecraft/RenderGlobalMixin.java +++ b/src/main/java/gregtech/mixins/minecraft/RenderGlobalMixin.java @@ -3,10 +3,12 @@ import gregtech.api.items.metaitem.MetaItem; import gregtech.api.items.metaitem.MusicDiscStats; import gregtech.api.items.metaitem.stats.IItemBehaviour; +import net.minecraft.client.Minecraft; 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 org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; @@ -19,6 +21,10 @@ public class RenderGlobalMixin { @Shadow private WorldClient world; + @Final + @Shadow + private Minecraft mc; + @Inject(method = "playEvent", at = @At("HEAD"), cancellable = true) public void playMusicDisc(EntityPlayer player, int type, BlockPos blockPosIn, int data, CallbackInfo ci) { if (type == MusicDiscStats.SOUND_TYPE) { @@ -26,8 +32,9 @@ public void playMusicDisc(EntityPlayer player, int type, BlockPos blockPosIn, in MetaItem.MetaValueItem valueItem = metaItem.getItem((short) data); if (valueItem != null) { for (IItemBehaviour behavior : valueItem.getBehaviours()) { - if (behavior instanceof MusicDiscStats) { - world.playRecord(blockPosIn, ((MusicDiscStats) behavior).getSound()); + if (behavior instanceof MusicDiscStats musicBehavior) { + world.playRecord(blockPosIn, musicBehavior.getSound()); + this.mc.ingameGUI.setRecordPlayingMessage(musicBehavior.getName()); ci.cancel(); return; } From 0dd66acb7b71f3264cde5c69b3c2354219a12e56 Mon Sep 17 00:00:00 2001 From: alongstringofnumbers Date: Sat, 22 Jul 2023 10:43:20 -0700 Subject: [PATCH 03/46] More Conversions --- .../api/damagesources/DamageSources.java | 1 + .../gregtech/asm/GregTechTransformer.java | 13 ++++---- .../GregTechLateMixinLoadingPlugin.java | 30 +++++++++++++++++++ .../minecraft/BlockConcretePowderMixin.java | 22 ++++++++++++++ .../mixins/minecraft/MinecraftMixin.java | 21 +++++++++++++ .../mixins/minecraft/RenderGlobalMixin.java | 3 +- .../mixins/theoneprobe/TheOneProbeMixin.java | 30 +++++++++++++++++++ .../resources/assets/gregtech/lang/en_us.lang | 2 ++ src/main/resources/mixins.gregtech.forge.json | 2 +- .../resources/mixins.gregtech.minecraft.json | 10 +++++-- .../mixins.gregtech.theoneprobe.json | 10 +++++++ 11 files changed, 132 insertions(+), 12 deletions(-) create mode 100644 src/main/java/gregtech/mixins/GregTechLateMixinLoadingPlugin.java create mode 100644 src/main/java/gregtech/mixins/minecraft/BlockConcretePowderMixin.java create mode 100644 src/main/java/gregtech/mixins/minecraft/MinecraftMixin.java create mode 100644 src/main/java/gregtech/mixins/theoneprobe/TheOneProbeMixin.java create mode 100644 src/main/resources/mixins.gregtech.theoneprobe.json diff --git a/src/main/java/gregtech/api/damagesources/DamageSources.java b/src/main/java/gregtech/api/damagesources/DamageSources.java index 2283c396139..3727683cd33 100644 --- a/src/main/java/gregtech/api/damagesources/DamageSources.java +++ b/src/main/java/gregtech/api/damagesources/DamageSources.java @@ -49,6 +49,7 @@ public static DamageSource getTurbineDamage() { return TURBINE; } + // TODO Remove // accessed via ASM @SuppressWarnings("unused") public static DamageSource getPlayerDamage(@Nullable EntityPlayer source) { diff --git a/src/main/java/gregtech/asm/GregTechTransformer.java b/src/main/java/gregtech/asm/GregTechTransformer.java index 169c165e484..c3700dbb052 100644 --- a/src/main/java/gregtech/asm/GregTechTransformer.java +++ b/src/main/java/gregtech/asm/GregTechTransformer.java @@ -3,7 +3,6 @@ import gregtech.asm.util.ObfMapping; import gregtech.asm.util.TargetClassVisitor; import gregtech.asm.visitors.*; -import gregtech.common.ConfigHolder; import net.minecraft.launchwrapper.IClassTransformer; import net.minecraft.launchwrapper.Launch; @@ -28,7 +27,7 @@ public byte[] transform(String name, String transformedName, byte[] basicClass) classReader.accept(new TargetClassVisitor(classWriter, JEIVisitor.TARGET_METHOD, JEIVisitor::new), 0); return classWriter.toByteArray(); } - case ConcretePowderVisitor.TARGET_CLASS_NAME: + /*case ConcretePowderVisitor.TARGET_CLASS_NAME: if (ConfigHolder.recipes.disableConcreteInWorld) { ClassReader classReader = new ClassReader(basicClass); ClassWriter classWriter = new ClassWriter(ClassWriter.COMPUTE_FRAMES | ClassWriter.COMPUTE_MAXS); @@ -36,7 +35,7 @@ public byte[] transform(String name, String transformedName, byte[] basicClass) ConcretePowderVisitor::new), 0); return classWriter.toByteArray(); } - break; + break;*/ case LayerCustomHeadVisitor.TARGET_CLASS_NAME: { ClassReader classReader = new ClassReader(basicClass); ClassWriter classWriter = new ClassWriter(ClassWriter.COMPUTE_FRAMES | ClassWriter.COMPUTE_MAXS); @@ -155,22 +154,22 @@ public byte[] transform(String name, String transformedName, byte[] basicClass) DamageSourceVisitor.handleClassNode(classNode).accept(classWriter); return classWriter.toByteArray(); }*/ - case TheOneProbeVisitor.TARGET_CLASS_NAME: { + /*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: { + }*/ + /*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); diff --git a/src/main/java/gregtech/mixins/GregTechLateMixinLoadingPlugin.java b/src/main/java/gregtech/mixins/GregTechLateMixinLoadingPlugin.java new file mode 100644 index 00000000000..38526c9c18f --- /dev/null +++ b/src/main/java/gregtech/mixins/GregTechLateMixinLoadingPlugin.java @@ -0,0 +1,30 @@ +package gregtech.mixins; + +import gregtech.api.GTValues; +import net.minecraftforge.fml.common.Loader; +import zone.rong.mixinbooter.ILateMixinLoader; + +import java.util.ArrayList; +import java.util.List; + +public class GregTechLateMixinLoadingPlugin implements ILateMixinLoader { + + @Override + public List getMixinConfigs() { + List configs = new ArrayList<>(); + + configs.add("mixins.gregtech.theoneprobe.json"); + + return configs; + } + + @Override + public boolean shouldMixinConfigQueue(String mixinConfig) { + + return switch (mixinConfig) { + case "mixins.gregtech.theoneprobe.json" -> Loader.isModLoaded(GTValues.MODID_TOP); + default -> true; + }; + + } +} diff --git a/src/main/java/gregtech/mixins/minecraft/BlockConcretePowderMixin.java b/src/main/java/gregtech/mixins/minecraft/BlockConcretePowderMixin.java new file mode 100644 index 00000000000..fdd447e2da7 --- /dev/null +++ b/src/main/java/gregtech/mixins/minecraft/BlockConcretePowderMixin.java @@ -0,0 +1,22 @@ +package gregtech.mixins.minecraft; + +import gregtech.common.ConfigHolder; +import net.minecraft.block.BlockConcretePowder; +import net.minecraft.block.state.IBlockState; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +@Mixin(BlockConcretePowder.class) +public class BlockConcretePowderMixin { + + @Inject(method = "tryTouchWater", at = @At("HEAD"), cancellable = true) + public void disableConversion(World worldIn, BlockPos pos, IBlockState state, CallbackInfoReturnable cir) { + if (ConfigHolder.recipes.disableConcreteInWorld) { + cir.setReturnValue(false); + } + } +} diff --git a/src/main/java/gregtech/mixins/minecraft/MinecraftMixin.java b/src/main/java/gregtech/mixins/minecraft/MinecraftMixin.java new file mode 100644 index 00000000000..a3ab2fa8f7a --- /dev/null +++ b/src/main/java/gregtech/mixins/minecraft/MinecraftMixin.java @@ -0,0 +1,21 @@ +package gregtech.mixins.minecraft; + +import net.minecraft.client.Minecraft; +import net.minecraft.util.text.TextComponentTranslation; +import org.lwjgl.input.Keyboard; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +@Mixin(Minecraft.class) +public class MinecraftMixin { + + @Inject(method = "processKeyF3", at = @At("HEAD")) + public void addGregTechDebugMessage(int auxKey, CallbackInfoReturnable cir) { + if (auxKey == 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/mixins/minecraft/RenderGlobalMixin.java b/src/main/java/gregtech/mixins/minecraft/RenderGlobalMixin.java index 68fd832f38d..068c1a579ad 100644 --- a/src/main/java/gregtech/mixins/minecraft/RenderGlobalMixin.java +++ b/src/main/java/gregtech/mixins/minecraft/RenderGlobalMixin.java @@ -6,6 +6,7 @@ import net.minecraft.client.Minecraft; import net.minecraft.client.multiplayer.WorldClient; import net.minecraft.client.renderer.RenderGlobal; +import net.minecraft.client.resources.I18n; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.util.math.BlockPos; import org.spongepowered.asm.mixin.Final; @@ -34,7 +35,7 @@ public void playMusicDisc(EntityPlayer player, int type, BlockPos blockPosIn, in for (IItemBehaviour behavior : valueItem.getBehaviours()) { if (behavior instanceof MusicDiscStats musicBehavior) { world.playRecord(blockPosIn, musicBehavior.getSound()); - this.mc.ingameGUI.setRecordPlayingMessage(musicBehavior.getName()); + this.mc.ingameGUI.setRecordPlayingMessage(I18n.format(musicBehavior.getName())); ci.cancel(); return; } diff --git a/src/main/java/gregtech/mixins/theoneprobe/TheOneProbeMixin.java b/src/main/java/gregtech/mixins/theoneprobe/TheOneProbeMixin.java new file mode 100644 index 00000000000..8597c029f94 --- /dev/null +++ b/src/main/java/gregtech/mixins/theoneprobe/TheOneProbeMixin.java @@ -0,0 +1,30 @@ +package gregtech.mixins.theoneprobe; + +import com.llamalad7.mixinextras.injector.ModifyExpressionValue; +import gregtech.api.block.machines.BlockMachine; +import mcjty.theoneprobe.api.ProbeMode; +import mcjty.theoneprobe.network.PacketGetInfo; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Vec3d; +import net.minecraft.world.World; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; + +// TODO, unsure if we actually need this one +@Mixin(PacketGetInfo.class) +@SuppressWarnings({"unused", "deprecation"}) +public class TheOneProbeMixin { + + @ModifyExpressionValue(method = "getProbeInfo", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/World;getBlockState(Lnet/minecraft/util/math/BlockPos;)Lnet/minecraft/block/state/IBlockState;")) + private static IBlockState getActualState(IBlockState originalState, EntityPlayer player, ProbeMode mode, World world, BlockPos blockPos, EnumFacing sideHit, Vec3d hitVec, ItemStack pickBlock) { + IBlockState modifiedState = world.getBlockState(blockPos); + if (modifiedState.getBlock() instanceof BlockMachine) { + return modifiedState.getBlock().getActualState(modifiedState, world, blockPos); + } + return originalState; + } +} diff --git a/src/main/resources/assets/gregtech/lang/en_us.lang b/src/main/resources/assets/gregtech/lang/en_us.lang index 48cc639c08c..36ff17ace79 100644 --- a/src/main/resources/assets/gregtech/lang/en_us.lang +++ b/src/main/resources/assets/gregtech/lang/en_us.lang @@ -6292,3 +6292,5 @@ gregtech.scanner.forestry.pollen=§oScanned Pollen # Mutation gregtech.mutation.block_of=Block of %s + +record.sus=Temp name diff --git a/src/main/resources/mixins.gregtech.forge.json b/src/main/resources/mixins.gregtech.forge.json index 19ff293902c..262225ea697 100644 --- a/src/main/resources/mixins.gregtech.forge.json +++ b/src/main/resources/mixins.gregtech.forge.json @@ -1,5 +1,5 @@ { - "package": "gregtech.mixins", + "package": "gregtech.mixins.forge", "refmap": "mixins.gregtech.refmap.json", "target": "@env(DEFAULT)", "minVersion": "0.8", diff --git a/src/main/resources/mixins.gregtech.minecraft.json b/src/main/resources/mixins.gregtech.minecraft.json index b882c69d74f..3b4c78d8f48 100644 --- a/src/main/resources/mixins.gregtech.minecraft.json +++ b/src/main/resources/mixins.gregtech.minecraft.json @@ -1,10 +1,14 @@ { - "package": "gregtech.mixins", + "package": "gregtech.mixins.minecraft", "refmap": "mixins.gregtech.refmap.json", "target": "@env(DEFAULT)", "minVersion": "0.8", "compatibilityLevel": "JAVA_8", - "mixins": ["minecraft.DamageSourceMixin"], - "client": ["minecraft.RenderGlobalMixin"], + "mixins": [ + "BlockConcretePowderMixin", + "DamageSourceMixin", + "MinecraftMixin" + ], + "client": ["RenderGlobalMixin"], "server": [] } diff --git a/src/main/resources/mixins.gregtech.theoneprobe.json b/src/main/resources/mixins.gregtech.theoneprobe.json new file mode 100644 index 00000000000..0f7038d94c4 --- /dev/null +++ b/src/main/resources/mixins.gregtech.theoneprobe.json @@ -0,0 +1,10 @@ +{ + "package": "gregtech.mixins.theoneprobe", + "refmap": "mixins.gregtech.refmap.json", + "target": "@env(DEFAULT)", + "minVersion": "0.8", + "compatibilityLevel": "JAVA_8", + "mixins": ["TheOneProbeMixin"], + "client": [], + "server": [] +} From 7e948412ce1916df84aa182f338d5e22934813d4 Mon Sep 17 00:00:00 2001 From: alongstringofnumbers Date: Sat, 22 Jul 2023 11:30:56 -0700 Subject: [PATCH 04/46] Another conversion, needs testing --- .../gregtech/asm/GregTechTransformer.java | 4 +-- .../mixins/minecraft/RenderChunkMixin.java | 25 +++++++++++++++++++ .../resources/mixins.gregtech.minecraft.json | 5 +++- 3 files changed, 31 insertions(+), 3 deletions(-) create mode 100644 src/main/java/gregtech/mixins/minecraft/RenderChunkMixin.java diff --git a/src/main/java/gregtech/asm/GregTechTransformer.java b/src/main/java/gregtech/asm/GregTechTransformer.java index c3700dbb052..6dd21e185a9 100644 --- a/src/main/java/gregtech/asm/GregTechTransformer.java +++ b/src/main/java/gregtech/asm/GregTechTransformer.java @@ -64,14 +64,14 @@ public byte[] transform(String name, String transformedName, byte[] basicClass) RegionRenderCacheBuilderVisitor::new), 0); return classWriter.toByteArray(); } - case RenderChunkVisitor.TARGET_CLASS_NAME: { + /*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); diff --git a/src/main/java/gregtech/mixins/minecraft/RenderChunkMixin.java b/src/main/java/gregtech/mixins/minecraft/RenderChunkMixin.java new file mode 100644 index 00000000000..3c54d45e0c2 --- /dev/null +++ b/src/main/java/gregtech/mixins/minecraft/RenderChunkMixin.java @@ -0,0 +1,25 @@ +package gregtech.mixins.minecraft; + +import com.llamalad7.mixinextras.injector.ModifyExpressionValue; +import gregtech.api.metatileentity.MetaTileEntityHolder; +import net.minecraft.client.renderer.chunk.RenderChunk; +import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; +import net.minecraft.tileentity.TileEntity; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; + +import javax.annotation.Nullable; + +//TODO, this one needs testing +@Mixin(RenderChunk.class) +public class RenderChunkMixin { + + @ModifyExpressionValue(method = "rebuildChunk", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/tileentity/TileEntityRendererDispatcher;getRenderer(Lnet/minecraft/tileentity/TileEntity;)Lnet/minecraft/client/renderer/tileentity/TileEntitySpecialRenderer;")) + public TileEntitySpecialRenderer adjustMTERenderer(TileEntitySpecialRenderer originalRenderer, @Nullable TileEntity tileEntityIn) { + // TODO, adjust when implementing second part of IGregTileEntity + if (tileEntityIn instanceof MetaTileEntityHolder && !((MetaTileEntityHolder) tileEntityIn).hasTESR()) { + return null; + } + return originalRenderer; + } +} diff --git a/src/main/resources/mixins.gregtech.minecraft.json b/src/main/resources/mixins.gregtech.minecraft.json index 3b4c78d8f48..a40a9b7e092 100644 --- a/src/main/resources/mixins.gregtech.minecraft.json +++ b/src/main/resources/mixins.gregtech.minecraft.json @@ -9,6 +9,9 @@ "DamageSourceMixin", "MinecraftMixin" ], - "client": ["RenderGlobalMixin"], + "client": [ + "RenderChunkMixin", + "RenderGlobalMixin" + ], "server": [] } From c804947c6af7bc826895a06bad3d33af617a41d8 Mon Sep 17 00:00:00 2001 From: alongstringofnumbers Date: Sun, 30 Jul 2023 16:38:38 -0700 Subject: [PATCH 05/46] continue work --- addon.gradle | 7 -- gradle.properties | 13 ++-- .../gregtech/asm/GregTechTransformer.java | 4 +- .../mixins/minecraft/LayerArmorBaseMixin.java | 68 +++++++++++++++++++ .../minecraft/LayerCustomHeadMixin.java | 33 +++++++++ .../mixins/minecraft/RenderChunkMixin.java | 4 +- .../resources/mixins.gregtech.minecraft.json | 2 + 7 files changed, 112 insertions(+), 19 deletions(-) create mode 100644 src/main/java/gregtech/mixins/minecraft/LayerArmorBaseMixin.java create mode 100644 src/main/java/gregtech/mixins/minecraft/LayerCustomHeadMixin.java diff --git a/addon.gradle b/addon.gradle index 53a3512dac7..1ae74303160 100644 --- a/addon.gradle +++ b/addon.gradle @@ -1,12 +1,5 @@ minecraft { - // ASM debug - extraRunJvmArguments.addAll([ - "-Dlegacy.debugClassLoading=true", - "-Dlegacy.debugClassLoadingFiner=true", - "-Dlegacy.debugClassLoadingSave=true" - ]) - // Include the dep string version for addons to use injectedTags.put('DEP_VERSION_STRING', "required-after:gregtech@[${modVersion},);") } diff --git a/gradle.properties b/gradle.properties index 52dd89e1741..c3d30adcc47 100644 --- a/gradle.properties +++ b/gradle.properties @@ -61,19 +61,16 @@ generateMixinConfig = false coreModClass = asm.GregTechLoadingPlugin # 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 - +containsMixinsAndOrCoreModOnly=false # Enables Mixins even if this mod doesn't use them, useful if one of the dependencies uses mixins. -forceEnableMixins = true - +forceEnableMixins=true # Outputs pre-transformed and post-transformed loaded classes to run/CLASSLOADER_TEMP. Can be used in combination with # diff to see exactly what your ASM or Mixins are changing in the target file. # Optionally can be specified with the 'CORE_MOD_DEBUG' env var. Will output a lot of files! -enableCoreModDebug = false - +# TODO, change this to false before merging +enableCoreModDebug=true # Adds CurseMaven, Modrinth Maven, BlameJared maven, and some more well-known 1.12.2 repositories -includeWellKnownRepositories = true - +includeWellKnownRepositories=true # Adds JEI and TheOneProbe to your development environment. Adds them as 'implementation', meaning they will # be available at compiletime and runtime for your mod (in-game and in-code). # Overrides the above setting to be always true, as these repositories are needed to fetch the mods diff --git a/src/main/java/gregtech/asm/GregTechTransformer.java b/src/main/java/gregtech/asm/GregTechTransformer.java index 6dd21e185a9..e83dd512c44 100644 --- a/src/main/java/gregtech/asm/GregTechTransformer.java +++ b/src/main/java/gregtech/asm/GregTechTransformer.java @@ -36,13 +36,13 @@ public byte[] transform(String name, String transformedName, byte[] basicClass) return classWriter.toByteArray(); } break;*/ - case LayerCustomHeadVisitor.TARGET_CLASS_NAME: { + /*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); diff --git a/src/main/java/gregtech/mixins/minecraft/LayerArmorBaseMixin.java b/src/main/java/gregtech/mixins/minecraft/LayerArmorBaseMixin.java new file mode 100644 index 00000000000..3b22761f315 --- /dev/null +++ b/src/main/java/gregtech/mixins/minecraft/LayerArmorBaseMixin.java @@ -0,0 +1,68 @@ +package gregtech.mixins.minecraft; + +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.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 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; + +@Mixin(LayerArmorBase.class) +public class LayerArmorBaseMixin { + + @Inject(method = "renderArmorLayer", at = @At("TAIL")) + public void renderGTArmor(EntityLivingBase entityLivingBaseIn, float limbSwing, float limbSwingAmount, float partialTicks, float ageInTicks, float netHeadYaw, float headPitch, float scale, EntityEquipmentSlot slotIn, CallbackInfo ci) { + ItemStack itemStack = entityLivingBaseIn.getItemStackFromSlot(slotIn); + + if ((itemStack.getItem() instanceof IArmorItem armorItem && itemStack.getItem().getEquipmentSlot(itemStack) == slotIn)) { + @SuppressWarnings("unchecked") + LayerArmorBase layer = (LayerArmorBase) (Object) this; + ModelBase armorModel = layer.getModelFromSlot(slotIn); + if (armorModel instanceof ModelBiped) { + armorModel = ForgeHooksClient.getArmorModel(entityLivingBaseIn, itemStack, slotIn, (ModelBiped) armorModel); + } + armorModel.setModelAttributes(layer.renderer.getMainModel()); + armorModel.setLivingAnimations(entityLivingBaseIn, limbSwing, limbSwingAmount, partialTicks); + layer.setModelSlotVisible(armorModel, slotIn); + + GlStateManager.enableBlend(); + GlStateManager.blendFunc(GlStateManager.SourceFactor.ONE, GlStateManager.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(gregTechCEu$getArmorTexture(entityLivingBaseIn, itemStack, slotIn, type)); + armorModel.render(entityLivingBaseIn, limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch, scale); + } + if (itemStack.hasEffect()) { + LayerArmorBase.renderEnchantedGlint(layer.renderer, entityLivingBaseIn, armorModel, limbSwing, limbSwingAmount, partialTicks, ageInTicks, netHeadYaw, headPitch, scale); + } + } + } + + @Unique + private static ResourceLocation gregTechCEu$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(), + (slot == EntityEquipmentSlot.LEGS ? 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/mixins/minecraft/LayerCustomHeadMixin.java b/src/main/java/gregtech/mixins/minecraft/LayerCustomHeadMixin.java new file mode 100644 index 00000000000..93b184c72d9 --- /dev/null +++ b/src/main/java/gregtech/mixins/minecraft/LayerCustomHeadMixin.java @@ -0,0 +1,33 @@ +package gregtech.mixins.minecraft; + +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; +import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; +import gregtech.api.items.armor.IArmorItem; +import net.minecraft.client.renderer.block.model.ItemCameraTransforms; +import net.minecraft.client.renderer.entity.layers.LayerCustomHead; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.inventory.EntityEquipmentSlot; +import net.minecraft.item.ItemStack; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Unique; +import org.spongepowered.asm.mixin.injection.At; + +// TODO, error in log +@Mixin(LayerCustomHead.class) +public class LayerCustomHeadMixin { + + @WrapOperation(method = "doRenderLayer", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/ItemRenderer;renderItem(Lnet/minecraft/entity/EntityLivingBase;Lnet/minecraft/item/ItemStack;Lnet/minecraft/client/renderer/block/model/ItemCameraTransforms$TransformType;)V")) + public void shouldNotRenderHead(LayerCustomHead instance, EntityLivingBase entitylivingbaseIn, ItemStack itemstack, ItemCameraTransforms.TransformType transformType, Operation original) { + + if (gregTechCEu$shouldNotRenderHeadItem(entitylivingbaseIn)) { + return; + } + original.call(instance, entitylivingbaseIn, itemstack, transformType); + } + + @Unique + private static boolean gregTechCEu$shouldNotRenderHeadItem(EntityLivingBase entityLivingBase) { + ItemStack itemStack = entityLivingBase.getItemStackFromSlot(EntityEquipmentSlot.HEAD); + return (itemStack.getItem() instanceof IArmorItem && itemStack.getItem().getEquipmentSlot(itemStack) == EntityEquipmentSlot.HEAD); + } +} diff --git a/src/main/java/gregtech/mixins/minecraft/RenderChunkMixin.java b/src/main/java/gregtech/mixins/minecraft/RenderChunkMixin.java index 3c54d45e0c2..a808da719bb 100644 --- a/src/main/java/gregtech/mixins/minecraft/RenderChunkMixin.java +++ b/src/main/java/gregtech/mixins/minecraft/RenderChunkMixin.java @@ -10,11 +10,11 @@ import javax.annotation.Nullable; -//TODO, this one needs testing +//TODO, error in log @Mixin(RenderChunk.class) public class RenderChunkMixin { - @ModifyExpressionValue(method = "rebuildChunk", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/tileentity/TileEntityRendererDispatcher;getRenderer(Lnet/minecraft/tileentity/TileEntity;)Lnet/minecraft/client/renderer/tileentity/TileEntitySpecialRenderer;")) + @ModifyExpressionValue(method = "rebuildChunk", at = @At(value = "INVOKE_ASSIGN", target = "Lnet/minecraft/client/renderer/tileentity/TileEntityRendererDispatcher;getRenderer(Lnet/minecraft/tileentity/TileEntity;)Lnet/minecraft/client/renderer/tileentity/TileEntitySpecialRenderer;")) public TileEntitySpecialRenderer adjustMTERenderer(TileEntitySpecialRenderer originalRenderer, @Nullable TileEntity tileEntityIn) { // TODO, adjust when implementing second part of IGregTileEntity if (tileEntityIn instanceof MetaTileEntityHolder && !((MetaTileEntityHolder) tileEntityIn).hasTESR()) { diff --git a/src/main/resources/mixins.gregtech.minecraft.json b/src/main/resources/mixins.gregtech.minecraft.json index a40a9b7e092..05ca84bd1e1 100644 --- a/src/main/resources/mixins.gregtech.minecraft.json +++ b/src/main/resources/mixins.gregtech.minecraft.json @@ -10,6 +10,8 @@ "MinecraftMixin" ], "client": [ + "LayerArmorBaseMixin", + "LayerCustomHeadMixin", "RenderChunkMixin", "RenderGlobalMixin" ], From 76c67b89032b4051026145694a503bba74fd1a79 Mon Sep 17 00:00:00 2001 From: alongstringofnumbers Date: Sun, 29 Oct 2023 21:58:44 -0700 Subject: [PATCH 06/46] More work --- gradle.properties | 2 +- .../gregtech/asm/GregTechTransformer.java | 18 +++++----- .../GregTechLateMixinLoadingPlugin.java | 5 +++ .../mixins/ccl/CCLDescriptionMixin.java | 17 +++++++++ .../mixins/ctm/CTMRenderInLayerMixin.java | 23 ++++++++++++ .../mixins/ctm/ModelCTMLayersAccessor.java | 12 +++++++ .../forge/ModelLoaderRegistryMixin.java | 18 ++++++++++ .../forge/SpecialArmorPropertiesMixin.java | 35 +++++++++++++++++++ .../gregtech/mixins/jei/JEITooltipMixin.java | 22 ++++++++++++ .../minecraft/LayerCustomHeadMixin.java | 4 +-- .../minecraft/RecipeRepairItemMixin.java | 13 +++++++ .../RegionRenderCacheBuilderMixin.java | 24 +++++++++++++ src/main/resources/mixins.gregtech.ccl.json | 12 +++++++ src/main/resources/mixins.gregtech.ctm.json | 13 +++++++ src/main/resources/mixins.gregtech.forge.json | 5 ++- src/main/resources/mixins.gregtech.jei.json | 12 +++++++ .../resources/mixins.gregtech.minecraft.json | 2 ++ 17 files changed, 224 insertions(+), 13 deletions(-) create mode 100644 src/main/java/gregtech/mixins/ccl/CCLDescriptionMixin.java create mode 100644 src/main/java/gregtech/mixins/ctm/CTMRenderInLayerMixin.java create mode 100644 src/main/java/gregtech/mixins/ctm/ModelCTMLayersAccessor.java create mode 100644 src/main/java/gregtech/mixins/forge/ModelLoaderRegistryMixin.java create mode 100644 src/main/java/gregtech/mixins/forge/SpecialArmorPropertiesMixin.java create mode 100644 src/main/java/gregtech/mixins/jei/JEITooltipMixin.java create mode 100644 src/main/java/gregtech/mixins/minecraft/RecipeRepairItemMixin.java create mode 100644 src/main/java/gregtech/mixins/minecraft/RegionRenderCacheBuilderMixin.java create mode 100644 src/main/resources/mixins.gregtech.ccl.json create mode 100644 src/main/resources/mixins.gregtech.ctm.json create mode 100644 src/main/resources/mixins.gregtech.jei.json diff --git a/gradle.properties b/gradle.properties index c3d30adcc47..f051122a86e 100644 --- a/gradle.properties +++ b/gradle.properties @@ -68,7 +68,7 @@ forceEnableMixins=true # diff to see exactly what your ASM or Mixins are changing in the target file. # Optionally can be specified with the 'CORE_MOD_DEBUG' env var. Will output a lot of files! # TODO, change this to false before merging -enableCoreModDebug=true +enableCoreModDebug=false # Adds CurseMaven, Modrinth Maven, BlameJared maven, and some more well-known 1.12.2 repositories includeWellKnownRepositories=true # Adds JEI and TheOneProbe to your development environment. Adds them as 'implementation', meaning they will diff --git a/src/main/java/gregtech/asm/GregTechTransformer.java b/src/main/java/gregtech/asm/GregTechTransformer.java index e83dd512c44..2bb93d1cccb 100644 --- a/src/main/java/gregtech/asm/GregTechTransformer.java +++ b/src/main/java/gregtech/asm/GregTechTransformer.java @@ -43,27 +43,27 @@ public byte[] transform(String name, String transformedName, byte[] basicClass) LayerCustomHeadVisitor::new), 0); return classWriter.toByteArray(); } */ - case SpecialArmorApplyVisitor.TARGET_CLASS_NAME: { + /*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: { + }*/ + /*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: { + }*/ + /*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); @@ -122,7 +122,7 @@ public byte[] transform(String name, String transformedName, byte[] basicClass) 0); return classWriter.toByteArray(); } - case CCLVisitor.TARGET_CLASS_NAME: { + /*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); @@ -170,13 +170,13 @@ public byte[] transform(String name, String transformedName, byte[] basicClass) ClassReader.EXPAND_FRAMES); return classWriter.toByteArray(); } */ - case ModelLoaderRegistryVisitor.TARGET_CLASS_NAME: { + /*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); diff --git a/src/main/java/gregtech/mixins/GregTechLateMixinLoadingPlugin.java b/src/main/java/gregtech/mixins/GregTechLateMixinLoadingPlugin.java index 38526c9c18f..7d084b8cfbc 100644 --- a/src/main/java/gregtech/mixins/GregTechLateMixinLoadingPlugin.java +++ b/src/main/java/gregtech/mixins/GregTechLateMixinLoadingPlugin.java @@ -14,6 +14,9 @@ public List getMixinConfigs() { List configs = new ArrayList<>(); configs.add("mixins.gregtech.theoneprobe.json"); + configs.add("mixins.gregtech.jei.json"); + configs.add("mixins.gregtech.ctm.json"); + configs.add("mixins.gregtech.ccl.json"); return configs; } @@ -23,6 +26,8 @@ public boolean shouldMixinConfigQueue(String mixinConfig) { return switch (mixinConfig) { case "mixins.gregtech.theoneprobe.json" -> Loader.isModLoaded(GTValues.MODID_TOP); + case "mixins.gregtech.jei.json" -> Loader.isModLoaded(GTValues.MODID_JEI); + case "mixin.gregtech.ctm.json" -> Loader.isModLoaded(GTValues.MODID_CTM); default -> true; }; diff --git a/src/main/java/gregtech/mixins/ccl/CCLDescriptionMixin.java b/src/main/java/gregtech/mixins/ccl/CCLDescriptionMixin.java new file mode 100644 index 00000000000..ffd11f06b6e --- /dev/null +++ b/src/main/java/gregtech/mixins/ccl/CCLDescriptionMixin.java @@ -0,0 +1,17 @@ +package gregtech.mixins.ccl; + +import codechicken.lib.internal.ModDescriptionEnhancer; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +// CCL's supporter stuff is broken, the link no longer works +@Mixin(ModDescriptionEnhancer.class) +public class CCLDescriptionMixin { + + @Inject(method = "init", at = @At("HEAD"), remap = false, cancellable = true) + private static void stopDescriptionEnhancement(CallbackInfo ci) { + ci.cancel(); + } +} diff --git a/src/main/java/gregtech/mixins/ctm/CTMRenderInLayerMixin.java b/src/main/java/gregtech/mixins/ctm/CTMRenderInLayerMixin.java new file mode 100644 index 00000000000..c05fc76c673 --- /dev/null +++ b/src/main/java/gregtech/mixins/ctm/CTMRenderInLayerMixin.java @@ -0,0 +1,23 @@ +package gregtech.mixins.ctm; + +import org.spongepowered.asm.mixin.Mixin; +import team.chisel.ctm.client.asm.CTMCoreMethods; + +@Mixin(CTMCoreMethods.class) +public class CTMRenderInLayerMixin { + + /* @ModifyExpressionValue(method = "canRenderInLayer", at = @At(value = "INVOKE_ASSIGN", target = "Lteam/chisel/ctm/api/model/IModelCTM;canRenderInLayer(Lnet/minecraft/block/state/IBlockState;Lnet/minecraft/util/BlockRenderLayer;)Z"), remap = false) + private static boolean renderInLayer(boolean originalResult, @Nonnull IBlockState state, @Nonnull BlockRenderLayer layer) { + + byte layers = ((ModelCTMLayersAccessor) ModelCTM.getInstance()).getLayers(); + if (model instanceof ModelCTM && layers != null) { + try { + return CTMHooks.checkLayerWithOptiFine(originalResult, layers.getByte(model), layer); + } catch (Exception ignored) { + layers = null; + GTLog.logger.error("CTMModHooks Field error"); + } + } + return originalResult; + } */ +} diff --git a/src/main/java/gregtech/mixins/ctm/ModelCTMLayersAccessor.java b/src/main/java/gregtech/mixins/ctm/ModelCTMLayersAccessor.java new file mode 100644 index 00000000000..ec3a21c4a1f --- /dev/null +++ b/src/main/java/gregtech/mixins/ctm/ModelCTMLayersAccessor.java @@ -0,0 +1,12 @@ +package gregtech.mixins.ctm; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Accessor; +import team.chisel.ctm.client.model.ModelCTM; + +@Mixin(value = ModelCTM.class, remap = false) +public interface ModelCTMLayersAccessor { + + @Accessor("layers") + byte getLayers(); +} diff --git a/src/main/java/gregtech/mixins/forge/ModelLoaderRegistryMixin.java b/src/main/java/gregtech/mixins/forge/ModelLoaderRegistryMixin.java new file mode 100644 index 00000000000..82500342a39 --- /dev/null +++ b/src/main/java/gregtech/mixins/forge/ModelLoaderRegistryMixin.java @@ -0,0 +1,18 @@ +package gregtech.mixins.forge; + +import gregtech.api.unification.material.info.MaterialIconType; +import net.minecraft.client.resources.IResourceManager; +import net.minecraftforge.client.model.ModelLoaderRegistry; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +@Mixin(ModelLoaderRegistry.class) +public class ModelLoaderRegistryMixin { + + @Inject(method = "clearModelCache", at = @At("TAIL"), remap = false) + private static void clearCache(IResourceManager manager, CallbackInfo ci) { + MaterialIconType.clearCache(); + } +} diff --git a/src/main/java/gregtech/mixins/forge/SpecialArmorPropertiesMixin.java b/src/main/java/gregtech/mixins/forge/SpecialArmorPropertiesMixin.java new file mode 100644 index 00000000000..a2ae17e14c3 --- /dev/null +++ b/src/main/java/gregtech/mixins/forge/SpecialArmorPropertiesMixin.java @@ -0,0 +1,35 @@ +package gregtech.mixins.forge; + +import com.llamalad7.mixinextras.injector.ModifyExpressionValue; +import com.llamalad7.mixinextras.sugar.Local; +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; +import net.minecraftforge.common.ISpecialArmor; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; + +// TODO, needs verification as transformed class dumps cannot see inner classes +@Mixin(ISpecialArmor.ArmorProperties.class) +public class SpecialArmorPropertiesMixin { + + @ModifyExpressionValue(method = "applyArmor", at = @At(value = "INVOKE_ASSIGN", target = "Lnet/minecraft/util/CombatRules;getDamageAfterAbsorb(FFF)F"), remap = false) + private static double adjustArmorAbsorption(double originalDamage, float damage, float totalArmor, float totalToughness, @Local EntityLivingBase entity, + @Local NonNullList inventory, @Local 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); + } + } + } + + return originalDamage; + } +} diff --git a/src/main/java/gregtech/mixins/jei/JEITooltipMixin.java b/src/main/java/gregtech/mixins/jei/JEITooltipMixin.java new file mode 100644 index 00000000000..989bde8b00a --- /dev/null +++ b/src/main/java/gregtech/mixins/jei/JEITooltipMixin.java @@ -0,0 +1,22 @@ +package gregtech.mixins.jei; + +import mezz.jei.startup.ForgeModIdHelper; +import org.spongepowered.asm.mixin.Mixin; + +// TODO, Needs to apply to the fluid items in JEI +@Mixin(ForgeModIdHelper.class) +public class JEITooltipMixin { + + /*@Inject(method = "addModNameToIngredientTooltip", at = @At("HEAD"), remap = false) + public void addTooltip(List tooltip, Object ingredient, IIngredientHelper ingredientHelper, CallbackInfoReturnable> cir) { + 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/mixins/minecraft/LayerCustomHeadMixin.java b/src/main/java/gregtech/mixins/minecraft/LayerCustomHeadMixin.java index 93b184c72d9..8e458ab63f9 100644 --- a/src/main/java/gregtech/mixins/minecraft/LayerCustomHeadMixin.java +++ b/src/main/java/gregtech/mixins/minecraft/LayerCustomHeadMixin.java @@ -3,6 +3,7 @@ import com.llamalad7.mixinextras.injector.wrapoperation.Operation; import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; import gregtech.api.items.armor.IArmorItem; +import net.minecraft.client.renderer.ItemRenderer; import net.minecraft.client.renderer.block.model.ItemCameraTransforms; import net.minecraft.client.renderer.entity.layers.LayerCustomHead; import net.minecraft.entity.EntityLivingBase; @@ -12,12 +13,11 @@ import org.spongepowered.asm.mixin.Unique; import org.spongepowered.asm.mixin.injection.At; -// TODO, error in log @Mixin(LayerCustomHead.class) public class LayerCustomHeadMixin { @WrapOperation(method = "doRenderLayer", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/ItemRenderer;renderItem(Lnet/minecraft/entity/EntityLivingBase;Lnet/minecraft/item/ItemStack;Lnet/minecraft/client/renderer/block/model/ItemCameraTransforms$TransformType;)V")) - public void shouldNotRenderHead(LayerCustomHead instance, EntityLivingBase entitylivingbaseIn, ItemStack itemstack, ItemCameraTransforms.TransformType transformType, Operation original) { + public void shouldNotRenderHead(ItemRenderer instance, EntityLivingBase entitylivingbaseIn, ItemStack itemstack, ItemCameraTransforms.TransformType transformType, Operation original) { if (gregTechCEu$shouldNotRenderHeadItem(entitylivingbaseIn)) { return; diff --git a/src/main/java/gregtech/mixins/minecraft/RecipeRepairItemMixin.java b/src/main/java/gregtech/mixins/minecraft/RecipeRepairItemMixin.java new file mode 100644 index 00000000000..6f6fc05dc56 --- /dev/null +++ b/src/main/java/gregtech/mixins/minecraft/RecipeRepairItemMixin.java @@ -0,0 +1,13 @@ +package gregtech.mixins.minecraft; + +import net.minecraft.item.crafting.RecipeRepairItem; +import org.spongepowered.asm.mixin.Mixin; + +@Mixin(RecipeRepairItem.class) +public class RecipeRepairItemMixin { + + + public void adjustMatches() { + + } +} diff --git a/src/main/java/gregtech/mixins/minecraft/RegionRenderCacheBuilderMixin.java b/src/main/java/gregtech/mixins/minecraft/RegionRenderCacheBuilderMixin.java new file mode 100644 index 00000000000..db7caf47646 --- /dev/null +++ b/src/main/java/gregtech/mixins/minecraft/RegionRenderCacheBuilderMixin.java @@ -0,0 +1,24 @@ +package gregtech.mixins.minecraft; + +import gregtech.client.utils.BloomEffectUtil; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.renderer.RegionRenderCacheBuilder; +import org.spongepowered.asm.mixin.Final; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +@Mixin(RegionRenderCacheBuilder.class) +public class RegionRenderCacheBuilderMixin { + + @Final + @Shadow + private BufferBuilder[] worldRenderers; + + @Inject(method = "", at = @At("TAIL")) + public void initBloom(CallbackInfo ci) { + worldRenderers[BloomEffectUtil.BLOOM.ordinal()] = new BufferBuilder(131072); + } +} diff --git a/src/main/resources/mixins.gregtech.ccl.json b/src/main/resources/mixins.gregtech.ccl.json new file mode 100644 index 00000000000..696d44a7275 --- /dev/null +++ b/src/main/resources/mixins.gregtech.ccl.json @@ -0,0 +1,12 @@ +{ + "package" : "gregtech.mixins.ccl", + "refmap" : "mixins.gregtech.refmap.json", + "target" : "@env(DEFAULT)", + "minVersion" : "0.8", + "compatibilityLevel" : "JAVA_8", + "mixins" : [ + "CCLDescriptionMixin" + ], + "client" : [], + "server" : [] +} diff --git a/src/main/resources/mixins.gregtech.ctm.json b/src/main/resources/mixins.gregtech.ctm.json new file mode 100644 index 00000000000..a3f1fdf937c --- /dev/null +++ b/src/main/resources/mixins.gregtech.ctm.json @@ -0,0 +1,13 @@ +{ + "package" : "gregtech.mixins.ctm", + "refmap" : "mixins.gregtech.refmap.json", + "target" : "@env(DEFAULT)", + "minVersion" : "0.8", + "compatibilityLevel" : "JAVA_8", + "mixins" : [ + "CTMRenderInLayerMixin", + "ModelCTMLayersAccessor" + ], + "client" : [], + "server" : [] +} diff --git a/src/main/resources/mixins.gregtech.forge.json b/src/main/resources/mixins.gregtech.forge.json index 262225ea697..81605c0c9dc 100644 --- a/src/main/resources/mixins.gregtech.forge.json +++ b/src/main/resources/mixins.gregtech.forge.json @@ -4,7 +4,10 @@ "target": "@env(DEFAULT)", "minVersion": "0.8", "compatibilityLevel": "JAVA_8", - "mixins": [], + "mixins" : [ + "ModelLoaderRegistryMixin", + "SpecialArmorPropertiesMixin" + ], "client": [], "server": [] } diff --git a/src/main/resources/mixins.gregtech.jei.json b/src/main/resources/mixins.gregtech.jei.json new file mode 100644 index 00000000000..2520843c7d6 --- /dev/null +++ b/src/main/resources/mixins.gregtech.jei.json @@ -0,0 +1,12 @@ +{ + "package" : "gregtech.mixins.jei", + "refmap" : "mixins.gregtech.refmap.json", + "target" : "@env(DEFAULT)", + "minVersion" : "0.8", + "compatibilityLevel" : "JAVA_8", + "mixins" : [ + "JEITooltipMixin" + ], + "client" : [], + "server" : [] +} diff --git a/src/main/resources/mixins.gregtech.minecraft.json b/src/main/resources/mixins.gregtech.minecraft.json index 05ca84bd1e1..13366b85635 100644 --- a/src/main/resources/mixins.gregtech.minecraft.json +++ b/src/main/resources/mixins.gregtech.minecraft.json @@ -12,6 +12,8 @@ "client": [ "LayerArmorBaseMixin", "LayerCustomHeadMixin", + "RecipeRepairItemMixin", + "RegionRenderCacheBuilderMixin", "RenderChunkMixin", "RenderGlobalMixin" ], From 3f02f7faabc56d656a307786b7fa9e16e8c1bd93 Mon Sep 17 00:00:00 2001 From: alongstringofnumbers Date: Tue, 14 Nov 2023 21:36:17 -0700 Subject: [PATCH 07/46] In progress work --- dependencies.gradle | 6 ++++ gradle.properties | 2 +- .../gregtech/asm/GregTechLoadingPlugin.java | 5 +++ .../gregtech/asm/GregTechTransformer.java | 4 +-- .../GregTechLateMixinLoadingPlugin.java | 5 +++ .../LittleTilesRenderMangerMixin.java | 29 ++++++++++++++++ .../gregtech/mixins/minecraft/BlockMixin.java | 34 +++++++++++++++++++ .../mixins/minecraft/RenderItemMixin.java | 22 ++++++++++++ .../nuclearcraft/NuclearCraftRecipeMixin.java | 15 ++++++++ .../mixins.gregtech.littletiles.json | 13 +++++++ .../resources/mixins.gregtech.minecraft.json | 4 ++- .../mixins.gregtech.nuclearcraft-old.json | 13 +++++++ .../mixins.gregtech.nuclearcraft.json | 13 +++++++ 13 files changed, 161 insertions(+), 4 deletions(-) create mode 100644 src/main/java/gregtech/mixins/littletiles/LittleTilesRenderMangerMixin.java create mode 100644 src/main/java/gregtech/mixins/minecraft/BlockMixin.java create mode 100644 src/main/java/gregtech/mixins/minecraft/RenderItemMixin.java create mode 100644 src/main/java/gregtech/mixins/nuclearcraft/NuclearCraftRecipeMixin.java create mode 100644 src/main/resources/mixins.gregtech.littletiles.json create mode 100644 src/main/resources/mixins.gregtech.nuclearcraft-old.json create mode 100644 src/main/resources/mixins.gregtech.nuclearcraft.json diff --git a/dependencies.gradle b/dependencies.gradle index 70fa763ed88..c9c79bace78 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -69,6 +69,12 @@ dependencies { dest: "libs") compileOnly(files("libs/vintagium-mc1.12.2-0.1-dev.jar")) + compileOnly rfg.deobf("curse.maven:littletiles-257818:4750222") // LittleTiles 1.5.82-1.12.2 + + // TODO, remove after testing mixin. Just here for helpers from the plugin + compileOnly rfg.deobf("curse.maven:nuclearcraftoverhauled-336895:3862197-deobf-3862200-sources-3862199") + // NC:O 2.6.2 + // Mods with Soft compat but which have no need to be in code, such as isModLoaded() checks and getModItem() recipes. // Uncomment any of these to test them in-game. diff --git a/gradle.properties b/gradle.properties index f051122a86e..c3d30adcc47 100644 --- a/gradle.properties +++ b/gradle.properties @@ -68,7 +68,7 @@ forceEnableMixins=true # diff to see exactly what your ASM or Mixins are changing in the target file. # Optionally can be specified with the 'CORE_MOD_DEBUG' env var. Will output a lot of files! # TODO, change this to false before merging -enableCoreModDebug=false +enableCoreModDebug=true # Adds CurseMaven, Modrinth Maven, BlameJared maven, and some more well-known 1.12.2 repositories includeWellKnownRepositories=true # Adds JEI and TheOneProbe to your development environment. Adds them as 'implementation', meaning they will diff --git a/src/main/java/gregtech/asm/GregTechLoadingPlugin.java b/src/main/java/gregtech/asm/GregTechLoadingPlugin.java index 2f924d0c844..c856a7afd83 100644 --- a/src/main/java/gregtech/asm/GregTechLoadingPlugin.java +++ b/src/main/java/gregtech/asm/GregTechLoadingPlugin.java @@ -54,4 +54,9 @@ public List getMixinConfigs() { return configs; } + + @Override + public boolean shouldMixinConfigQueue(String mixinConfig) { + return IEarlyMixinLoader.super.shouldMixinConfigQueue(mixinConfig); + } } diff --git a/src/main/java/gregtech/asm/GregTechTransformer.java b/src/main/java/gregtech/asm/GregTechTransformer.java index 2bb93d1cccb..f6b34e029dc 100644 --- a/src/main/java/gregtech/asm/GregTechTransformer.java +++ b/src/main/java/gregtech/asm/GregTechTransformer.java @@ -79,7 +79,7 @@ public byte[] transform(String name, String transformedName, byte[] basicClass) EntityRendererVisitor::new), 0); return classWriter.toByteArray(); } - case BlockVisitor.TARGET_CLASS_NAME: { + /*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); @@ -92,7 +92,7 @@ public byte[] transform(String name, String transformedName, byte[] basicClass) return classWriter.toByteArray(); } break; - } + }*/ /*case WorldVisitor.TARGET_CLASS_NAME: { ClassReader classReader = new ClassReader(basicClass); ClassWriter classWriter = new ClassWriter(ClassWriter.COMPUTE_FRAMES | ClassWriter.COMPUTE_MAXS); diff --git a/src/main/java/gregtech/mixins/GregTechLateMixinLoadingPlugin.java b/src/main/java/gregtech/mixins/GregTechLateMixinLoadingPlugin.java index 7d084b8cfbc..2ccdf3dfe87 100644 --- a/src/main/java/gregtech/mixins/GregTechLateMixinLoadingPlugin.java +++ b/src/main/java/gregtech/mixins/GregTechLateMixinLoadingPlugin.java @@ -2,6 +2,7 @@ import gregtech.api.GTValues; import net.minecraftforge.fml.common.Loader; +import net.minecraftforge.fml.common.ModContainer; import zone.rong.mixinbooter.ILateMixinLoader; import java.util.ArrayList; @@ -24,10 +25,14 @@ public List getMixinConfigs() { @Override public boolean shouldMixinConfigQueue(String mixinConfig) { + ModContainer NC = Loader.instance().getIndexedModList().get(GTValues.MODID_NC); + return switch (mixinConfig) { case "mixins.gregtech.theoneprobe.json" -> Loader.isModLoaded(GTValues.MODID_TOP); case "mixins.gregtech.jei.json" -> Loader.isModLoaded(GTValues.MODID_JEI); case "mixin.gregtech.ctm.json" -> Loader.isModLoaded(GTValues.MODID_CTM); + case "mixin.gregtech.nuclearcraft.json" -> NC != null && NC.getVersion().contains("2o"); + case "mixin.gregtech.nuclearcraft-old.json" -> NC != null && !NC.getVersion().contains("2o"); default -> true; }; diff --git a/src/main/java/gregtech/mixins/littletiles/LittleTilesRenderMangerMixin.java b/src/main/java/gregtech/mixins/littletiles/LittleTilesRenderMangerMixin.java new file mode 100644 index 00000000000..1d2ccd2c205 --- /dev/null +++ b/src/main/java/gregtech/mixins/littletiles/LittleTilesRenderMangerMixin.java @@ -0,0 +1,29 @@ +package gregtech.mixins.littletiles; + +import com.creativemd.littletiles.client.render.cache.LayeredRenderBoxCache; +import com.creativemd.littletiles.client.render.world.TileEntityRenderManager; +import com.creativemd.littletiles.common.tileentity.TileEntityLittleTiles; +import gregtech.asm.hooks.LittleTilesHooks; +import org.spongepowered.asm.mixin.Final; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Mutable; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +// TODO, I am not quite sure if this matches with what the ASM was actually doing +// TODO, transition to using the direct path method, and remove the dependency on LittleTiles +@Mixin(TileEntityRenderManager.class) +public class LittleTilesRenderMangerMixin { + + @Mutable + @Shadow + @Final + private LayeredRenderBoxCache boxCache; + + @Inject(method = "", at = @At("TAIL"), remap = false) + public void adjustRenderLayerdBox(TileEntityLittleTiles te, CallbackInfo ci) { + boxCache = LittleTilesHooks.initLayeredRenderBoxCache(); + } +} diff --git a/src/main/java/gregtech/mixins/minecraft/BlockMixin.java b/src/main/java/gregtech/mixins/minecraft/BlockMixin.java new file mode 100644 index 00000000000..9477b7c72db --- /dev/null +++ b/src/main/java/gregtech/mixins/minecraft/BlockMixin.java @@ -0,0 +1,34 @@ +package gregtech.mixins.minecraft; + +import gregtech.api.GTValues; +import gregtech.asm.hooks.BlockHooks; +import net.minecraft.block.Block; +import net.minecraft.block.state.IBlockState; +import net.minecraft.util.BlockRenderLayer; +import net.minecraftforge.fml.common.Loader; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +// TODO, test to make sure this works when CTM is loaded +// TODO, put into separate refmap, so it can queue when CTM is not loaded + +/** + * Apply our block hooks for our custom models when CTM is not loaded + */ +@Mixin(Block.class) +public class BlockMixin { + + @Inject(method = "canRenderInLayer", at = @At("HEAD"), cancellable = true, remap = false) + private void canRenderInLayer(IBlockState state, BlockRenderLayer layer, CallbackInfoReturnable cir) { + if (!Loader.instance().getIndexedModList().containsKey(GTValues.MODID_CTM)) { + Boolean result = BlockHooks.canRenderInLayer(state, layer); + + if (result != null) { + cir.setReturnValue(result); + cir.cancel(); + } + } + } +} diff --git a/src/main/java/gregtech/mixins/minecraft/RenderItemMixin.java b/src/main/java/gregtech/mixins/minecraft/RenderItemMixin.java new file mode 100644 index 00000000000..87d966a7cd6 --- /dev/null +++ b/src/main/java/gregtech/mixins/minecraft/RenderItemMixin.java @@ -0,0 +1,22 @@ +package gregtech.mixins.minecraft; + +import gregtech.asm.hooks.RenderItemHooks; +import net.minecraft.client.gui.FontRenderer; +import net.minecraft.client.renderer.RenderItem; +import net.minecraft.item.ItemStack; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +@Mixin(RenderItem.class) +public class RenderItemMixin { + + // The easy part of translating the item render stuff + @Inject(method = "renderItemOverlayIntoGUI", at = @At(value = "HEAD")) + private void renderItemOverlayIntoGUIInject(FontRenderer fr, ItemStack stack, int xPosition, int yPosition, String text, CallbackInfo ci) { + if (!stack.isEmpty()) { + RenderItemHooks.renderLampOverlay(stack, xPosition, yPosition); + } + } +} diff --git a/src/main/java/gregtech/mixins/nuclearcraft/NuclearCraftRecipeMixin.java b/src/main/java/gregtech/mixins/nuclearcraft/NuclearCraftRecipeMixin.java new file mode 100644 index 00000000000..38efd40651b --- /dev/null +++ b/src/main/java/gregtech/mixins/nuclearcraft/NuclearCraftRecipeMixin.java @@ -0,0 +1,15 @@ +package gregtech.mixins.nuclearcraft; + +import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; + +// TODO, Remove after NC updates +@Mixin(targets = "nc/integration/gtce/GTCERecipeHelper") +public class NuclearCraftRecipeMixin { + + @WrapOperation(method = "addGTCERecipe", at = @At(value = "INVOKE_ASSIGN", target = "Lgregtech/api/recipes/RecipeMap;recipeBuilder()Lgregtech/api/recipes/RecipeBuilder;")) + private static void fixRecipeMapName() { + + } +} diff --git a/src/main/resources/mixins.gregtech.littletiles.json b/src/main/resources/mixins.gregtech.littletiles.json new file mode 100644 index 00000000000..e754e4ad051 --- /dev/null +++ b/src/main/resources/mixins.gregtech.littletiles.json @@ -0,0 +1,13 @@ +{ + "package" : "gregtech.mixins.littletiles", + "refmap" : "mixins.gregtech.refmap.json", + "target" : "@env(DEFAULT)", + "minVersion" : "0.8", + "compatibilityLevel" : "JAVA_8", + "mixins" : [ + "LittleTilesRenderMangerMixin" + ], + "client" : [ + ], + "server" : [] +} diff --git a/src/main/resources/mixins.gregtech.minecraft.json b/src/main/resources/mixins.gregtech.minecraft.json index 13366b85635..85f46b372c9 100644 --- a/src/main/resources/mixins.gregtech.minecraft.json +++ b/src/main/resources/mixins.gregtech.minecraft.json @@ -10,12 +10,14 @@ "MinecraftMixin" ], "client": [ + "BlockMixin", "LayerArmorBaseMixin", "LayerCustomHeadMixin", "RecipeRepairItemMixin", "RegionRenderCacheBuilderMixin", "RenderChunkMixin", - "RenderGlobalMixin" + "RenderGlobalMixin", + "RenderItemMixin" ], "server": [] } diff --git a/src/main/resources/mixins.gregtech.nuclearcraft-old.json b/src/main/resources/mixins.gregtech.nuclearcraft-old.json new file mode 100644 index 00000000000..3d3f6d2c727 --- /dev/null +++ b/src/main/resources/mixins.gregtech.nuclearcraft-old.json @@ -0,0 +1,13 @@ +{ + "package" : "gregtech.mixins.nuclearcraft", + "refmap" : "mixins.gregtech.refmap.json", + "target" : "@env(DEFAULT)", + "minVersion" : "0.8", + "compatibilityLevel" : "JAVA_8", + "mixins" : [ + "NuclearCraftOldRecipeMixin" + ], + "client" : [ + ], + "server" : [] +} diff --git a/src/main/resources/mixins.gregtech.nuclearcraft.json b/src/main/resources/mixins.gregtech.nuclearcraft.json new file mode 100644 index 00000000000..e4a9bb890cc --- /dev/null +++ b/src/main/resources/mixins.gregtech.nuclearcraft.json @@ -0,0 +1,13 @@ +{ + "package" : "gregtech.mixins.nuclearcraft", + "refmap" : "mixins.gregtech.refmap.json", + "target" : "@env(DEFAULT)", + "minVersion" : "0.8", + "compatibilityLevel" : "JAVA_8", + "mixins" : [ + "NuclearCraftRecipeMixin" + ], + "client" : [ + ], + "server" : [] +} From 68879730c60b7e1a611477458892bd2a73d8acc3 Mon Sep 17 00:00:00 2001 From: serenibyss <10861407+serenibyss@users.noreply.github.com> Date: Fri, 24 Nov 2023 17:21:35 -0600 Subject: [PATCH 08/46] possibly working RecipeRepairItemMixin --- .../gregtech/asm/GregTechTransformer.java | 4 +- .../minecraft/RecipeRepairItemMixin.java | 70 ++++++++++++++++++- 2 files changed, 71 insertions(+), 3 deletions(-) diff --git a/src/main/java/gregtech/asm/GregTechTransformer.java b/src/main/java/gregtech/asm/GregTechTransformer.java index f6b34e029dc..98543c328fc 100644 --- a/src/main/java/gregtech/asm/GregTechTransformer.java +++ b/src/main/java/gregtech/asm/GregTechTransformer.java @@ -138,14 +138,14 @@ public byte[] transform(String name, String transformedName, byte[] basicClass) classNode.accept(classWriter); return classWriter.toByteArray(); } - case RecipeRepairItemVisitor.TARGET_CLASS_NAME: { + /*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); diff --git a/src/main/java/gregtech/mixins/minecraft/RecipeRepairItemMixin.java b/src/main/java/gregtech/mixins/minecraft/RecipeRepairItemMixin.java index 6f6fc05dc56..93c2665ef5b 100644 --- a/src/main/java/gregtech/mixins/minecraft/RecipeRepairItemMixin.java +++ b/src/main/java/gregtech/mixins/minecraft/RecipeRepairItemMixin.java @@ -1,13 +1,81 @@ package gregtech.mixins.minecraft; +import com.llamalad7.mixinextras.sugar.Local; +import com.llamalad7.mixinextras.sugar.ref.LocalIntRef; +import com.llamalad7.mixinextras.sugar.ref.LocalRef; +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.item.crafting.RecipeRepairItem; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.NonNullList; +import net.minecraft.world.World; +import net.minecraftforge.common.ForgeHooks; +import net.minecraftforge.event.ForgeEventFactory; import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Overwrite; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; @Mixin(RecipeRepairItem.class) public class RecipeRepairItemMixin { + @Inject(method = "Lnet/minecraft/item/crafting/RecipeRepairItem;matches(Lnet/minecraft/inventory/InventoryCrafting;Lnet/minecraft/world/World;)Z", + at = @At(value = "INVOKE_ASSIGN", target = "Ljava/util/List;get(I)Ljava/lang/Object;")) + public static void gregtechCEu$matches(InventoryCrafting inv, World worldIn, CallbackInfoReturnable cir, + @Local LocalRef itemstack, @Local LocalRef itemstack1) { + if (itemstack.get().getItem() instanceof IGTTool first && itemstack1.get().getItem() instanceof IGTTool second) { + if (first.isElectric() || second.isElectric()) { + cir.setReturnValue(false); + } else { + cir.setReturnValue(first.getToolMaterial(itemstack.get()) == second.getToolMaterial(itemstack1.get())); + } + } + } + + @Inject(method = "Lnet/minecraft/item/crafting/RecipeRepairItem;getCraftingResult(Lnet/minecraft/inventory/InventoryCrafting;)Lnet/minecraft/item/ItemStack;", + at = @At(value = "INVOKE_ASSIGN", target = "Ljava/util/List;get(I)Ljava/lang/Object;", ordinal = 0)) + public static void gregtechCEu$getCraftingResultFirst(InventoryCrafting inv, CallbackInfoReturnable cir, + @Local(ordinal = 0) LocalRef itemstack, @Local(ordinal = 1) LocalRef itemstack1) { + if (itemstack.get().getItem() instanceof IGTTool tool && tool.isElectric()) { + cir.setReturnValue(ItemStack.EMPTY); + } else if (itemstack1.get().getItem() instanceof IGTTool tool && tool.isElectric()) { + cir.setReturnValue(ItemStack.EMPTY); + } + } - public void adjustMatches() { + @Inject(method = "Lnet/minecraft/item/crafting/RecipeRepairItem;getCraftingResult(Lnet/minecraft/inventory/InventoryCrafting;)Lnet/minecraft/item/ItemStack;", + at = @At(value = "RETURN", ordinal = 1)) + public static void gregtechCEu$getCraftingResultSecond(InventoryCrafting inv, CallbackInfoReturnable cir, + @Local(ordinal = 4) LocalIntRef i1, @Local(ordinal = 2) LocalRef itemstack2, + @Local(ordinal = 3) LocalRef itemstack3) { + if (itemstack2.get().getItem() instanceof IGTTool first && itemstack3.get().getItem() instanceof IGTTool) { + // do not allow repairing tools if both are full durability + if (itemstack2.get().getItemDamage() == 0 && itemstack3.get().getItemDamage() == 0) { + cir.setReturnValue(ItemStack.EMPTY); + } else { + ItemStack output = first.get(first.getToolMaterial(itemstack2.get())); + NBTTagCompound outputTag = ToolHelper.getToolTag(output); + outputTag.setInteger(ToolHelper.DURABILITY_KEY, i1.get()); + cir.setReturnValue(output); + } + } + } + @Overwrite + 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; } } From 4a2d5a15d38debf135a537e908c066f906b42142 Mon Sep 17 00:00:00 2001 From: alongstringofnumbers Date: Fri, 24 Nov 2023 16:45:10 -0700 Subject: [PATCH 09/46] Remove NC Mixin/ASM, as our compat is more broken than what is being fixed --- .../mixins/GregTechLateMixinLoadingPlugin.java | 5 ----- .../nuclearcraft/NuclearCraftRecipeMixin.java | 15 --------------- .../mixins.gregtech.nuclearcraft-old.json | 13 ------------- .../resources/mixins.gregtech.nuclearcraft.json | 13 ------------- 4 files changed, 46 deletions(-) delete mode 100644 src/main/java/gregtech/mixins/nuclearcraft/NuclearCraftRecipeMixin.java delete mode 100644 src/main/resources/mixins.gregtech.nuclearcraft-old.json delete mode 100644 src/main/resources/mixins.gregtech.nuclearcraft.json diff --git a/src/main/java/gregtech/mixins/GregTechLateMixinLoadingPlugin.java b/src/main/java/gregtech/mixins/GregTechLateMixinLoadingPlugin.java index 2ccdf3dfe87..7d084b8cfbc 100644 --- a/src/main/java/gregtech/mixins/GregTechLateMixinLoadingPlugin.java +++ b/src/main/java/gregtech/mixins/GregTechLateMixinLoadingPlugin.java @@ -2,7 +2,6 @@ import gregtech.api.GTValues; import net.minecraftforge.fml.common.Loader; -import net.minecraftforge.fml.common.ModContainer; import zone.rong.mixinbooter.ILateMixinLoader; import java.util.ArrayList; @@ -25,14 +24,10 @@ public List getMixinConfigs() { @Override public boolean shouldMixinConfigQueue(String mixinConfig) { - ModContainer NC = Loader.instance().getIndexedModList().get(GTValues.MODID_NC); - return switch (mixinConfig) { case "mixins.gregtech.theoneprobe.json" -> Loader.isModLoaded(GTValues.MODID_TOP); case "mixins.gregtech.jei.json" -> Loader.isModLoaded(GTValues.MODID_JEI); case "mixin.gregtech.ctm.json" -> Loader.isModLoaded(GTValues.MODID_CTM); - case "mixin.gregtech.nuclearcraft.json" -> NC != null && NC.getVersion().contains("2o"); - case "mixin.gregtech.nuclearcraft-old.json" -> NC != null && !NC.getVersion().contains("2o"); default -> true; }; diff --git a/src/main/java/gregtech/mixins/nuclearcraft/NuclearCraftRecipeMixin.java b/src/main/java/gregtech/mixins/nuclearcraft/NuclearCraftRecipeMixin.java deleted file mode 100644 index 38efd40651b..00000000000 --- a/src/main/java/gregtech/mixins/nuclearcraft/NuclearCraftRecipeMixin.java +++ /dev/null @@ -1,15 +0,0 @@ -package gregtech.mixins.nuclearcraft; - -import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; - -// TODO, Remove after NC updates -@Mixin(targets = "nc/integration/gtce/GTCERecipeHelper") -public class NuclearCraftRecipeMixin { - - @WrapOperation(method = "addGTCERecipe", at = @At(value = "INVOKE_ASSIGN", target = "Lgregtech/api/recipes/RecipeMap;recipeBuilder()Lgregtech/api/recipes/RecipeBuilder;")) - private static void fixRecipeMapName() { - - } -} diff --git a/src/main/resources/mixins.gregtech.nuclearcraft-old.json b/src/main/resources/mixins.gregtech.nuclearcraft-old.json deleted file mode 100644 index 3d3f6d2c727..00000000000 --- a/src/main/resources/mixins.gregtech.nuclearcraft-old.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "package" : "gregtech.mixins.nuclearcraft", - "refmap" : "mixins.gregtech.refmap.json", - "target" : "@env(DEFAULT)", - "minVersion" : "0.8", - "compatibilityLevel" : "JAVA_8", - "mixins" : [ - "NuclearCraftOldRecipeMixin" - ], - "client" : [ - ], - "server" : [] -} diff --git a/src/main/resources/mixins.gregtech.nuclearcraft.json b/src/main/resources/mixins.gregtech.nuclearcraft.json deleted file mode 100644 index e4a9bb890cc..00000000000 --- a/src/main/resources/mixins.gregtech.nuclearcraft.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "package" : "gregtech.mixins.nuclearcraft", - "refmap" : "mixins.gregtech.refmap.json", - "target" : "@env(DEFAULT)", - "minVersion" : "0.8", - "compatibilityLevel" : "JAVA_8", - "mixins" : [ - "NuclearCraftRecipeMixin" - ], - "client" : [ - ], - "server" : [] -} From 8be86edf91bc9a621c5301b1926d92a596a349de Mon Sep 17 00:00:00 2001 From: alongstringofnumbers Date: Fri, 24 Nov 2023 16:53:49 -0700 Subject: [PATCH 10/46] Some Fixes --- .../mixins/minecraft/DamageSourceMixin.java | 4 +-- .../minecraft/RecipeRepairItemMixin.java | 26 ++++++++++++------- 2 files changed, 18 insertions(+), 12 deletions(-) diff --git a/src/main/java/gregtech/mixins/minecraft/DamageSourceMixin.java b/src/main/java/gregtech/mixins/minecraft/DamageSourceMixin.java index 593773a2cba..b9aa1ab5675 100644 --- a/src/main/java/gregtech/mixins/minecraft/DamageSourceMixin.java +++ b/src/main/java/gregtech/mixins/minecraft/DamageSourceMixin.java @@ -21,7 +21,7 @@ public class DamageSourceMixin { private static DamageSource modifyPlayerDamageWithTool(DamageSource originalReturnValue, EntityPlayer source) { ItemStack stack = source != null ? source.getHeldItemMainhand() : ItemStack.EMPTY; if (!stack.isEmpty() && stack.getItem() instanceof IGTTool tool) { - return new DamageSourceTool("player", source, String.format("death.attack.%s", tool.getId())); + return new DamageSourceTool("player", source, String.format("death.attack.%s", tool.getToolId())); } return originalReturnValue; } @@ -30,7 +30,7 @@ private static DamageSource modifyPlayerDamageWithTool(DamageSource originalRetu private static DamageSource modifyMobDamageWithTool(DamageSource originalReturnValue, EntityLivingBase source) { ItemStack stack = source != null ? source.getItemStackFromSlot(EntityEquipmentSlot.MAINHAND) : ItemStack.EMPTY; if (!stack.isEmpty() && stack.getItem() instanceof IGTTool tool) { - return new DamageSourceTool("mob", source, String.format("death.attack.%s", tool.getId())); + return new DamageSourceTool("mob", source, String.format("death.attack.%s", tool.getToolId())); } return new EntityDamageSource("mob", source); diff --git a/src/main/java/gregtech/mixins/minecraft/RecipeRepairItemMixin.java b/src/main/java/gregtech/mixins/minecraft/RecipeRepairItemMixin.java index 93c2665ef5b..d4260fb8fa0 100644 --- a/src/main/java/gregtech/mixins/minecraft/RecipeRepairItemMixin.java +++ b/src/main/java/gregtech/mixins/minecraft/RecipeRepairItemMixin.java @@ -22,9 +22,9 @@ @Mixin(RecipeRepairItem.class) public class RecipeRepairItemMixin { - @Inject(method = "Lnet/minecraft/item/crafting/RecipeRepairItem;matches(Lnet/minecraft/inventory/InventoryCrafting;Lnet/minecraft/world/World;)Z", - at = @At(value = "INVOKE_ASSIGN", target = "Ljava/util/List;get(I)Ljava/lang/Object;")) - public static void gregtechCEu$matches(InventoryCrafting inv, World worldIn, CallbackInfoReturnable cir, + @Inject(method = "matches(Lnet/minecraft/inventory/InventoryCrafting;Lnet/minecraft/world/World;)Z", + at = @At(value = "INVOKE_ASSIGN", target = "Ljava/util/List;get(I)Ljava/lang/Object;"), cancellable = true) + public void gregtechCEu$matches(InventoryCrafting inv, World worldIn, CallbackInfoReturnable cir, @Local LocalRef itemstack, @Local LocalRef itemstack1) { if (itemstack.get().getItem() instanceof IGTTool first && itemstack1.get().getItem() instanceof IGTTool second) { if (first.isElectric() || second.isElectric()) { @@ -35,9 +35,9 @@ public class RecipeRepairItemMixin { } } - @Inject(method = "Lnet/minecraft/item/crafting/RecipeRepairItem;getCraftingResult(Lnet/minecraft/inventory/InventoryCrafting;)Lnet/minecraft/item/ItemStack;", - at = @At(value = "INVOKE_ASSIGN", target = "Ljava/util/List;get(I)Ljava/lang/Object;", ordinal = 0)) - public static void gregtechCEu$getCraftingResultFirst(InventoryCrafting inv, CallbackInfoReturnable cir, + @Inject(method = "getCraftingResult(Lnet/minecraft/inventory/InventoryCrafting;)Lnet/minecraft/item/ItemStack;", + at = @At(value = "INVOKE_ASSIGN", target = "Ljava/util/List;get(I)Ljava/lang/Object;", ordinal = 0), cancellable = true) + public void gregtechCEu$getCraftingResultFirst(InventoryCrafting inv, CallbackInfoReturnable cir, @Local(ordinal = 0) LocalRef itemstack, @Local(ordinal = 1) LocalRef itemstack1) { if (itemstack.get().getItem() instanceof IGTTool tool && tool.isElectric()) { cir.setReturnValue(ItemStack.EMPTY); @@ -46,9 +46,9 @@ public class RecipeRepairItemMixin { } } - @Inject(method = "Lnet/minecraft/item/crafting/RecipeRepairItem;getCraftingResult(Lnet/minecraft/inventory/InventoryCrafting;)Lnet/minecraft/item/ItemStack;", - at = @At(value = "RETURN", ordinal = 1)) - public static void gregtechCEu$getCraftingResultSecond(InventoryCrafting inv, CallbackInfoReturnable cir, + @Inject(method = "getCraftingResult(Lnet/minecraft/inventory/InventoryCrafting;)Lnet/minecraft/item/ItemStack;", + at = @At(value = "RETURN", ordinal = 1), cancellable = true) + public void gregtechCEu$getCraftingResultSecond(InventoryCrafting inv, CallbackInfoReturnable cir, @Local(ordinal = 4) LocalIntRef i1, @Local(ordinal = 2) LocalRef itemstack2, @Local(ordinal = 3) LocalRef itemstack3) { if (itemstack2.get().getItem() instanceof IGTTool first && itemstack3.get().getItem() instanceof IGTTool) { @@ -64,8 +64,14 @@ public class RecipeRepairItemMixin { } } + // TODO, see if we can change this from an overwrite + + /** + * @author GregTech CEu + * @reason Properly account for GT Tools in Crafting Recipes + */ @Overwrite - public static NonNullList getRemainingItems(InventoryCrafting inv) { + public 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); From 2f7ce68368c203a1313ad1d3df9ded8404398536 Mon Sep 17 00:00:00 2001 From: alongstringofnumbers Date: Fri, 24 Nov 2023 17:40:41 -0700 Subject: [PATCH 11/46] Compile --- dependencies.gradle | 4 +--- .../client/render/cache/LayeredRenderBoxCache.java | 4 ---- 2 files changed, 1 insertion(+), 7 deletions(-) delete mode 100644 src/api/java/com/creativemd/littletiles/client/render/cache/LayeredRenderBoxCache.java diff --git a/dependencies.gradle b/dependencies.gradle index c9c79bace78..2b942991a86 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -70,10 +70,8 @@ dependencies { compileOnly(files("libs/vintagium-mc1.12.2-0.1-dev.jar")) compileOnly rfg.deobf("curse.maven:littletiles-257818:4750222") // LittleTiles 1.5.82-1.12.2 + compileOnly rfg.deobf("curse.maven:creativecore-257814:4722163") // Creative Core 1.10.71 - // TODO, remove after testing mixin. Just here for helpers from the plugin - compileOnly rfg.deobf("curse.maven:nuclearcraftoverhauled-336895:3862197-deobf-3862200-sources-3862199") - // NC:O 2.6.2 // Mods with Soft compat but which have no need to be in code, such as isModLoaded() checks and getModItem() recipes. // Uncomment any of these to test them in-game. diff --git a/src/api/java/com/creativemd/littletiles/client/render/cache/LayeredRenderBoxCache.java b/src/api/java/com/creativemd/littletiles/client/render/cache/LayeredRenderBoxCache.java deleted file mode 100644 index 5bba9443bfb..00000000000 --- a/src/api/java/com/creativemd/littletiles/client/render/cache/LayeredRenderBoxCache.java +++ /dev/null @@ -1,4 +0,0 @@ -package com.creativemd.littletiles.client.render.cache; - -public class LayeredRenderBoxCache { -} From a7cd3c993c07ede6942b22abc82c600041e23919 Mon Sep 17 00:00:00 2001 From: alongstringofnumbers Date: Wed, 29 Nov 2023 18:49:25 -0700 Subject: [PATCH 12/46] Fix Rebase issues and spotless --- addon.gradle | 2 + .../gregtech/asm/GregTechLoadingPlugin.java | 2 +- .../gregtech/asm/GregTechTransformer.java | 244 ++++++++++-------- .../GregTechLateMixinLoadingPlugin.java | 4 +- .../mixins/ctm/CTMRenderInLayerMixin.java | 33 ++- .../forge/ModelLoaderRegistryMixin.java | 2 + .../forge/SpecialArmorPropertiesMixin.java | 18 +- .../gregtech/mixins/jei/JEITooltipMixin.java | 27 +- .../LittleTilesRenderMangerMixin.java | 3 +- .../minecraft/BlockConcretePowderMixin.java | 2 + .../gregtech/mixins/minecraft/BlockMixin.java | 2 + .../mixins/minecraft/DamageSourceMixin.java | 6 +- .../mixins/minecraft/LayerArmorBaseMixin.java | 27 +- .../minecraft/LayerCustomHeadMixin.java | 17 +- .../mixins/minecraft/MinecraftMixin.java | 1 + .../minecraft/RecipeRepairItemMixin.java | 31 ++- .../RegionRenderCacheBuilderMixin.java | 2 + .../mixins/minecraft/RenderChunkMixin.java | 14 +- .../mixins/minecraft/RenderGlobalMixin.java | 2 + .../mixins/minecraft/RenderItemMixin.java | 5 +- .../mixins/theoneprobe/TheOneProbeMixin.java | 18 +- 21 files changed, 281 insertions(+), 181 deletions(-) diff --git a/addon.gradle b/addon.gradle index 1ae74303160..4c6342bed07 100644 --- a/addon.gradle +++ b/addon.gradle @@ -8,6 +8,8 @@ configurations { compileClassPath { // exclude GNU trove, FastUtil is superior and still updated exclude group: "net.sf.trove4j", module: "trove4j" + // exclude javax.annotation from findbugs, jetbrains annotations are superior + exclude group: "com.google.code.findbugs", module: "jsr305" } } diff --git a/src/main/java/gregtech/asm/GregTechLoadingPlugin.java b/src/main/java/gregtech/asm/GregTechLoadingPlugin.java index c856a7afd83..ab48a079c83 100644 --- a/src/main/java/gregtech/asm/GregTechLoadingPlugin.java +++ b/src/main/java/gregtech/asm/GregTechLoadingPlugin.java @@ -6,9 +6,9 @@ import net.minecraftforge.fml.relauncher.IFMLLoadingPlugin.Name; import net.minecraftforge.fml.relauncher.IFMLLoadingPlugin.SortingIndex; import net.minecraftforge.fml.relauncher.IFMLLoadingPlugin.TransformerExclusions; -import zone.rong.mixinbooter.IEarlyMixinLoader; import org.jetbrains.annotations.Nullable; +import zone.rong.mixinbooter.IEarlyMixinLoader; import java.util.ArrayList; import java.util.List; diff --git a/src/main/java/gregtech/asm/GregTechTransformer.java b/src/main/java/gregtech/asm/GregTechTransformer.java index 98543c328fc..0849e7a0cfd 100644 --- a/src/main/java/gregtech/asm/GregTechTransformer.java +++ b/src/main/java/gregtech/asm/GregTechTransformer.java @@ -2,7 +2,13 @@ import gregtech.asm.util.ObfMapping; import gregtech.asm.util.TargetClassVisitor; -import gregtech.asm.visitors.*; +import gregtech.asm.visitors.AbstractCTMBakedModelVisitor; +import gregtech.asm.visitors.EnchantmentCanApplyVisitor; +import gregtech.asm.visitors.EntityRendererVisitor; +import gregtech.asm.visitors.JEIVisitor; +import gregtech.asm.visitors.LittleTilesVisitor; +import gregtech.asm.visitors.ModelCTMVisitor; +import gregtech.asm.visitors.RenderItemVisitor; import net.minecraft.launchwrapper.IClassTransformer; import net.minecraft.launchwrapper.Launch; @@ -27,51 +33,63 @@ public byte[] transform(String name, String transformedName, byte[] basicClass) 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 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); @@ -79,27 +97,31 @@ public byte[] transform(String name, String transformedName, byte[] basicClass) 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 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); @@ -138,45 +160,55 @@ public byte[] transform(String name, String transformedName, byte[] basicClass) 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(); - }*/ + /* + * 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); diff --git a/src/main/java/gregtech/mixins/GregTechLateMixinLoadingPlugin.java b/src/main/java/gregtech/mixins/GregTechLateMixinLoadingPlugin.java index 7d084b8cfbc..05cf29847a8 100644 --- a/src/main/java/gregtech/mixins/GregTechLateMixinLoadingPlugin.java +++ b/src/main/java/gregtech/mixins/GregTechLateMixinLoadingPlugin.java @@ -1,7 +1,9 @@ package gregtech.mixins; import gregtech.api.GTValues; + import net.minecraftforge.fml.common.Loader; + import zone.rong.mixinbooter.ILateMixinLoader; import java.util.ArrayList; @@ -23,13 +25,11 @@ public List getMixinConfigs() { @Override public boolean shouldMixinConfigQueue(String mixinConfig) { - return switch (mixinConfig) { case "mixins.gregtech.theoneprobe.json" -> Loader.isModLoaded(GTValues.MODID_TOP); case "mixins.gregtech.jei.json" -> Loader.isModLoaded(GTValues.MODID_JEI); case "mixin.gregtech.ctm.json" -> Loader.isModLoaded(GTValues.MODID_CTM); default -> true; }; - } } diff --git a/src/main/java/gregtech/mixins/ctm/CTMRenderInLayerMixin.java b/src/main/java/gregtech/mixins/ctm/CTMRenderInLayerMixin.java index c05fc76c673..3927d9e4da4 100644 --- a/src/main/java/gregtech/mixins/ctm/CTMRenderInLayerMixin.java +++ b/src/main/java/gregtech/mixins/ctm/CTMRenderInLayerMixin.java @@ -6,18 +6,23 @@ @Mixin(CTMCoreMethods.class) public class CTMRenderInLayerMixin { - /* @ModifyExpressionValue(method = "canRenderInLayer", at = @At(value = "INVOKE_ASSIGN", target = "Lteam/chisel/ctm/api/model/IModelCTM;canRenderInLayer(Lnet/minecraft/block/state/IBlockState;Lnet/minecraft/util/BlockRenderLayer;)Z"), remap = false) - private static boolean renderInLayer(boolean originalResult, @Nonnull IBlockState state, @Nonnull BlockRenderLayer layer) { - - byte layers = ((ModelCTMLayersAccessor) ModelCTM.getInstance()).getLayers(); - if (model instanceof ModelCTM && layers != null) { - try { - return CTMHooks.checkLayerWithOptiFine(originalResult, layers.getByte(model), layer); - } catch (Exception ignored) { - layers = null; - GTLog.logger.error("CTMModHooks Field error"); - } - } - return originalResult; - } */ + /* + * @ModifyExpressionValue(method = "canRenderInLayer", at = @At(value = "INVOKE_ASSIGN", target = + * "Lteam/chisel/ctm/api/model/IModelCTM;canRenderInLayer(Lnet/minecraft/block/state/IBlockState;Lnet/minecraft/util/BlockRenderLayer;)Z" + * ), remap = false) + * private static boolean renderInLayer(boolean originalResult, @Nonnull IBlockState state, @Nonnull + * BlockRenderLayer layer) { + * + * byte layers = ((ModelCTMLayersAccessor) ModelCTM.getInstance()).getLayers(); + * if (model instanceof ModelCTM && layers != null) { + * try { + * return CTMHooks.checkLayerWithOptiFine(originalResult, layers.getByte(model), layer); + * } catch (Exception ignored) { + * layers = null; + * GTLog.logger.error("CTMModHooks Field error"); + * } + * } + * return originalResult; + * } + */ } diff --git a/src/main/java/gregtech/mixins/forge/ModelLoaderRegistryMixin.java b/src/main/java/gregtech/mixins/forge/ModelLoaderRegistryMixin.java index 82500342a39..85cc8d099e8 100644 --- a/src/main/java/gregtech/mixins/forge/ModelLoaderRegistryMixin.java +++ b/src/main/java/gregtech/mixins/forge/ModelLoaderRegistryMixin.java @@ -1,8 +1,10 @@ package gregtech.mixins.forge; import gregtech.api.unification.material.info.MaterialIconType; + import net.minecraft.client.resources.IResourceManager; import net.minecraftforge.client.model.ModelLoaderRegistry; + import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; diff --git a/src/main/java/gregtech/mixins/forge/SpecialArmorPropertiesMixin.java b/src/main/java/gregtech/mixins/forge/SpecialArmorPropertiesMixin.java index a2ae17e14c3..468fa9212cf 100644 --- a/src/main/java/gregtech/mixins/forge/SpecialArmorPropertiesMixin.java +++ b/src/main/java/gregtech/mixins/forge/SpecialArmorPropertiesMixin.java @@ -1,13 +1,15 @@ package gregtech.mixins.forge; -import com.llamalad7.mixinextras.injector.ModifyExpressionValue; -import com.llamalad7.mixinextras.sugar.Local; 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; import net.minecraftforge.common.ISpecialArmor; + +import com.llamalad7.mixinextras.injector.ModifyExpressionValue; +import com.llamalad7.mixinextras.sugar.Local; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; @@ -15,10 +17,14 @@ @Mixin(ISpecialArmor.ArmorProperties.class) public class SpecialArmorPropertiesMixin { - @ModifyExpressionValue(method = "applyArmor", at = @At(value = "INVOKE_ASSIGN", target = "Lnet/minecraft/util/CombatRules;getDamageAfterAbsorb(FFF)F"), remap = false) - private static double adjustArmorAbsorption(double originalDamage, float damage, float totalArmor, float totalToughness, @Local EntityLivingBase entity, - @Local NonNullList inventory, @Local DamageSource damageSource) { - + @ModifyExpressionValue(method = "applyArmor", + at = @At(value = "INVOKE_ASSIGN", + target = "Lnet/minecraft/util/CombatRules;getDamageAfterAbsorb(FFF)F"), + remap = false) + private static double adjustArmorAbsorption(double originalDamage, float damage, float totalArmor, + float totalToughness, @Local EntityLivingBase entity, + @Local NonNullList inventory, + @Local DamageSource damageSource) { double armorDamage = Math.max(1.0F, damage / 4.0F); for (int i = 0; i < inventory.size(); i++) { ItemStack itemStack = inventory.get(i); diff --git a/src/main/java/gregtech/mixins/jei/JEITooltipMixin.java b/src/main/java/gregtech/mixins/jei/JEITooltipMixin.java index 989bde8b00a..0151ef78373 100644 --- a/src/main/java/gregtech/mixins/jei/JEITooltipMixin.java +++ b/src/main/java/gregtech/mixins/jei/JEITooltipMixin.java @@ -7,16 +7,19 @@ @Mixin(ForgeModIdHelper.class) public class JEITooltipMixin { - /*@Inject(method = "addModNameToIngredientTooltip", at = @At("HEAD"), remap = false) - public void addTooltip(List tooltip, Object ingredient, IIngredientHelper ingredientHelper, CallbackInfoReturnable> cir) { - if (ingredient instanceof FluidStack) { - List formula = FluidTooltipUtil.getFluidTooltip((FluidStack) ingredient); - if (formula != null) { - for (String s : formula) { - if (s.isEmpty()) continue; - tooltip.add(s); - } - } - } - }*/ + /* + * @Inject(method = "addModNameToIngredientTooltip", at = @At("HEAD"), remap = false) + * public void addTooltip(List tooltip, Object ingredient, IIngredientHelper ingredientHelper, + * CallbackInfoReturnable> cir) { + * 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/mixins/littletiles/LittleTilesRenderMangerMixin.java b/src/main/java/gregtech/mixins/littletiles/LittleTilesRenderMangerMixin.java index 1d2ccd2c205..8ce0cf112c0 100644 --- a/src/main/java/gregtech/mixins/littletiles/LittleTilesRenderMangerMixin.java +++ b/src/main/java/gregtech/mixins/littletiles/LittleTilesRenderMangerMixin.java @@ -1,9 +1,10 @@ package gregtech.mixins.littletiles; +import gregtech.asm.hooks.LittleTilesHooks; + import com.creativemd.littletiles.client.render.cache.LayeredRenderBoxCache; import com.creativemd.littletiles.client.render.world.TileEntityRenderManager; import com.creativemd.littletiles.common.tileentity.TileEntityLittleTiles; -import gregtech.asm.hooks.LittleTilesHooks; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Mutable; diff --git a/src/main/java/gregtech/mixins/minecraft/BlockConcretePowderMixin.java b/src/main/java/gregtech/mixins/minecraft/BlockConcretePowderMixin.java index fdd447e2da7..4106a70e1c1 100644 --- a/src/main/java/gregtech/mixins/minecraft/BlockConcretePowderMixin.java +++ b/src/main/java/gregtech/mixins/minecraft/BlockConcretePowderMixin.java @@ -1,10 +1,12 @@ package gregtech.mixins.minecraft; import gregtech.common.ConfigHolder; + import net.minecraft.block.BlockConcretePowder; import net.minecraft.block.state.IBlockState; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; + import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; diff --git a/src/main/java/gregtech/mixins/minecraft/BlockMixin.java b/src/main/java/gregtech/mixins/minecraft/BlockMixin.java index 9477b7c72db..fc204362fbb 100644 --- a/src/main/java/gregtech/mixins/minecraft/BlockMixin.java +++ b/src/main/java/gregtech/mixins/minecraft/BlockMixin.java @@ -2,10 +2,12 @@ import gregtech.api.GTValues; import gregtech.asm.hooks.BlockHooks; + import net.minecraft.block.Block; import net.minecraft.block.state.IBlockState; import net.minecraft.util.BlockRenderLayer; import net.minecraftforge.fml.common.Loader; + import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; diff --git a/src/main/java/gregtech/mixins/minecraft/DamageSourceMixin.java b/src/main/java/gregtech/mixins/minecraft/DamageSourceMixin.java index b9aa1ab5675..ceb35789f39 100644 --- a/src/main/java/gregtech/mixins/minecraft/DamageSourceMixin.java +++ b/src/main/java/gregtech/mixins/minecraft/DamageSourceMixin.java @@ -1,15 +1,16 @@ package gregtech.mixins.minecraft; - -import com.llamalad7.mixinextras.injector.ModifyReturnValue; import gregtech.api.damagesources.DamageSourceTool; import gregtech.api.items.toolitem.IGTTool; + import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.EntityEquipmentSlot; import net.minecraft.item.ItemStack; import net.minecraft.util.DamageSource; import net.minecraft.util.EntityDamageSource; + +import com.llamalad7.mixinextras.injector.ModifyReturnValue; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; @@ -33,6 +34,5 @@ private static DamageSource modifyMobDamageWithTool(DamageSource originalReturnV return new DamageSourceTool("mob", source, String.format("death.attack.%s", tool.getToolId())); } return new EntityDamageSource("mob", source); - } } diff --git a/src/main/java/gregtech/mixins/minecraft/LayerArmorBaseMixin.java b/src/main/java/gregtech/mixins/minecraft/LayerArmorBaseMixin.java index 3b22761f315..7363d82d575 100644 --- a/src/main/java/gregtech/mixins/minecraft/LayerArmorBaseMixin.java +++ b/src/main/java/gregtech/mixins/minecraft/LayerArmorBaseMixin.java @@ -1,6 +1,7 @@ package gregtech.mixins.minecraft; import gregtech.api.items.armor.IArmorItem; + import net.minecraft.client.model.ModelBase; import net.minecraft.client.model.ModelBiped; import net.minecraft.client.renderer.GlStateManager; @@ -10,6 +11,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.util.ResourceLocation; import net.minecraftforge.client.ForgeHooksClient; + import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Unique; import org.spongepowered.asm.mixin.injection.At; @@ -20,15 +22,19 @@ public class LayerArmorBaseMixin { @Inject(method = "renderArmorLayer", at = @At("TAIL")) - public void renderGTArmor(EntityLivingBase entityLivingBaseIn, float limbSwing, float limbSwingAmount, float partialTicks, float ageInTicks, float netHeadYaw, float headPitch, float scale, EntityEquipmentSlot slotIn, CallbackInfo ci) { + public void renderGTArmor(EntityLivingBase entityLivingBaseIn, float limbSwing, float limbSwingAmount, + float partialTicks, float ageInTicks, float netHeadYaw, float headPitch, float scale, + EntityEquipmentSlot slotIn, CallbackInfo ci) { ItemStack itemStack = entityLivingBaseIn.getItemStackFromSlot(slotIn); - if ((itemStack.getItem() instanceof IArmorItem armorItem && itemStack.getItem().getEquipmentSlot(itemStack) == slotIn)) { + if ((itemStack.getItem() instanceof IArmorItem armorItem && + itemStack.getItem().getEquipmentSlot(itemStack) == slotIn)) { @SuppressWarnings("unchecked") LayerArmorBase layer = (LayerArmorBase) (Object) this; ModelBase armorModel = layer.getModelFromSlot(slotIn); if (armorModel instanceof ModelBiped) { - armorModel = ForgeHooksClient.getArmorModel(entityLivingBaseIn, itemStack, slotIn, (ModelBiped) armorModel); + armorModel = ForgeHooksClient.getArmorModel(entityLivingBaseIn, itemStack, slotIn, + (ModelBiped) armorModel); } armorModel.setModelAttributes(layer.renderer.getMainModel()); armorModel.setLivingAnimations(entityLivingBaseIn, limbSwing, limbSwingAmount, partialTicks); @@ -46,22 +52,27 @@ public void renderGTArmor(EntityLivingBase entityLivingBaseIn, float limbSwing, GlStateManager.color(f, f1, f2, 1.0f); String type = layerIndex == 0 ? null : "layer_" + layerIndex; layer.renderer.bindTexture(gregTechCEu$getArmorTexture(entityLivingBaseIn, itemStack, slotIn, type)); - armorModel.render(entityLivingBaseIn, limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch, scale); + armorModel.render(entityLivingBaseIn, limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch, + scale); } if (itemStack.hasEffect()) { - LayerArmorBase.renderEnchantedGlint(layer.renderer, entityLivingBaseIn, armorModel, limbSwing, limbSwingAmount, partialTicks, ageInTicks, netHeadYaw, headPitch, scale); + LayerArmorBase.renderEnchantedGlint(layer.renderer, entityLivingBaseIn, armorModel, limbSwing, + limbSwingAmount, partialTicks, ageInTicks, netHeadYaw, headPitch, scale); } } } @Unique - private static ResourceLocation gregTechCEu$getArmorTexture(EntityLivingBase entity, ItemStack itemStack, EntityEquipmentSlot slot, String type) { + private static ResourceLocation gregTechCEu$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"); + 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(), + String s1 = String.format("%s:textures/models/armor/%s_layer_%d%s.png", registryName.getNamespace(), + registryName.getPath(), (slot == EntityEquipmentSlot.LEGS ? 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/mixins/minecraft/LayerCustomHeadMixin.java b/src/main/java/gregtech/mixins/minecraft/LayerCustomHeadMixin.java index 8e458ab63f9..d6f69a7d3bb 100644 --- a/src/main/java/gregtech/mixins/minecraft/LayerCustomHeadMixin.java +++ b/src/main/java/gregtech/mixins/minecraft/LayerCustomHeadMixin.java @@ -1,14 +1,16 @@ package gregtech.mixins.minecraft; -import com.llamalad7.mixinextras.injector.wrapoperation.Operation; -import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; import gregtech.api.items.armor.IArmorItem; + import net.minecraft.client.renderer.ItemRenderer; import net.minecraft.client.renderer.block.model.ItemCameraTransforms; import net.minecraft.client.renderer.entity.layers.LayerCustomHead; import net.minecraft.entity.EntityLivingBase; import net.minecraft.inventory.EntityEquipmentSlot; import net.minecraft.item.ItemStack; + +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; +import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Unique; import org.spongepowered.asm.mixin.injection.At; @@ -16,9 +18,11 @@ @Mixin(LayerCustomHead.class) public class LayerCustomHeadMixin { - @WrapOperation(method = "doRenderLayer", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/ItemRenderer;renderItem(Lnet/minecraft/entity/EntityLivingBase;Lnet/minecraft/item/ItemStack;Lnet/minecraft/client/renderer/block/model/ItemCameraTransforms$TransformType;)V")) - public void shouldNotRenderHead(ItemRenderer instance, EntityLivingBase entitylivingbaseIn, ItemStack itemstack, ItemCameraTransforms.TransformType transformType, Operation original) { - + @WrapOperation(method = "doRenderLayer", + at = @At(value = "INVOKE", + target = "Lnet/minecraft/client/renderer/ItemRenderer;renderItem(Lnet/minecraft/entity/EntityLivingBase;Lnet/minecraft/item/ItemStack;Lnet/minecraft/client/renderer/block/model/ItemCameraTransforms$TransformType;)V")) + public void shouldNotRenderHead(ItemRenderer instance, EntityLivingBase entitylivingbaseIn, ItemStack itemstack, + ItemCameraTransforms.TransformType transformType, Operation original) { if (gregTechCEu$shouldNotRenderHeadItem(entitylivingbaseIn)) { return; } @@ -28,6 +32,7 @@ public void shouldNotRenderHead(ItemRenderer instance, EntityLivingBase entityli @Unique private static boolean gregTechCEu$shouldNotRenderHeadItem(EntityLivingBase entityLivingBase) { ItemStack itemStack = entityLivingBase.getItemStackFromSlot(EntityEquipmentSlot.HEAD); - return (itemStack.getItem() instanceof IArmorItem && itemStack.getItem().getEquipmentSlot(itemStack) == EntityEquipmentSlot.HEAD); + return (itemStack.getItem() instanceof IArmorItem && + itemStack.getItem().getEquipmentSlot(itemStack) == EntityEquipmentSlot.HEAD); } } diff --git a/src/main/java/gregtech/mixins/minecraft/MinecraftMixin.java b/src/main/java/gregtech/mixins/minecraft/MinecraftMixin.java index a3ab2fa8f7a..31ada3545f0 100644 --- a/src/main/java/gregtech/mixins/minecraft/MinecraftMixin.java +++ b/src/main/java/gregtech/mixins/minecraft/MinecraftMixin.java @@ -2,6 +2,7 @@ import net.minecraft.client.Minecraft; import net.minecraft.util.text.TextComponentTranslation; + import org.lwjgl.input.Keyboard; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; diff --git a/src/main/java/gregtech/mixins/minecraft/RecipeRepairItemMixin.java b/src/main/java/gregtech/mixins/minecraft/RecipeRepairItemMixin.java index d4260fb8fa0..dfdfb8d2c67 100644 --- a/src/main/java/gregtech/mixins/minecraft/RecipeRepairItemMixin.java +++ b/src/main/java/gregtech/mixins/minecraft/RecipeRepairItemMixin.java @@ -1,10 +1,8 @@ package gregtech.mixins.minecraft; -import com.llamalad7.mixinextras.sugar.Local; -import com.llamalad7.mixinextras.sugar.ref.LocalIntRef; -import com.llamalad7.mixinextras.sugar.ref.LocalRef; 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.item.crafting.RecipeRepairItem; @@ -13,6 +11,10 @@ import net.minecraft.world.World; import net.minecraftforge.common.ForgeHooks; import net.minecraftforge.event.ForgeEventFactory; + +import com.llamalad7.mixinextras.sugar.Local; +import com.llamalad7.mixinextras.sugar.ref.LocalIntRef; +import com.llamalad7.mixinextras.sugar.ref.LocalRef; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Overwrite; import org.spongepowered.asm.mixin.injection.At; @@ -23,10 +25,13 @@ public class RecipeRepairItemMixin { @Inject(method = "matches(Lnet/minecraft/inventory/InventoryCrafting;Lnet/minecraft/world/World;)Z", - at = @At(value = "INVOKE_ASSIGN", target = "Ljava/util/List;get(I)Ljava/lang/Object;"), cancellable = true) + at = @At(value = "INVOKE_ASSIGN", target = "Ljava/util/List;get(I)Ljava/lang/Object;"), + cancellable = true) public void gregtechCEu$matches(InventoryCrafting inv, World worldIn, CallbackInfoReturnable cir, - @Local LocalRef itemstack, @Local LocalRef itemstack1) { - if (itemstack.get().getItem() instanceof IGTTool first && itemstack1.get().getItem() instanceof IGTTool second) { + @Local LocalRef itemstack, @Local LocalRef itemstack1) { + + if (itemstack.get().getItem() instanceof IGTTool first && + itemstack1.get().getItem() instanceof IGTTool second) { if (first.isElectric() || second.isElectric()) { cir.setReturnValue(false); } else { @@ -36,9 +41,11 @@ public class RecipeRepairItemMixin { } @Inject(method = "getCraftingResult(Lnet/minecraft/inventory/InventoryCrafting;)Lnet/minecraft/item/ItemStack;", - at = @At(value = "INVOKE_ASSIGN", target = "Ljava/util/List;get(I)Ljava/lang/Object;", ordinal = 0), cancellable = true) + at = @At(value = "INVOKE_ASSIGN", target = "Ljava/util/List;get(I)Ljava/lang/Object;", ordinal = 0), + cancellable = true) public void gregtechCEu$getCraftingResultFirst(InventoryCrafting inv, CallbackInfoReturnable cir, - @Local(ordinal = 0) LocalRef itemstack, @Local(ordinal = 1) LocalRef itemstack1) { + @Local(ordinal = 0) LocalRef itemstack, + @Local(ordinal = 1) LocalRef itemstack1) { if (itemstack.get().getItem() instanceof IGTTool tool && tool.isElectric()) { cir.setReturnValue(ItemStack.EMPTY); } else if (itemstack1.get().getItem() instanceof IGTTool tool && tool.isElectric()) { @@ -47,10 +54,12 @@ public class RecipeRepairItemMixin { } @Inject(method = "getCraftingResult(Lnet/minecraft/inventory/InventoryCrafting;)Lnet/minecraft/item/ItemStack;", - at = @At(value = "RETURN", ordinal = 1), cancellable = true) + at = @At(value = "RETURN", ordinal = 1), + cancellable = true) public void gregtechCEu$getCraftingResultSecond(InventoryCrafting inv, CallbackInfoReturnable cir, - @Local(ordinal = 4) LocalIntRef i1, @Local(ordinal = 2) LocalRef itemstack2, - @Local(ordinal = 3) LocalRef itemstack3) { + @Local(ordinal = 4) LocalIntRef i1, + @Local(ordinal = 2) LocalRef itemstack2, + @Local(ordinal = 3) LocalRef itemstack3) { if (itemstack2.get().getItem() instanceof IGTTool first && itemstack3.get().getItem() instanceof IGTTool) { // do not allow repairing tools if both are full durability if (itemstack2.get().getItemDamage() == 0 && itemstack3.get().getItemDamage() == 0) { diff --git a/src/main/java/gregtech/mixins/minecraft/RegionRenderCacheBuilderMixin.java b/src/main/java/gregtech/mixins/minecraft/RegionRenderCacheBuilderMixin.java index db7caf47646..dd080b2f912 100644 --- a/src/main/java/gregtech/mixins/minecraft/RegionRenderCacheBuilderMixin.java +++ b/src/main/java/gregtech/mixins/minecraft/RegionRenderCacheBuilderMixin.java @@ -1,8 +1,10 @@ package gregtech.mixins.minecraft; import gregtech.client.utils.BloomEffectUtil; + import net.minecraft.client.renderer.BufferBuilder; import net.minecraft.client.renderer.RegionRenderCacheBuilder; + import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; diff --git a/src/main/java/gregtech/mixins/minecraft/RenderChunkMixin.java b/src/main/java/gregtech/mixins/minecraft/RenderChunkMixin.java index a808da719bb..437b6e3c70d 100644 --- a/src/main/java/gregtech/mixins/minecraft/RenderChunkMixin.java +++ b/src/main/java/gregtech/mixins/minecraft/RenderChunkMixin.java @@ -1,21 +1,27 @@ package gregtech.mixins.minecraft; -import com.llamalad7.mixinextras.injector.ModifyExpressionValue; import gregtech.api.metatileentity.MetaTileEntityHolder; + import net.minecraft.client.renderer.chunk.RenderChunk; import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; import net.minecraft.tileentity.TileEntity; + +import com.llamalad7.mixinextras.injector.ModifyExpressionValue; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import javax.annotation.Nullable; -//TODO, error in log +// TODO, error in log @Mixin(RenderChunk.class) public class RenderChunkMixin { - @ModifyExpressionValue(method = "rebuildChunk", at = @At(value = "INVOKE_ASSIGN", target = "Lnet/minecraft/client/renderer/tileentity/TileEntityRendererDispatcher;getRenderer(Lnet/minecraft/tileentity/TileEntity;)Lnet/minecraft/client/renderer/tileentity/TileEntitySpecialRenderer;")) - public TileEntitySpecialRenderer adjustMTERenderer(TileEntitySpecialRenderer originalRenderer, @Nullable TileEntity tileEntityIn) { + @ModifyExpressionValue(method = "rebuildChunk", + at = @At(value = "INVOKE_ASSIGN", + target = "Lnet/minecraft/client/renderer/tileentity/TileEntityRendererDispatcher;getRenderer(Lnet/minecraft/tileentity/TileEntity;)Lnet/minecraft/client/renderer/tileentity/TileEntitySpecialRenderer;")) + public TileEntitySpecialRenderer adjustMTERenderer( + TileEntitySpecialRenderer originalRenderer, + @Nullable TileEntity tileEntityIn) { // TODO, adjust when implementing second part of IGregTileEntity if (tileEntityIn instanceof MetaTileEntityHolder && !((MetaTileEntityHolder) tileEntityIn).hasTESR()) { return null; diff --git a/src/main/java/gregtech/mixins/minecraft/RenderGlobalMixin.java b/src/main/java/gregtech/mixins/minecraft/RenderGlobalMixin.java index 068c1a579ad..1a12dcb82d0 100644 --- a/src/main/java/gregtech/mixins/minecraft/RenderGlobalMixin.java +++ b/src/main/java/gregtech/mixins/minecraft/RenderGlobalMixin.java @@ -3,12 +3,14 @@ import gregtech.api.items.metaitem.MetaItem; import gregtech.api.items.metaitem.MusicDiscStats; import gregtech.api.items.metaitem.stats.IItemBehaviour; + import net.minecraft.client.Minecraft; import net.minecraft.client.multiplayer.WorldClient; import net.minecraft.client.renderer.RenderGlobal; import net.minecraft.client.resources.I18n; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.util.math.BlockPos; + import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; diff --git a/src/main/java/gregtech/mixins/minecraft/RenderItemMixin.java b/src/main/java/gregtech/mixins/minecraft/RenderItemMixin.java index 87d966a7cd6..2ef94bb6ec5 100644 --- a/src/main/java/gregtech/mixins/minecraft/RenderItemMixin.java +++ b/src/main/java/gregtech/mixins/minecraft/RenderItemMixin.java @@ -1,9 +1,11 @@ package gregtech.mixins.minecraft; import gregtech.asm.hooks.RenderItemHooks; + import net.minecraft.client.gui.FontRenderer; import net.minecraft.client.renderer.RenderItem; import net.minecraft.item.ItemStack; + import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; @@ -14,7 +16,8 @@ public class RenderItemMixin { // The easy part of translating the item render stuff @Inject(method = "renderItemOverlayIntoGUI", at = @At(value = "HEAD")) - private void renderItemOverlayIntoGUIInject(FontRenderer fr, ItemStack stack, int xPosition, int yPosition, String text, CallbackInfo ci) { + private void renderItemOverlayIntoGUIInject(FontRenderer fr, ItemStack stack, int xPosition, int yPosition, + String text, CallbackInfo ci) { if (!stack.isEmpty()) { RenderItemHooks.renderLampOverlay(stack, xPosition, yPosition); } diff --git a/src/main/java/gregtech/mixins/theoneprobe/TheOneProbeMixin.java b/src/main/java/gregtech/mixins/theoneprobe/TheOneProbeMixin.java index 8597c029f94..90788a7cc2b 100644 --- a/src/main/java/gregtech/mixins/theoneprobe/TheOneProbeMixin.java +++ b/src/main/java/gregtech/mixins/theoneprobe/TheOneProbeMixin.java @@ -1,9 +1,7 @@ package gregtech.mixins.theoneprobe; -import com.llamalad7.mixinextras.injector.ModifyExpressionValue; import gregtech.api.block.machines.BlockMachine; -import mcjty.theoneprobe.api.ProbeMode; -import mcjty.theoneprobe.network.PacketGetInfo; + import net.minecraft.block.state.IBlockState; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; @@ -11,16 +9,24 @@ import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Vec3d; import net.minecraft.world.World; + +import com.llamalad7.mixinextras.injector.ModifyExpressionValue; +import mcjty.theoneprobe.api.ProbeMode; +import mcjty.theoneprobe.network.PacketGetInfo; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; // TODO, unsure if we actually need this one @Mixin(PacketGetInfo.class) -@SuppressWarnings({"unused", "deprecation"}) +@SuppressWarnings({ "unused", "deprecation" }) public class TheOneProbeMixin { - @ModifyExpressionValue(method = "getProbeInfo", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/World;getBlockState(Lnet/minecraft/util/math/BlockPos;)Lnet/minecraft/block/state/IBlockState;")) - private static IBlockState getActualState(IBlockState originalState, EntityPlayer player, ProbeMode mode, World world, BlockPos blockPos, EnumFacing sideHit, Vec3d hitVec, ItemStack pickBlock) { + @ModifyExpressionValue(method = "getProbeInfo", + at = @At(value = "INVOKE", + target = "Lnet/minecraft/world/World;getBlockState(Lnet/minecraft/util/math/BlockPos;)Lnet/minecraft/block/state/IBlockState;")) + private static IBlockState getActualState(IBlockState originalState, EntityPlayer player, ProbeMode mode, + World world, BlockPos blockPos, EnumFacing sideHit, Vec3d hitVec, + ItemStack pickBlock) { IBlockState modifiedState = world.getBlockState(blockPos); if (modifiedState.getBlock() instanceof BlockMachine) { return modifiedState.getBlock().getActualState(modifiedState, world, blockPos); From 67b0f1b26f98d8841132d2072892f8dd35d921bb Mon Sep 17 00:00:00 2001 From: alongstringofnumbers Date: Wed, 29 Nov 2023 18:59:14 -0700 Subject: [PATCH 13/46] 1 spotless isn't enough apparently --- .../java/gregtech/mixins/minecraft/RecipeRepairItemMixin.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/gregtech/mixins/minecraft/RecipeRepairItemMixin.java b/src/main/java/gregtech/mixins/minecraft/RecipeRepairItemMixin.java index dfdfb8d2c67..783b5282da2 100644 --- a/src/main/java/gregtech/mixins/minecraft/RecipeRepairItemMixin.java +++ b/src/main/java/gregtech/mixins/minecraft/RecipeRepairItemMixin.java @@ -29,7 +29,6 @@ public class RecipeRepairItemMixin { cancellable = true) public void gregtechCEu$matches(InventoryCrafting inv, World worldIn, CallbackInfoReturnable cir, @Local LocalRef itemstack, @Local LocalRef itemstack1) { - if (itemstack.get().getItem() instanceof IGTTool first && itemstack1.get().getItem() instanceof IGTTool second) { if (first.isElectric() || second.isElectric()) { From 7e99118d1c18bae599bf840b4239145aed0d01de Mon Sep 17 00:00:00 2001 From: alongstringofnumbers Date: Wed, 29 Nov 2023 21:57:52 -0700 Subject: [PATCH 14/46] another one down --- .../gregtech/asm/GregTechTransformer.java | 17 +++++------ .../LittleTilesRenderMangerMixin.java | 2 +- .../mixins/minecraft/EntityRendererMixin.java | 28 +++++++++++++++++++ .../resources/mixins.gregtech.minecraft.json | 1 + 4 files changed, 39 insertions(+), 9 deletions(-) create mode 100644 src/main/java/gregtech/mixins/minecraft/EntityRendererMixin.java diff --git a/src/main/java/gregtech/asm/GregTechTransformer.java b/src/main/java/gregtech/asm/GregTechTransformer.java index 0849e7a0cfd..f0ebc0c58b7 100644 --- a/src/main/java/gregtech/asm/GregTechTransformer.java +++ b/src/main/java/gregtech/asm/GregTechTransformer.java @@ -4,7 +4,6 @@ import gregtech.asm.util.TargetClassVisitor; import gregtech.asm.visitors.AbstractCTMBakedModelVisitor; import gregtech.asm.visitors.EnchantmentCanApplyVisitor; -import gregtech.asm.visitors.EntityRendererVisitor; import gregtech.asm.visitors.JEIVisitor; import gregtech.asm.visitors.LittleTilesVisitor; import gregtech.asm.visitors.ModelCTMVisitor; @@ -90,13 +89,15 @@ public byte[] transform(String name, String transformedName, byte[] basicClass) * 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 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 { diff --git a/src/main/java/gregtech/mixins/littletiles/LittleTilesRenderMangerMixin.java b/src/main/java/gregtech/mixins/littletiles/LittleTilesRenderMangerMixin.java index 8ce0cf112c0..a1f27525743 100644 --- a/src/main/java/gregtech/mixins/littletiles/LittleTilesRenderMangerMixin.java +++ b/src/main/java/gregtech/mixins/littletiles/LittleTilesRenderMangerMixin.java @@ -15,7 +15,7 @@ // TODO, I am not quite sure if this matches with what the ASM was actually doing // TODO, transition to using the direct path method, and remove the dependency on LittleTiles -@Mixin(TileEntityRenderManager.class) +@Mixin(value = TileEntityRenderManager.class, remap = false) public class LittleTilesRenderMangerMixin { @Mutable diff --git a/src/main/java/gregtech/mixins/minecraft/EntityRendererMixin.java b/src/main/java/gregtech/mixins/minecraft/EntityRendererMixin.java new file mode 100644 index 00000000000..c8ef3ca4bdc --- /dev/null +++ b/src/main/java/gregtech/mixins/minecraft/EntityRendererMixin.java @@ -0,0 +1,28 @@ +package gregtech.mixins.minecraft; + +import gregtech.client.utils.BloomEffectUtil; + +import net.minecraft.client.renderer.EntityRenderer; +import net.minecraft.client.renderer.RenderGlobal; +import net.minecraft.entity.Entity; +import net.minecraft.util.BlockRenderLayer; + +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; +import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; + +@Mixin(EntityRenderer.class) +public class EntityRendererMixin { + + @WrapOperation(method = "renderWorldPass", + at = @At(value = "INVOKE", + target = "Lnet/minecraft/client/renderer/RenderGlobal;renderBlockLayer(Lnet/minecraft/util/BlockRenderLayer;DILnet/minecraft/entity/Entity;)I", + ordinal = 3)) + public int renderBloomBlockLayer(RenderGlobal instance, BlockRenderLayer layer, double partialTicks, int pass, + Entity entity, Operation original) { + + return BloomEffectUtil.renderBloomBlockLayer(instance, layer, partialTicks, pass, entity); + } + +} diff --git a/src/main/resources/mixins.gregtech.minecraft.json b/src/main/resources/mixins.gregtech.minecraft.json index 85f46b372c9..730a6d37b50 100644 --- a/src/main/resources/mixins.gregtech.minecraft.json +++ b/src/main/resources/mixins.gregtech.minecraft.json @@ -11,6 +11,7 @@ ], "client": [ "BlockMixin", + "EntityRendererMixin", "LayerArmorBaseMixin", "LayerCustomHeadMixin", "RecipeRepairItemMixin", From 385deaa74211bfacc2927bb87b91853d9dbb1708 Mon Sep 17 00:00:00 2001 From: serenibyss <10861407+serenibyss@users.noreply.github.com> Date: Sun, 3 Dec 2023 23:10:17 -0600 Subject: [PATCH 15/46] spotless --- .../java/gregtech/mixins/minecraft/EntityRendererMixin.java | 2 -- src/main/java/gregtech/mixins/minecraft/RenderChunkMixin.java | 4 ++-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/src/main/java/gregtech/mixins/minecraft/EntityRendererMixin.java b/src/main/java/gregtech/mixins/minecraft/EntityRendererMixin.java index c8ef3ca4bdc..472f1d98c45 100644 --- a/src/main/java/gregtech/mixins/minecraft/EntityRendererMixin.java +++ b/src/main/java/gregtech/mixins/minecraft/EntityRendererMixin.java @@ -21,8 +21,6 @@ public class EntityRendererMixin { ordinal = 3)) public int renderBloomBlockLayer(RenderGlobal instance, BlockRenderLayer layer, double partialTicks, int pass, Entity entity, Operation original) { - return BloomEffectUtil.renderBloomBlockLayer(instance, layer, partialTicks, pass, entity); } - } diff --git a/src/main/java/gregtech/mixins/minecraft/RenderChunkMixin.java b/src/main/java/gregtech/mixins/minecraft/RenderChunkMixin.java index 437b6e3c70d..75c6c494663 100644 --- a/src/main/java/gregtech/mixins/minecraft/RenderChunkMixin.java +++ b/src/main/java/gregtech/mixins/minecraft/RenderChunkMixin.java @@ -20,8 +20,8 @@ public class RenderChunkMixin { at = @At(value = "INVOKE_ASSIGN", target = "Lnet/minecraft/client/renderer/tileentity/TileEntityRendererDispatcher;getRenderer(Lnet/minecraft/tileentity/TileEntity;)Lnet/minecraft/client/renderer/tileentity/TileEntitySpecialRenderer;")) public TileEntitySpecialRenderer adjustMTERenderer( - TileEntitySpecialRenderer originalRenderer, - @Nullable TileEntity tileEntityIn) { + TileEntitySpecialRenderer originalRenderer, + @Nullable TileEntity tileEntityIn) { // TODO, adjust when implementing second part of IGregTileEntity if (tileEntityIn instanceof MetaTileEntityHolder && !((MetaTileEntityHolder) tileEntityIn).hasTESR()) { return null; From ef43ef315eb2f69cc71a2f46bb8b2dd73391f1a5 Mon Sep 17 00:00:00 2001 From: alongstringofnumbers Date: Mon, 4 Dec 2023 15:55:11 -0700 Subject: [PATCH 16/46] Rebase fixes --- addon.gradle | 7 +++++-- .../java/gregtech/mixins/minecraft/RenderChunkMixin.java | 3 +-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/addon.gradle b/addon.gradle index 4c6342bed07..5c26f20ab1d 100644 --- a/addon.gradle +++ b/addon.gradle @@ -1,15 +1,18 @@ minecraft { - // Include the dep string version for addons to use injectedTags.put('DEP_VERSION_STRING', "required-after:gregtech@[${modVersion},);") } configurations { - compileClassPath { + implementation { // exclude GNU trove, FastUtil is superior and still updated exclude group: "net.sf.trove4j", module: "trove4j" // exclude javax.annotation from findbugs, jetbrains annotations are superior exclude group: "com.google.code.findbugs", module: "jsr305" + // exclude scala as we don't use it for anything and causes import confusion + exclude group: "org.scala-lang" + exclude group: "org.scala-lang.modules" + exclude group: "org.scala-lang.plugins" } } diff --git a/src/main/java/gregtech/mixins/minecraft/RenderChunkMixin.java b/src/main/java/gregtech/mixins/minecraft/RenderChunkMixin.java index 75c6c494663..1977c49eeb0 100644 --- a/src/main/java/gregtech/mixins/minecraft/RenderChunkMixin.java +++ b/src/main/java/gregtech/mixins/minecraft/RenderChunkMixin.java @@ -7,11 +7,10 @@ import net.minecraft.tileentity.TileEntity; import com.llamalad7.mixinextras.injector.ModifyExpressionValue; +import org.jetbrains.annotations.Nullable; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; -import javax.annotation.Nullable; - // TODO, error in log @Mixin(RenderChunk.class) public class RenderChunkMixin { From 8a66b63c1390df2452df973c10f26b33444a7b4f Mon Sep 17 00:00:00 2001 From: alongstringofnumbers Date: Wed, 6 Dec 2023 21:06:37 -0700 Subject: [PATCH 17/46] Another one down --- .../java/gregtech/asm/GregTechTransformer.java | 7 +------ .../gregtech/mixins/minecraft/RenderItemMixin.java | 14 ++++++++++++++ 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/src/main/java/gregtech/asm/GregTechTransformer.java b/src/main/java/gregtech/asm/GregTechTransformer.java index f0ebc0c58b7..b3cd97dfff9 100644 --- a/src/main/java/gregtech/asm/GregTechTransformer.java +++ b/src/main/java/gregtech/asm/GregTechTransformer.java @@ -7,7 +7,6 @@ import gregtech.asm.visitors.JEIVisitor; import gregtech.asm.visitors.LittleTilesVisitor; import gregtech.asm.visitors.ModelCTMVisitor; -import gregtech.asm.visitors.RenderItemVisitor; import net.minecraft.launchwrapper.IClassTransformer; import net.minecraft.launchwrapper.Launch; @@ -15,10 +14,6 @@ import org.objectweb.asm.ClassReader; import org.objectweb.asm.ClassWriter; import org.objectweb.asm.Opcodes; -import org.objectweb.asm.tree.ClassNode; -import org.objectweb.asm.tree.MethodNode; - -import java.util.Iterator; public class GregTechTransformer implements IClassTransformer, Opcodes { @@ -160,7 +155,7 @@ public byte[] transform(String name, String transformedName, byte[] basicClass) ClassWriter classWriter = new ClassWriter(0); classNode.accept(classWriter); return classWriter.toByteArray(); - } + } */ /* * case RecipeRepairItemVisitor.TARGET_CLASS_NAME: { * ClassReader classReader = new ClassReader(basicClass); diff --git a/src/main/java/gregtech/mixins/minecraft/RenderItemMixin.java b/src/main/java/gregtech/mixins/minecraft/RenderItemMixin.java index 2ef94bb6ec5..6efc191b408 100644 --- a/src/main/java/gregtech/mixins/minecraft/RenderItemMixin.java +++ b/src/main/java/gregtech/mixins/minecraft/RenderItemMixin.java @@ -1,10 +1,12 @@ package gregtech.mixins.minecraft; +import gregtech.api.GTValues; import gregtech.asm.hooks.RenderItemHooks; import net.minecraft.client.gui.FontRenderer; import net.minecraft.client.renderer.RenderItem; import net.minecraft.item.ItemStack; +import net.minecraftforge.fml.common.Loader; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; @@ -22,4 +24,16 @@ private void renderItemOverlayIntoGUIInject(FontRenderer fr, ItemStack stack, in RenderItemHooks.renderLampOverlay(stack, xPosition, yPosition); } } + + @Inject(method = "renderItemOverlayIntoGUI", + at = @At(value = "INVOKE_ASSIGN", + target = "Lnet/minecraft/client/Minecraft;getMinecraft()Lnet/minecraft/client/Minecraft;", + shift = At.Shift.BEFORE, + ordinal = 0)) + public void showDurabilityBarMixin(FontRenderer fr, ItemStack stack, int xPosition, int yPosition, String text, + CallbackInfo ci) { + if (!Loader.isModLoaded(GTValues.MODID_ECORE)) { + RenderItemHooks.renderElectricBar(stack, xPosition, yPosition); + } + } } From c2426ff753ca73cd1210c7affbdacb42a6a7eee3 Mon Sep 17 00:00:00 2001 From: alongstringofnumbers Date: Wed, 13 Dec 2023 12:18:14 -0700 Subject: [PATCH 18/46] CTM mixins --- .../gregtech/asm/GregTechTransformer.java | 10 ++--- .../ctm/AbstractCTMBakedModelMixin.java | 30 ++++++++++++++ .../mixins/ctm/CTMRenderInLayerMixin.java | 40 ++++++++++--------- .../mixins/ctm/ModelCTMLayersAccessor.java | 12 ------ .../gregtech/mixins/jei/JEITooltipMixin.java | 39 +++++++++++------- src/main/resources/mixins.gregtech.ctm.json | 4 +- 6 files changed, 81 insertions(+), 54 deletions(-) create mode 100644 src/main/java/gregtech/mixins/ctm/AbstractCTMBakedModelMixin.java delete mode 100644 src/main/java/gregtech/mixins/ctm/ModelCTMLayersAccessor.java diff --git a/src/main/java/gregtech/asm/GregTechTransformer.java b/src/main/java/gregtech/asm/GregTechTransformer.java index b3cd97dfff9..74956c8a37d 100644 --- a/src/main/java/gregtech/asm/GregTechTransformer.java +++ b/src/main/java/gregtech/asm/GregTechTransformer.java @@ -2,11 +2,9 @@ import gregtech.asm.util.ObfMapping; import gregtech.asm.util.TargetClassVisitor; -import gregtech.asm.visitors.AbstractCTMBakedModelVisitor; import gregtech.asm.visitors.EnchantmentCanApplyVisitor; import gregtech.asm.visitors.JEIVisitor; import gregtech.asm.visitors.LittleTilesVisitor; -import gregtech.asm.visitors.ModelCTMVisitor; import net.minecraft.launchwrapper.IClassTransformer; import net.minecraft.launchwrapper.Launch; @@ -118,20 +116,20 @@ public byte[] transform(String name, String transformedName, byte[] basicClass) * return classWriter.toByteArray(); * } */ - case ModelCTMVisitor.TARGET_CLASS_NAME: { + /*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: { + } */ + /* 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); diff --git a/src/main/java/gregtech/mixins/ctm/AbstractCTMBakedModelMixin.java b/src/main/java/gregtech/mixins/ctm/AbstractCTMBakedModelMixin.java new file mode 100644 index 00000000000..b1c614244e3 --- /dev/null +++ b/src/main/java/gregtech/mixins/ctm/AbstractCTMBakedModelMixin.java @@ -0,0 +1,30 @@ +package gregtech.mixins.ctm; + +import gregtech.asm.hooks.CTMHooks; + +import net.minecraft.block.state.IBlockState; +import net.minecraft.client.renderer.block.model.BakedQuad; +import net.minecraft.client.renderer.block.model.IBakedModel; +import net.minecraft.util.BlockRenderLayer; +import net.minecraft.util.EnumFacing; + +import com.llamalad7.mixinextras.sugar.Local; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; +import team.chisel.ctm.client.model.AbstractCTMBakedModel; + +import java.util.List; + +//TODO, I don't think this works. Might need to wrap the return for the list of quads +@Mixin(AbstractCTMBakedModel.class) +public class AbstractCTMBakedModelMixin { + + @Inject(method = "getQuads", at = @At(value = "TAIL"), remap = false) + public void getQuadsWithOptifine(IBlockState state, EnumFacing side, long rand, + CallbackInfoReturnable> cir, @Local BlockRenderLayer layer, + @Local Object ret) { + CTMHooks.getQuadsWithOptiFine((List) ret, layer, (IBakedModel) this, state, side, rand); + } +} diff --git a/src/main/java/gregtech/mixins/ctm/CTMRenderInLayerMixin.java b/src/main/java/gregtech/mixins/ctm/CTMRenderInLayerMixin.java index 3927d9e4da4..0cfa303c576 100644 --- a/src/main/java/gregtech/mixins/ctm/CTMRenderInLayerMixin.java +++ b/src/main/java/gregtech/mixins/ctm/CTMRenderInLayerMixin.java @@ -1,28 +1,30 @@ package gregtech.mixins.ctm; +import gregtech.asm.hooks.CTMModHooks; + +import net.minecraft.block.state.IBlockState; +import net.minecraft.client.renderer.block.model.IBakedModel; +import net.minecraft.util.BlockRenderLayer; + +import com.llamalad7.mixinextras.injector.ModifyExpressionValue; +import com.llamalad7.mixinextras.sugar.Local; +import org.jetbrains.annotations.NotNull; import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; import team.chisel.ctm.client.asm.CTMCoreMethods; +import team.chisel.ctm.client.model.AbstractCTMBakedModel; @Mixin(CTMCoreMethods.class) public class CTMRenderInLayerMixin { - /* - * @ModifyExpressionValue(method = "canRenderInLayer", at = @At(value = "INVOKE_ASSIGN", target = - * "Lteam/chisel/ctm/api/model/IModelCTM;canRenderInLayer(Lnet/minecraft/block/state/IBlockState;Lnet/minecraft/util/BlockRenderLayer;)Z" - * ), remap = false) - * private static boolean renderInLayer(boolean originalResult, @Nonnull IBlockState state, @Nonnull - * BlockRenderLayer layer) { - * - * byte layers = ((ModelCTMLayersAccessor) ModelCTM.getInstance()).getLayers(); - * if (model instanceof ModelCTM && layers != null) { - * try { - * return CTMHooks.checkLayerWithOptiFine(originalResult, layers.getByte(model), layer); - * } catch (Exception ignored) { - * layers = null; - * GTLog.logger.error("CTMModHooks Field error"); - * } - * } - * return originalResult; - * } - */ + @ModifyExpressionValue(method = "canRenderInLayer", + at = @At(value = "INVOKE_ASSIGN", + target = "Lteam/chisel/ctm/api/model/IModelCTM;canRenderInLayer(Lnet/minecraft/block/state/IBlockState;Lnet/minecraft/util/BlockRenderLayer;)Z" + ), + remap = false) + private static Boolean checkRenderInLayer(Boolean originalResult, @NotNull IBlockState state, @NotNull + BlockRenderLayer layer, @Local IBakedModel model) { + return CTMModHooks.canRenderInLayer(((AbstractCTMBakedModel) model).getModel(), state, layer); + } + } diff --git a/src/main/java/gregtech/mixins/ctm/ModelCTMLayersAccessor.java b/src/main/java/gregtech/mixins/ctm/ModelCTMLayersAccessor.java deleted file mode 100644 index ec3a21c4a1f..00000000000 --- a/src/main/java/gregtech/mixins/ctm/ModelCTMLayersAccessor.java +++ /dev/null @@ -1,12 +0,0 @@ -package gregtech.mixins.ctm; - -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.gen.Accessor; -import team.chisel.ctm.client.model.ModelCTM; - -@Mixin(value = ModelCTM.class, remap = false) -public interface ModelCTMLayersAccessor { - - @Accessor("layers") - byte getLayers(); -} diff --git a/src/main/java/gregtech/mixins/jei/JEITooltipMixin.java b/src/main/java/gregtech/mixins/jei/JEITooltipMixin.java index 0151ef78373..7a0329e5a9f 100644 --- a/src/main/java/gregtech/mixins/jei/JEITooltipMixin.java +++ b/src/main/java/gregtech/mixins/jei/JEITooltipMixin.java @@ -1,25 +1,34 @@ package gregtech.mixins.jei; +import gregtech.api.util.FluidTooltipUtil; + +import net.minecraftforge.fluids.FluidStack; + +import mezz.jei.api.ingredients.IIngredientHelper; import mezz.jei.startup.ForgeModIdHelper; import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +import java.util.List; // TODO, Needs to apply to the fluid items in JEI @Mixin(ForgeModIdHelper.class) public class JEITooltipMixin { - /* - * @Inject(method = "addModNameToIngredientTooltip", at = @At("HEAD"), remap = false) - * public void addTooltip(List tooltip, Object ingredient, IIngredientHelper ingredientHelper, - * CallbackInfoReturnable> cir) { - * if (ingredient instanceof FluidStack) { - * List formula = FluidTooltipUtil.getFluidTooltip((FluidStack) ingredient); - * if (formula != null) { - * for (String s : formula) { - * if (s.isEmpty()) continue; - * tooltip.add(s); - * } - * } - * } - * } - */ + @Inject(method = "addModNameToIngredientTooltip", at = @At("HEAD"), remap = false) + public void addTooltip(List tooltip, Object ingredient, IIngredientHelper ingredientHelper, + CallbackInfoReturnable> cir) { + 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/resources/mixins.gregtech.ctm.json b/src/main/resources/mixins.gregtech.ctm.json index a3f1fdf937c..7e46fde66ab 100644 --- a/src/main/resources/mixins.gregtech.ctm.json +++ b/src/main/resources/mixins.gregtech.ctm.json @@ -5,8 +5,8 @@ "minVersion" : "0.8", "compatibilityLevel" : "JAVA_8", "mixins" : [ - "CTMRenderInLayerMixin", - "ModelCTMLayersAccessor" + "AbstractCTMBakedModelMixin", + "CTMRenderInLayerMixin" ], "client" : [], "server" : [] From fd06dfb998eedfabf519b8839c8fe1a8008bdfdb Mon Sep 17 00:00:00 2001 From: alongstringofnumbers Date: Wed, 13 Dec 2023 19:29:02 -0700 Subject: [PATCH 19/46] Fix RenderChunkMixin, needs verification --- .../mixins/minecraft/RenderChunkMixin.java | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/main/java/gregtech/mixins/minecraft/RenderChunkMixin.java b/src/main/java/gregtech/mixins/minecraft/RenderChunkMixin.java index 1977c49eeb0..2b00735e71a 100644 --- a/src/main/java/gregtech/mixins/minecraft/RenderChunkMixin.java +++ b/src/main/java/gregtech/mixins/minecraft/RenderChunkMixin.java @@ -3,28 +3,28 @@ import gregtech.api.metatileentity.MetaTileEntityHolder; import net.minecraft.client.renderer.chunk.RenderChunk; +import net.minecraft.client.renderer.tileentity.TileEntityRendererDispatcher; import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; import net.minecraft.tileentity.TileEntity; -import com.llamalad7.mixinextras.injector.ModifyExpressionValue; -import org.jetbrains.annotations.Nullable; +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; +import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; -// TODO, error in log @Mixin(RenderChunk.class) public class RenderChunkMixin { - @ModifyExpressionValue(method = "rebuildChunk", - at = @At(value = "INVOKE_ASSIGN", + @WrapOperation(method = "rebuildChunk", + at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/tileentity/TileEntityRendererDispatcher;getRenderer(Lnet/minecraft/tileentity/TileEntity;)Lnet/minecraft/client/renderer/tileentity/TileEntitySpecialRenderer;")) - public TileEntitySpecialRenderer adjustMTERenderer( - TileEntitySpecialRenderer originalRenderer, - @Nullable TileEntity tileEntityIn) { + public TileEntitySpecialRenderer adjustMTERenderer(TileEntityRendererDispatcher original, + TileEntity tileentity, + Operation> originalRenderer) { // TODO, adjust when implementing second part of IGregTileEntity - if (tileEntityIn instanceof MetaTileEntityHolder && !((MetaTileEntityHolder) tileEntityIn).hasTESR()) { + if (tileentity instanceof MetaTileEntityHolder && !((MetaTileEntityHolder) tileentity).hasTESR()) { return null; } - return originalRenderer; + return originalRenderer.call(original, tileentity); } } From 7b78eb38d0273a340c52a9f2e1718d409716fba1 Mon Sep 17 00:00:00 2001 From: alongstringofnumbers Date: Tue, 19 Dec 2023 16:56:26 -0700 Subject: [PATCH 20/46] Some cleanup --- .../littletiles/client/render/tile/LittleRenderBox.java | 5 ----- src/main/java/gregtech/api/GTValues.java | 3 ++- .../java/gregtech/mixins/GregTechLateMixinLoadingPlugin.java | 2 ++ .../mixins/littletiles/LittleTilesRenderMangerMixin.java | 1 - src/main/resources/mixins.gregtech.littletiles.json | 3 +-- 5 files changed, 5 insertions(+), 9 deletions(-) delete mode 100644 src/api/java/com/creativemd/littletiles/client/render/tile/LittleRenderBox.java diff --git a/src/api/java/com/creativemd/littletiles/client/render/tile/LittleRenderBox.java b/src/api/java/com/creativemd/littletiles/client/render/tile/LittleRenderBox.java deleted file mode 100644 index 10987d58d48..00000000000 --- a/src/api/java/com/creativemd/littletiles/client/render/tile/LittleRenderBox.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.creativemd.littletiles.client.render.tile; - -public class LittleRenderBox { - public boolean needsResorting; -} diff --git a/src/main/java/gregtech/api/GTValues.java b/src/main/java/gregtech/api/GTValues.java index 006f9444117..2048c61affe 100644 --- a/src/main/java/gregtech/api/GTValues.java +++ b/src/main/java/gregtech/api/GTValues.java @@ -170,7 +170,8 @@ public class GTValues { MODID_PROJRED_CORE = "projectred-core", MODID_RC = "railcraft", MODID_CHISEL = "chisel", - MODID_RS = "refinedstorage"; + MODID_RS = "refinedstorage", + MODID_LITTLETILES = "littletiles"; private static Boolean isClient; diff --git a/src/main/java/gregtech/mixins/GregTechLateMixinLoadingPlugin.java b/src/main/java/gregtech/mixins/GregTechLateMixinLoadingPlugin.java index 05cf29847a8..b11dd572998 100644 --- a/src/main/java/gregtech/mixins/GregTechLateMixinLoadingPlugin.java +++ b/src/main/java/gregtech/mixins/GregTechLateMixinLoadingPlugin.java @@ -19,6 +19,7 @@ public List getMixinConfigs() { configs.add("mixins.gregtech.jei.json"); configs.add("mixins.gregtech.ctm.json"); configs.add("mixins.gregtech.ccl.json"); + configs.add("mixins.gregtech.littletiles.json"); return configs; } @@ -29,6 +30,7 @@ public boolean shouldMixinConfigQueue(String mixinConfig) { case "mixins.gregtech.theoneprobe.json" -> Loader.isModLoaded(GTValues.MODID_TOP); case "mixins.gregtech.jei.json" -> Loader.isModLoaded(GTValues.MODID_JEI); case "mixin.gregtech.ctm.json" -> Loader.isModLoaded(GTValues.MODID_CTM); + case "mixins.gregtech.littletiles.json" -> Loader.isModLoaded(GTValues.MODID_LITTLETILES); default -> true; }; } diff --git a/src/main/java/gregtech/mixins/littletiles/LittleTilesRenderMangerMixin.java b/src/main/java/gregtech/mixins/littletiles/LittleTilesRenderMangerMixin.java index a1f27525743..e3630f7b876 100644 --- a/src/main/java/gregtech/mixins/littletiles/LittleTilesRenderMangerMixin.java +++ b/src/main/java/gregtech/mixins/littletiles/LittleTilesRenderMangerMixin.java @@ -14,7 +14,6 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; // TODO, I am not quite sure if this matches with what the ASM was actually doing -// TODO, transition to using the direct path method, and remove the dependency on LittleTiles @Mixin(value = TileEntityRenderManager.class, remap = false) public class LittleTilesRenderMangerMixin { diff --git a/src/main/resources/mixins.gregtech.littletiles.json b/src/main/resources/mixins.gregtech.littletiles.json index e754e4ad051..6671ea6d5b6 100644 --- a/src/main/resources/mixins.gregtech.littletiles.json +++ b/src/main/resources/mixins.gregtech.littletiles.json @@ -7,7 +7,6 @@ "mixins" : [ "LittleTilesRenderMangerMixin" ], - "client" : [ - ], + "client": [], "server" : [] } From 1c8ed6faa659a31bb6f1fb4032dd2d65c5997298 Mon Sep 17 00:00:00 2001 From: alongstringofnumbers Date: Thu, 21 Dec 2023 16:44:10 -0700 Subject: [PATCH 21/46] Fix JEI Mixin --- src/main/java/gregtech/mixins/jei/JEITooltipMixin.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main/java/gregtech/mixins/jei/JEITooltipMixin.java b/src/main/java/gregtech/mixins/jei/JEITooltipMixin.java index 7a0329e5a9f..d5483f512dd 100644 --- a/src/main/java/gregtech/mixins/jei/JEITooltipMixin.java +++ b/src/main/java/gregtech/mixins/jei/JEITooltipMixin.java @@ -13,11 +13,10 @@ import java.util.List; -// TODO, Needs to apply to the fluid items in JEI @Mixin(ForgeModIdHelper.class) public class JEITooltipMixin { - @Inject(method = "addModNameToIngredientTooltip", at = @At("HEAD"), remap = false) + @Inject(method = "addModNameToIngredientTooltip", at = @At("RETURN"), remap = false) public void addTooltip(List tooltip, Object ingredient, IIngredientHelper ingredientHelper, CallbackInfoReturnable> cir) { if (ingredient instanceof FluidStack) { From f15f673ad1b8401bb475d9317a689d1b238bd7a4 Mon Sep 17 00:00:00 2001 From: alongstringofnumbers Date: Sun, 31 Dec 2023 22:18:20 -0700 Subject: [PATCH 22/46] Remove overwrite --- .../minecraft/RecipeRepairItemMixin.java | 37 +++++++++---------- 1 file changed, 18 insertions(+), 19 deletions(-) diff --git a/src/main/java/gregtech/mixins/minecraft/RecipeRepairItemMixin.java b/src/main/java/gregtech/mixins/minecraft/RecipeRepairItemMixin.java index 783b5282da2..6af27aa2b23 100644 --- a/src/main/java/gregtech/mixins/minecraft/RecipeRepairItemMixin.java +++ b/src/main/java/gregtech/mixins/minecraft/RecipeRepairItemMixin.java @@ -12,11 +12,11 @@ import net.minecraftforge.common.ForgeHooks; import net.minecraftforge.event.ForgeEventFactory; +import com.llamalad7.mixinextras.injector.WrapWithCondition; import com.llamalad7.mixinextras.sugar.Local; import com.llamalad7.mixinextras.sugar.ref.LocalIntRef; import com.llamalad7.mixinextras.sugar.ref.LocalRef; import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Overwrite; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; @@ -72,24 +72,23 @@ public class RecipeRepairItemMixin { } } - // TODO, see if we can change this from an overwrite + // Can't use @Share, since ItemStack is not on the LocalRef group - /** - * @author GregTech CEu - * @reason Properly account for GT Tools in Crafting Recipes - */ - @Overwrite - public 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; + @Inject(method = "getRemainingItems", + at = @At(value = "INVOKE", + target = "Lnet/minecraft/inventory/InventoryCrafting;getStackInSlot(I)Lnet/minecraft/item/ItemStack;", + shift = At.Shift.AFTER)) + public void gregtechCEu$getRemainingItemsInject(InventoryCrafting inv, + CallbackInfoReturnable> cir, + @Local ItemStack itemStack) { + ForgeEventFactory.onPlayerDestroyItem(ForgeHooks.getCraftingPlayer(), itemStack, null); + } + + @WrapWithCondition(method = "getRemainingItems", + at = @At(value = "INVOKE", + target = "Lnet/minecraft/util/NonNullList;set(ILjava/lang/Object;)Ljava/lang/Object;")) + public boolean gregtechCEU$getRemainingItemsWrap(NonNullList instance, int index, Object newValue, + @Local ItemStack itemstack) { + return itemstack.getItem() instanceof IGTTool; } } From 8903d8b55d99e38be0481669d42549ac07c8693f Mon Sep 17 00:00:00 2001 From: alongstringofnumbers Date: Mon, 8 Jan 2024 18:27:45 -0700 Subject: [PATCH 23/46] Fix CTM mixin --- .../mixins/ctm/AbstractCTMBakedModelMixin.java | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/src/main/java/gregtech/mixins/ctm/AbstractCTMBakedModelMixin.java b/src/main/java/gregtech/mixins/ctm/AbstractCTMBakedModelMixin.java index b1c614244e3..739de1b6acf 100644 --- a/src/main/java/gregtech/mixins/ctm/AbstractCTMBakedModelMixin.java +++ b/src/main/java/gregtech/mixins/ctm/AbstractCTMBakedModelMixin.java @@ -8,23 +8,20 @@ import net.minecraft.util.BlockRenderLayer; import net.minecraft.util.EnumFacing; +import com.llamalad7.mixinextras.injector.ModifyReturnValue; import com.llamalad7.mixinextras.sugar.Local; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; import team.chisel.ctm.client.model.AbstractCTMBakedModel; import java.util.List; -//TODO, I don't think this works. Might need to wrap the return for the list of quads @Mixin(AbstractCTMBakedModel.class) public class AbstractCTMBakedModelMixin { - @Inject(method = "getQuads", at = @At(value = "TAIL"), remap = false) - public void getQuadsWithOptifine(IBlockState state, EnumFacing side, long rand, - CallbackInfoReturnable> cir, @Local BlockRenderLayer layer, - @Local Object ret) { - CTMHooks.getQuadsWithOptiFine((List) ret, layer, (IBakedModel) this, state, side, rand); + @ModifyReturnValue(method = "getQuads", at = @At("RETURN")) + private List getQuadsWithOptifine(List original, @Local BlockRenderLayer layer, + @Local IBlockState state, @Local EnumFacing side, @Local long rand) { + return CTMHooks.getQuadsWithOptiFine(original, layer, (IBakedModel) this, state, side, rand); } } From 88cda821fbf05cb24ef224c0091393511e1f2466 Mon Sep 17 00:00:00 2001 From: alongstringofnumbers Date: Mon, 8 Jan 2024 18:35:10 -0700 Subject: [PATCH 24/46] Specify ordinal --- .../java/gregtech/mixins/ctm/AbstractCTMBakedModelMixin.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/gregtech/mixins/ctm/AbstractCTMBakedModelMixin.java b/src/main/java/gregtech/mixins/ctm/AbstractCTMBakedModelMixin.java index 739de1b6acf..d175612e72b 100644 --- a/src/main/java/gregtech/mixins/ctm/AbstractCTMBakedModelMixin.java +++ b/src/main/java/gregtech/mixins/ctm/AbstractCTMBakedModelMixin.java @@ -19,7 +19,7 @@ @Mixin(AbstractCTMBakedModel.class) public class AbstractCTMBakedModelMixin { - @ModifyReturnValue(method = "getQuads", at = @At("RETURN")) + @ModifyReturnValue(method = "getQuads", at = @At(value = "RETURN", ordinal = 1)) private List getQuadsWithOptifine(List original, @Local BlockRenderLayer layer, @Local IBlockState state, @Local EnumFacing side, @Local long rand) { return CTMHooks.getQuadsWithOptiFine(original, layer, (IBakedModel) this, state, side, rand); From 510c2d3e50e4dc5123bb44e83d94f6d5568b1ea8 Mon Sep 17 00:00:00 2001 From: alongstringofnumbers Date: Sat, 13 Jan 2024 22:35:32 -0700 Subject: [PATCH 25/46] Spotless --- .../gregtech/asm/GregTechTransformer.java | 32 +++++++++++-------- .../mixins/ctm/CTMRenderInLayerMixin.java | 8 ++--- .../gregtech/mixins/jei/JEITooltipMixin.java | 1 - .../mixins/minecraft/RenderChunkMixin.java | 2 +- 4 files changed, 22 insertions(+), 21 deletions(-) diff --git a/src/main/java/gregtech/asm/GregTechTransformer.java b/src/main/java/gregtech/asm/GregTechTransformer.java index 74956c8a37d..df4df4804db 100644 --- a/src/main/java/gregtech/asm/GregTechTransformer.java +++ b/src/main/java/gregtech/asm/GregTechTransformer.java @@ -116,20 +116,24 @@ public byte[] transform(String name, String transformedName, byte[] basicClass) * 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 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); diff --git a/src/main/java/gregtech/mixins/ctm/CTMRenderInLayerMixin.java b/src/main/java/gregtech/mixins/ctm/CTMRenderInLayerMixin.java index 0cfa303c576..33a58a7a9d2 100644 --- a/src/main/java/gregtech/mixins/ctm/CTMRenderInLayerMixin.java +++ b/src/main/java/gregtech/mixins/ctm/CTMRenderInLayerMixin.java @@ -19,12 +19,10 @@ public class CTMRenderInLayerMixin { @ModifyExpressionValue(method = "canRenderInLayer", at = @At(value = "INVOKE_ASSIGN", - target = "Lteam/chisel/ctm/api/model/IModelCTM;canRenderInLayer(Lnet/minecraft/block/state/IBlockState;Lnet/minecraft/util/BlockRenderLayer;)Z" - ), + target = "Lteam/chisel/ctm/api/model/IModelCTM;canRenderInLayer(Lnet/minecraft/block/state/IBlockState;Lnet/minecraft/util/BlockRenderLayer;)Z"), remap = false) - private static Boolean checkRenderInLayer(Boolean originalResult, @NotNull IBlockState state, @NotNull - BlockRenderLayer layer, @Local IBakedModel model) { + private static Boolean checkRenderInLayer(Boolean originalResult, @NotNull IBlockState state, + @NotNull BlockRenderLayer layer, @Local IBakedModel model) { return CTMModHooks.canRenderInLayer(((AbstractCTMBakedModel) model).getModel(), state, layer); } - } diff --git a/src/main/java/gregtech/mixins/jei/JEITooltipMixin.java b/src/main/java/gregtech/mixins/jei/JEITooltipMixin.java index d5483f512dd..dde91d34d7c 100644 --- a/src/main/java/gregtech/mixins/jei/JEITooltipMixin.java +++ b/src/main/java/gregtech/mixins/jei/JEITooltipMixin.java @@ -29,5 +29,4 @@ public void addTooltip(List tooltip, Object ingredient, IIngredientHelpe } } } - } diff --git a/src/main/java/gregtech/mixins/minecraft/RenderChunkMixin.java b/src/main/java/gregtech/mixins/minecraft/RenderChunkMixin.java index 2b00735e71a..5c18f5ad4ea 100644 --- a/src/main/java/gregtech/mixins/minecraft/RenderChunkMixin.java +++ b/src/main/java/gregtech/mixins/minecraft/RenderChunkMixin.java @@ -17,7 +17,7 @@ public class RenderChunkMixin { @WrapOperation(method = "rebuildChunk", at = @At(value = "INVOKE", - target = "Lnet/minecraft/client/renderer/tileentity/TileEntityRendererDispatcher;getRenderer(Lnet/minecraft/tileentity/TileEntity;)Lnet/minecraft/client/renderer/tileentity/TileEntitySpecialRenderer;")) + target = "Lnet/minecraft/client/renderer/tileentity/TileEntityRendererDispatcher;getRenderer(Lnet/minecraft/tileentity/TileEntity;)Lnet/minecraft/client/renderer/tileentity/TileEntitySpecialRenderer;")) public TileEntitySpecialRenderer adjustMTERenderer(TileEntityRendererDispatcher original, TileEntity tileentity, Operation> originalRenderer) { From 457684483ec343814a8852cf6a5cfcc05dc270db Mon Sep 17 00:00:00 2001 From: alongstringofnumbers Date: Sun, 14 Jan 2024 21:23:07 -0700 Subject: [PATCH 26/46] Hopefully everything? --- gradle.properties | 2 +- .../gregtech/asm/GregTechTransformer.java | 38 ++++++++++--------- .../gregtech/mixins/jei/JEITooltipMixin.java | 2 +- .../minecraft/EnchantmentCanApplyMixin.java | 23 +++++++++++ .../resources/mixins.gregtech.minecraft.json | 1 + 5 files changed, 46 insertions(+), 20 deletions(-) create mode 100644 src/main/java/gregtech/mixins/minecraft/EnchantmentCanApplyMixin.java diff --git a/gradle.properties b/gradle.properties index c3d30adcc47..f051122a86e 100644 --- a/gradle.properties +++ b/gradle.properties @@ -68,7 +68,7 @@ forceEnableMixins=true # diff to see exactly what your ASM or Mixins are changing in the target file. # Optionally can be specified with the 'CORE_MOD_DEBUG' env var. Will output a lot of files! # TODO, change this to false before merging -enableCoreModDebug=true +enableCoreModDebug=false # Adds CurseMaven, Modrinth Maven, BlameJared maven, and some more well-known 1.12.2 repositories includeWellKnownRepositories=true # Adds JEI and TheOneProbe to your development environment. Adds them as 'implementation', meaning they will diff --git a/src/main/java/gregtech/asm/GregTechTransformer.java b/src/main/java/gregtech/asm/GregTechTransformer.java index df4df4804db..a2c51dde370 100644 --- a/src/main/java/gregtech/asm/GregTechTransformer.java +++ b/src/main/java/gregtech/asm/GregTechTransformer.java @@ -9,8 +9,6 @@ import net.minecraft.launchwrapper.IClassTransformer; import net.minecraft.launchwrapper.Launch; -import org.objectweb.asm.ClassReader; -import org.objectweb.asm.ClassWriter; import org.objectweb.asm.Opcodes; public class GregTechTransformer implements IClassTransformer, Opcodes { @@ -19,12 +17,14 @@ public class GregTechTransformer implements IClassTransformer, Opcodes { 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 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) { @@ -134,14 +134,14 @@ public byte[] transform(String name, String transformedName, byte[] basicClass) * return classWriter.toByteArray(); * } */ - case LittleTilesVisitor.TARGET_CLASS_NAME: { + /*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); @@ -226,14 +226,16 @@ public byte[] transform(String name, String transformedName, byte[] basicClass) 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(); - } + /* + * 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/mixins/jei/JEITooltipMixin.java b/src/main/java/gregtech/mixins/jei/JEITooltipMixin.java index dde91d34d7c..aa971bfd814 100644 --- a/src/main/java/gregtech/mixins/jei/JEITooltipMixin.java +++ b/src/main/java/gregtech/mixins/jei/JEITooltipMixin.java @@ -16,7 +16,7 @@ @Mixin(ForgeModIdHelper.class) public class JEITooltipMixin { - @Inject(method = "addModNameToIngredientTooltip", at = @At("RETURN"), remap = false) + @Inject(method = "addModNameToIngredientTooltip", at = @At("HEAD"), remap = false) public void addTooltip(List tooltip, Object ingredient, IIngredientHelper ingredientHelper, CallbackInfoReturnable> cir) { if (ingredient instanceof FluidStack) { diff --git a/src/main/java/gregtech/mixins/minecraft/EnchantmentCanApplyMixin.java b/src/main/java/gregtech/mixins/minecraft/EnchantmentCanApplyMixin.java new file mode 100644 index 00000000000..0bd8b1a663d --- /dev/null +++ b/src/main/java/gregtech/mixins/minecraft/EnchantmentCanApplyMixin.java @@ -0,0 +1,23 @@ +package gregtech.mixins.minecraft; + +import gregtech.api.items.toolitem.IGTTool; + +import net.minecraft.enchantment.Enchantment; +import net.minecraft.item.ItemStack; + +import com.llamalad7.mixinextras.injector.ModifyReturnValue; +import com.llamalad7.mixinextras.sugar.Local; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; + +@Mixin(Enchantment.class) +public class EnchantmentCanApplyMixin { + + @ModifyReturnValue(method = "canApply", at = @At("RETURN")) + private boolean enchantmentCanApply(boolean originalResult, @Local ItemStack stack) { + if (stack.getItem() instanceof IGTTool) { + return originalResult && stack.getItem().canApplyAtEnchantingTable(stack, ((Enchantment) (Object) this)); + } + return originalResult; + } +} diff --git a/src/main/resources/mixins.gregtech.minecraft.json b/src/main/resources/mixins.gregtech.minecraft.json index 730a6d37b50..03573dc0d14 100644 --- a/src/main/resources/mixins.gregtech.minecraft.json +++ b/src/main/resources/mixins.gregtech.minecraft.json @@ -7,6 +7,7 @@ "mixins": [ "BlockConcretePowderMixin", "DamageSourceMixin", + "EnchantmentCanApplyMixin", "MinecraftMixin" ], "client": [ From 0a3a63282a4afd0033939a9d7fd5efc3e5528b9a Mon Sep 17 00:00:00 2001 From: alongstringofnumbers Date: Sun, 28 Jan 2024 17:21:08 -0700 Subject: [PATCH 27/46] Should Fix Special Armor mixin --- .../mixins/forge/SpecialArmorPropertiesMixin.java | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/main/java/gregtech/mixins/forge/SpecialArmorPropertiesMixin.java b/src/main/java/gregtech/mixins/forge/SpecialArmorPropertiesMixin.java index 468fa9212cf..32a97a8e3be 100644 --- a/src/main/java/gregtech/mixins/forge/SpecialArmorPropertiesMixin.java +++ b/src/main/java/gregtech/mixins/forge/SpecialArmorPropertiesMixin.java @@ -9,7 +9,6 @@ import net.minecraftforge.common.ISpecialArmor; import com.llamalad7.mixinextras.injector.ModifyExpressionValue; -import com.llamalad7.mixinextras.sugar.Local; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; @@ -18,13 +17,12 @@ public class SpecialArmorPropertiesMixin { @ModifyExpressionValue(method = "applyArmor", - at = @At(value = "INVOKE_ASSIGN", + at = @At(value = "INVOKE", target = "Lnet/minecraft/util/CombatRules;getDamageAfterAbsorb(FFF)F"), remap = false) - private static double adjustArmorAbsorption(double originalDamage, float damage, float totalArmor, - float totalToughness, @Local EntityLivingBase entity, - @Local NonNullList inventory, - @Local DamageSource damageSource) { + private static float adjustArmorAbsorption(float originalDamage, EntityLivingBase entity, + NonNullList inventory, + DamageSource damageSource, double damage) { double armorDamage = Math.max(1.0F, damage / 4.0F); for (int i = 0; i < inventory.size(); i++) { ItemStack itemStack = inventory.get(i); From 8d1b5869f6c97f66d090f28b6d9b6091c3e0d23c Mon Sep 17 00:00:00 2001 From: alongstringofnumbers Date: Mon, 5 Feb 2024 20:27:21 -0700 Subject: [PATCH 28/46] Switch to new Mod loaded checks --- src/main/java/gregtech/api/util/Mods.java | 2 ++ src/main/java/gregtech/asm/GregTechTransformer.java | 7 ------- .../mixins/GregTechLateMixinLoadingPlugin.java | 12 +++++------- .../gregtech/mixins/minecraft/RenderItemMixin.java | 5 ++--- 4 files changed, 9 insertions(+), 17 deletions(-) diff --git a/src/main/java/gregtech/api/util/Mods.java b/src/main/java/gregtech/api/util/Mods.java index 609f71c1008..b62a262856d 100644 --- a/src/main/java/gregtech/api/util/Mods.java +++ b/src/main/java/gregtech/api/util/Mods.java @@ -54,6 +54,7 @@ public enum Mods { InventoryTweaks(Names.INVENTORY_TWEAKS), JourneyMap(Names.JOURNEY_MAP), JustEnoughItems(Names.JUST_ENOUGH_ITEMS), + LittleTiles(Names.LITTLE_TILES), MagicBees(Names.MAGIC_BEES), Nothirium(Names.NOTHIRIUM), NuclearCraft(Names.NUCLEAR_CRAFT, versionExcludes("2o")), @@ -124,6 +125,7 @@ public static class Names { public static final String INVENTORY_TWEAKS = "inventorytweaks"; public static final String JOURNEY_MAP = "journeymap"; public static final String JUST_ENOUGH_ITEMS = "jei"; + public static final String LITTLE_TILES = "littletiles"; public static final String MAGIC_BEES = "magicbees"; public static final String NOTHIRIUM = "nothirium"; public static final String NUCLEAR_CRAFT = "nuclearcraft"; diff --git a/src/main/java/gregtech/asm/GregTechTransformer.java b/src/main/java/gregtech/asm/GregTechTransformer.java index a2c51dde370..029ed62fd0b 100644 --- a/src/main/java/gregtech/asm/GregTechTransformer.java +++ b/src/main/java/gregtech/asm/GregTechTransformer.java @@ -1,13 +1,6 @@ package gregtech.asm; -import gregtech.asm.util.ObfMapping; -import gregtech.asm.util.TargetClassVisitor; -import gregtech.asm.visitors.EnchantmentCanApplyVisitor; -import gregtech.asm.visitors.JEIVisitor; -import gregtech.asm.visitors.LittleTilesVisitor; - import net.minecraft.launchwrapper.IClassTransformer; -import net.minecraft.launchwrapper.Launch; import org.objectweb.asm.Opcodes; diff --git a/src/main/java/gregtech/mixins/GregTechLateMixinLoadingPlugin.java b/src/main/java/gregtech/mixins/GregTechLateMixinLoadingPlugin.java index b11dd572998..ed2052e3664 100644 --- a/src/main/java/gregtech/mixins/GregTechLateMixinLoadingPlugin.java +++ b/src/main/java/gregtech/mixins/GregTechLateMixinLoadingPlugin.java @@ -1,8 +1,6 @@ package gregtech.mixins; -import gregtech.api.GTValues; - -import net.minecraftforge.fml.common.Loader; +import gregtech.api.util.Mods; import zone.rong.mixinbooter.ILateMixinLoader; @@ -27,10 +25,10 @@ public List getMixinConfigs() { @Override public boolean shouldMixinConfigQueue(String mixinConfig) { return switch (mixinConfig) { - case "mixins.gregtech.theoneprobe.json" -> Loader.isModLoaded(GTValues.MODID_TOP); - case "mixins.gregtech.jei.json" -> Loader.isModLoaded(GTValues.MODID_JEI); - case "mixin.gregtech.ctm.json" -> Loader.isModLoaded(GTValues.MODID_CTM); - case "mixins.gregtech.littletiles.json" -> Loader.isModLoaded(GTValues.MODID_LITTLETILES); + case "mixins.gregtech.theoneprobe.json" -> Mods.TheOneProbe.isModLoaded(); + case "mixins.gregtech.jei.json" -> Mods.JustEnoughItems.isModLoaded(); + case "mixin.gregtech.ctm.json" -> Mods.CTM.isModLoaded(); + case "mixins.gregtech.littletiles.json" -> Mods.LittleTiles.isModLoaded(); default -> true; }; } diff --git a/src/main/java/gregtech/mixins/minecraft/RenderItemMixin.java b/src/main/java/gregtech/mixins/minecraft/RenderItemMixin.java index 6efc191b408..5bbea635153 100644 --- a/src/main/java/gregtech/mixins/minecraft/RenderItemMixin.java +++ b/src/main/java/gregtech/mixins/minecraft/RenderItemMixin.java @@ -1,12 +1,11 @@ package gregtech.mixins.minecraft; -import gregtech.api.GTValues; +import gregtech.api.util.Mods; import gregtech.asm.hooks.RenderItemHooks; import net.minecraft.client.gui.FontRenderer; import net.minecraft.client.renderer.RenderItem; import net.minecraft.item.ItemStack; -import net.minecraftforge.fml.common.Loader; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; @@ -32,7 +31,7 @@ private void renderItemOverlayIntoGUIInject(FontRenderer fr, ItemStack stack, in ordinal = 0)) public void showDurabilityBarMixin(FontRenderer fr, ItemStack stack, int xPosition, int yPosition, String text, CallbackInfo ci) { - if (!Loader.isModLoaded(GTValues.MODID_ECORE)) { + if (!Mods.EnderCore.isModLoaded()) { RenderItemHooks.renderElectricBar(stack, xPosition, yPosition); } } From e93367aa4cccbe3f4dc04bf88a4e67dc5913687c Mon Sep 17 00:00:00 2001 From: alongstringofnumbers Date: Fri, 23 Feb 2024 15:01:27 -0700 Subject: [PATCH 29/46] In progress fixes, doesn't all work yet --- gradle.properties | 2 +- .../minecraft/RecipeRepairItemMixin.java | 61 +++++++++++-------- .../RegionRenderCacheBuilderMixin.java | 2 +- 3 files changed, 36 insertions(+), 29 deletions(-) diff --git a/gradle.properties b/gradle.properties index f051122a86e..c3d30adcc47 100644 --- a/gradle.properties +++ b/gradle.properties @@ -68,7 +68,7 @@ forceEnableMixins=true # diff to see exactly what your ASM or Mixins are changing in the target file. # Optionally can be specified with the 'CORE_MOD_DEBUG' env var. Will output a lot of files! # TODO, change this to false before merging -enableCoreModDebug=false +enableCoreModDebug=true # Adds CurseMaven, Modrinth Maven, BlameJared maven, and some more well-known 1.12.2 repositories includeWellKnownRepositories=true # Adds JEI and TheOneProbe to your development environment. Adds them as 'implementation', meaning they will diff --git a/src/main/java/gregtech/mixins/minecraft/RecipeRepairItemMixin.java b/src/main/java/gregtech/mixins/minecraft/RecipeRepairItemMixin.java index 6af27aa2b23..bc4716c6c8a 100644 --- a/src/main/java/gregtech/mixins/minecraft/RecipeRepairItemMixin.java +++ b/src/main/java/gregtech/mixins/minecraft/RecipeRepairItemMixin.java @@ -12,10 +12,9 @@ import net.minecraftforge.common.ForgeHooks; import net.minecraftforge.event.ForgeEventFactory; +import com.llamalad7.mixinextras.injector.ModifyReturnValue; import com.llamalad7.mixinextras.injector.WrapWithCondition; import com.llamalad7.mixinextras.sugar.Local; -import com.llamalad7.mixinextras.sugar.ref.LocalIntRef; -import com.llamalad7.mixinextras.sugar.ref.LocalRef; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; @@ -25,59 +24,67 @@ public class RecipeRepairItemMixin { @Inject(method = "matches(Lnet/minecraft/inventory/InventoryCrafting;Lnet/minecraft/world/World;)Z", - at = @At(value = "INVOKE_ASSIGN", target = "Ljava/util/List;get(I)Ljava/lang/Object;"), + at = @At(value = "INVOKE", + target = "Ljava/util/List;get(I)Ljava/lang/Object;", + shift = At.Shift.BY, + by = 3), cancellable = true) public void gregtechCEu$matches(InventoryCrafting inv, World worldIn, CallbackInfoReturnable cir, - @Local LocalRef itemstack, @Local LocalRef itemstack1) { - if (itemstack.get().getItem() instanceof IGTTool first && - itemstack1.get().getItem() instanceof IGTTool second) { + @Local ItemStack itemstack, @Local(ordinal = 1) ItemStack itemstack1) { + if (itemstack.getItem() instanceof IGTTool first && + itemstack1.getItem() instanceof IGTTool second) { if (first.isElectric() || second.isElectric()) { cir.setReturnValue(false); } else { - cir.setReturnValue(first.getToolMaterial(itemstack.get()) == second.getToolMaterial(itemstack1.get())); + cir.setReturnValue(first.getToolMaterial(itemstack) == second.getToolMaterial(itemstack1)); } } } @Inject(method = "getCraftingResult(Lnet/minecraft/inventory/InventoryCrafting;)Lnet/minecraft/item/ItemStack;", - at = @At(value = "INVOKE_ASSIGN", target = "Ljava/util/List;get(I)Ljava/lang/Object;", ordinal = 0), + at = @At(value = "INVOKE", + target = "Ljava/util/List;get(I)Ljava/lang/Object;", + ordinal = 0, + shift = At.Shift.AFTER), cancellable = true) public void gregtechCEu$getCraftingResultFirst(InventoryCrafting inv, CallbackInfoReturnable cir, - @Local(ordinal = 0) LocalRef itemstack, - @Local(ordinal = 1) LocalRef itemstack1) { - if (itemstack.get().getItem() instanceof IGTTool tool && tool.isElectric()) { + @Local(ordinal = 0) ItemStack itemstack, + @Local(ordinal = 1) ItemStack itemstack1) { + if (itemstack.getItem() instanceof IGTTool tool && tool.isElectric()) { cir.setReturnValue(ItemStack.EMPTY); - } else if (itemstack1.get().getItem() instanceof IGTTool tool && tool.isElectric()) { + } else if (itemstack1.getItem() instanceof IGTTool tool && tool.isElectric()) { cir.setReturnValue(ItemStack.EMPTY); } } - @Inject(method = "getCraftingResult(Lnet/minecraft/inventory/InventoryCrafting;)Lnet/minecraft/item/ItemStack;", + /*@Inject(method = "getCraftingResult(Lnet/minecraft/inventory/InventoryCrafting;)Lnet/minecraft/item/ItemStack;", at = @At(value = "RETURN", ordinal = 1), - cancellable = true) - public void gregtechCEu$getCraftingResultSecond(InventoryCrafting inv, CallbackInfoReturnable cir, - @Local(ordinal = 4) LocalIntRef i1, - @Local(ordinal = 2) LocalRef itemstack2, - @Local(ordinal = 3) LocalRef itemstack3) { - if (itemstack2.get().getItem() instanceof IGTTool first && itemstack3.get().getItem() instanceof IGTTool) { + cancellable = true)*/ + @ModifyReturnValue(method = "getCraftingResult", at = @At(value = "RETURN", ordinal = 1)) + public ItemStack gregtechCEu$getCraftingResultSecond(ItemStack originalResult, InventoryCrafting inv, + @Local(ordinal = 4) int itemDamage, + @Local(ordinal = 2) ItemStack itemstack2, + @Local(ordinal = 3) ItemStack itemstack3) { + if (itemstack2.getItem() instanceof IGTTool first && itemstack3.getItem() instanceof IGTTool) { // do not allow repairing tools if both are full durability - if (itemstack2.get().getItemDamage() == 0 && itemstack3.get().getItemDamage() == 0) { - cir.setReturnValue(ItemStack.EMPTY); + if (itemstack2.getItemDamage() == 0 && itemstack3.getItemDamage() == 0) { + return ItemStack.EMPTY; } else { - ItemStack output = first.get(first.getToolMaterial(itemstack2.get())); + ItemStack output = first.get(first.getToolMaterial(itemstack2)); NBTTagCompound outputTag = ToolHelper.getToolTag(output); - outputTag.setInteger(ToolHelper.DURABILITY_KEY, i1.get()); - cir.setReturnValue(output); + outputTag.setInteger(ToolHelper.DURABILITY_KEY, itemDamage); + return output; } } - } - // Can't use @Share, since ItemStack is not on the LocalRef group + return originalResult; + } @Inject(method = "getRemainingItems", at = @At(value = "INVOKE", target = "Lnet/minecraft/inventory/InventoryCrafting;getStackInSlot(I)Lnet/minecraft/item/ItemStack;", - shift = At.Shift.AFTER)) + shift = At.Shift.BY, + by = 2)) public void gregtechCEu$getRemainingItemsInject(InventoryCrafting inv, CallbackInfoReturnable> cir, @Local ItemStack itemStack) { diff --git a/src/main/java/gregtech/mixins/minecraft/RegionRenderCacheBuilderMixin.java b/src/main/java/gregtech/mixins/minecraft/RegionRenderCacheBuilderMixin.java index dd080b2f912..52b73576d86 100644 --- a/src/main/java/gregtech/mixins/minecraft/RegionRenderCacheBuilderMixin.java +++ b/src/main/java/gregtech/mixins/minecraft/RegionRenderCacheBuilderMixin.java @@ -21,6 +21,6 @@ public class RegionRenderCacheBuilderMixin { @Inject(method = "", at = @At("TAIL")) public void initBloom(CallbackInfo ci) { - worldRenderers[BloomEffectUtil.BLOOM.ordinal()] = new BufferBuilder(131072); + worldRenderers[BloomEffectUtil.getBloomLayer().ordinal()] = new BufferBuilder(131072); } } From d160a65fb04373ef743d7153a98a23aebc33d03a Mon Sep 17 00:00:00 2001 From: alongstringofnumbers Date: Sat, 24 Feb 2024 19:32:07 -0700 Subject: [PATCH 30/46] Fix up rebase --- addon.gradle | 2 +- dependencies.gradle | 17 ----------------- 2 files changed, 1 insertion(+), 18 deletions(-) diff --git a/addon.gradle b/addon.gradle index 5c26f20ab1d..51789b691e1 100644 --- a/addon.gradle +++ b/addon.gradle @@ -4,7 +4,7 @@ minecraft { } configurations { - implementation { + compileOnly { // exclude GNU trove, FastUtil is superior and still updated exclude group: "net.sf.trove4j", module: "trove4j" // exclude javax.annotation from findbugs, jetbrains annotations are superior diff --git a/dependencies.gradle b/dependencies.gradle index 2b942991a86..0b938ad49e1 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -83,20 +83,3 @@ dependencies { // runtimeOnlyNonPublishable rfg.deobf("curse.maven:gendustry-70492:2516215") // Gendustry 1.6.5.8 // runtimeOnlyNonPublishable rfg.deobf("curse.maven:bdlib-70496:2518031") // BdLib 1.14.3.12 } - -minecraft { - injectedTags.put('DEP_VERSION_STRING', "required-after:gregtech@[${modVersion},);") -} - -configurations { - compileOnly { - // exclude GNU trove, FastUtil is superior and still updated - exclude group: "net.sf.trove4j", module: "trove4j" - // exclude javax.annotation from findbugs, jetbrains annotations are superior - exclude group: "com.google.code.findbugs", module: "jsr305" - // exclude scala as we don't use it for anything and causes import confusion - exclude group: "org.scala-lang" - exclude group: "org.scala-lang.modules" - exclude group: "org.scala-lang.plugins" - } -} From 37f7c08c0e39ebb3d5ff8504c8542a34a2194b56 Mon Sep 17 00:00:00 2001 From: alongstringofnumbers Date: Sat, 24 Feb 2024 20:13:37 -0700 Subject: [PATCH 31/46] Non-deprecated wrap --- gradle.properties | 2 +- .../java/gregtech/mixins/minecraft/RecipeRepairItemMixin.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/gradle.properties b/gradle.properties index c3d30adcc47..7b1f9f146c0 100644 --- a/gradle.properties +++ b/gradle.properties @@ -63,7 +63,7 @@ coreModClass = asm.GregTechLoadingPlugin # there is no class annotated with @Mod) you want this to be true. When in doubt: leave it on false! containsMixinsAndOrCoreModOnly=false # Enables Mixins even if this mod doesn't use them, useful if one of the dependencies uses mixins. -forceEnableMixins=true +forceEnableMixins=false # Outputs pre-transformed and post-transformed loaded classes to run/CLASSLOADER_TEMP. Can be used in combination with # diff to see exactly what your ASM or Mixins are changing in the target file. # Optionally can be specified with the 'CORE_MOD_DEBUG' env var. Will output a lot of files! diff --git a/src/main/java/gregtech/mixins/minecraft/RecipeRepairItemMixin.java b/src/main/java/gregtech/mixins/minecraft/RecipeRepairItemMixin.java index bc4716c6c8a..f94b8e66091 100644 --- a/src/main/java/gregtech/mixins/minecraft/RecipeRepairItemMixin.java +++ b/src/main/java/gregtech/mixins/minecraft/RecipeRepairItemMixin.java @@ -13,7 +13,7 @@ import net.minecraftforge.event.ForgeEventFactory; import com.llamalad7.mixinextras.injector.ModifyReturnValue; -import com.llamalad7.mixinextras.injector.WrapWithCondition; +import com.llamalad7.mixinextras.injector.v2.WrapWithCondition; import com.llamalad7.mixinextras.sugar.Local; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; From 82a29483e11cf3184d277edb8012127f5734c874 Mon Sep 17 00:00:00 2001 From: alongstringofnumbers Date: Sat, 24 Feb 2024 21:13:10 -0700 Subject: [PATCH 32/46] Some fixes, specify ordinals --- gradle.properties | 2 +- .../ctm/AbstractCTMBakedModelMixin.java | 5 +-- .../mixins/ctm/CTMRenderInLayerMixin.java | 2 +- .../minecraft/EnchantmentCanApplyMixin.java | 2 +- .../minecraft/RecipeRepairItemMixin.java | 31 +++++++++++-------- 5 files changed, 24 insertions(+), 18 deletions(-) diff --git a/gradle.properties b/gradle.properties index 7b1f9f146c0..90dc8bcb014 100644 --- a/gradle.properties +++ b/gradle.properties @@ -68,7 +68,7 @@ forceEnableMixins=false # diff to see exactly what your ASM or Mixins are changing in the target file. # Optionally can be specified with the 'CORE_MOD_DEBUG' env var. Will output a lot of files! # TODO, change this to false before merging -enableCoreModDebug=true +enableCoreModDebug=false # Adds CurseMaven, Modrinth Maven, BlameJared maven, and some more well-known 1.12.2 repositories includeWellKnownRepositories=true # Adds JEI and TheOneProbe to your development environment. Adds them as 'implementation', meaning they will diff --git a/src/main/java/gregtech/mixins/ctm/AbstractCTMBakedModelMixin.java b/src/main/java/gregtech/mixins/ctm/AbstractCTMBakedModelMixin.java index d175612e72b..038f9d90023 100644 --- a/src/main/java/gregtech/mixins/ctm/AbstractCTMBakedModelMixin.java +++ b/src/main/java/gregtech/mixins/ctm/AbstractCTMBakedModelMixin.java @@ -20,8 +20,9 @@ public class AbstractCTMBakedModelMixin { @ModifyReturnValue(method = "getQuads", at = @At(value = "RETURN", ordinal = 1)) - private List getQuadsWithOptifine(List original, @Local BlockRenderLayer layer, - @Local IBlockState state, @Local EnumFacing side, @Local long rand) { + private List getQuadsWithOptifine(List original, @Local(ordinal = 0) BlockRenderLayer layer, + @Local(ordinal = 0) IBlockState state, + @Local(ordinal = 0) EnumFacing side, @Local(ordinal = 0) long rand) { return CTMHooks.getQuadsWithOptiFine(original, layer, (IBakedModel) this, state, side, rand); } } diff --git a/src/main/java/gregtech/mixins/ctm/CTMRenderInLayerMixin.java b/src/main/java/gregtech/mixins/ctm/CTMRenderInLayerMixin.java index 33a58a7a9d2..12914a5cc5f 100644 --- a/src/main/java/gregtech/mixins/ctm/CTMRenderInLayerMixin.java +++ b/src/main/java/gregtech/mixins/ctm/CTMRenderInLayerMixin.java @@ -22,7 +22,7 @@ public class CTMRenderInLayerMixin { target = "Lteam/chisel/ctm/api/model/IModelCTM;canRenderInLayer(Lnet/minecraft/block/state/IBlockState;Lnet/minecraft/util/BlockRenderLayer;)Z"), remap = false) private static Boolean checkRenderInLayer(Boolean originalResult, @NotNull IBlockState state, - @NotNull BlockRenderLayer layer, @Local IBakedModel model) { + @NotNull BlockRenderLayer layer, @Local(ordinal = 0) IBakedModel model) { return CTMModHooks.canRenderInLayer(((AbstractCTMBakedModel) model).getModel(), state, layer); } } diff --git a/src/main/java/gregtech/mixins/minecraft/EnchantmentCanApplyMixin.java b/src/main/java/gregtech/mixins/minecraft/EnchantmentCanApplyMixin.java index 0bd8b1a663d..3f97d2b66f4 100644 --- a/src/main/java/gregtech/mixins/minecraft/EnchantmentCanApplyMixin.java +++ b/src/main/java/gregtech/mixins/minecraft/EnchantmentCanApplyMixin.java @@ -14,7 +14,7 @@ public class EnchantmentCanApplyMixin { @ModifyReturnValue(method = "canApply", at = @At("RETURN")) - private boolean enchantmentCanApply(boolean originalResult, @Local ItemStack stack) { + private boolean enchantmentCanApply(boolean originalResult, @Local(ordinal = 0) ItemStack stack) { if (stack.getItem() instanceof IGTTool) { return originalResult && stack.getItem().canApplyAtEnchantingTable(stack, ((Enchantment) (Object) this)); } diff --git a/src/main/java/gregtech/mixins/minecraft/RecipeRepairItemMixin.java b/src/main/java/gregtech/mixins/minecraft/RecipeRepairItemMixin.java index f94b8e66091..32f3781d738 100644 --- a/src/main/java/gregtech/mixins/minecraft/RecipeRepairItemMixin.java +++ b/src/main/java/gregtech/mixins/minecraft/RecipeRepairItemMixin.java @@ -20,17 +20,19 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; +import java.util.List; + @Mixin(RecipeRepairItem.class) public class RecipeRepairItemMixin { @Inject(method = "matches(Lnet/minecraft/inventory/InventoryCrafting;Lnet/minecraft/world/World;)Z", at = @At(value = "INVOKE", target = "Ljava/util/List;get(I)Ljava/lang/Object;", - shift = At.Shift.BY, - by = 3), + shift = At.Shift.AFTER), cancellable = true) public void gregtechCEu$matches(InventoryCrafting inv, World worldIn, CallbackInfoReturnable cir, - @Local ItemStack itemstack, @Local(ordinal = 1) ItemStack itemstack1) { + @Local(ordinal = 0) ItemStack itemstack, @Local(ordinal = 0) List list) { + ItemStack itemstack1 = list.get(0); if (itemstack.getItem() instanceof IGTTool first && itemstack1.getItem() instanceof IGTTool second) { if (first.isElectric() || second.isElectric()) { @@ -48,8 +50,9 @@ public class RecipeRepairItemMixin { shift = At.Shift.AFTER), cancellable = true) public void gregtechCEu$getCraftingResultFirst(InventoryCrafting inv, CallbackInfoReturnable cir, - @Local(ordinal = 0) ItemStack itemstack, - @Local(ordinal = 1) ItemStack itemstack1) { + @Local(ordinal = 0, print = true) ItemStack itemstack, + @Local(ordinal = 0) List list) { + ItemStack itemstack1 = list.get(0); if (itemstack.getItem() instanceof IGTTool tool && tool.isElectric()) { cir.setReturnValue(ItemStack.EMPTY); } else if (itemstack1.getItem() instanceof IGTTool tool && tool.isElectric()) { @@ -57,14 +60,16 @@ public class RecipeRepairItemMixin { } } - /*@Inject(method = "getCraftingResult(Lnet/minecraft/inventory/InventoryCrafting;)Lnet/minecraft/item/ItemStack;", - at = @At(value = "RETURN", ordinal = 1), - cancellable = true)*/ + /* + * @Inject(method = "getCraftingResult(Lnet/minecraft/inventory/InventoryCrafting;)Lnet/minecraft/item/ItemStack;", + * at = @At(value = "RETURN", ordinal = 1), + * cancellable = true) + */ @ModifyReturnValue(method = "getCraftingResult", at = @At(value = "RETURN", ordinal = 1)) public ItemStack gregtechCEu$getCraftingResultSecond(ItemStack originalResult, InventoryCrafting inv, - @Local(ordinal = 4) int itemDamage, - @Local(ordinal = 2) ItemStack itemstack2, - @Local(ordinal = 3) ItemStack itemstack3) { + @Local(ordinal = 3, print = true) int itemDamage, + @Local(ordinal = 0, print = true) ItemStack itemstack2, + @Local(ordinal = 1) ItemStack itemstack3) { if (itemstack2.getItem() instanceof IGTTool first && itemstack3.getItem() instanceof IGTTool) { // do not allow repairing tools if both are full durability if (itemstack2.getItemDamage() == 0 && itemstack3.getItemDamage() == 0) { @@ -87,7 +92,7 @@ public class RecipeRepairItemMixin { by = 2)) public void gregtechCEu$getRemainingItemsInject(InventoryCrafting inv, CallbackInfoReturnable> cir, - @Local ItemStack itemStack) { + @Local(ordinal = 0) ItemStack itemStack) { ForgeEventFactory.onPlayerDestroyItem(ForgeHooks.getCraftingPlayer(), itemStack, null); } @@ -95,7 +100,7 @@ public class RecipeRepairItemMixin { at = @At(value = "INVOKE", target = "Lnet/minecraft/util/NonNullList;set(ILjava/lang/Object;)Ljava/lang/Object;")) public boolean gregtechCEU$getRemainingItemsWrap(NonNullList instance, int index, Object newValue, - @Local ItemStack itemstack) { + @Local(ordinal = 0) ItemStack itemstack) { return itemstack.getItem() instanceof IGTTool; } } From 98b8f4e4a6572a33709d5908b2fa250d013b9286 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Sat, 24 Feb 2024 21:13:58 -0700 Subject: [PATCH 33/46] fix RecipeRepairItemMixin --- .../mixins/minecraft/RecipeRepairItemMixin.java | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/main/java/gregtech/mixins/minecraft/RecipeRepairItemMixin.java b/src/main/java/gregtech/mixins/minecraft/RecipeRepairItemMixin.java index 32f3781d738..71e9fa48ca6 100644 --- a/src/main/java/gregtech/mixins/minecraft/RecipeRepairItemMixin.java +++ b/src/main/java/gregtech/mixins/minecraft/RecipeRepairItemMixin.java @@ -44,15 +44,15 @@ public class RecipeRepairItemMixin { } @Inject(method = "getCraftingResult(Lnet/minecraft/inventory/InventoryCrafting;)Lnet/minecraft/item/ItemStack;", - at = @At(value = "INVOKE", + at = @At(value = "INVOKE_ASSIGN", target = "Ljava/util/List;get(I)Ljava/lang/Object;", ordinal = 0, - shift = At.Shift.AFTER), + shift = At.Shift.BY, + by = 2), cancellable = true) public void gregtechCEu$getCraftingResultFirst(InventoryCrafting inv, CallbackInfoReturnable cir, - @Local(ordinal = 0, print = true) ItemStack itemstack, - @Local(ordinal = 0) List list) { - ItemStack itemstack1 = list.get(0); + @Local(ordinal = 0) ItemStack itemstack, + @Local(ordinal = 1) ItemStack itemstack1) { if (itemstack.getItem() instanceof IGTTool tool && tool.isElectric()) { cir.setReturnValue(ItemStack.EMPTY); } else if (itemstack1.getItem() instanceof IGTTool tool && tool.isElectric()) { @@ -67,8 +67,8 @@ public class RecipeRepairItemMixin { */ @ModifyReturnValue(method = "getCraftingResult", at = @At(value = "RETURN", ordinal = 1)) public ItemStack gregtechCEu$getCraftingResultSecond(ItemStack originalResult, InventoryCrafting inv, - @Local(ordinal = 3, print = true) int itemDamage, - @Local(ordinal = 0, print = true) ItemStack itemstack2, + @Local(ordinal = 3) int itemDamage, + @Local(ordinal = 0) ItemStack itemstack2, @Local(ordinal = 1) ItemStack itemstack3) { if (itemstack2.getItem() instanceof IGTTool first && itemstack3.getItem() instanceof IGTTool) { // do not allow repairing tools if both are full durability From efdb2995436f7d1a2c24a86f7a1ed0a0bc947836 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Sat, 24 Feb 2024 22:43:44 -0700 Subject: [PATCH 34/46] combine two mixins into one apply spotless --- .../minecraft/RecipeRepairItemMixin.java | 31 ++++++++----------- 1 file changed, 13 insertions(+), 18 deletions(-) diff --git a/src/main/java/gregtech/mixins/minecraft/RecipeRepairItemMixin.java b/src/main/java/gregtech/mixins/minecraft/RecipeRepairItemMixin.java index 71e9fa48ca6..e0e43cdffd8 100644 --- a/src/main/java/gregtech/mixins/minecraft/RecipeRepairItemMixin.java +++ b/src/main/java/gregtech/mixins/minecraft/RecipeRepairItemMixin.java @@ -13,7 +13,8 @@ import net.minecraftforge.event.ForgeEventFactory; import com.llamalad7.mixinextras.injector.ModifyReturnValue; -import com.llamalad7.mixinextras.injector.v2.WrapWithCondition; +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; +import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; import com.llamalad7.mixinextras.sugar.Local; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; @@ -85,22 +86,16 @@ public class RecipeRepairItemMixin { return originalResult; } - @Inject(method = "getRemainingItems", - at = @At(value = "INVOKE", - target = "Lnet/minecraft/inventory/InventoryCrafting;getStackInSlot(I)Lnet/minecraft/item/ItemStack;", - shift = At.Shift.BY, - by = 2)) - public void gregtechCEu$getRemainingItemsInject(InventoryCrafting inv, - CallbackInfoReturnable> cir, - @Local(ordinal = 0) ItemStack itemStack) { - ForgeEventFactory.onPlayerDestroyItem(ForgeHooks.getCraftingPlayer(), itemStack, null); - } - - @WrapWithCondition(method = "getRemainingItems", - at = @At(value = "INVOKE", - target = "Lnet/minecraft/util/NonNullList;set(ILjava/lang/Object;)Ljava/lang/Object;")) - public boolean gregtechCEU$getRemainingItemsWrap(NonNullList instance, int index, Object newValue, - @Local(ordinal = 0) ItemStack itemstack) { - return itemstack.getItem() instanceof IGTTool; + @WrapOperation(method = "getRemainingItems", + at = @At(value = "INVOKE", + target = "Lnet/minecraft/util/NonNullList;set(ILjava/lang/Object;)Ljava/lang/Object;")) + public Object gregtechCEU$getRemainingItemsWrap(NonNullList instance, int index, Object newValue, Operation original, + @Local(ordinal = 0) ItemStack itemStack) { + if (itemStack.getItem() instanceof IGTTool) { + ForgeEventFactory.onPlayerDestroyItem(ForgeHooks.getCraftingPlayer(), itemStack, null); + return instance.get(index); + } else { + return instance.set(index, newValue); + } } } From 90e3e96a1b918573c518a3851035be319eeb0779 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Fri, 8 Mar 2024 17:54:37 -0700 Subject: [PATCH 35/46] spotless --- .../gregtech/mixins/minecraft/RecipeRepairItemMixin.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/java/gregtech/mixins/minecraft/RecipeRepairItemMixin.java b/src/main/java/gregtech/mixins/minecraft/RecipeRepairItemMixin.java index e0e43cdffd8..5cd275b6cf8 100644 --- a/src/main/java/gregtech/mixins/minecraft/RecipeRepairItemMixin.java +++ b/src/main/java/gregtech/mixins/minecraft/RecipeRepairItemMixin.java @@ -89,8 +89,9 @@ public class RecipeRepairItemMixin { @WrapOperation(method = "getRemainingItems", at = @At(value = "INVOKE", target = "Lnet/minecraft/util/NonNullList;set(ILjava/lang/Object;)Ljava/lang/Object;")) - public Object gregtechCEU$getRemainingItemsWrap(NonNullList instance, int index, Object newValue, Operation original, - @Local(ordinal = 0) ItemStack itemStack) { + public Object gregtechCEU$getRemainingItemsWrap(NonNullList instance, int index, Object newValue, + Operation original, + @Local(ordinal = 0) ItemStack itemStack) { if (itemStack.getItem() instanceof IGTTool) { ForgeEventFactory.onPlayerDestroyItem(ForgeHooks.getCraftingPlayer(), itemStack, null); return instance.get(index); From 458edf27dd314fdbb2c9351263c48014a4e4a200 Mon Sep 17 00:00:00 2001 From: alongstringofnumbers Date: Sat, 4 May 2024 17:21:03 -0700 Subject: [PATCH 36/46] Spotless --- .../gregtech/asm/GregTechTransformer.java | 52 ++++++++++--------- 1 file changed, 28 insertions(+), 24 deletions(-) diff --git a/src/main/java/gregtech/asm/GregTechTransformer.java b/src/main/java/gregtech/asm/GregTechTransformer.java index 029ed62fd0b..eec4b97f184 100644 --- a/src/main/java/gregtech/asm/GregTechTransformer.java +++ b/src/main/java/gregtech/asm/GregTechTransformer.java @@ -127,30 +127,34 @@ public byte[] transform(String name, String transformedName, byte[] basicClass) * 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 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); From 124369cddd412f43edd885b73e742df4440ff0cb Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Mon, 10 Jun 2024 19:00:52 -0700 Subject: [PATCH 37/46] convert vintigium asm into mixin --- src/main/java/gregtech/GregTechMod.java | 5 - .../java/gregtech/api/util/GTEnumHelper.java | 120 ++++++++++++++++++ .../api/util/VintugiumMapperAccessor.java | 10 ++ .../gregtech/asm/GregTechTransformer.java | 34 ++--- .../utils/BloomEffectVintagiumUtil.java | 23 +--- .../GregTechLateMixinLoadingPlugin.java | 2 + .../vintigium/BlockRenderManagerMixin.java | 40 ++++++ .../vintigium/BlockRenderPassMixin.java | 43 +++++++ .../resources/mixins.gregtech.vintigium.json | 13 ++ 9 files changed, 246 insertions(+), 44 deletions(-) create mode 100644 src/main/java/gregtech/api/util/GTEnumHelper.java create mode 100644 src/main/java/gregtech/api/util/VintugiumMapperAccessor.java create mode 100644 src/main/java/gregtech/mixins/vintigium/BlockRenderManagerMixin.java create mode 100644 src/main/java/gregtech/mixins/vintigium/BlockRenderPassMixin.java create mode 100644 src/main/resources/mixins.gregtech.vintigium.json diff --git a/src/main/java/gregtech/GregTechMod.java b/src/main/java/gregtech/GregTechMod.java index 97350a1a009..b0afab8f2d6 100644 --- a/src/main/java/gregtech/GregTechMod.java +++ b/src/main/java/gregtech/GregTechMod.java @@ -4,9 +4,7 @@ import gregtech.api.GregTechAPI; import gregtech.api.modules.ModuleContainerRegistryEvent; import gregtech.api.persistence.PersistentData; -import gregtech.api.util.Mods; import gregtech.client.utils.BloomEffectUtil; -import gregtech.client.utils.BloomEffectVintagiumUtil; import gregtech.modules.GregTechModules; import gregtech.modules.ModuleManager; @@ -48,9 +46,6 @@ public GregTechMod() { FluidRegistry.enableUniversalBucket(); if (FMLCommonHandler.instance().getSide().isClient()) { BloomEffectUtil.init(); - if (Mods.Vintagium.isModLoaded()) { - BloomEffectVintagiumUtil.init(); - } } } diff --git a/src/main/java/gregtech/api/util/GTEnumHelper.java b/src/main/java/gregtech/api/util/GTEnumHelper.java new file mode 100644 index 00000000000..0b2d0f6a41a --- /dev/null +++ b/src/main/java/gregtech/api/util/GTEnumHelper.java @@ -0,0 +1,120 @@ +package gregtech.api.util; + +import net.minecraftforge.classloading.FMLForgePlugin; +import net.minecraftforge.common.util.EnumHelper; +import net.minecraftforge.fml.common.FMLLog; + +import org.jetbrains.annotations.Nullable; + +import java.lang.reflect.Constructor; +import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.lang.reflect.Modifier; + +/** + * Taken from parts of Forge's EnumHelper, with certain methods made public for easier use. + */ +public class GTEnumHelper { + + private static Object reflectionFactory = null; + private static Method newConstructorAccessor = null; + private static Method newInstance = null; + private static boolean isSetup = false; + + static { + setup(); + } + + private static void setup() { + if (isSetup) { + return; + } + + try { + Method getReflectionFactory = Class.forName("sun.reflect.ReflectionFactory") + .getDeclaredMethod("getReflectionFactory"); + reflectionFactory = getReflectionFactory.invoke(null); + newConstructorAccessor = Class.forName("sun.reflect.ReflectionFactory") + .getDeclaredMethod("newConstructorAccessor", Constructor.class); + newInstance = Class.forName("sun.reflect.ConstructorAccessor").getDeclaredMethod("newInstance", + Object[].class); + } catch (Exception e) { + FMLLog.log.error("Error setting up EnumHelper.", e); + } + + isSetup = true; + } + + public static > T makeEnum(Class enumClass, @Nullable String value, int ordinal, + Class[] additionalTypes, + @Nullable Object[] additionalValues) throws Exception { + setup(); + int additionalParamsCount = additionalValues == null ? 0 : additionalValues.length; + Object[] params = new Object[additionalParamsCount + 2]; + params[0] = value; + params[1] = ordinal; + if (additionalValues != null) { + System.arraycopy(additionalValues, 0, params, 2, additionalValues.length); + } + return enumClass + .cast(newInstance.invoke(getConstructorAccessor(enumClass, additionalTypes), new Object[] { params })); + } + + private static Object getConstructorAccessor(Class enumClass, + Class[] additionalParameterTypes) throws Exception { + Class[] parameterTypes = new Class[additionalParameterTypes.length + 2]; + parameterTypes[0] = String.class; + parameterTypes[1] = int.class; + System.arraycopy(additionalParameterTypes, 0, parameterTypes, 2, additionalParameterTypes.length); + return newConstructorAccessor.invoke(reflectionFactory, enumClass.getDeclaredConstructor(parameterTypes)); + } + + public static Field getValuesField(final Class> enumType) { + Field valuesField = null; + Field[] fields = enumType.getDeclaredFields(); + + for (Field field : fields) { + String name = field.getName(); + if (name.equals("$VALUES") || name.equals("ENUM$VALUES")) // Added 'ENUM$VALUES' because Eclipse's internal + // compiler doesn't follow standards + { + valuesField = field; + break; + } + } + + int flags = (FMLForgePlugin.RUNTIME_DEOBF ? Modifier.PUBLIC : Modifier.PRIVATE) | Modifier.STATIC | + Modifier.FINAL | 0x1000 /* SYNTHETIC */; + if (valuesField == null) { + String valueType = String.format("[L%s;", enumType.getName().replace('.', '/')); + + for (Field field : fields) { + if ((field.getModifiers() & flags) == flags && + field.getType().getName().replace('.', '/').equals(valueType)) // Apparently some JVMs return + // .'s and some don't.. + { + valuesField = field; + break; + } + } + } + return valuesField; + } + + public static void cleanEnumCache(Class enumClass) throws Exception { + blankField(enumClass, "enumConstantDirectory"); + blankField(enumClass, "enumConstants"); + // Open J9 + blankField(enumClass, "enumVars"); + } + + private static void blankField(Class enumClass, String fieldName) throws Exception { + for (Field field : Class.class.getDeclaredFields()) { + if (field.getName().contains(fieldName)) { + field.setAccessible(true); + EnumHelper.setFailsafeFieldValue(field, enumClass, null); + break; + } + } + } +} diff --git a/src/main/java/gregtech/api/util/VintugiumMapperAccessor.java b/src/main/java/gregtech/api/util/VintugiumMapperAccessor.java new file mode 100644 index 00000000000..195255309e2 --- /dev/null +++ b/src/main/java/gregtech/api/util/VintugiumMapperAccessor.java @@ -0,0 +1,10 @@ +package gregtech.api.util; + +import net.minecraft.util.BlockRenderLayer; + +import me.jellysquid.mods.sodium.client.render.chunk.passes.BlockRenderPass; + +public interface VintugiumMapperAccessor { + + void gregTech$addMapping(BlockRenderLayer layer, BlockRenderPass type); +} diff --git a/src/main/java/gregtech/asm/GregTechTransformer.java b/src/main/java/gregtech/asm/GregTechTransformer.java index eec4b97f184..9a13badeaf5 100644 --- a/src/main/java/gregtech/asm/GregTechTransformer.java +++ b/src/main/java/gregtech/asm/GregTechTransformer.java @@ -205,23 +205,23 @@ public byte[] transform(String name, String transformedName, byte[] basicClass) * } */ // 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 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(); + // } } /* * if (EnchantmentCanApplyVisitor.CLASS_TO_MAPPING_MAP.containsKey(internalName)) { diff --git a/src/main/java/gregtech/client/utils/BloomEffectVintagiumUtil.java b/src/main/java/gregtech/client/utils/BloomEffectVintagiumUtil.java index ced8de12e03..0d63f22a2d4 100644 --- a/src/main/java/gregtech/client/utils/BloomEffectVintagiumUtil.java +++ b/src/main/java/gregtech/client/utils/BloomEffectVintagiumUtil.java @@ -1,38 +1,17 @@ package gregtech.client.utils; -import net.minecraft.util.BlockRenderLayer; -import net.minecraftforge.common.util.EnumHelper; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; import me.jellysquid.mods.sodium.client.render.chunk.passes.BlockRenderPass; -import me.jellysquid.mods.sodium.client.util.BufferSizeUtil; -import me.jellysquid.mods.sodium.client.util.EnumUtil; import org.jetbrains.annotations.NotNull; -import java.lang.reflect.Field; import java.util.Objects; @SideOnly(Side.CLIENT) public class BloomEffectVintagiumUtil { - private static BlockRenderPass bloom; - - public static void init() { - EnumUtil.LAYERS = BlockRenderLayer.values(); - BufferSizeUtil.BUFFER_SIZES.put(BloomEffectUtil.getBloomLayer(), 131072); - bloom = EnumHelper.addEnum(BlockRenderPass.class, "BLOOM", - new Class[] { BlockRenderLayer.class, boolean.class }, BloomEffectUtil.getBloomLayer(), true); - - try { - Field values = BlockRenderPass.class.getField("VALUES"); - values.set(null, BlockRenderPass.values()); - Field count = BlockRenderPass.class.getField("COUNT"); - count.set(null, BlockRenderPass.values().length); - } catch (NoSuchFieldException | IllegalAccessException e) { - throw new RuntimeException(e); - } - } + public static BlockRenderPass bloom; /** * @return {@link BlockRenderPass} instance for the bloom render layer. diff --git a/src/main/java/gregtech/mixins/GregTechLateMixinLoadingPlugin.java b/src/main/java/gregtech/mixins/GregTechLateMixinLoadingPlugin.java index ed2052e3664..eb87842fbc5 100644 --- a/src/main/java/gregtech/mixins/GregTechLateMixinLoadingPlugin.java +++ b/src/main/java/gregtech/mixins/GregTechLateMixinLoadingPlugin.java @@ -18,6 +18,7 @@ public List getMixinConfigs() { configs.add("mixins.gregtech.ctm.json"); configs.add("mixins.gregtech.ccl.json"); configs.add("mixins.gregtech.littletiles.json"); + configs.add("mixins.gregtech.vintigium.json"); return configs; } @@ -29,6 +30,7 @@ public boolean shouldMixinConfigQueue(String mixinConfig) { case "mixins.gregtech.jei.json" -> Mods.JustEnoughItems.isModLoaded(); case "mixin.gregtech.ctm.json" -> Mods.CTM.isModLoaded(); case "mixins.gregtech.littletiles.json" -> Mods.LittleTiles.isModLoaded(); + case "mixins.gregtech.vintigium.json" -> Mods.Vintagium.isModLoaded(); default -> true; }; } diff --git a/src/main/java/gregtech/mixins/vintigium/BlockRenderManagerMixin.java b/src/main/java/gregtech/mixins/vintigium/BlockRenderManagerMixin.java new file mode 100644 index 00000000000..7ef0d2b6bcb --- /dev/null +++ b/src/main/java/gregtech/mixins/vintigium/BlockRenderManagerMixin.java @@ -0,0 +1,40 @@ +package gregtech.mixins.vintigium; + +import gregtech.api.util.VintugiumMapperAccessor; +import gregtech.client.utils.BloomEffectUtil; +import gregtech.client.utils.BloomEffectVintagiumUtil; + +import net.minecraft.util.BlockRenderLayer; + +import com.llamalad7.mixinextras.sugar.Local; +import me.jellysquid.mods.sodium.client.render.chunk.passes.BlockRenderPass; +import me.jellysquid.mods.sodium.client.render.chunk.passes.BlockRenderPassManager; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +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.CallbackInfoReturnable; + +@Mixin(BlockRenderPassManager.class) +public abstract class BlockRenderManagerMixin implements VintugiumMapperAccessor { + + @Shadow(remap = false) + protected abstract void addMapping(BlockRenderLayer layer, BlockRenderPass type); + + @Unique + @Inject(method = "createDefaultMappings", + at = @At(value = "RETURN", + target = "Lme/jellysquid/mods/sodium/client/render/chunk/passes/BlockRenderPassManager;addMapping(Lnet/minecraft/util/BlockRenderLayer;Lme/jellysquid/mods/sodium/client/render/chunk/passes/BlockRenderPass;)V"), + remap = false) + private static void gregtech$addMapping(CallbackInfoReturnable cir, + @Local BlockRenderPassManager mapper) { + if (mapper instanceof VintugiumMapperAccessor accessor) + accessor.gregTech$addMapping(BloomEffectUtil.getBloomLayer(), BloomEffectVintagiumUtil.getBloomPass()); + } + + @Override + public void gregTech$addMapping(BlockRenderLayer layer, BlockRenderPass type) { + addMapping(layer, type); + } +} diff --git a/src/main/java/gregtech/mixins/vintigium/BlockRenderPassMixin.java b/src/main/java/gregtech/mixins/vintigium/BlockRenderPassMixin.java new file mode 100644 index 00000000000..96d8e55e593 --- /dev/null +++ b/src/main/java/gregtech/mixins/vintigium/BlockRenderPassMixin.java @@ -0,0 +1,43 @@ +package gregtech.mixins.vintigium; + +import gregtech.api.util.GTEnumHelper; +import gregtech.client.utils.BloomEffectUtil; +import gregtech.client.utils.BloomEffectVintagiumUtil; + +import net.minecraft.util.BlockRenderLayer; +import net.minecraftforge.common.util.EnumHelper; + +import com.llamalad7.mixinextras.injector.ModifyExpressionValue; +import me.jellysquid.mods.sodium.client.render.chunk.passes.BlockRenderPass; +import me.jellysquid.mods.sodium.client.util.BufferSizeUtil; +import me.jellysquid.mods.sodium.client.util.EnumUtil; +import org.apache.commons.lang3.ArrayUtils; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; + +@Mixin(BlockRenderPass.class) +public abstract class BlockRenderPassMixin { + + @ModifyExpressionValue(method = "", + at = @At(value = "INVOKE", + target = "Lme/jellysquid/mods/sodium/client/render/chunk/passes/BlockRenderPass;values()[Lme/jellysquid/mods/sodium/client/render/chunk/passes/BlockRenderPass;"), + remap = false) + private static BlockRenderPass[] addEnum(BlockRenderPass[] original) { + EnumUtil.LAYERS = BlockRenderLayer.values(); + BufferSizeUtil.BUFFER_SIZES.put(BloomEffectUtil.getBloomLayer(), 131072); + + var params = new Class[] { BlockRenderLayer.class, boolean.class }; + var values = new Object[] { BloomEffectUtil.getBloomLayer(), true }; + var field = GTEnumHelper.getValuesField(BlockRenderPass.class); + try { + BloomEffectVintagiumUtil.bloom = GTEnumHelper.makeEnum(BlockRenderPass.class, "BLOOM", + original.length, params, values); + var array = ArrayUtils.add(original, BloomEffectVintagiumUtil.getBloomPass()); + EnumHelper.setFailsafeFieldValue(field, null, array); + GTEnumHelper.cleanEnumCache(BlockRenderPass.class); + return array; + } catch (Exception e) { + throw new RuntimeException(e); + } + } +} diff --git a/src/main/resources/mixins.gregtech.vintigium.json b/src/main/resources/mixins.gregtech.vintigium.json new file mode 100644 index 00000000000..ccb13e87194 --- /dev/null +++ b/src/main/resources/mixins.gregtech.vintigium.json @@ -0,0 +1,13 @@ +{ + "package": "gregtech.mixins.vintigium", + "refmap": "mixins.gregtech.refmap.json", + "target": "@env(DEFAULT)", + "minVersion": "0.8", + "compatibilityLevel": "JAVA_8", + "mixins": [], + "client": [ + "BlockRenderManagerMixin", + "BlockRenderPassMixin" + ], + "server": [] +} From 6523f5b6275b7c477f471dcbe3dc71a5eb968902 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Mon, 10 Jun 2024 19:06:56 -0700 Subject: [PATCH 38/46] remove AT target for manager mixin --- .../gregtech/mixins/vintigium/BlockRenderManagerMixin.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main/java/gregtech/mixins/vintigium/BlockRenderManagerMixin.java b/src/main/java/gregtech/mixins/vintigium/BlockRenderManagerMixin.java index 7ef0d2b6bcb..aa04e9bb33d 100644 --- a/src/main/java/gregtech/mixins/vintigium/BlockRenderManagerMixin.java +++ b/src/main/java/gregtech/mixins/vintigium/BlockRenderManagerMixin.java @@ -24,8 +24,7 @@ public abstract class BlockRenderManagerMixin implements VintugiumMapperAccessor @Unique @Inject(method = "createDefaultMappings", - at = @At(value = "RETURN", - target = "Lme/jellysquid/mods/sodium/client/render/chunk/passes/BlockRenderPassManager;addMapping(Lnet/minecraft/util/BlockRenderLayer;Lme/jellysquid/mods/sodium/client/render/chunk/passes/BlockRenderPass;)V"), + at = @At(value = "RETURN"), remap = false) private static void gregtech$addMapping(CallbackInfoReturnable cir, @Local BlockRenderPassManager mapper) { From 50333f12a41f19abdb010f95557228596f13728a Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Mon, 10 Jun 2024 19:36:51 -0700 Subject: [PATCH 39/46] a --- dependencies.gradle | 2 +- ...umMapperAccessor.java => VintagiumMapperAccessor.java} | 2 +- .../gregtech/mixins/GregTechLateMixinLoadingPlugin.java | 4 ++-- .../{vintigium => vintagium}/BlockRenderManagerMixin.java | 8 ++++---- .../{vintigium => vintagium}/BlockRenderPassMixin.java | 2 +- ...tech.vintigium.json => mixins.gregtech.vintagium.json} | 2 +- 6 files changed, 10 insertions(+), 10 deletions(-) rename src/main/java/gregtech/api/util/{VintugiumMapperAccessor.java => VintagiumMapperAccessor.java} (84%) rename src/main/java/gregtech/mixins/{vintigium => vintagium}/BlockRenderManagerMixin.java (86%) rename src/main/java/gregtech/mixins/{vintigium => vintagium}/BlockRenderPassMixin.java (98%) rename src/main/resources/{mixins.gregtech.vintigium.json => mixins.gregtech.vintagium.json} (85%) diff --git a/dependencies.gradle b/dependencies.gradle index 0b938ad49e1..69bd3190551 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -67,7 +67,7 @@ dependencies { skipexisting: 'true') ant.unzip(src: "libs/Vintagium.zip", dest: "libs") - compileOnly(files("libs/vintagium-mc1.12.2-0.1-dev.jar")) + implementation(files("libs/vintagium-mc1.12.2-0.1-dev.jar")) compileOnly rfg.deobf("curse.maven:littletiles-257818:4750222") // LittleTiles 1.5.82-1.12.2 compileOnly rfg.deobf("curse.maven:creativecore-257814:4722163") // Creative Core 1.10.71 diff --git a/src/main/java/gregtech/api/util/VintugiumMapperAccessor.java b/src/main/java/gregtech/api/util/VintagiumMapperAccessor.java similarity index 84% rename from src/main/java/gregtech/api/util/VintugiumMapperAccessor.java rename to src/main/java/gregtech/api/util/VintagiumMapperAccessor.java index 195255309e2..7edc0d02ef8 100644 --- a/src/main/java/gregtech/api/util/VintugiumMapperAccessor.java +++ b/src/main/java/gregtech/api/util/VintagiumMapperAccessor.java @@ -4,7 +4,7 @@ import me.jellysquid.mods.sodium.client.render.chunk.passes.BlockRenderPass; -public interface VintugiumMapperAccessor { +public interface VintagiumMapperAccessor { void gregTech$addMapping(BlockRenderLayer layer, BlockRenderPass type); } diff --git a/src/main/java/gregtech/mixins/GregTechLateMixinLoadingPlugin.java b/src/main/java/gregtech/mixins/GregTechLateMixinLoadingPlugin.java index eb87842fbc5..a582e924088 100644 --- a/src/main/java/gregtech/mixins/GregTechLateMixinLoadingPlugin.java +++ b/src/main/java/gregtech/mixins/GregTechLateMixinLoadingPlugin.java @@ -18,7 +18,7 @@ public List getMixinConfigs() { configs.add("mixins.gregtech.ctm.json"); configs.add("mixins.gregtech.ccl.json"); configs.add("mixins.gregtech.littletiles.json"); - configs.add("mixins.gregtech.vintigium.json"); + configs.add("mixins.gregtech.vintagium.json"); return configs; } @@ -30,7 +30,7 @@ public boolean shouldMixinConfigQueue(String mixinConfig) { case "mixins.gregtech.jei.json" -> Mods.JustEnoughItems.isModLoaded(); case "mixin.gregtech.ctm.json" -> Mods.CTM.isModLoaded(); case "mixins.gregtech.littletiles.json" -> Mods.LittleTiles.isModLoaded(); - case "mixins.gregtech.vintigium.json" -> Mods.Vintagium.isModLoaded(); + case "mixins.gregtech.vintagium.json" -> Mods.Vintagium.isModLoaded(); default -> true; }; } diff --git a/src/main/java/gregtech/mixins/vintigium/BlockRenderManagerMixin.java b/src/main/java/gregtech/mixins/vintagium/BlockRenderManagerMixin.java similarity index 86% rename from src/main/java/gregtech/mixins/vintigium/BlockRenderManagerMixin.java rename to src/main/java/gregtech/mixins/vintagium/BlockRenderManagerMixin.java index aa04e9bb33d..be16e954351 100644 --- a/src/main/java/gregtech/mixins/vintigium/BlockRenderManagerMixin.java +++ b/src/main/java/gregtech/mixins/vintagium/BlockRenderManagerMixin.java @@ -1,6 +1,6 @@ -package gregtech.mixins.vintigium; +package gregtech.mixins.vintagium; -import gregtech.api.util.VintugiumMapperAccessor; +import gregtech.api.util.VintagiumMapperAccessor; import gregtech.client.utils.BloomEffectUtil; import gregtech.client.utils.BloomEffectVintagiumUtil; @@ -17,7 +17,7 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; @Mixin(BlockRenderPassManager.class) -public abstract class BlockRenderManagerMixin implements VintugiumMapperAccessor { +public abstract class BlockRenderManagerMixin implements VintagiumMapperAccessor { @Shadow(remap = false) protected abstract void addMapping(BlockRenderLayer layer, BlockRenderPass type); @@ -28,7 +28,7 @@ public abstract class BlockRenderManagerMixin implements VintugiumMapperAccessor remap = false) private static void gregtech$addMapping(CallbackInfoReturnable cir, @Local BlockRenderPassManager mapper) { - if (mapper instanceof VintugiumMapperAccessor accessor) + if (mapper instanceof VintagiumMapperAccessor accessor) accessor.gregTech$addMapping(BloomEffectUtil.getBloomLayer(), BloomEffectVintagiumUtil.getBloomPass()); } diff --git a/src/main/java/gregtech/mixins/vintigium/BlockRenderPassMixin.java b/src/main/java/gregtech/mixins/vintagium/BlockRenderPassMixin.java similarity index 98% rename from src/main/java/gregtech/mixins/vintigium/BlockRenderPassMixin.java rename to src/main/java/gregtech/mixins/vintagium/BlockRenderPassMixin.java index 96d8e55e593..e4e5d767523 100644 --- a/src/main/java/gregtech/mixins/vintigium/BlockRenderPassMixin.java +++ b/src/main/java/gregtech/mixins/vintagium/BlockRenderPassMixin.java @@ -1,4 +1,4 @@ -package gregtech.mixins.vintigium; +package gregtech.mixins.vintagium; import gregtech.api.util.GTEnumHelper; import gregtech.client.utils.BloomEffectUtil; diff --git a/src/main/resources/mixins.gregtech.vintigium.json b/src/main/resources/mixins.gregtech.vintagium.json similarity index 85% rename from src/main/resources/mixins.gregtech.vintigium.json rename to src/main/resources/mixins.gregtech.vintagium.json index ccb13e87194..7058a0de4da 100644 --- a/src/main/resources/mixins.gregtech.vintigium.json +++ b/src/main/resources/mixins.gregtech.vintagium.json @@ -1,5 +1,5 @@ { - "package": "gregtech.mixins.vintigium", + "package": "gregtech.mixins.vintagium", "refmap": "mixins.gregtech.refmap.json", "target": "@env(DEFAULT)", "minVersion": "0.8", From fd0ca7e2a00bebe3c2e7ca924549f299371a10cd Mon Sep 17 00:00:00 2001 From: alongstringofnumbers Date: Mon, 10 Jun 2024 19:42:01 -0700 Subject: [PATCH 40/46] Fix lang --- src/main/resources/assets/gregtech/lang/en_us.lang | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/assets/gregtech/lang/en_us.lang b/src/main/resources/assets/gregtech/lang/en_us.lang index 36ff17ace79..8e9b4091db2 100644 --- a/src/main/resources/assets/gregtech/lang/en_us.lang +++ b/src/main/resources/assets/gregtech/lang/en_us.lang @@ -6293,4 +6293,4 @@ gregtech.scanner.forestry.pollen=§oScanned Pollen # Mutation gregtech.mutation.block_of=Block of %s -record.sus=Temp name +record.sus=Leonz - Among Us Drip From e06da758a8cd239effa6dafae9e63ee1e11d332c Mon Sep 17 00:00:00 2001 From: alongstringofnumbers Date: Mon, 10 Jun 2024 19:58:36 -0700 Subject: [PATCH 41/46] Remove outdated TODOs --- gradle.properties | 1 - .../gregtech/mixins/forge/SpecialArmorPropertiesMixin.java | 1 - .../mixins/littletiles/LittleTilesRenderMangerMixin.java | 1 - src/main/java/gregtech/mixins/minecraft/BlockMixin.java | 7 ++----- 4 files changed, 2 insertions(+), 8 deletions(-) diff --git a/gradle.properties b/gradle.properties index 90dc8bcb014..7c35906e44c 100644 --- a/gradle.properties +++ b/gradle.properties @@ -67,7 +67,6 @@ forceEnableMixins=false # Outputs pre-transformed and post-transformed loaded classes to run/CLASSLOADER_TEMP. Can be used in combination with # diff to see exactly what your ASM or Mixins are changing in the target file. # Optionally can be specified with the 'CORE_MOD_DEBUG' env var. Will output a lot of files! -# TODO, change this to false before merging enableCoreModDebug=false # Adds CurseMaven, Modrinth Maven, BlameJared maven, and some more well-known 1.12.2 repositories includeWellKnownRepositories=true diff --git a/src/main/java/gregtech/mixins/forge/SpecialArmorPropertiesMixin.java b/src/main/java/gregtech/mixins/forge/SpecialArmorPropertiesMixin.java index 32a97a8e3be..668335c9b4c 100644 --- a/src/main/java/gregtech/mixins/forge/SpecialArmorPropertiesMixin.java +++ b/src/main/java/gregtech/mixins/forge/SpecialArmorPropertiesMixin.java @@ -12,7 +12,6 @@ import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; -// TODO, needs verification as transformed class dumps cannot see inner classes @Mixin(ISpecialArmor.ArmorProperties.class) public class SpecialArmorPropertiesMixin { diff --git a/src/main/java/gregtech/mixins/littletiles/LittleTilesRenderMangerMixin.java b/src/main/java/gregtech/mixins/littletiles/LittleTilesRenderMangerMixin.java index e3630f7b876..8f09a26d1fa 100644 --- a/src/main/java/gregtech/mixins/littletiles/LittleTilesRenderMangerMixin.java +++ b/src/main/java/gregtech/mixins/littletiles/LittleTilesRenderMangerMixin.java @@ -13,7 +13,6 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -// TODO, I am not quite sure if this matches with what the ASM was actually doing @Mixin(value = TileEntityRenderManager.class, remap = false) public class LittleTilesRenderMangerMixin { diff --git a/src/main/java/gregtech/mixins/minecraft/BlockMixin.java b/src/main/java/gregtech/mixins/minecraft/BlockMixin.java index fc204362fbb..f2271c71f49 100644 --- a/src/main/java/gregtech/mixins/minecraft/BlockMixin.java +++ b/src/main/java/gregtech/mixins/minecraft/BlockMixin.java @@ -1,6 +1,6 @@ package gregtech.mixins.minecraft; -import gregtech.api.GTValues; +import gregtech.api.util.Mods; import gregtech.asm.hooks.BlockHooks; import net.minecraft.block.Block; @@ -13,9 +13,6 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; -// TODO, test to make sure this works when CTM is loaded -// TODO, put into separate refmap, so it can queue when CTM is not loaded - /** * Apply our block hooks for our custom models when CTM is not loaded */ @@ -24,7 +21,7 @@ public class BlockMixin { @Inject(method = "canRenderInLayer", at = @At("HEAD"), cancellable = true, remap = false) private void canRenderInLayer(IBlockState state, BlockRenderLayer layer, CallbackInfoReturnable cir) { - if (!Loader.instance().getIndexedModList().containsKey(GTValues.MODID_CTM)) { + if (!Loader.instance().getIndexedModList().containsKey(Mods.Names.CONNECTED_TEXTURES_MOD)) { Boolean result = BlockHooks.canRenderInLayer(state, layer); if (result != null) { From 57a2c66b9e9e590d08c7e98082b6010ba3d899d8 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Tue, 18 Jun 2024 16:32:29 -0700 Subject: [PATCH 42/46] back to compileOnly --- dependencies.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dependencies.gradle b/dependencies.gradle index 69bd3190551..0b938ad49e1 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -67,7 +67,7 @@ dependencies { skipexisting: 'true') ant.unzip(src: "libs/Vintagium.zip", dest: "libs") - implementation(files("libs/vintagium-mc1.12.2-0.1-dev.jar")) + compileOnly(files("libs/vintagium-mc1.12.2-0.1-dev.jar")) compileOnly rfg.deobf("curse.maven:littletiles-257818:4750222") // LittleTiles 1.5.82-1.12.2 compileOnly rfg.deobf("curse.maven:creativecore-257814:4722163") // Creative Core 1.10.71 From 424aaf0731f3f77582c52049db91b792e1f5778a Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Tue, 18 Jun 2024 16:56:36 -0700 Subject: [PATCH 43/46] make fields mutable and modify in static init remove GTEnumHelper --- .../java/gregtech/api/util/GTEnumHelper.java | 120 ------------------ .../vintagium/BlockRenderPassMixin.java | 46 ++++--- 2 files changed, 25 insertions(+), 141 deletions(-) delete mode 100644 src/main/java/gregtech/api/util/GTEnumHelper.java diff --git a/src/main/java/gregtech/api/util/GTEnumHelper.java b/src/main/java/gregtech/api/util/GTEnumHelper.java deleted file mode 100644 index 0b2d0f6a41a..00000000000 --- a/src/main/java/gregtech/api/util/GTEnumHelper.java +++ /dev/null @@ -1,120 +0,0 @@ -package gregtech.api.util; - -import net.minecraftforge.classloading.FMLForgePlugin; -import net.minecraftforge.common.util.EnumHelper; -import net.minecraftforge.fml.common.FMLLog; - -import org.jetbrains.annotations.Nullable; - -import java.lang.reflect.Constructor; -import java.lang.reflect.Field; -import java.lang.reflect.Method; -import java.lang.reflect.Modifier; - -/** - * Taken from parts of Forge's EnumHelper, with certain methods made public for easier use. - */ -public class GTEnumHelper { - - private static Object reflectionFactory = null; - private static Method newConstructorAccessor = null; - private static Method newInstance = null; - private static boolean isSetup = false; - - static { - setup(); - } - - private static void setup() { - if (isSetup) { - return; - } - - try { - Method getReflectionFactory = Class.forName("sun.reflect.ReflectionFactory") - .getDeclaredMethod("getReflectionFactory"); - reflectionFactory = getReflectionFactory.invoke(null); - newConstructorAccessor = Class.forName("sun.reflect.ReflectionFactory") - .getDeclaredMethod("newConstructorAccessor", Constructor.class); - newInstance = Class.forName("sun.reflect.ConstructorAccessor").getDeclaredMethod("newInstance", - Object[].class); - } catch (Exception e) { - FMLLog.log.error("Error setting up EnumHelper.", e); - } - - isSetup = true; - } - - public static > T makeEnum(Class enumClass, @Nullable String value, int ordinal, - Class[] additionalTypes, - @Nullable Object[] additionalValues) throws Exception { - setup(); - int additionalParamsCount = additionalValues == null ? 0 : additionalValues.length; - Object[] params = new Object[additionalParamsCount + 2]; - params[0] = value; - params[1] = ordinal; - if (additionalValues != null) { - System.arraycopy(additionalValues, 0, params, 2, additionalValues.length); - } - return enumClass - .cast(newInstance.invoke(getConstructorAccessor(enumClass, additionalTypes), new Object[] { params })); - } - - private static Object getConstructorAccessor(Class enumClass, - Class[] additionalParameterTypes) throws Exception { - Class[] parameterTypes = new Class[additionalParameterTypes.length + 2]; - parameterTypes[0] = String.class; - parameterTypes[1] = int.class; - System.arraycopy(additionalParameterTypes, 0, parameterTypes, 2, additionalParameterTypes.length); - return newConstructorAccessor.invoke(reflectionFactory, enumClass.getDeclaredConstructor(parameterTypes)); - } - - public static Field getValuesField(final Class> enumType) { - Field valuesField = null; - Field[] fields = enumType.getDeclaredFields(); - - for (Field field : fields) { - String name = field.getName(); - if (name.equals("$VALUES") || name.equals("ENUM$VALUES")) // Added 'ENUM$VALUES' because Eclipse's internal - // compiler doesn't follow standards - { - valuesField = field; - break; - } - } - - int flags = (FMLForgePlugin.RUNTIME_DEOBF ? Modifier.PUBLIC : Modifier.PRIVATE) | Modifier.STATIC | - Modifier.FINAL | 0x1000 /* SYNTHETIC */; - if (valuesField == null) { - String valueType = String.format("[L%s;", enumType.getName().replace('.', '/')); - - for (Field field : fields) { - if ((field.getModifiers() & flags) == flags && - field.getType().getName().replace('.', '/').equals(valueType)) // Apparently some JVMs return - // .'s and some don't.. - { - valuesField = field; - break; - } - } - } - return valuesField; - } - - public static void cleanEnumCache(Class enumClass) throws Exception { - blankField(enumClass, "enumConstantDirectory"); - blankField(enumClass, "enumConstants"); - // Open J9 - blankField(enumClass, "enumVars"); - } - - private static void blankField(Class enumClass, String fieldName) throws Exception { - for (Field field : Class.class.getDeclaredFields()) { - if (field.getName().contains(fieldName)) { - field.setAccessible(true); - EnumHelper.setFailsafeFieldValue(field, enumClass, null); - break; - } - } - } -} diff --git a/src/main/java/gregtech/mixins/vintagium/BlockRenderPassMixin.java b/src/main/java/gregtech/mixins/vintagium/BlockRenderPassMixin.java index e4e5d767523..e6b7e2e0f6d 100644 --- a/src/main/java/gregtech/mixins/vintagium/BlockRenderPassMixin.java +++ b/src/main/java/gregtech/mixins/vintagium/BlockRenderPassMixin.java @@ -1,43 +1,47 @@ package gregtech.mixins.vintagium; -import gregtech.api.util.GTEnumHelper; import gregtech.client.utils.BloomEffectUtil; import gregtech.client.utils.BloomEffectVintagiumUtil; +import me.jellysquid.mods.sodium.client.util.BufferSizeUtil; +import me.jellysquid.mods.sodium.client.util.EnumUtil; + import net.minecraft.util.BlockRenderLayer; import net.minecraftforge.common.util.EnumHelper; -import com.llamalad7.mixinextras.injector.ModifyExpressionValue; import me.jellysquid.mods.sodium.client.render.chunk.passes.BlockRenderPass; -import me.jellysquid.mods.sodium.client.util.BufferSizeUtil; -import me.jellysquid.mods.sodium.client.util.EnumUtil; -import org.apache.commons.lang3.ArrayUtils; +import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Mutable; +import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @Mixin(BlockRenderPass.class) public abstract class BlockRenderPassMixin { - @ModifyExpressionValue(method = "", - at = @At(value = "INVOKE", - target = "Lme/jellysquid/mods/sodium/client/render/chunk/passes/BlockRenderPass;values()[Lme/jellysquid/mods/sodium/client/render/chunk/passes/BlockRenderPass;"), - remap = false) - private static BlockRenderPass[] addEnum(BlockRenderPass[] original) { + @Final + @Mutable + @Shadow(remap = false) + public static BlockRenderPass[] VALUES; + + @Final + @Mutable + @Shadow(remap = false) + public static int COUNT; + + @Inject(method = "", + at = @At(value = "TAIL"), + remap = false) + private static void init(CallbackInfo ci) { EnumUtil.LAYERS = BlockRenderLayer.values(); BufferSizeUtil.BUFFER_SIZES.put(BloomEffectUtil.getBloomLayer(), 131072); var params = new Class[] { BlockRenderLayer.class, boolean.class }; var values = new Object[] { BloomEffectUtil.getBloomLayer(), true }; - var field = GTEnumHelper.getValuesField(BlockRenderPass.class); - try { - BloomEffectVintagiumUtil.bloom = GTEnumHelper.makeEnum(BlockRenderPass.class, "BLOOM", - original.length, params, values); - var array = ArrayUtils.add(original, BloomEffectVintagiumUtil.getBloomPass()); - EnumHelper.setFailsafeFieldValue(field, null, array); - GTEnumHelper.cleanEnumCache(BlockRenderPass.class); - return array; - } catch (Exception e) { - throw new RuntimeException(e); - } + BloomEffectVintagiumUtil.bloom = EnumHelper.addEnum(BlockRenderPass.class, "BLOOM", params, values); + VALUES = BlockRenderPass.values(); + COUNT = VALUES.length; } } From 31d39c81c5734369e0dffb6da866de04ad5b4b8e Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Tue, 18 Jun 2024 16:57:32 -0700 Subject: [PATCH 44/46] spotless weee --- .../java/gregtech/mixins/vintagium/BlockRenderPassMixin.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/main/java/gregtech/mixins/vintagium/BlockRenderPassMixin.java b/src/main/java/gregtech/mixins/vintagium/BlockRenderPassMixin.java index e6b7e2e0f6d..4b1f3034887 100644 --- a/src/main/java/gregtech/mixins/vintagium/BlockRenderPassMixin.java +++ b/src/main/java/gregtech/mixins/vintagium/BlockRenderPassMixin.java @@ -3,13 +3,12 @@ import gregtech.client.utils.BloomEffectUtil; import gregtech.client.utils.BloomEffectVintagiumUtil; -import me.jellysquid.mods.sodium.client.util.BufferSizeUtil; -import me.jellysquid.mods.sodium.client.util.EnumUtil; - import net.minecraft.util.BlockRenderLayer; import net.minecraftforge.common.util.EnumHelper; import me.jellysquid.mods.sodium.client.render.chunk.passes.BlockRenderPass; +import me.jellysquid.mods.sodium.client.util.BufferSizeUtil; +import me.jellysquid.mods.sodium.client.util.EnumUtil; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Mutable; From 4b02bc59ca1bda93bd6042cfcff2f58c910355aa Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Tue, 18 Jun 2024 17:13:41 -0700 Subject: [PATCH 45/46] remove interface accessor --- .../gregtech/api/util/VintagiumMapperAccessor.java | 10 ---------- .../mixins/vintagium/BlockRenderManagerMixin.java | 12 +++--------- 2 files changed, 3 insertions(+), 19 deletions(-) delete mode 100644 src/main/java/gregtech/api/util/VintagiumMapperAccessor.java diff --git a/src/main/java/gregtech/api/util/VintagiumMapperAccessor.java b/src/main/java/gregtech/api/util/VintagiumMapperAccessor.java deleted file mode 100644 index 7edc0d02ef8..00000000000 --- a/src/main/java/gregtech/api/util/VintagiumMapperAccessor.java +++ /dev/null @@ -1,10 +0,0 @@ -package gregtech.api.util; - -import net.minecraft.util.BlockRenderLayer; - -import me.jellysquid.mods.sodium.client.render.chunk.passes.BlockRenderPass; - -public interface VintagiumMapperAccessor { - - void gregTech$addMapping(BlockRenderLayer layer, BlockRenderPass type); -} diff --git a/src/main/java/gregtech/mixins/vintagium/BlockRenderManagerMixin.java b/src/main/java/gregtech/mixins/vintagium/BlockRenderManagerMixin.java index be16e954351..2e35000111b 100644 --- a/src/main/java/gregtech/mixins/vintagium/BlockRenderManagerMixin.java +++ b/src/main/java/gregtech/mixins/vintagium/BlockRenderManagerMixin.java @@ -1,6 +1,5 @@ package gregtech.mixins.vintagium; -import gregtech.api.util.VintagiumMapperAccessor; import gregtech.client.utils.BloomEffectUtil; import gregtech.client.utils.BloomEffectVintagiumUtil; @@ -17,7 +16,7 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; @Mixin(BlockRenderPassManager.class) -public abstract class BlockRenderManagerMixin implements VintagiumMapperAccessor { +public abstract class BlockRenderManagerMixin { @Shadow(remap = false) protected abstract void addMapping(BlockRenderLayer layer, BlockRenderPass type); @@ -28,12 +27,7 @@ public abstract class BlockRenderManagerMixin implements VintagiumMapperAccessor remap = false) private static void gregtech$addMapping(CallbackInfoReturnable cir, @Local BlockRenderPassManager mapper) { - if (mapper instanceof VintagiumMapperAccessor accessor) - accessor.gregTech$addMapping(BloomEffectUtil.getBloomLayer(), BloomEffectVintagiumUtil.getBloomPass()); - } - - @Override - public void gregTech$addMapping(BlockRenderLayer layer, BlockRenderPass type) { - addMapping(layer, type); + ((BlockRenderManagerMixin) (Object) mapper).addMapping(BloomEffectUtil.getBloomLayer(), + BloomEffectVintagiumUtil.getBloomPass()); } } From 174cb146aaf3c286644fdce335af481f1b5c66c1 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Tue, 18 Jun 2024 17:50:25 -0700 Subject: [PATCH 46/46] some clean up + javadoc --- .../api/damagesources/DamageSources.java | 11 ++--------- .../mixins/minecraft/DamageSourceMixin.java | 19 +++---------------- .../mixins/theoneprobe/TheOneProbeMixin.java | 8 ++++++-- 3 files changed, 11 insertions(+), 27 deletions(-) diff --git a/src/main/java/gregtech/api/damagesources/DamageSources.java b/src/main/java/gregtech/api/damagesources/DamageSources.java index 3727683cd33..423b0417b63 100644 --- a/src/main/java/gregtech/api/damagesources/DamageSources.java +++ b/src/main/java/gregtech/api/damagesources/DamageSources.java @@ -49,24 +49,17 @@ public static DamageSource getTurbineDamage() { return TURBINE; } - // TODO Remove - // accessed via ASM - @SuppressWarnings("unused") public static DamageSource getPlayerDamage(@Nullable EntityPlayer source) { ItemStack stack = source != null ? source.getHeldItemMainhand() : ItemStack.EMPTY; - if (!stack.isEmpty() && stack.getItem() instanceof IGTTool) { - IGTTool tool = (IGTTool) stack.getItem(); + if (!stack.isEmpty() && stack.getItem() instanceof IGTTool tool) { return new DamageSourceTool("player", source, String.format("death.attack.%s", tool.getToolId())); } return new EntityDamageSource("player", source); } - // accessed via ASM - @SuppressWarnings("unused") public static DamageSource getMobDamage(@Nullable EntityLivingBase source) { ItemStack stack = source != null ? source.getItemStackFromSlot(EntityEquipmentSlot.MAINHAND) : ItemStack.EMPTY; - if (!stack.isEmpty() && stack.getItem() instanceof IGTTool) { - IGTTool tool = (IGTTool) stack.getItem(); + if (!stack.isEmpty() && stack.getItem() instanceof IGTTool tool) { return new DamageSourceTool("mob", source, String.format("death.attack.%s", tool.getToolId())); } return new EntityDamageSource("mob", source); diff --git a/src/main/java/gregtech/mixins/minecraft/DamageSourceMixin.java b/src/main/java/gregtech/mixins/minecraft/DamageSourceMixin.java index ceb35789f39..9247f2ab945 100644 --- a/src/main/java/gregtech/mixins/minecraft/DamageSourceMixin.java +++ b/src/main/java/gregtech/mixins/minecraft/DamageSourceMixin.java @@ -1,38 +1,25 @@ package gregtech.mixins.minecraft; -import gregtech.api.damagesources.DamageSourceTool; -import gregtech.api.items.toolitem.IGTTool; +import gregtech.api.damagesources.DamageSources; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.inventory.EntityEquipmentSlot; -import net.minecraft.item.ItemStack; import net.minecraft.util.DamageSource; -import net.minecraft.util.EntityDamageSource; import com.llamalad7.mixinextras.injector.ModifyReturnValue; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; @Mixin(DamageSource.class) -@SuppressWarnings("unused") public class DamageSourceMixin { @ModifyReturnValue(method = "causePlayerDamage", at = @At("RETURN")) private static DamageSource modifyPlayerDamageWithTool(DamageSource originalReturnValue, EntityPlayer source) { - ItemStack stack = source != null ? source.getHeldItemMainhand() : ItemStack.EMPTY; - if (!stack.isEmpty() && stack.getItem() instanceof IGTTool tool) { - return new DamageSourceTool("player", source, String.format("death.attack.%s", tool.getToolId())); - } - return originalReturnValue; + return DamageSources.getPlayerDamage(source); } @ModifyReturnValue(method = "causeMobDamage", at = @At("RETURN")) private static DamageSource modifyMobDamageWithTool(DamageSource originalReturnValue, EntityLivingBase source) { - ItemStack stack = source != null ? source.getItemStackFromSlot(EntityEquipmentSlot.MAINHAND) : ItemStack.EMPTY; - if (!stack.isEmpty() && stack.getItem() instanceof IGTTool tool) { - return new DamageSourceTool("mob", source, String.format("death.attack.%s", tool.getToolId())); - } - return new EntityDamageSource("mob", source); + return DamageSources.getMobDamage(source); } } diff --git a/src/main/java/gregtech/mixins/theoneprobe/TheOneProbeMixin.java b/src/main/java/gregtech/mixins/theoneprobe/TheOneProbeMixin.java index 90788a7cc2b..7f92a7526cd 100644 --- a/src/main/java/gregtech/mixins/theoneprobe/TheOneProbeMixin.java +++ b/src/main/java/gregtech/mixins/theoneprobe/TheOneProbeMixin.java @@ -8,6 +8,7 @@ import net.minecraft.util.EnumFacing; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Vec3d; +import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; import com.llamalad7.mixinextras.injector.ModifyExpressionValue; @@ -16,9 +17,12 @@ import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; -// TODO, unsure if we actually need this one +/** + * Makes TheOneProbe call {@link IBlockState#getActualState(IBlockAccess, BlockPos)} when + * looking at GT machines to show the correct harvest tool and level + */ @Mixin(PacketGetInfo.class) -@SuppressWarnings({ "unused", "deprecation" }) +@SuppressWarnings("deprecation") public class TheOneProbeMixin { @ModifyExpressionValue(method = "getProbeInfo",