From e9901af08e9236c0949905ba61006480cf0a8b90 Mon Sep 17 00:00:00 2001 From: iceBear67 Date: Fri, 17 Jul 2026 19:59:43 +0800 Subject: [PATCH] fix: disallow zombie picking up egg, rotten flesh, string, bone, arrow and wheat seeds --- .../sfcraft/mixin/common/ZombieMixin.java | 24 +++++++++++++++++++ src/main/resources/sfcraft.mixins.json | 22 ++++++++--------- 2 files changed, 35 insertions(+), 11 deletions(-) create mode 100644 src/main/java/io/ib67/sfcraft/mixin/common/ZombieMixin.java diff --git a/src/main/java/io/ib67/sfcraft/mixin/common/ZombieMixin.java b/src/main/java/io/ib67/sfcraft/mixin/common/ZombieMixin.java new file mode 100644 index 0000000..11acfd3 --- /dev/null +++ b/src/main/java/io/ib67/sfcraft/mixin/common/ZombieMixin.java @@ -0,0 +1,24 @@ +package io.ib67.sfcraft.mixin.common; + +import net.minecraft.world.entity.monster.zombie.Zombie; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; +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(Zombie.class) +public abstract class ZombieMixin { + @Inject(method = "canHoldItem", at = @At("HEAD"), cancellable = true) + public void canHoldItem(final ItemStack itemStack, final CallbackInfoReturnable cir) { + cir.setReturnValue(!(itemStack.is(Items.EGG) + || itemStack.is(Items.ROTTEN_FLESH) + || itemStack.is(Items.STRING)) + || itemStack.is(Items.BONE) + || itemStack.is(Items.ARROW) + || itemStack.is(Items.WHEAT_SEEDS) + ); + } +} diff --git a/src/main/resources/sfcraft.mixins.json b/src/main/resources/sfcraft.mixins.json index 5ac7b91..e6c7ecc 100644 --- a/src/main/resources/sfcraft.mixins.json +++ b/src/main/resources/sfcraft.mixins.json @@ -4,21 +4,21 @@ "package": "io.ib67.sfcraft.mixin", "compatibilityLevel": "JAVA_21", "mixins": [ - "common.bridge.EntityBridge", - "common.bridge.ItemBridge", - "common.bridge.ServerPlayerBridge", - "common.bridge.ServerWorldBridge", - "common.bridge.ServerChunkManagerBridge", - "common.fixes.EndermanEntityMixin", - "common.fixes.ProjectileEntityMixin", - "common.fixes.LivingEntityMixin", - "common.EntityMixin", - "common.MobEntityMixin", - "common.PlayerEntityMixin" ], "client": [ ], "server": [ + "common.EntityMixin", + "common.MobEntityMixin", + "common.PlayerEntityMixin", + "common.ZombieMixin", + "common.bridge.EntityBridge", + "common.bridge.ItemBridge", + "common.bridge.ServerChunkManagerBridge", + "common.bridge.ServerPlayerBridge", + "common.bridge.ServerWorldBridge", + "common.fixes.EndermanEntityMixin", + "common.fixes.LivingEntityMixin", "server.AbstractFurnaceBlockMixin", "server.LegacyQueryHandlerMixin", "server.MinecraftServerMixin",