本篇教程参考为的NeoForge1.20.4Mod开发的视频,这篇教程是我边学边总结的,与其说是教程更像我的学习笔记,如有不清楚的地方,大家可以在评论区提问。在我力所能及的范围内,我都会解答的。
这次我们来使用原版给我们提供的ItemHandler处理物品的输入和输出。关于介绍看之前的教程,然后我们这次实现一个垃圾桶,从上方输入,然后删除物品
常规的方块注册
public class Trash extends BaseEntityBlock {
public Trash() {
super(BlockBehaviour.Properties.ofFullCopy(Blocks.STONE));
}
@Override
protected MapCodec<? extends BaseEntityBlock> codec() {
return null;
}
@Override
public @Nullable BlockEntity newBlockEntity(BlockPos pos, BlockState state) {
return new TrashBlockEntity(pos, state);
}
@Override
@SuppressWarnings("deprecation")
public @NotNull RenderShape getRenderShape(BlockState state) {
return RenderShape.MODEL;
}
}
方块实体注册
public class TrashBlockEntity extends BlockEntity {
public TrashBlockEntity(BlockPos pos, BlockState blockState) {
super(ModBlockEntities.TRASH_BLOCK_ENTITY.get(), pos, blockState);
}
}
public static final Supplier<BlockEntityType<TrashBlockEntity>> TRASH_BLOCK_ENTITY=
BLOCK_ENTITIES.register("trash_block_entity", () ->
BlockEntityType.Builder.of(TrashBlockEntity::new,ModBlocks.TRASH.get()).build(null));
给我们的实体注册的对于的物品处理的能力。我们让provider返回物品处理的API接口,我们自己实现这个API接口
public class TrashItemHandler extends ItemStackHandler {
/**
* 获取物品处理器的槽位数量。
*
* @return 槽位数量,固定为 1
*/
@Override
public int getSlots() {
return 1;
}
/**
* 获取指定槽位的物品堆叠。
*
* @param slot 槽位索引
* @return 空的物品堆叠
*/
@Override
public ItemStack getStackInSlot(int slot) {
return ItemStack.EMPTY;
}
/**
* 将物品插入指定槽位。
*
* @param slot 槽位索引
* @param stack 要插入的物品堆叠
* @param simulate 是否为模拟插入
* @return 插入后剩余的物品堆叠
*/
@Override
public ItemStack insertItem(int slot, ItemStack stack, boolean simulate) {
if (simulate)
{
return ItemStack.EMPTY;
}
else {
stack = stack.copy();
stack.shrink(1);
return stack;
}
}
/**
* 从指定槽位提取物品。
*
* @param slot 槽位索引
* @param amount 要提取的数量
* @param simulate 是否为模拟提取
* @return 空的物品堆叠
*/
@Override
public ItemStack extractItem(int slot, int amount, boolean simulate) {
return ItemStack.EMPTY;
}
/**
* 获取指定槽位的物品数量限制。
*
* @param slot 槽位索引
* @return 槽位索引值
*/
@Override
public int getSlotLimit(int slot) {
return slot;
}
/**
* 判断指定槽位是否可以接受给定的物品堆叠。
*
* @param slot 槽位索引
* @param stack 物品堆叠
* @return 始终为true
*/
@Override
public boolean isItemValid(int slot, ItemStack stack) {
return true;
}
}
event.registerBlockEntity(
Capabilities.ItemHandler.BLOCK,
ModBlockEntities.TRASH_BLOCK_ENTITY.get(),
(myBlockEntity,side)->{
if (side== Direction.UP){
return new TrashItemHandler();
}
return null;
}
);
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END








暂无评论内容