diff --git a/fabric/src/main/java/lgbt/greenhouse/menderman/mixin/fabric/Mixin_AnvilMenu.java b/fabric/src/main/java/lgbt/greenhouse/menderman/mixin/fabric/Mixin_AnvilMenu.java index c574052..712c0e1 100644 --- a/fabric/src/main/java/lgbt/greenhouse/menderman/mixin/fabric/Mixin_AnvilMenu.java +++ b/fabric/src/main/java/lgbt/greenhouse/menderman/mixin/fabric/Mixin_AnvilMenu.java @@ -1,17 +1,24 @@ package lgbt.greenhouse.menderman.mixin.fabric; -import com.llamalad7.mixinextras.injector.ModifyExpressionValue; import com.llamalad7.mixinextras.sugar.Local; -import lgbt.greenhouse.menderman.Menderman; -import lgbt.greenhouse.menderman.api.MendermanRepairHelper; -import lgbt.greenhouse.menderman.api.component.MendermanDataComponents; -import net.minecraft.util.datafix.fixes.ObjectiveRenderTypeFix; +import com.llamalad7.mixinextras.sugar.Share; +import com.llamalad7.mixinextras.sugar.ref.LocalBooleanRef; import net.minecraft.world.inventory.AnvilMenu; -import net.minecraft.world.item.ItemStack; 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.ModifyVariable; @Mixin(AnvilMenu.class) public class Mixin_AnvilMenu { + @Shadow + private int repairItemCountCost; + + @ModifyVariable(method = "createResult", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/inventory/DataSlot;set(I)V", ordinal = 5), ordinal = 0) + private int menderman$cancelCostForChecksAfterRenaming(int original, @Local(ordinal = 1) int namingCost, @Share(namespace = "menderman", value = "renameOnly") LocalBooleanRef renameOnlyRef) { + if (renameOnlyRef.get() || repairItemCountCost > 0) { + return renameOnlyRef.get() ? namingCost : repairItemCountCost; + } + return original; + } } diff --git a/gradle.properties b/gradle.properties index 659b74c..a807b47 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1 +1 @@ -org.gradle.jvmargs=-Xmx3G \ No newline at end of file +org.gradle.jvmargs=-Xmx3G diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 5a047f3..9dbd57e 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,7 +1,7 @@ [versions] minecraft = "1.21.10" -minecraft-parchment = "1.21.9" -parchment = "2025.10.05" +minecraft-parchment = "1.21.10" +parchment = "2025.10.12" # Xplat neoform = "1.21.10-20251010.172816" @@ -14,7 +14,7 @@ fabric-api = "0.138.3+1.21.10" mod-menu = "16.0.0-rc.1" # NeoForge -neoforge = "21.10.51-beta" +neoforge = "21.10.52-beta" # Integrations jei = "26.1.0.16" @@ -28,7 +28,7 @@ mod-publish = "1.1.0" [libraries] minecraft = { module = "com.mojang.:minecraft", version.ref = "minecraft" } -parchment = { module = "org.parchmentmc.data:parchment-1.21.9", version.ref = "parchment" } +parchment = { module = "org.parchmentmc.data:parchment-1.21.10", version.ref = "parchment" } mixin = { module = "net.fabricmc:sponge-mixin", version.ref = "mixin" } mixin-extras = { module = "io.github.llamalad7:mixinextras-common", version.ref = "mixin-extras" } diff --git a/neoforge/src/main/java/lgbt/greenhouse/menderman/mixin/neoforge/Mixin_AnvilMenu.java b/neoforge/src/main/java/lgbt/greenhouse/menderman/mixin/neoforge/Mixin_AnvilMenu.java index 507c4b1..e666c0b 100644 --- a/neoforge/src/main/java/lgbt/greenhouse/menderman/mixin/neoforge/Mixin_AnvilMenu.java +++ b/neoforge/src/main/java/lgbt/greenhouse/menderman/mixin/neoforge/Mixin_AnvilMenu.java @@ -1,12 +1,24 @@ package lgbt.greenhouse.menderman.mixin.neoforge; -import com.llamalad7.mixinextras.injector.ModifyExpressionValue; -import lgbt.greenhouse.menderman.Menderman; +import com.llamalad7.mixinextras.sugar.Local; +import com.llamalad7.mixinextras.sugar.Share; +import com.llamalad7.mixinextras.sugar.ref.LocalBooleanRef; import net.minecraft.world.inventory.AnvilMenu; -import org.objectweb.asm.Opcodes; 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.ModifyVariable; @Mixin(AnvilMenu.class) public class Mixin_AnvilMenu { + @Shadow + private int repairItemCountCost; + + @ModifyVariable(method = "createResultInternal", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/inventory/DataSlot;set(I)V", ordinal = 4), ordinal = 0) + private int menderman$cancelCostForChecksAfterRenaming(int original, @Local(ordinal = 1) int namingCost, @Share(namespace = "menderman", value = "renameOnly") LocalBooleanRef renameOnlyRef) { + if (renameOnlyRef.get() || repairItemCountCost > 0) { + return renameOnlyRef.get() ? namingCost : repairItemCountCost; + } + return original; + } } diff --git a/xplat/src/main/java/lgbt/greenhouse/menderman/mixin/Mixin_AnvilMenu.java b/xplat/src/main/java/lgbt/greenhouse/menderman/mixin/Mixin_AnvilMenu.java index 173e11a..ef0d44e 100644 --- a/xplat/src/main/java/lgbt/greenhouse/menderman/mixin/Mixin_AnvilMenu.java +++ b/xplat/src/main/java/lgbt/greenhouse/menderman/mixin/Mixin_AnvilMenu.java @@ -5,6 +5,8 @@ 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 com.llamalad7.mixinextras.sugar.Share; +import com.llamalad7.mixinextras.sugar.ref.LocalBooleanRef; import lgbt.greenhouse.menderman.Menderman; import lgbt.greenhouse.menderman.api.MendermanRepairHelper; import lgbt.greenhouse.menderman.api.component.MendermanDataComponents; @@ -32,6 +34,9 @@ public abstract class Mixin_AnvilMenu extends ItemCombinerMenu { @Shadow private int repairItemCountCost; + @Shadow + private boolean onlyRenaming; + public Mixin_AnvilMenu(@Nullable MenuType menuType, int containerId, Inventory inventory, ContainerLevelAccess access, ItemCombinerMenuSlotDefinition slotDefinition) { super(menuType, containerId, inventory, access, slotDefinition); } @@ -98,9 +103,6 @@ public abstract class Mixin_AnvilMenu extends ItemCombinerMenu { return MendermanGamerules.compoundingRepairCost(player.level()); } - @Unique - private boolean menderman$onlyRenaming = false; - @ModifyVariable(method = { "createResult", "createResultInternal" }, at = @At(value = "INVOKE", target = "Lnet/minecraft/world/item/ItemStack;setDamageValue(I)V"), ordinal = 0) private int menderman$decreaseCombiningCost(int original, @Local(ordinal = 0) ItemStack stack) { if (stack.has(MendermanDataComponents.REPAIR_REQUIREMENTS.get())) { @@ -110,31 +112,23 @@ public abstract class Mixin_AnvilMenu extends ItemCombinerMenu { } @ModifyVariable(method = { "createResult", "createResultInternal" }, at = @At(value = "INVOKE", target = "Lnet/minecraft/world/item/ItemStack;set(Lnet/minecraft/core/component/DataComponentType;Ljava/lang/Object;)Ljava/lang/Object;", ordinal = 0), ordinal = 0) - private int menderman$cancelRenamingCost(int original, @Local(ordinal = 1) int namingCost) { + private int menderman$cancelRenamingCost(int original, @Local(ordinal = 1) int namingCost, @Share(namespace = "menderman", value = "renameOnly") LocalBooleanRef renameOnlyRef) { if (!MendermanGamerules.doesRenameCostExperience(player.level())) { - menderman$onlyRenaming = original == namingCost; + renameOnlyRef.set(original == namingCost); return original - 1; } return original; } @ModifyVariable(method = { "createResult", "createResultInternal" }, at = @At(value = "INVOKE", target = "Lnet/minecraft/world/item/ItemStack;remove(Lnet/minecraft/core/component/DataComponentType;)Ljava/lang/Object;"), ordinal = 0) - private int menderman$cancelNameRemovalCost(int original, @Local(ordinal = 1) int namingCost) { + private int menderman$cancelNameRemovalCost(int original, @Local(ordinal = 1) int namingCost, @Share(namespace = "menderman", value = "renameOnly") LocalBooleanRef renameOnlyRef) { if (!MendermanGamerules.doesRenameCostExperience(player.level())) { - menderman$onlyRenaming = original == namingCost; + renameOnlyRef.set(original == namingCost); return original - 1; } return original; } - @ModifyVariable(method = { "createResult", "createResultInternal" }, at = @At(value = "INVOKE", target = "Lnet/minecraft/world/inventory/DataSlot;set(I)V", ordinal = 5), ordinal = 0) - private int menderman$cancelCostForChecksAfterRenaming(int original, @Local(ordinal = 1) int namingCost) { - if (menderman$onlyRenaming || repairItemCountCost > 0) { - return menderman$onlyRenaming ? namingCost : repairItemCountCost; - } - return original; - } - @ModifyExpressionValue(method = { "createResult", "createResultInternal" }, at = @At(value = "FIELD", target = "Lnet/minecraft/world/item/ItemStack;EMPTY:Lnet/minecraft/world/item/ItemStack;", ordinal = 4, opcode = Opcodes.GETSTATIC)) private ItemStack menderman$dontSetAnvilResultToEmpty(ItemStack original, @Local(ordinal = 0) ItemStack stack, @Local(ordinal = 1) ItemStack otherStack, @Local(ordinal = 0) int cost) { if (cost == 0 && !ItemStack.isSameItemSameComponents(stack, otherStack)) { @@ -146,12 +140,7 @@ public abstract class Mixin_AnvilMenu extends ItemCombinerMenu { @Inject(method = "onTake", at = @At("HEAD")) private void menderman$captureRenamingState(Player player, ItemStack stack, CallbackInfo ci) { Menderman.shouldDamageAnvil = MendermanGamerules.canRenamingDamageAnvil(player.level()) && - menderman$onlyRenaming && repairItemCountCost == 0; - } - - @WrapWithCondition(method = "onTake", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/Container;setItem(ILnet/minecraft/world/item/ItemStack;)V", ordinal = 3)) - private boolean menderman$dontItemsWhenRenaming(Container instance, int i, ItemStack stack) { - return !menderman$onlyRenaming; + onlyRenaming && repairItemCountCost == 0; } @ModifyExpressionValue(method = { "method_24922", "lambda$onTake$2" }, at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/player/Player;hasInfiniteMaterials()Z"))