Files
netease-modsdk-wiki/docs/mcguide/27-网络游戏/课程10:使用Spigot开服/23-Spigot服自定义实体原理简介.md
2025-03-18 14:46:12 +08:00

73 lines
2.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
front:
hard: 入门
time: 60分钟
---
# Spigot自定义实体
## 简要原理
目前Spigot服自定义实体基于实体metadata实现换皮/继承创建实体的同时写入自定义实体identifier
- 客户端identifier和服务端identifier无须一一对应只需要在创建生物时确定即可
## 简要开发流程
- 开发流程如下:
1. 编写客户端Mod制作生物的模型、贴图、动画、客户端逻辑等
2. 编写Spigot插件制作生物运行逻辑、属性、生成规则等
- 对于客户端Mod来说请参照文档 [自定义生物](../../20-玩法开发/15-自定义游戏内容/3-自定义生物/01-自定义基础生物.md) 制作生物的模型、贴图、动画等
- 与纯基岩版的自定义生物区别在于绝大部分Components、ComponentGroups、events均需要通过Java插件实现无法通过Json配置生效
- 客户端Mod的主要作用为告知客户端当生成对应Identifier生物时渲染的模型、贴图、动画、碰撞体等
- 对于Spigot插件来说目前支持了三种自定义生物方式
- 简单换皮指定生物并通过Spigot接口修改生物属性如血量等
- 兼容MythicMob插件继承MythicMob生物类
- (Demo展示了4.13.0版本MythicMob的兼容方式)
- 其他版本的MythicMob请根据各个版本的接口进行兼容
- 反射注册类生物,并创建新生物类实例,覆写继承类方法,如攻击等,最后加入到世界中
- 详细步骤可参考Demo
## Demo详解
详见文档[自定义实体Demo详解](./30-Spigot服Demo详解/5-自定义实体Demo详解.md)
## Q&A
- 由于配置中的**components**、**component_groups**、**events**均为服务端逻辑因此均需Spigot插件实现直接在Json中配置无法生效或效果异常。目前已知可用的**components**如下:
- 自定义生物components
```
// 设置生物碰撞盒大小
"minecraft:collision_box": {
"width": 3,
"height": 3
}
// 设置生物可骑乘、骑乘位置,偏移、蹲伏可交互等
"minecraft:rideable": {
"priority": 0,
"seat_count": 2,
"crouching_skip_interact": true,
"family_types": [
"player"
],
"seats": [
{
"position": [ 0.0, 1, 0.0 ]
},
{
"position": [ 0.0, 1, -1.0 ]
}
]
},
// 设置骑乘生物是否可以蓄力跳跃,有则可跳跃,没有则不可跳跃
"minecraft:can_power_jump" : {}
```
- 1.12版本的Spigot由于需要使用Viaversion因此在通过反射注册新生物时需要注意生物的type必须复用已有的生物或者同时为Viaversion注册不然会出现生物无法生成的问题。