From 0dbe82f9ce1781f6f17963da99dce0b88504b15e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=88=98=E5=86=AC=E7=85=9C?= <10185101162@stu.ecnu.edu.cn> Date: Fri, 18 Apr 2025 23:29:13 +0800 Subject: [PATCH 1/4] Update TradeOffersTypeAwareBuyForOneEmeraldFactoryMixin.java MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 同步 Fabric API 修改 --- ...TypeAwareBuyForOneEmeraldFactoryMixin.java | 23 +++++++++++-------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/fabric-object-builder-api-v1/src/main/java/net/fabricmc/fabric/mixin/object/builder/TradeOffersTypeAwareBuyForOneEmeraldFactoryMixin.java b/fabric-object-builder-api-v1/src/main/java/net/fabricmc/fabric/mixin/object/builder/TradeOffersTypeAwareBuyForOneEmeraldFactoryMixin.java index df6856937..62cffeef4 100644 --- a/fabric-object-builder-api-v1/src/main/java/net/fabricmc/fabric/mixin/object/builder/TradeOffersTypeAwareBuyForOneEmeraldFactoryMixin.java +++ b/fabric-object-builder-api-v1/src/main/java/net/fabricmc/fabric/mixin/object/builder/TradeOffersTypeAwareBuyForOneEmeraldFactoryMixin.java @@ -18,16 +18,13 @@ import java.util.stream.Stream; +import com.llamalad7.mixinextras.injector.ModifyExpressionValue; +import com.llamalad7.mixinextras.sugar.Cancellable; 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.Redirect; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; -import org.spongepowered.asm.mixin.injection.callback.LocalCapture; -import net.minecraft.entity.Entity; -import net.minecraft.item.ItemStack; -import net.minecraft.util.math.random.Random; import net.minecraft.registry.DefaultedRegistry; import net.minecraft.village.TradeOffer; import net.minecraft.village.TradeOffers; @@ -47,12 +44,18 @@ private Stream disableVanillaCheck(DefaultedRegistry instan } /** - * To prevent "item" -> "air" trades, if the result of a type aware trade is air, make sure no offer is created. + * https://github.com/FabricMC/fabric/commit/e35120df0e113211c3e6928fa446efe6f387b085#diff-3f36fa41b6959de14a21137b631ecff47f27ed73845fa4c15ce77fac6cdad012R50 + * To prevent crashes due to passing a {@code null} item to a {@link TradeOffer}, return a {@code null} trade offer + * early before {@code null} is passed to the constructor. */ - @Inject(method = "create", at = @At(value = "NEW", target = "net/minecraft/village/TradeOffer"), locals = LocalCapture.CAPTURE_FAILEXCEPTION, cancellable = true, require = 0) - private void failOnNullItem(Entity entity, Random random, CallbackInfoReturnable cir, ItemStack buyingItem) { - if (buyingItem.isEmpty()) { // Will return true for an "empty" item stack that had null passed in the ctor - cir.setReturnValue(null); // Return null to prevent creation of empty trades + @ModifyExpressionValue( + method = "create", + at = @At(value = "INVOKE", target = "Ljava/util/Map;get(Ljava/lang/Object;)Ljava/lang/Object;") + ) + private Object failOnNullItem(Object item, @Cancellable CallbackInfoReturnable cir) { + if (item == null) { + cir.setReturnValue(null); } + return item; } } From 6b74893c5cb9a84301c58365fb7043ef31cf7db8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=88=98=E5=86=AC=E7=85=9C?= <10185101162@stu.ecnu.edu.cn> Date: Fri, 18 Apr 2025 23:37:18 +0800 Subject: [PATCH 2/4] Update build.gradle Add mixinextras to compile & runtime --- build.gradle | 2 ++ 1 file changed, 2 insertions(+) diff --git a/build.gradle b/build.gradle index 5b2cf8021..bdb270fd8 100644 --- a/build.gradle +++ b/build.gradle @@ -249,6 +249,8 @@ allprojects { minecraft "com.mojang:minecraft:$rootProject.minecraft_version" mappings "net.fabricmc:yarn:${rootProject.minecraft_version}${project.yarn_version}:v2" forge "net.minecraftforge:forge:${rootProject.forge_version}" + compileOnly annotationProcessor('io.github.llamalad7:mixinextras-common:0.4.1') + implementation "io.github.llamalad7:mixinextras-forge:0.4.1" testmodImplementation sourceSets.main.output // testmodClientImplementation sourceSets.main.output From f4aaa2b500e0e4ceaaa3c5e8f0e1c096c53fb9cd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=88=98=E5=86=AC=E7=85=9C?= <10185101162@stu.ecnu.edu.cn> Date: Sat, 31 May 2025 10:16:18 +0800 Subject: [PATCH 3/4] JarInJar MixinExtras --- build.gradle | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index bdb270fd8..a5d819e27 100644 --- a/build.gradle +++ b/build.gradle @@ -250,7 +250,9 @@ allprojects { mappings "net.fabricmc:yarn:${rootProject.minecraft_version}${project.yarn_version}:v2" forge "net.minecraftforge:forge:${rootProject.forge_version}" compileOnly annotationProcessor('io.github.llamalad7:mixinextras-common:0.4.1') - implementation "io.github.llamalad7:mixinextras-forge:0.4.1" + implementation(jarJar("io.github.llamalad7:mixinextras-forge:0.4.1")) { + jarJar.ranged(it, "[0.4.1,)") + } testmodImplementation sourceSets.main.output // testmodClientImplementation sourceSets.main.output From e54e38942144141179712bb3c568770b35439c6e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=88=98=E5=86=AC=E7=85=9C?= <10185101162@stu.ecnu.edu.cn> Date: Sat, 31 May 2025 14:24:47 +0800 Subject: [PATCH 4/4] =?UTF-8?q?=E6=9B=B4=E6=96=B0=20build.gradle?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/build.gradle b/build.gradle index a5d819e27..6bd9f6a7f 100644 --- a/build.gradle +++ b/build.gradle @@ -250,9 +250,7 @@ allprojects { mappings "net.fabricmc:yarn:${rootProject.minecraft_version}${project.yarn_version}:v2" forge "net.minecraftforge:forge:${rootProject.forge_version}" 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(include("io.github.llamalad7:mixinextras-forge:0.4.1")) testmodImplementation sourceSets.main.output // testmodClientImplementation sourceSets.main.output