From 6e882f381eaa072412beca2ac10077a13fa46ae7 Mon Sep 17 00:00:00 2001 From: vcwdfca <2168409010@qq.com> Date: Thu, 3 Sep 2026 01:25:30 +0800 Subject: [PATCH] craftTweaker's remap Legacy AE Items --- gradle/scripts/dependencies.gradle | 4 +- .../appeng/api/storage/data/IAEStack.java | 1 - .../implementations/ContainerUpgradeable.java | 1 - .../container/slot/SlotRestrictedInput.java | 1 - src/main/java/appeng/core/api/ApiPart.java | 1 - .../container/ContainerFluidConfigurable.java | 1 - .../github/common/me/data/IAEGasStack.java | 1 - .../common/me/data/impl/AEGasStack.java | 1 - .../appcompat/AppCompatConfig.java | 2 + .../appcompat/AppCompatMixinDecisions.java | 4 ++ .../mixins/crt/MixinBracketHandlerItem.java | 42 +++++++++++++++++++ .../MixinConduitSwapperWirelessHelper.java | 1 - src/main/resources/appcompat.mixin.json | 1 + 13 files changed, 51 insertions(+), 10 deletions(-) create mode 100644 src/main/java/github/formlessdragon/appcompat/mixins/crt/MixinBracketHandlerItem.java diff --git a/gradle/scripts/dependencies.gradle b/gradle/scripts/dependencies.gradle index 9672b05..a0a7ae8 100644 --- a/gradle/scripts/dependencies.gradle +++ b/gradle/scripts/dependencies.gradle @@ -35,8 +35,8 @@ dependencies { modCompileOnly("curse.maven:gregtechceu-557242:5519022") //mmce - modRuntimeOnly 'CraftTweaker2:CraftTweaker2-API:4.1.20.716' - modRuntimeOnly 'CraftTweaker2:CraftTweaker2-MC1120-Main:1.12-4.1.20.716' + modImplementation 'CraftTweaker2:CraftTweaker2-API:4.1.20.716' + modImplementation 'CraftTweaker2:CraftTweaker2-MC1120-Main:1.12-4.1.20.716' modRuntimeOnly 'CraftTweaker2:ZenScript:4.1.20.716' modImplementation "curse.maven:the-one-probe-245211:2667280" modImplementation "curse.maven:modularmachinery-community-edition-817377:7372951" diff --git a/src/main/java/appeng/api/storage/data/IAEStack.java b/src/main/java/appeng/api/storage/data/IAEStack.java index 2223d1f..47c1e20 100644 --- a/src/main/java/appeng/api/storage/data/IAEStack.java +++ b/src/main/java/appeng/api/storage/data/IAEStack.java @@ -6,7 +6,6 @@ import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; -import java.io.IOException; public interface IAEStack> { diff --git a/src/main/java/appeng/container/implementations/ContainerUpgradeable.java b/src/main/java/appeng/container/implementations/ContainerUpgradeable.java index ecd4133..b0c5f4e 100644 --- a/src/main/java/appeng/container/implementations/ContainerUpgradeable.java +++ b/src/main/java/appeng/container/implementations/ContainerUpgradeable.java @@ -3,7 +3,6 @@ import appeng.api.implementations.IUpgradeableHost; import appeng.container.AEBaseContainer; import net.minecraft.entity.player.InventoryPlayer; -import net.minecraft.inventory.IContainerListener; public class ContainerUpgradeable extends AEBaseContainer { diff --git a/src/main/java/appeng/container/slot/SlotRestrictedInput.java b/src/main/java/appeng/container/slot/SlotRestrictedInput.java index b5daba8..d8c8b20 100644 --- a/src/main/java/appeng/container/slot/SlotRestrictedInput.java +++ b/src/main/java/appeng/container/slot/SlotRestrictedInput.java @@ -1,7 +1,6 @@ package appeng.container.slot; import net.minecraft.entity.player.InventoryPlayer; -import net.minecraft.inventory.Slot; import net.minecraftforge.items.IItemHandler; public class SlotRestrictedInput extends AppEngSlot { diff --git a/src/main/java/appeng/core/api/ApiPart.java b/src/main/java/appeng/core/api/ApiPart.java index 6089ade..600aa8f 100644 --- a/src/main/java/appeng/core/api/ApiPart.java +++ b/src/main/java/appeng/core/api/ApiPart.java @@ -7,7 +7,6 @@ import appeng.api.util.AEPartLocation; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntity; import net.minecraft.util.EnumActionResult; import net.minecraft.util.EnumFacing; import net.minecraft.util.EnumHand; diff --git a/src/main/java/appeng/fluids/container/ContainerFluidConfigurable.java b/src/main/java/appeng/fluids/container/ContainerFluidConfigurable.java index 0363393..e22e543 100644 --- a/src/main/java/appeng/fluids/container/ContainerFluidConfigurable.java +++ b/src/main/java/appeng/fluids/container/ContainerFluidConfigurable.java @@ -4,7 +4,6 @@ import appeng.api.storage.data.IAEFluidStack; import appeng.container.implementations.ContainerUpgradeable; import net.minecraft.entity.player.InventoryPlayer; -import net.minecraft.inventory.IContainerListener; import java.util.Map; diff --git a/src/main/java/com/mekeng/github/common/me/data/IAEGasStack.java b/src/main/java/com/mekeng/github/common/me/data/IAEGasStack.java index b3121ef..26629f0 100644 --- a/src/main/java/com/mekeng/github/common/me/data/IAEGasStack.java +++ b/src/main/java/com/mekeng/github/common/me/data/IAEGasStack.java @@ -9,7 +9,6 @@ import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; -import java.io.IOException; public interface IAEGasStack extends IAEStack { diff --git a/src/main/java/com/mekeng/github/common/me/data/impl/AEGasStack.java b/src/main/java/com/mekeng/github/common/me/data/impl/AEGasStack.java index d403235..b7bd304 100644 --- a/src/main/java/com/mekeng/github/common/me/data/impl/AEGasStack.java +++ b/src/main/java/com/mekeng/github/common/me/data/impl/AEGasStack.java @@ -12,7 +12,6 @@ import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; -import java.io.IOException; public final class AEGasStack implements IAEGasStack, Comparable { diff --git a/src/main/java/github/formlessdragon/appcompat/AppCompatConfig.java b/src/main/java/github/formlessdragon/appcompat/AppCompatConfig.java index e7fee07..b48f97e 100644 --- a/src/main/java/github/formlessdragon/appcompat/AppCompatConfig.java +++ b/src/main/java/github/formlessdragon/appcompat/AppCompatConfig.java @@ -22,4 +22,6 @@ public final class AppCompatConfig { public static boolean enableBuildingGadgets = true; public static boolean enableLegacyAeItemIdRemapping = true; + + public static boolean enableCrT = true; } diff --git a/src/main/java/github/formlessdragon/appcompat/AppCompatMixinDecisions.java b/src/main/java/github/formlessdragon/appcompat/AppCompatMixinDecisions.java index e00fafe..9a297d8 100644 --- a/src/main/java/github/formlessdragon/appcompat/AppCompatMixinDecisions.java +++ b/src/main/java/github/formlessdragon/appcompat/AppCompatMixinDecisions.java @@ -15,6 +15,7 @@ public final class AppCompatMixinDecisions { private static boolean enableEnderIOAppliedEnergistics = true; private static boolean enablePneumaticCraft = true; private static boolean enableBuildingGadgets = true; + private static boolean enableCrT = true; public static final boolean mmceLoaded = CleanroomModDiscoverer.instance().isModPresent("modularmachinery"); public static final boolean mmceaddonsLoaded = CleanroomModDiscoverer.instance().isModPresent("modularmachineryaddons"); public static final boolean topLoaded = CleanroomModDiscoverer.instance().isModPresent("theoneprobe"); @@ -26,6 +27,7 @@ public final class AppCompatMixinDecisions { public static final boolean pneumaticcraftLoaded = CleanroomModDiscoverer.instance().isModPresent("pneumaticcraft"); public static final boolean buildingGadgetsLoaded = CleanroomModDiscoverer.instance().isModPresent("buildinggadgets"); public static final boolean jeiLoaded = CleanroomModDiscoverer.instance().isModPresent("jei"); + public static final boolean crTLoaded = CleanroomModDiscoverer.instance().isModPresent("crafttweaker"); private static final String CEU_CONDUIT_SWAPPER = "crazypants.enderio.conduits.item.conduitswapper.ItemConduitSwapper"; private static final String CEU_WIRELESS_HELPER = "crazypants.enderio.conduits.item.conduitswapper.ConduitSwapperWirelessHelper"; @@ -42,6 +44,7 @@ public static void refreshFromEnvironment() { enableEnderIOAppliedEnergistics = AppCompatConfig.enableEnderIOAppliedEnergistics; enablePneumaticCraft = AppCompatConfig.enablePneumaticCraft; enableBuildingGadgets = AppCompatConfig.enableBuildingGadgets; + enableCrT = AppCompatConfig.enableCrT; } public static boolean shouldApply(final String mixinName) { @@ -62,6 +65,7 @@ public static boolean shouldApply(final String mixinName) { && shouldApplyEnderIOAEMixin(mixinName); case "pneumaticcraft" -> enablePneumaticCraft && pneumaticcraftLoaded; case "buildinggadgets" -> enableBuildingGadgets && buildingGadgetsLoaded; + case "crt" -> enableCrT && crTLoaded; default -> true; }; } diff --git a/src/main/java/github/formlessdragon/appcompat/mixins/crt/MixinBracketHandlerItem.java b/src/main/java/github/formlessdragon/appcompat/mixins/crt/MixinBracketHandlerItem.java new file mode 100644 index 0000000..ef2062c --- /dev/null +++ b/src/main/java/github/formlessdragon/appcompat/mixins/crt/MixinBracketHandlerItem.java @@ -0,0 +1,42 @@ +package github.formlessdragon.appcompat.mixins.crt; + +import com.llamalad7.mixinextras.injector.ModifyExpressionValue; +import com.llamalad7.mixinextras.sugar.Local; +import crafttweaker.api.item.IItemStack; +import crafttweaker.api.minecraft.CraftTweakerMC; +import crafttweaker.mc1120.brackets.BracketHandlerItem; +import github.formlessdragon.appcompat.AppCompatConfig; +import github.formlessdragon.appcompat.bridge.ae.LegacyAeItemMappings; +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.CallbackInfoReturnable; + +@Mixin(value = BracketHandlerItem.class, remap = false) +public class MixinBracketHandlerItem { + + @Inject(method = "getItem", at = @At(value = "RETURN", ordinal = 2), cancellable = true) + private static void appcompat$remapLegacyAEItem(final String name, final int meta, CallbackInfoReturnable cir) { + if(name == null) { + return; + } + + final String trimmed = name.trim(); + if(trimmed.isEmpty() || !LegacyAeItemMappings.isInitialized() || !LegacyAeItemMappings.isLegacySpec(name)) { + return; + } + + final ItemStack mapped = LegacyAeItemMappings.mappedStackOrNull(trimmed, meta, 1); + if(mapped == null) { + return; + } + cir.setReturnValue(CraftTweakerMC.getIItemStackForMatching(mapped, true)); + } + + @ModifyExpressionValue(method = "find", at = @At(value = "INVOKE", target = "Ljava/util/Map;containsKey(Ljava/lang/Object;)Z", ordinal = 0)) + private boolean appcompat$prepareRemap(boolean original, @Local(name = "itemName") String itemName) { + return original || (AppCompatConfig.enableLegacyAeItemIdRemapping && LegacyAeItemMappings.isLegacySpec(itemName)); + } + +} diff --git a/src/main/java/github/formlessdragon/appcompat/mixins/enderioae/MixinConduitSwapperWirelessHelper.java b/src/main/java/github/formlessdragon/appcompat/mixins/enderioae/MixinConduitSwapperWirelessHelper.java index cef89db..e99999e 100644 --- a/src/main/java/github/formlessdragon/appcompat/mixins/enderioae/MixinConduitSwapperWirelessHelper.java +++ b/src/main/java/github/formlessdragon/appcompat/mixins/enderioae/MixinConduitSwapperWirelessHelper.java @@ -1,7 +1,6 @@ package github.formlessdragon.appcompat.mixins.enderioae; import crazypants.enderio.base.conduit.IConduit; -import crazypants.enderio.conduits.item.conduitswapper.ConduitSwapperWirelessHelper; import crazypants.enderio.conduits.init.ConduitObject; import crazypants.enderio.conduits.item.conduitswapper.ItemConduitSwapper; import github.formlessdragon.appcompat.bridge.enderioae.ConduitSwapperNetworkBridge; diff --git a/src/main/resources/appcompat.mixin.json b/src/main/resources/appcompat.mixin.json index c7774af..8f94e80 100644 --- a/src/main/resources/appcompat.mixin.json +++ b/src/main/resources/appcompat.mixin.json @@ -10,6 +10,7 @@ }, "mixins": [ "buildinggadgets.MixinAppliedEnergistics2", + "crt.MixinBracketHandlerItem", "enderioae.MixinEnderIO", "enderioae.MixinItemConduitSwapper", "enderioae.MixinConduitSwapperWirelessHelper",