mc-entity · v1.20.1 · 2026-08-06 · sha256 c1f182a52ab74dd9
mc-entity v1.20.1A
Immutable. This exact content is served forever at /api/v1/blob/c1f182a52ab74dd9.
---
name: mc-entity
description: Fabric 实体开发。EntityType、FabricEntityTypeBuilder、MobCategory。触发词:实体、Entity、EntityType、SpawnRestriction
platform: fabric
version: "1.20.1"
dependencies: []
mappings: yarn
---
# 实体开发(Fabric 1.20.1)
## 快速开始
```java
// 1. 创建实体类
public class MyPigEntity extends PigEntity {
public MyPigEntity(EntityType<? extends MyPigEntity> type, World world) {
super(type, world);
}
}
// 2. 注册实体类型
private static final RegistrySupplier<EntityType<MyPigEntity>> MY_PIG =
Registry.register(
Registries.ENTITY_TYPE,
new Identifier(MOD_ID, "my_pig"),
EntityType.Builder.create(MyPigEntity::new, MobCategory.CREATURE)
.dimensions(EntityDimensions.changing(0.9f, 1.4f))
.maxTrackOffset(10)
.trackRangeBlocks(10)
.build()
);
// 3. 在 onInitialize() 中设置属性
@Override
public void onInitialize() {
EntityAttributeRegistry.register(MY_PIG,
MobEntity.createMobAttributes()
.add(EntityAttributes.GENERIC_MAX_HEALTH, 20.0)
.add(EntityAttributes.GENERIC_MOVEMENT_SPEED, 0.25)
);
}
```
## Decision: 选择实体类型
```
IF 有行为实体(动物、怪物)
→ 继承对应实体类(如 AnimalEntity、MonsterEntity)
IF 静态实体(不移动)
→ EntityType.Builder.of(Entity::new, MobCategory.MISC)
IF 需要在世界中自然生成
→ 设置 SpawnRestriction
```
## 实体渲染器(客户端)
```java
public class ExampleModClient implements ClientModInitializer {
@Override
public void onInitializeClient() {
EntityRendererRegistry.register(MY_PIG, (context) ->
new AnimalEntityRenderer<>(context.getModelLoader()
.getModelPart(EntityModelLayers.COW), new CowEntityModel(), 0.5f)
);
}
}
```
## Spawn Restriction(生成限制)
```java
@Override
public void onInitialize() {
SpawnRestrictionRegistration.mobSpawn().register(
MY_PIG,
SpawnRestriction.Location.ON_GROUND,
Heightmap.Type.MOTION_BLOCKING_NO_LEAVES,
MyPigEntity::canSpawn
);
}
```
## 常见错误
- ❌忘记在客户端 entrypoint 注册渲染器 — 实体显示为紫色
- ❌忘记设置 SpawnRestriction — 实体无法自然生成
- ❌ EntityDimensions 使用 `changing` vs `fixed` 错误 — 碰撞异常
- ❌在 `onInitialize()` 外注册 — 注册不生效
## 扩展点
| 配合 Skill | 协作说明 |
|-----------|---------|
| `mc-registry` | 实体通过 Registry.register() 注册 |
| `mc-mixin` | Mixin 用于修改实体行为 |
| `mc-datagen` | DataGen 生成实体语言和 loot table |