Skip to content

时装工坊 LyArmourers

LyArmourers 是面向 Minecraft 1.7.10 的时装系统,由 Bukkit 服务端插件和 Forge 客户端 MOD 组成。

服务端负责读取时装库、处理指令与权限、生成时装物品、保存玩家和实体时装、同步模型动作与特效配置;客户端负责管理界面、模型预览、玩家与实体渲染、手持物品渲染、更多动作骨骼兼容以及刀光、脚印、幻影等视觉效果。

项目不是完整的时装制作工具。时装文件需要提前制作并放入服务端时装库,玩家通过客户端界面选择、预览、穿戴或写入物品。

项目信息

项目内容
项目类型Bukkit 服务端插件与 Forge 客户端 MOD 混合项目
项目版本1.0.0
Minecraft 版本1.7.10
Forge 版本1.7.10-10.13.4.1614-1.7.10
Java 版本Java 8
客户端 MOD IDlyarmourers
服务端插件名LyArmourers
服务端主命令/lyarmourers
命令别名/lysz
业务消息通道armourers
粒子消息通道lycustom:main
粒子兼容通道lycustom

项目组成

模块安装位置用途
PLUGIN-LyArmourers-1.0.0.jarBukkit 服务端的 plugins 目录提供配置加载、时装库、指令、权限、实体时装、物品生成、插件消息、监听器和 API
MOD-LyArmourers-1.0.0.jar每位玩家客户端的 mods 目录提供 Forge 客户端界面、模型读取、模型渲染、动作兼容、物品预览和视觉特效

服务端插件与客户端 MOD 需要使用配套版本。

客户端 MOD 是显示和操作时装功能的必要组成部分。未安装客户端 MOD 的玩家无法使用管理界面,也无法看到 .armour.lyarmourers.bbmodel 模型以及刀光、脚印、幻影和 LyCustom 粒子效果。

依赖与兼容

项目类型说明
Minecraft Forge客户端必需客户端 MOD 使用 Forge 1.7.10-10.13.4.1614-1.7.10
PlaceholderAPI可选软依赖安装后注册 %lysz_部位% 时装显示状态变量
CustomNPCs可选兼容客户端可为 noppes.npcs.entity.EntityCustomNpc 渲染 .armour.bbmodel 时装

服务端插件和客户端 MOD 只通过插件消息通信。服务端代码不会直接调用客户端 MOD 类。

玩法与数据流

  1. 服务端管理员把支持的时装文件放入 plugins/LyArmourers/skins
  2. 玩家通过 /lyarmourers manager 打开客户端时装管理界面。
  3. 客户端向服务端请求目录、时装类型和预览文件。
  4. 玩家可以把时装写入背包物品、获取新的时装物品,或合并多个 .armour 文件。
  5. 实体管理界面可以为附近玩家、生物和 CustomNPCs NPC 设置临时时装或永久时装。
  6. 服务端通过插件消息同步时装路径、实体状态、模型动作和视觉特效,客户端负责实际读取与渲染。

时装库支持多层目录。客户端只能读取服务端时装库索引中存在的文件,路径会经过清理和目录穿越保护,不能通过 .. 访问时装库之外的文件。

支持的时装格式

格式说明
.armourArmourer's Workshop 时装文件,使用内置兼容读取、烘焙和渲染流程
.lyarmourers本项目兼容后缀,按照 .armour 流程读取和渲染
.bbmodel支持 Blockbench 工程、Bedrock geometry 和 LyCustom ModelData 包装

.armour 合成功能只接受真实 .armour 源文件,不能把 .bbmodel 合成为 .armour。合成结果保存在 plugins/LyArmourers/skins/时装合成

.bbmodel 支持的 geometry 版本为 1.12.01.10.01.8.0。模型可以包含贴图、发光贴图、类型设置、部位隐藏设置、动画关键帧、表达式和粒子事件。

主要功能

