java - 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;
}
}
注意:我使用的是 fabric wiki 提供的默认“ImplementedInventory.java”
任何帮助,将不胜感激!谢谢。
解决方案
推荐阅读
- c++ - 返回 std::move(m_field) 还是返回 m_field?
- typescript - Vscode在指定行使用showTextDocument打开文件
- python - 基于 DataFrame 的条件查找的返回值
- javascript - 如何获取 Javascript 5 中某个字段的 JSON 字段的总和?
- swift - Xcode iOS 无需导入即可访问类
- python - 如何在 Python 中拼凑边缘检测结果和原始图片
- reactjs - 如何更改 Material UI 抽屉的边框颜色?
- rust - 使用 Serde 进行序列化时,有没有办法对结构的字段进行分组,例如“flatten”属性的反转?
- python - xlwings 持久化 Python 对象
- javascript - 当它是一个单独的 .js 文件时,无法让 JavaScript 在 HTML 网页中工作