zh_cn:tutorial:blockentity
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
zh_cn:tutorial:blockentity [2022/07/17 12:12] – 少了一个空格 luo_tian_wy | zh_cn:tutorial:blockentity [2023/09/03 01:37] (current) – [序列化数据] wjz_p | ||
---|---|---|---|
Line 1: | Line 1: | ||
- | ====== 添加一个方块实体 ====== | + | ====== 添加方块实体 ====== |
===== 介绍 ===== | ===== 介绍 ===== | ||
- | + | 方块实体主要用于在方块内存储数据。创建之前,您需要一个[[zh_cn: | |
- | BlockEntity主要用于在方块内存储数据。创建之前,您需要一个[[zh_cn: | + | |
===== 创建一个方块实体 ===== | ===== 创建一个方块实体 ===== | ||
- | 最简单的方块实体仅继承'' | + | 最简单的方块实体仅继承 '' |
<code java> | <code java> | ||
Line 17: | Line 16: | ||
</ | </ | ||
- | 下面将向您展示如何创建'' | + | 请确保这个构造方法只接收这两个参数,否则我们后面写的方法引用 '' |
- | + | ||
- | 您可以简单地向此准系统类添加变量,或实现诸如'' | + | 您可以简单地向此准系统类添加变量,或实现诸如 '' |
===== 注册你的方块实体 ===== | ===== 注册你的方块实体 ===== | ||
- | 一旦创建了'' | + | 一旦创建了 '' |
- | '' | + | '' |
<code java> | <code java> | ||
- | public static BlockEntityType< | + | |
- | + | Registries.BLOCK_ENTITY_TYPE, | |
- | @Override | + | new Identifier(" |
- | public void onInitialize() { | + | |
- | | + | |
- | } | + | |
</ | </ | ||
+ | |||
+ | 这个方块实体类型定义了只有 '' | ||
==== 将方块实体连接到方块 ==== | ==== 将方块实体连接到方块 ==== | ||
- | 一旦创建并注册了'' | + | 一旦创建并注册了 '' |
<code java> | <code java> | ||
Line 54: | Line 54: | ||
===== 序列化数据 ===== | ===== 序列化数据 ===== | ||
- | 如果要将任何数据存储在 '' | + | 如果您想在 '' |
- | '' | + | '' |
+ | |||
+ | 知道了这一点,下面的示例演示了如何将 '' | ||
<code java> | <code java> | ||
Line 70: | Line 72: | ||
// 序列化方块实体 | // 序列化方块实体 | ||
@Override | @Override | ||
- | public void writeNbt(NbtCompound | + | public void writeNbt(NbtCompound |
- | writeNbt(tag); | + | |
// Save the current value of the number to the tag | // Save the current value of the number to the tag | ||
- | | + | |
+ | |||
+ | super.writeNbt(nbt) | ||
} | } | ||
} | } | ||
</ | </ | ||
- | 为了以后检索数据,您还需要覆盖 '' | + | 为了以后读取数据,您还需要覆盖 '' |
<code java> | <code java> | ||
- | // 取消序列化方块实体 | + | // 反序列化方块实体 |
@Override | @Override | ||
- | public void readNbt(NbtCompound | + | public void readNbt(NbtCompound |
- | super.readNbt(tag); | + | super.readNbt(nbt); |
- | number = tag.getInt(" | + | |
+ | number = nbt.getInt(" | ||
} | } | ||
</ | </ | ||
- | 一旦实现了 '' | + | 一旦实现了 '' |
===== 将服务器数据同步至客户端 ===== | ===== 将服务器数据同步至客户端 ===== | ||
- | 数据通常是在服务器世界读取的。有时候你需要将所有或者部分数据同步到客户端,比如用于渲染。 | + | 数据通常是在服务器世界读取的。大多数数据都是客户端不需要知道的,例如客户端并不需要知道箱子和熔炉里面有什么,除非打开它。但对于某些方块实体,例如告示牌和旗帜,你需要将所有或者部分数据告知客户端,比如用于渲染。 |
- | 对于 1.17.1 及以下版本,请实现 Fabric API 中的'' | + | 对于 1.17.1 及以下版本,请实现 Fabric API 中的 '' |
对于 1.18 及以上版本,请覆盖 '' | 对于 1.18 及以上版本,请覆盖 '' | ||
Line 110: | Line 113: | ||
} | } | ||
</ | </ | ||
- | **警告**: 需要调用'' | + | **警告**: 需要调用 '' |
===== 方块实体刻 ===== | ===== 方块实体刻 ===== | ||
1.17 添加了静态的刻,然后你就可以实现 '' | 1.17 添加了静态的刻,然后你就可以实现 '' | ||
Line 128: | Line 131: | ||
} | } | ||
</ | </ | ||
- | 在你的 '' | + | 在你的 '' |
<code java> | <code java> | ||
public class DemoBlockEntity extends BlockEntity { | public class DemoBlockEntity extends BlockEntity { |
zh_cn/tutorial/blockentity.1658059956.txt.gz · Last modified: 2022/07/17 12:12 by luo_tian_wy