时装库与管理界面

  • 浏览服务端时装库及多层目录。
  • 按名称和时装类型筛选文件。
  • 请求并缓存 .armour.lyarmourers.bbmodel 预览。
  • 把时装拖拽到背包物品并写入时装 NBT。
  • 以配置的物品模板生成新时装物品。
  • 合并多个 .armour 时装并保存为新的 .armour 文件。
  • 服务端自动对大型预览文件进行分片传输。

玩家与物品时装

  • 渲染玩家头部、身体、腿部、脚部、翅膀和套装时装。
  • 渲染剑、弓、镐、斧、铲、锄、盾牌、方块和普通物品时装。
  • 支持玩家原版头盔、胸甲、护腿和鞋子槽位中的时装物品。
  • 支持背包和快捷栏中的时装模型图标。
  • 支持鼠标悬停时在物品提示旁显示模型预览。
  • 支持第一人称右臂替换和第一人称手持时装。
  • 支持第三人称手持物品与更多动作右手、前臂骨骼挂点。

时装物品使用以下 NBT:

text
LyArmourers
└─ skin: String

skin 保存去除空白字符后的末级时装文件名 ID。客户端收到全库索引后,再把该 ID 解析为服务端时装库中的真实相对路径。

物品自身的时装 NBT 只改变该物品的外观,不代表把同一时装穿到玩家身体上。

实体时装

  • 列出玩家附近 16 格内已经加载的玩家、生物和 CustomNPCs NPC。
  • 按距离从近到远显示实体,距离相同时按实体 ID 排序。
  • 为实体设置临时时装或永久时装。
  • 永久数据写入实体 ForgeData NBT,并同步维护 entity-skins.yml 索引。
  • 临时时装在当前服务端会话内有效,服务端重启后失效。
  • 实体加载、区块加载、实体生成和玩家进入服务器时自动同步时装。
  • 客户端发现可见实体没有缓存时,会主动请求该实体的时装列表。
  • 运行时实体 ID 优先用于定位非玩家实体,减少客户端与服务端 UUID 不一致造成的保存错误。

在目标 Forge/Cauldron 1.7.10 环境中,永久实体时装采用实体 NBT 与 YAML 索引双写。在无法访问 Forge getEntityData() 的纯 Bukkit 环境中,NBT 操作会安全失败,并继续使用 YAML 索引保存和同步。

模型与动作

  • .armour 时装接入更多动作的上臂、前臂、大腿和小腿骨骼。
  • 将玩家 .bbmodel 标准骨骼绑定到更多动作玩家模型。
  • 自动选择 idlewalkrunsprintsneakattackswing 等动作。
  • 支持连续攻击重播与攻击连击动作。
  • 支持由服务端强制播放或停止实体模型动作。
  • 支持循环动作和动作切换过渡时间的 API 控制。
  • CustomNPCs NPC 保留自身动作系统,时装只读取当前 ModelMPM 部位矩阵,不会覆盖 NPC 的动作计算。

视觉特效

  • 为指定玩家开启第三人称奔跑骨骼幻影。
  • 配置幻影寿命、绘制间隔、姿态快照间隔、最大数量和透明度。
  • 为指定玩家绑定自定义刀光配置。
  • 为指定玩家绑定自定义脚印配置。
  • 支持刀光和脚印静态图片或 GIF。
  • 支持脚印缩放、宽度、长度、透明度、旋转、移动和颜色动画。
  • 支持 LyCustom 粒子消息,当前固定对外粒子名为 暴雪粒子

刀光和脚印的 YAML 由服务端同步,实际图片或 GIF 不会由服务端传输,需要放在玩家客户端:

特效客户端资源目录
刀光resourcepacks/LyArmourers/SwordTrails/
脚印resourcepacks/LyArmourers/FootPrints/

服务端配置概览

默认配置位于 plugins/LyArmourers/config.yml

