From f7254705a706358dedc8ed808e423e78096b5bc0 Mon Sep 17 00:00:00 2001 From: IThundxr Date: Fri, 11 Oct 2024 11:57:24 -0400 Subject: [PATCH] Fix backtanks being able to get incompatible enchants via smithing table recipes - Fixes #6687 --- build.gradle | 9 +++- .../foundation/mixin/SmithingMenuMixin.java | 44 +++++++++++++++++++ src/main/resources/create.mixins.json | 3 +- 3 files changed, 53 insertions(+), 3 deletions(-) create mode 100644 src/main/java/com/simibubi/create/foundation/mixin/SmithingMenuMixin.java diff --git a/build.gradle b/build.gradle index fb88a41c87..4c359e56a5 100644 --- a/build.gradle +++ b/build.gradle @@ -167,6 +167,11 @@ dependencies { jarJar.ranged(it, '[1.0,2.0)') } + compileOnly(annotationProcessor("io.github.llamalad7:mixinextras-common:0.4.1")) + implementation(jarJar("io.github.llamalad7:mixinextras-forge:0.4.1")) { + jarJar.ranged(it, "[0.4.1,)") + } + implementation fg.deobf("com.tterrag.registrate:Registrate:${registrate_version}") compileOnly fg.deobf("dev.engine_room.flywheel:flywheel-forge-api-${flywheel_minecraft_version}:${flywheel_version}") @@ -192,12 +197,12 @@ dependencies { // implementation fg.deobf("curse.maven:ic2-classic-242942:5555152") // implementation fg.deobf("curse.maven:druidcraft-340991:3101903") // implementation fg.deobf("com.railwayteam.railways:railways-1.19.2-1.6.4:all") { transitive = false } - + implementation fg.deobf("dev.architectury:architectury-forge:9.1.12") implementation fg.deobf("dev.ftb.mods:ftb-chunks-forge:2001.3.1") implementation fg.deobf("dev.ftb.mods:ftb-teams-forge:2001.3.0") implementation fg.deobf("dev.ftb.mods:ftb-library-forge:2001.2.4") - + implementation fg.deobf("curse.maven:journeymap-32274:5457831") // implementation fg.deobf("ignored:journeymap-1.20.1-5.10.1-forge") diff --git a/src/main/java/com/simibubi/create/foundation/mixin/SmithingMenuMixin.java b/src/main/java/com/simibubi/create/foundation/mixin/SmithingMenuMixin.java new file mode 100644 index 0000000000..8f46008cdd --- /dev/null +++ b/src/main/java/com/simibubi/create/foundation/mixin/SmithingMenuMixin.java @@ -0,0 +1,44 @@ +package com.simibubi.create.foundation.mixin; + +import com.llamalad7.mixinextras.injector.ModifyExpressionValue; + +import com.simibubi.create.content.equipment.armor.BacktankItem; + +import net.minecraft.world.inventory.SmithingMenu; + +import net.minecraft.world.item.ItemStack; + +import net.minecraft.world.item.enchantment.Enchantment; +import net.minecraft.world.item.enchantment.EnchantmentHelper; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; + +import java.util.HashMap; +import java.util.Map; + +@Mixin(SmithingMenu.class) +public class SmithingMenuMixin { + // Only add enchantments to the backtank if it supports them + @ModifyExpressionValue( + method = "createResult", + at = @At( + value = "INVOKE", + target = "Lnet/minecraft/world/item/crafting/SmithingRecipe;assemble(Lnet/minecraft/world/Container;Lnet/minecraft/core/RegistryAccess;)Lnet/minecraft/world/item/ItemStack;" + ) + ) + private ItemStack create$preventUnbreakingOnBacktanks(ItemStack original) { + if (original.getItem() instanceof BacktankItem) { + Map enchantments = new HashMap<>(); + + EnchantmentHelper.getEnchantments(original).forEach((enchantment, level) -> { + if (enchantment.canEnchant(original)) + enchantments.put(enchantment, level); + }); + + EnchantmentHelper.setEnchantments(enchantments, original); + } + + return original; + } +} diff --git a/src/main/resources/create.mixins.json b/src/main/resources/create.mixins.json index 8db180be7d..9a67389259 100644 --- a/src/main/resources/create.mixins.json +++ b/src/main/resources/create.mixins.json @@ -15,6 +15,7 @@ "LavaSwimmingMixin", "MainMixin", "MapItemSavedDataMixin", + "SmithingMenuMixin", "TestCommandMixin", "WaterWheelFluidSpreadMixin", "accessor.AbstractProjectileDispenseBehaviorAccessor", @@ -47,7 +48,7 @@ "client.MapRendererMapInstanceMixin", "client.PlayerRendererMixin", "client.WindowResizeMixin", - "compat.JourneyFullscreenMapMixin" + "compat.JourneyFullscreenMapMixin" ], "injectors": { "defaultRequire": 1