From e19f83fff0b11b8bcfb3dc792fdeaa91f5c17b6d Mon Sep 17 00:00:00 2001 From: "vmbbi (Max)" Date: Sun, 23 Aug 2026 23:00:28 +0800 Subject: [PATCH 1/3] helmet --- .../dev/amble/plushies/PlushieBlocks.java | 4 +- .../plushies/item/PlushieHelmetItem.java | 37 +++++++++++++++++++ 2 files changed, 39 insertions(+), 2 deletions(-) create mode 100644 src/main/java/dev/amble/plushies/item/PlushieHelmetItem.java diff --git a/src/main/java/dev/amble/plushies/PlushieBlocks.java b/src/main/java/dev/amble/plushies/PlushieBlocks.java index dff856d..d69e389 100644 --- a/src/main/java/dev/amble/plushies/PlushieBlocks.java +++ b/src/main/java/dev/amble/plushies/PlushieBlocks.java @@ -5,6 +5,7 @@ import dev.amble.lib.container.impl.BlockContainer; import dev.amble.lib.item.AItemSettings; import dev.amble.lib.mixin.AbstractBlockAccessor; +import dev.amble.plushies.item.PlushieHelmetItem; import net.minecraft.block.Block; import net.minecraft.item.Item; import net.minecraft.registry.Registries; @@ -49,8 +50,7 @@ public static void registerAll(String namespace) { Registry.register(Registries.BLOCK, id, block); - Item item = self.createBlockItem(block, settings.itemSettings()); - + Item item = new PlushieHelmetItem(block, new AItemSettings().group(PlushieItemGroups.PLUSHIES)); Registry.register(Registries.ITEM, id, item); self.items.add(item); diff --git a/src/main/java/dev/amble/plushies/item/PlushieHelmetItem.java b/src/main/java/dev/amble/plushies/item/PlushieHelmetItem.java new file mode 100644 index 0000000..ffe562b --- /dev/null +++ b/src/main/java/dev/amble/plushies/item/PlushieHelmetItem.java @@ -0,0 +1,37 @@ +package dev.amble.plushies.item; // 根据你的包结构调整 + +import net.minecraft.block.Block; +import net.minecraft.entity.EquipmentSlot; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.item.BlockItem; +import net.minecraft.item.ItemStack; +import net.minecraft.sound.SoundCategory; +import net.minecraft.sound.SoundEvents; +import net.minecraft.util.Hand; +import net.minecraft.util.TypedActionResult; +import net.minecraft.world.World; + +public class PlushieHelmetItem extends BlockItem { + + public PlushieHelmetItem(Block block, Settings settings) { + super(block, settings); + } + + @Override + public TypedActionResult use(World world, PlayerEntity user, Hand hand) { + ItemStack stack = user.getStackInHand(hand); + // 检查头盔槽是否为空 + ItemStack headStack = user.getInventory().armor.get(EquipmentSlot.HEAD.getEntitySlotId()); + if (headStack.isEmpty()) { + // 将手上的物品复制一份放入头盔槽,并移除手上的物品 + user.getInventory().armor.set(EquipmentSlot.HEAD.getEntitySlotId(), stack.copy()); + stack.setCount(0); + world.playSound(null, user.getX(), user.getY(), user.getZ(), + SoundEvents.ITEM_ARMOR_EQUIP_GENERIC, + SoundCategory.PLAYERS, 1.0f, 1.0f); + return TypedActionResult.success(stack); + } + // 槽位已被占用,执行原逻辑(即尝试放置方块) + return super.use(world, user, hand); + } +} From ab6934336f5c976f354edb99e5d6e366d191bc47 Mon Sep 17 00:00:00 2001 From: "vmbbi (Max)" Date: Sun, 23 Aug 2026 23:28:01 +0800 Subject: [PATCH 2/3] helmet but true --- .../dev/amble/plushies/MarketablePlushieBlock.java | 9 ++++++++- .../dev/amble/plushies/item/PlushieHelmetItem.java | 14 ++++++-------- 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/src/main/java/dev/amble/plushies/MarketablePlushieBlock.java b/src/main/java/dev/amble/plushies/MarketablePlushieBlock.java index fdf8704..24d0636 100644 --- a/src/main/java/dev/amble/plushies/MarketablePlushieBlock.java +++ b/src/main/java/dev/amble/plushies/MarketablePlushieBlock.java @@ -13,8 +13,10 @@ import net.fabricmc.api.Environment; import net.minecraft.block.*; import net.minecraft.block.entity.BlockEntity; +import net.minecraft.entity.EquipmentSlot; import net.minecraft.entity.LivingEntity; import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.item.Equipment; import net.minecraft.item.ItemPlacementContext; import net.minecraft.item.ItemStack; import net.minecraft.state.StateManager; @@ -39,7 +41,7 @@ import net.minecraft.world.World; import org.jetbrains.annotations.Nullable; -public class MarketablePlushieBlock extends AWaterloggableBlock implements BlockEntityProvider, BedrockModelProvider { +public class MarketablePlushieBlock extends AWaterloggableBlock implements BlockEntityProvider, BedrockModelProvider, Equipment { public static final IntProperty ROTATION = Properties.ROTATION; public static final int MAX_ROTATION_INDEX = RotationPropertyHelper.getMax(); @@ -78,6 +80,11 @@ public VoxelShape getOutlineShape(BlockState state, BlockView world, BlockPos po return SHAPE; } + @Override + public EquipmentSlot getSlotType() { + return EquipmentSlot.HEAD; + } + @Override public BlockRenderType getRenderType(BlockState state) { return BlockRenderType.ENTITYBLOCK_ANIMATED; diff --git a/src/main/java/dev/amble/plushies/item/PlushieHelmetItem.java b/src/main/java/dev/amble/plushies/item/PlushieHelmetItem.java index ffe562b..3d4eaa0 100644 --- a/src/main/java/dev/amble/plushies/item/PlushieHelmetItem.java +++ b/src/main/java/dev/amble/plushies/item/PlushieHelmetItem.java @@ -1,4 +1,4 @@ -package dev.amble.plushies.item; // 根据你的包结构调整 +package dev.amble.plushies.item; // 请根据实际情况调整包名 import net.minecraft.block.Block; import net.minecraft.entity.EquipmentSlot; @@ -20,18 +20,16 @@ public PlushieHelmetItem(Block block, Settings settings) { @Override public TypedActionResult use(World world, PlayerEntity user, Hand hand) { ItemStack stack = user.getStackInHand(hand); - // 检查头盔槽是否为空 - ItemStack headStack = user.getInventory().armor.get(EquipmentSlot.HEAD.getEntitySlotId()); - if (headStack.isEmpty()) { - // 将手上的物品复制一份放入头盔槽,并移除手上的物品 - user.getInventory().armor.set(EquipmentSlot.HEAD.getEntitySlotId(), stack.copy()); + // 头盔槽为空时直接装备 + if (user.getEquippedStack(EquipmentSlot.HEAD).isEmpty()) { + user.equipStack(EquipmentSlot.HEAD, stack.copy()); stack.setCount(0); world.playSound(null, user.getX(), user.getY(), user.getZ(), SoundEvents.ITEM_ARMOR_EQUIP_GENERIC, SoundCategory.PLAYERS, 1.0f, 1.0f); return TypedActionResult.success(stack); } - // 槽位已被占用,执行原逻辑(即尝试放置方块) + // 头盔槽被占用时,执行原 BlockItem 的放置逻辑 return super.use(world, user, hand); } -} +} \ No newline at end of file From 58cfffc9c67cec06801801258c58620e8a228272 Mon Sep 17 00:00:00 2001 From: "vmbbi (Max)" Date: Mon, 24 Aug 2026 15:19:23 +0800 Subject: [PATCH 3/3] theo stuff --- .../dev/amble/plushies/PlushieBlocks.java | 7 +--- .../plushies/item/PlushieHelmetItem.java | 35 ------------------- 2 files changed, 1 insertion(+), 41 deletions(-) delete mode 100644 src/main/java/dev/amble/plushies/item/PlushieHelmetItem.java diff --git a/src/main/java/dev/amble/plushies/PlushieBlocks.java b/src/main/java/dev/amble/plushies/PlushieBlocks.java index d69e389..57b1835 100644 --- a/src/main/java/dev/amble/plushies/PlushieBlocks.java +++ b/src/main/java/dev/amble/plushies/PlushieBlocks.java @@ -1,11 +1,8 @@ package dev.amble.plushies; -import dev.amble.lib.animation.HasBedrockModel; import dev.amble.lib.block.ABlockSettings; import dev.amble.lib.container.impl.BlockContainer; import dev.amble.lib.item.AItemSettings; -import dev.amble.lib.mixin.AbstractBlockAccessor; -import dev.amble.plushies.item.PlushieHelmetItem; import net.minecraft.block.Block; import net.minecraft.item.Item; import net.minecraft.registry.Registries; @@ -13,9 +10,7 @@ import net.minecraft.util.Identifier; import java.util.ArrayList; -import java.util.LinkedHashMap; import java.util.List; -import java.util.Map; public class PlushieBlocks extends BlockContainer { @@ -50,7 +45,7 @@ public static void registerAll(String namespace) { Registry.register(Registries.BLOCK, id, block); - Item item = new PlushieHelmetItem(block, new AItemSettings().group(PlushieItemGroups.PLUSHIES)); + Item item = self.createBlockItem(block, settings.itemSettings()); Registry.register(Registries.ITEM, id, item); self.items.add(item); diff --git a/src/main/java/dev/amble/plushies/item/PlushieHelmetItem.java b/src/main/java/dev/amble/plushies/item/PlushieHelmetItem.java deleted file mode 100644 index 3d4eaa0..0000000 --- a/src/main/java/dev/amble/plushies/item/PlushieHelmetItem.java +++ /dev/null @@ -1,35 +0,0 @@ -package dev.amble.plushies.item; // 请根据实际情况调整包名 - -import net.minecraft.block.Block; -import net.minecraft.entity.EquipmentSlot; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.item.BlockItem; -import net.minecraft.item.ItemStack; -import net.minecraft.sound.SoundCategory; -import net.minecraft.sound.SoundEvents; -import net.minecraft.util.Hand; -import net.minecraft.util.TypedActionResult; -import net.minecraft.world.World; - -public class PlushieHelmetItem extends BlockItem { - - public PlushieHelmetItem(Block block, Settings settings) { - super(block, settings); - } - - @Override - public TypedActionResult use(World world, PlayerEntity user, Hand hand) { - ItemStack stack = user.getStackInHand(hand); - // 头盔槽为空时直接装备 - if (user.getEquippedStack(EquipmentSlot.HEAD).isEmpty()) { - user.equipStack(EquipmentSlot.HEAD, stack.copy()); - stack.setCount(0); - world.playSound(null, user.getX(), user.getY(), user.getZ(), - SoundEvents.ITEM_ARMOR_EQUIP_GENERIC, - SoundCategory.PLAYERS, 1.0f, 1.0f); - return TypedActionResult.success(stack); - } - // 头盔槽被占用时,执行原 BlockItem 的放置逻辑 - return super.use(world, user, hand); - } -} \ No newline at end of file