配置项说明
debug是否记录非查询 API 的详细调用来源与参数
render-player-equipment-skins是否渲染玩家原版四个装备槽中带时装 NBT 的物品
render-item-skin-preview是否显示物品槽位时装模型图标和鼠标悬停预览
afterimage.lifetime-ticks单份幻影的存在时间,单位 tick
afterimage.draw-interval-ticks把最近姿态加入可见幻影队列的最小间隔
afterimage.snapshot-interval-ticks从真实玩家模型读取骨骼姿态的最小间隔
afterimage.maximum-count单个玩家同时保留的最大幻影数量
afterimage.alpha最新幻影的不透明度,范围 0255
item.material新时装物品使用的基础材质
item.name新时装物品的显示名称模板
item.lore新时装物品的 Lore 模板

物品名称和 Lore 支持 & 颜色代码,并支持 {skin}{player} 变量。

指令

主命令为 /lyarmourers,别名为 /lysz

指令说明权限
/lyarmourers manager [玩家]为自己或指定在线玩家打开时装管理界面lyarmourers.manager
/lyarmourers entity [玩家]为自己或指定在线玩家打开实体时装界面lyarmourers.manager
/lyarmourers setskin <时装ID>把指定时装 ID 写入当前手持物品,不改变材质、数量、名称和 Lorelyarmourers.manager
/lyarmourers animation <在线玩家> play <动作名>强制目标玩家播放一次模型动作lyarmourers.manager
/lyarmourers animation <在线玩家> stop停止目标玩家的强制动作并恢复自动动作lyarmourers.manager
/lyarmourers afterimage <在线玩家> <on|off>开启或关闭目标玩家奔跑时的第三人称骨骼幻影lyarmourers.manager
/lyarmourers swordtrail <在线玩家> <配置ID|none>设置目标玩家的刀光;none 使用 MOD 内置默认刀光lyarmourers.manager
/lyarmourers footprint <在线玩家> <配置ID|none>设置目标玩家的脚印;none 关闭脚印lyarmourers.manager
/lyarmourers hidepart <在线玩家> <部位>隐藏目标玩家指定部位的时装lyarmourers.manager
/lyarmourers showpart <在线玩家> <部位>恢复显示目标玩家指定部位的时装lyarmourers.manager
/lyarmourers reload重载配置、服务缓存、刀光和脚印资源,并同步在线玩家lyarmourers.admin

hidepartshowpart 支持以下英文部位:

text
head、body、legs、feet、wings、outfit、sword、bow、pickaxe、axe、shovel、hoe、shield、item、block、weapon、all

对应的中文部位名称同样可以使用。部位显示状态只保存在当前服务端运行内存中,服务端重启后会清空。

权限

权限默认值说明
lyarmourers.managerOP允许打开并操作时装管理界面、实体界面以及玩家时装和特效管理指令
lyarmourers.adminOP允许重载 LyArmourers 配置、刀光和脚印资源

PlaceholderAPI 变量

启用 PlaceholderAPI 后,服务端插件注册变量标志 lysz。变量格式为 %lysz_部位%,显示时返回 show,隐藏时返回 hide

变量说明
%lysz_head%读取头部时装显示状态
%lysz_body%读取身体时装显示状态
%lysz_wings%读取翅膀时装显示状态
%lysz_sword%读取剑类时装显示状态
%lysz_all%读取全部时装显示状态

玩家不存在或部位参数无效时返回空字符串。变量读取的是当前服务端会话状态,不进行持久化。

API 与事件

外部 Bukkit 插件通过 Ly.armourers.client.plugin.api.LyArmourersAPI 使用稳定 API。API 可以设置、清除和查询实体时装,控制玩家部位显示状态、控制全局时装可见状态、读取物品时装、查询时装库,以及播放或停止模型动作。

外部插件可以通过 Start.getInstance().getApi() 获取实现。服务端业务尚未初始化时,该方法返回 null,调用前必须检查 API 是否可用。

Plugin 模块提供以下 Bukkit 事件契约:

事件说明
EntitySkinUpdateEvent实体时装写入前触发,可调整最终时装列表,并可读取是否为持久更新
PlayerSkinUpdateEvent玩家时装写入前触发,可调整最终时装列表

事件类位于 Plugin 模块,外部插件只需要依赖 Plugin Jar。