首页 > 解决方案 > FABRIC MODDING - BlockEntityRenderer 渲染块实体库存中的项目

问题描述

我的世界版本 1.17.1

我正在尝试创建一个类似于基座的块。它由一个具有 1 个插槽库存的块实体组成,它将在块顶部呈现其库存中的任何内容。我已经测试了 1 个插槽库存并确保它有效,但我似乎无法让 blockentityrenderer 获取其库存内容:(

@Override
public void render(SwapperBlockEntity entity, float tickDelta, MatrixStack matrices, VertexConsumerProvider vertexConsumers, int light, int overlay) {
    matrices.push();

    ItemStack stack = entity.getStack(0); //literally doesn't work like what???

    // Calculate the current offset in the y value
    double offset = Math.sin((entity.getWorld().getTime() + tickDelta) / 8.0) / 4.0;
    // Move the item
    matrices.translate(0.5, 0.8 + offset, 0.5);

    // Rotate the item
    matrices.multiply(Vec3f.POSITIVE_Y.getDegreesQuaternion((entity.getWorld().getTime() + tickDelta) * 4));

    MinecraftClient.getInstance().getItemRenderer().renderItem(stack, ModelTransformation.Mode.GROUND, light, overlay, matrices, vertexConsumers, 1);

    // Mandatory call after GL calls
    matrices.pop();
}

上面是每帧调用的渲染函数。我试图通过使用ItemStack stack = entity.getStack(0);它来获取插槽索引 0 中的 ItemStack,但什么结果都没有。我确信渲染代码的工作原理是用ItemStack stack = new ItemStack(Items.JUKEBOX, 1);确实有效的替换上面的代码。

唯一的问题是它entity.getStack(0);会返回一个空堆栈,即使它里面还有其他东西。没有错误。

public class SwapperBlockEntity extends ModBlockEntity implements ImplementedInventory {
    private final DefaultedList<ItemStack> items = DefaultedList.ofSize(1, ItemStack.EMPTY);

    public SwapperBlockEntity(BlockPos pos, BlockState state) {
        super(ModBlockEntities.SWAPPER_BLOCK_ENTITY, pos, state);
    }

    @Override
    public void readNbt(NbtCompound nbt){
        super.readNbt(nbt);
        Inventories.readNbt(nbt, items);
    }

    @Override
    public NbtCompound writeNbt(NbtCompound nbt){
        Inventories.writeNbt(nbt, items);
        return super.writeNbt(nbt);
    }

    @Override
    public DefaultedList<ItemStack> getItems() {
        return items;
    }
}

JUKEBOX 渲染演示

库存演示

注意:我使用的是 fabric wiki 提供的默认“ImplementedInventory.java”

任何帮助,将不胜感激!谢谢。

标签: javaminecraftminecraft-fabric

解决方案


推荐阅读