This commit is contained in:
boybook
2025-12-01 20:59:16 +08:00
parent 12738a142c
commit 760c2dd9ad
5535 changed files with 21070 additions and 2021 deletions

View File

@@ -0,0 +1,56 @@
---
front:
hard: 入门
time: 60分钟
---
# Spigot自定义物品
## 简要原理
- 基于目前Spigot服相关接口、自定义物品流程Spigot服的自定义物品实际上是原生Java物品的换皮物品客户端Mod利用字段**java_identifier**来标识
- Geyser服加载客户端Mod后根据**java_identifier**字段记录自定义物品与原生Java物品的映射并在使用物品时调用原生物品相关的逻辑
- 对于Spigot服来说自定义物品实际上还是原生Java物品不过相比于Java原生物品由自定义物品转换而来的物品会拥有额外数据用以标识
## 简要开发流程
- 对于客户端Mod来说参照文档[自定义物品](../../20-玩法开发/15-自定义游戏内容/1-自定义物品/1-自定义基础物品.md),自定义客户端物品,与基岩版区别在于,额外加上**java_identifier**字段用于表示何种Java物品换皮
- 对于Spigot插件来说根据Spigot相关接口构造ItemStack物品并实现相关逻辑
- 详细步骤可参考Demo
## Demo详解
详见文档[自定义物品Demo详解](./30-Spigot服Demo详解/1-自定义物品Demo详解.md)
## Q&A
- 目前Mod由Geyser进行分发、预加载因此通过相同Geyser连接的玩家加载的Mod都相同加载到的自定义物品也相同
- 目前自定义物品实际为Java原生物品换皮因此当**java_identifier**字段与Spigot服实际创建的物品不一致时物品表现会存在问题
- "java_identifier"字段取值为Java版物品的命名空间ID, 如自定义物品为木剑换皮,则填 "java_identifier" : "wooden_sword"
更多物品命名空间ID详见[官方WiKi](https://zh.minecraft.wiki/w/%E7%89%A9%E5%93%81)
- 由于配置中的**Components**有一部分为双端逻辑,因此此类**Components**的逻辑需要由Spigot插件实现直接在Json中配置无法生效或效果异常。目前已知不可用**Component**如下:
- 基岩版自定义物品中用于物品防火的组件
```
设置物品是否防火
"netease:fire_resistant"{ "value" : true}
```
- 基岩版自定义物品中用于物品是否可做燃料的组件
```
设置物品是否可作为燃料
"netease:fuel" { "value" : true}
```
- 基岩版自定义物品中用于物品的使用间隔
```
设置物品使用间隔
"netease:cooldown" : { "duration" : 5}
```