= 创作分享 =
编程开发
forge1.20.1 方块实体数据同步相关问题
Strange_Smell

forge1.20.1 方块实体数据同步相关问题

556 1
C江秋
本帖最后由 C、江秋菌 于 2024-3-9 21:18 编辑

我也不是特别懂渲染的问题,但你可以试试先创建一个类:
  1. package net.mcreator.test.procedures;//不要在意Mcr(>-<)

  2. import net.minecraft.world.level.block.entity.BlockEntity;
  3. import net.minecraft.world.level.LevelAccessor;
  4. import net.minecraft.core.BlockPos;

  5. public class ShowProcedure {//这里的ShowProcedure就是你后面需要调用的
  6.     public static void execute(LevelAccessor world, double x, double y, double z) {      
  7.         BlockEntity blockEntity = world.getBlockEntity(new BlockPos((int) x, (int) y, (int) z));
  8.         if (blockEntity != null) {
  9.             // 如果 BlockEntity 存在,那么标记它需要更新
  10.             blockEntity.setChanged();
  11.         }
  12.     }
复制代码

再在你的实体类代码里加一段这个:  
  1. @Override
  2.     public ItemStack removeItem(int index, int count) {
  3.         ItemStack removedItem = super.removeItem(index, count);

  4.         // 当物品被移除时,调用一个新的方法来更新渲染
  5.         if (!removedItem.isEmpty()) {
  6.             ShowProcedure.execute(level, worldPosition.getX(), worldPosition.getY(), worldPosition.getZ());
  7.         }

  8.         return removedItem;
  9.    
复制代码

这个我拿Mcr的“物品槽内容改变时的”代码改的,不知道能不能成功
始终在征程上。
发表于 2024-3-9 21:00:58 | 显示全部楼层

回复 | 举报

C江秋
QQ酱277476 发表于 2024-3-9 22:30
我试试,但渲染是没问题的,只是渲染的时候获取的容器内的items在取出时不能更新,而放入时就可以更新 ...

这样看应该是你的状态没更新我想了想可以通过网络消息检测箱子中物品种类是否发生变化,然后标记需要更新,接下来再次调用渲染代码更新全部需要更新的方块,这样做比较暴力且可能在多人游戏里卡顿比较明显,不过我能想到就这样了其他的方法我就不知道了。
始终在征程上。
发表于 2024-3-9 23:43:14 | 显示全部楼层

回复 | 举报

百科目前不允许匿名发帖哦~ 请先 [ 登陆 ][ 注册 ] 吧~

本版积分规则

发新帖
  • 回复
  • 点评
  • 评分

[ MC百科(mcmod.cn) 除另有声明,所有开放公共编辑的内容均使用 BY-NC-SA 3.0 协议 ]

Minecraft百科CC协议
快速回复 返回顶部 返回列表