public class BoxBlockEntity extends BlockEntity implements ExtendedScreenHandlerFactory, ImplementedInventory { private final DefaultedList inventory = DefaultedList.ofSize(9, ItemStack.EMPTY); public BoxBlockEntity() { super(Test.BOX_BLOCK_ENTITY); } //来自 ImplementedInventory 接口 @Override public DefaultedList getItems() { return inventory; } //这些方法来自 NamedScreenHandlerFactory 接口 @Override public @Nullable ScreenHandler createMenu(int syncId, PlayerInventory playerInventory, PlayerEntity player) { //我们将它提供给 screenHandler 作为我们的类实现 Inventory //一开始只有服务器(Server)有 Inventory ,这将在 ScreenHandler 中同步到客户端(Cilent) return new BoxScreenHandler(syncId, playerInventory, this); } @Override public Text getDisplayName() { return new TranslatableText(getCachedState().getBlock().getTranslationKey()); } //此方法来自 ExtendedScreenHandlerFactory //当它请求客户端(client)打开 screenHandler 时,在服务器(server)上调用此方法 //您写入 packetByteBuf 的内容将自动以(数据)包的形式传输到客户端 //并在客户端(client)调用带有 packetByteBuf 参数的 ScreenHandler 构造函数 // //您在此处插入内容的顺序与您需要提取它们的顺序相同。您不需要颠倒顺序! @Override public void writeScreenOpeningData(ServerPlayerEntity serverPlayerEntity, PacketByteBuf packetByteBuf) { //pos 字段是 BlockEntity 的公共字段 packetByteBuf.writeBlockPos(pos); } }