04-entity · diff

git:20260818.b1ccba0 to git:20260819.3d8075a

9 added, 4 removed. Audit A to A.

# 04 — 实体开发
> 适用版本:Fabric 1.14.4
---
## 约束
### 核心原则
- 实体必须在 `Registry.register(Registry.ENTITY_TYPE, id, type)` 中注册(1.14.x 没有 `Registries`)
- 属性在实体类里重写 `initAttributes()`。没有 `FabricDefaultAttributeRegistry`
- Yarn 枚举是 `EntityCategory`,不是后来的 `SpawnGroup` / Mojmap `MobCategory`
- 不要用 Forge `RegistryObject`
- 渲染器只在 `ClientModInitializer` 注册
---
## Decision Flow
```
IF 静态实体
→ EntityType.Builder.create(..., EntityCategory.MISC)
IF 有行为实体
→ EntityType.Builder.create(..., EntityCategory.CREATURE)
→ 重写 initAttributes()
```
## 基本实体注册
```java
public class MyPigEntity extends PigEntity {
public MyPigEntity(EntityType<? extends MyPigEntity> type, World world) {
super(type, world);
}
@Override
protected void initAttributes() {
super.initAttributes();
this.getAttributeInstance(EntityAttributes.MAX_HEALTH).setBaseValue(20.0);
}
}
public static final EntityType<MyPigEntity> MY_PIG = Registry.register(
Registry.ENTITY_TYPE,
new Identifier(MOD_ID, "my_pig"),
EntityType.Builder.<MyPigEntity>create(MyPigEntity::new, EntityCategory.CREATURE)
- .size(0.9f, 1.4f)
- .build(null)
+ .setDimensions(0.9f, 1.4f)
+ .build("my_pig")
);
```
+ Yarn 1.14.4+build.18 tiny:Vanilla `EntityType.Builder` 尺寸方法是 `setDimensions(float,float)`,`build` 需要 String id。不要写 MCP 的 `.size()` 或 `.build(null)`。
+
## 实体渲染器(客户端)
```java
public class ExampleModClient implements ClientModInitializer {
@Override
public void onInitializeClient() {
- EntityRendererRegistry.register(MY_PIG, (dispatcher, context) ->
- new LivingEntityRenderer<MyPigEntity>(dispatcher, new MyPigEntityModel(), 0.5f)
+ // 包:net.fabricmc.fabric.api.client.render.EntityRendererRegistry
+ // register 是实例方法,第一参是 Class(不是 EntityType)
+ EntityRendererRegistry.INSTANCE.register(MyPigEntity.class, (dispatcher, context) ->
+ new PigEntityRenderer(dispatcher)
);
}
}
```
## fabric.mod.json 配置
```json
{
"entrypoints": {
"main": ["com.example.examplemod.ExampleMod"],
"client": ["com.example.examplemod.ExampleModClient"]
}
}
```
## 常见错误
- 忘记 `client` entrypoint — 实体无渲染
- 把 1.16+ 的 `FabricDefaultAttributeRegistry` / `SpawnGroup` / `Registries` 抄到 1.14.4
+ - Vanilla Builder 写成 `.size()` 或 `.build(null)`(本档 Yarn 是 `setDimensions` + `build("id")`)
- 用 Forge `RegistryObject` 包住 `Registry.register` 的返回值