# Spigot自定义方块原理简介
# 简要原理
目前Spigot服自定义方块实际上为头颅换皮
当头颅的 SkullOwner 由形如 geyser_custom_block_xxx(自定义方块identifier) 组成时,Geyser会把对应头颅方块转换成客户端自定义方块
如:
- SkullOwner : "geyser_custom_block_custom:my_block1" 的头颅 最终会转成客户端自定义方块 custom:my_block1
- SkullOwner : "geyser_custom_block_custom:my_block2" 的头颅 最终会转成客户端自定义方块 custom:my_block2
- SkullOwner : "geyser_custom_block_custom:my_block3" 的头颅 最终会转成客户端自定义方块 custom:my_block3
- SkullOwner : "geyser_custom_block_custom:custom_block_squirrel" 的头颅 最终会转成客户端自定义方块 custom:custom_block_squirrel
# 简要开发流程
开发流程如下:
- 编写客户端Mod,配置方块Json、客户端逻辑等
- 编写Spigot插件,制作基于头颅实体的自定义逻辑等
对于客户端Mod来说,请参照文档 自定义生物 制作自定义方块
对于Spigot插件来说,仅需给对应Skull方块设置上给定要求的SkullOwner即可,如:
- 简单发放物品的情况:
/give @s minecraft:skull 64 3 {SkullOwner: { "Name" : "geyser_custom_block_custom:my_block3"}}
- 设置方块的情况:
Location loc = new Location(world, x, y, z); Block block = loc.getBlock(); block.setType(Material.SKULL); Skull skull = (Skull) block.getState(); String owner = "geyser_custom_block_custom:my_block3"; skull.setOwningPlayer(Bukkit.getOfflinePlayer(owner)); skull.update();
- 简单发放物品的情况:
# Demo详解
详见文档自定义实体Demo详解
# 鸣谢
感谢 布吉岛(妖猫) 团队对自定义方块功能的支持