YiyunCEskin - 专为CraftEngine设计的皮肤插件 | 支持Folia | 1.21.4+

原创 工具 娱乐 YiyunCEskin - 专为CraftEngine设计的皮肤插件 | 支持Folia | 1.21.4+ v1.3.2

请登录后获取
[MD] - 新增GUI按钮可自定义配置控制台或者玩家身份执行命令功能 [/MD]
[MD] YiyunCEskin v1.3.1 更新日志 本次更新主要优化皮肤预览权限:玩家即使尚未获得皮肤使用权限,也可以先查看实际预览效果,再决定是否解锁、购买或通过好友共享获得。 无权限预览 - 无皮肤使用权限的玩家现在默认可以右键预览锁定皮肤。 - 左键应用仍会执行完整权限检查,无权限玩家无法真正使用皮肤。 - 无权限预览只跳过最终的 Bukkit 皮肤权限,不会授予永久使用权。 - 预览不会写入真实物品,也不能借此设置默认皮肤或绕过授权机制。 访问权限分层 - 新增 VIEW、PREVIEW、APPLY 三种访问操作: - VIEW:是否能在目录和 GUI 中看到皮肤。 - PREVIEW:是否可以临时预览皮肤。 - APPLY:是否可以真正应用皮肤。 - 第三方插件可以通过 SkinAccessContext.operation() 判断当前操作,分别控制查看、预览和使用权限。 - 新增 checkSkinPreviewAccess(),方便外部插件直接查询玩家能否预览指定皮肤。 - 新增 OPERATION_SCOPED_ACCESS API 能力标识,便于第三方插件进行版本兼容和能力探测。 安全限制 - GUARD 阶段的黑名单、封禁等强制限制仍然优先执行,无权限预览无法绕过。 - 第三方访问提供器明确返回 DENY 时,预览仍会被拒绝。 - 隐藏皮肤不会因为开放预览而向普通玩家泄露,管理员仍可正常查看和调试。 - 设置了 preview.enabled: false 的皮肤将完全禁止预览。 - 主 API、GUI 和直接调用 PreviewManager 都会进行最终预览授权检查。 配置支持 新增全局配置,默认允许无使用权限预览: preview: allow-without-access: true 单个皮肤可以覆盖全局设置: preview: enabled: true allow-without-access: false - true:允许无使用权限的玩家预览该皮肤。 - false:必须拥有使用权限才能预览。 - 不填写:跟随主配置中的全局设置。 GUI 与稳定性 - 锁定皮肤会保留右键预览入口,并显示对应操作提示。 - 自定义 locked-item 现在也会保留皮肤标识,可以正常响应右键预览。 - 预览事件被取消或预览启动失败时,会正确清理玩家的预览状态。 - GUI 的查看权限、预览权限和应用权限现在分别判定,行为更加清晰。 [/MD]
[MD] 新增:API 版本与能力探测 - 新增 ApiVersion 语义版本模型,当前 API 版本为 1.3.0。 - 新增 ApiCapability 能力枚举。 - YiyunCESkin 新增: - apiVersion() - capabilities() - supports(ApiCapability) - 第三方插件可以按能力进行兼容和降级,不再需要反射检查方法或直接比较插件版本字符串。 - 能力范围覆盖服务发现、目录快照、分层授权、所有者注册、批量访问检查、结构化操作结果、精确失效和 CE 桥接等基础设施。 新增:Bukkit 服务发现 - 插件启用时自动将 YiyunCESkin 注册到 Bukkit ServicesManager。 - 插件停用时自动注销服务。 - 第三方插件可以监听服务注册与注销,解决复杂插件加载顺序问题。 - 原有 YiyunCESkin.api() 静态入口继续保留。 新增:统一扩展生命周期 - 新增通用扩展句柄 ExtensionRegistration<T>。 - 新增 SkinModifierRegistration 和 ActionRegistration。 - SkinAccessRegistration 接入统一注册语义。 - 访问提供器、皮肤修改器和自定义动作现在均支持: - 关联所有者插件; - 查询扩展 ID、所有者和扩展实例; - 判断当前注册是否仍然有效; - 幂等 close(); - 所有者插件停用时自动卸载; - 相同 ID 或动作的安全替换; - 旧句柄关闭时不会错误删除后来注册的替代者。 - 自定义动作卸载后,会自动恢复 YiyunCEskin 原有的内置动作实现。 新增:分层动态访问策略 - 新增 SkinAccessPhase: - GUARD:黑名单、服务器封禁和强制限制; - GRANT:好友、会员、活动和临时授权。 - 授权顺序固定为:GUARD -> GRANT -> Bukkit 权限回退。 - 每个阶段内部继续按照 priority() 从高到低执行。 - GUARD 返回 DENY 后,后续好友或会员授权无法绕过限制。 - GUARD 错误返回 ALLOW 时会按 ABSTAIN 处理,并输出限频警告。 - 旧访问提供器默认进入 GRANT 阶段,原有行为保持不变。 - 提供器运行时异常会被隔离,不会破坏整个授权流程。 - 慢调用和异常日志加入限频机制,便于发现插件在授权回调中错误访问数据库或网络。 增强:访问检查结果 - 支持使用 SkinAccessSource 标记 GUI、命令、API 等访问来源。 - SkinAccessResult 可以返回: - 最终授权状态; - 决策原因; - 作出决定的提供器 ID; - Bukkit 权限节点; - 稳定的提供器原因键; - 只读诊断属性。 - 支持通过 DetailedSkinAccessProvider 返回结构化授权详情。 - 新增批量皮肤访问检查,并按照皮肤 UUID 去重。 - 批量入口与逐项检查保持完全一致的授权语义。 新增:对第三方插件可以开发皮肤共享提供基础设施(以下以好友插件为例子) - 比如好友插件可以通过 SkinAccessProvider 动态授权共享皮肤,无需修改皮肤配置或让 YiyunCEskin 依赖好友插件。 - 可以根据以下外部数据决定授权: - 好友关系; - 亲密度等级; - 皮肤所有者; - 共享开关; - 会员等级; - 玩家选择的共享皮肤列表。 - 支持在授权详情中返回所有者 UUID、亲密度、共享上限等诊断属性。 - “每位玩家最多共享 N 个皮肤”由好友插件管理最终共享列表,YiyunCEskin 负责读取授权结果和刷新状态。 - 好友插件可以按配置、权限、会员等级或亲密度动态计算共享数量。 - 明确要求访问提供器只读取内存缓存,不应在授权回调中查询数据库、修改名额或产生业务副作用。 新增:精确访问失效 - 新增 SkinAccessInvalidationRequest。 - 新增 SkinAccessInvalidationResult。 - 新增异步入口:invalidateSkinAccess(request)。 - 支持按以下维度精确刷新: - 单个或多个玩家 UUID; - 单个或多个皮肤 UUID; - 全部相关皮肤。 - 请求可以携带稳定的业务原因字符串。 - 可以分别控制是否扫描玩家背包以及是否刷新已打开的 GUI。 - 返回结果会统计: - 请求玩家数量; - 在线和离线玩家数量; - 已扫描背包数量; - 已刷新 GUI 数量; - 被回收的失效皮肤物品数量。 - 返回的 CompletionStage 会在所有在线玩家的实体线程任务完成后结束。 - Paper 与 Folia 均在正确的实体线程执行玩家操作。 - 实体退役或调度失败时也能正确结束 future,避免调用方永久等待。 - 插件停用时,仍在等待的精确失效任务会以异常完成。 - 原有单个及批量 void 失效入口继续保留,并支持同一 tick 内玩家 UUID 合并。 增强:背包权限扫描 - InventoryScanner 支持按指定皮肤 UUID 集合定向检查和回收。 - 好友关系或共享列表只影响少量皮肤时,不再需要无差别检查全部换肤物品。 - 授权失效后,可以同步清理玩家背包中不再有权使用的虚拟皮肤。 - 新获得的授权不会擅自修改现有物品,仍由玩家通过 GUI、收藏或其他业务入口主动应用。 新增:原子皮肤目录快照 - 新增只读 SkinCatalogSnapshot。 - 每个快照包含: - 单调递增的目录修订号; - 快照创建时间; - 按皮肤 UUID 建立的索引; - 按 skinId 建立的索引; - 皮肤集合索引; - 材质规则索引。 - 提供 skin()、skinById()、collection() 和 skinsForMaterial() 等查询方法。 - 材质查询支持精确规则和通配规则。 - 快照内的集合及映射不可修改。 - 同一个快照中的索引全部来自同一次成功加载,不会混合重载前后的数据。 - 皮肤成功加载、重载或卸载后,会原子发布新快照并递增修订号。 - 外部商店、好友共享、缓存和 GUI 插件可以安全地基于修订号重建自己的索引。 增强:重载事件 - SkinReloadEvent 新增: - previousRevision(); - revision(); - catalogChanged()。 - 外部插件可以准确判断目录是否变化以及是否需要重建缓存。 - 原有无参构造器继续保留,避免已有调用方立即失效。 新增:结构化适用性检查 - 新增 SkinApplicabilityOptions。 - 新增 SkinApplicabilityResult。 - 新增 SkinApplicabilityReason。 - 第三方插件可以获得皮肤无法应用的具体原因,而不再只能得到 true 或 false。 - 可区分访问拒绝、全局禁用、材质不匹配、模型范围、CE 物品、CE 标签和颜色范围等情况。 - 支持根据调用来源控制受信任的绕过选项。 新增:结构化皮肤应用结果 - 新增 SkinApplyOptions。 - 新增 SkinApplyResult。 - 新增 SkinApplyStatus。 - 可以区分以下应用结果: - 应用成功; - 皮肤不适用; - 同皮肤重复包装被拒绝; - 不同皮肤覆盖被拒绝; - Bukkit 事件取消。 - 结构化结果可携带最终物品和适用性检查详情。 - 物理卷轴可以作为授权凭证,但仍然遵守目标物品、全局禁用和重复包装规则。 - 原有返回 ItemStack 的应用方法继续兼容。 增强:动作扩展 API - 支持通过所有者插件注册自定义动作实现。 - 相同 Action 可以安全覆盖。 - 覆盖注册卸载后自动恢复内置动作。 - 保留原有无所有者注册入口,避免破坏已有集成。 - 动作注册现在具备与访问提供器和修改器一致的生命周期语义。 增强:修改器扩展 API - 支持通过所有者插件注册 SkinModifier。 - 相同修改器 ID 的新注册会安全替换旧实现。 - 修改器会同时进入 CE 与非 CE 应用链。 - 应用皮肤时正序执行,移除皮肤时逆序恢复。 - 插件停用时自动卸载其注册的修改器。 - 原有 registerModifier(modifier) 和按 ID 卸载入口继续保留。 增强:查询与事件 API - 完善按 UUID、skinId、材质、集合和物品状态查询皮肤的入口。 - 提供皮肤总数、列表形式目录以及皮肤所属集合查询。 - 完善菜单打开、关闭、应用、移除、预览和重载事件的数据字段。 - GUI、收藏、默认收藏、预览、纹饰控制和 CE 物品工具均通过公共 API 暴露稳定入口。 [/MD]
[MD] - 移除启动阶段的过早 CE 引用校验,动态监听官方 CraftEngineReloadEvent,等物品注册表完成后再校验。 - 兼容 YiyunCEskin 晚于 CraftEngine 启动、CraftEngine 热重载以及旧版 CE 没有官方事件的场景。 - CE 注册表就绪前,/yskin create --target 的存在性检查保守放行,避免初始化竞态再次误判。 - 存在性检查改为优先调用 CraftEngineItems.byId() 或 getItemDefinition(),不再通过创建物品判断。 - CE 重载后自动清除皮肤源物品、CE 源物品和 GUI 展示物品缓存,之前缓存的 null 不会永久残留。 - 修复 ce-tags 判断,改为对玩家手中的真实包装物品调用 hasPluginTag(),并兼容原版标签。 - 修复清除 CE customId 的行为。现在会删除 craftengine:id,不再错误写入 minecraft:air。 - 优先使用 BukkitAdaptor.adapt(ItemStack) 包装物品,减少对 CraftItemStack/NMS handle 的依赖。 - CeEquipModifier 已从 NMS 私有字段和混淆方法迁移到 Paper 公开 EquippableComponent API,并保留旧版 PDC 备份格式的恢复兼容。 - 构建依赖升级到 CraftEngine 26.7 - config.yml 的 auto-reload 已补充中文注释,说明 CE 重载后会清理缓存并重新校验引用。 - 引用确实缺失时,汇总日志改为“当前无法由注册表解析”,不再误导为相关皮肤必然不可用。 [/MD]
[MD] - 权限优化 yiyunceskin.use — 控制 GUI/命令入口,false 时禁止自助换肤但卷轴仍可用 - 新增权限 yiyunceskin.scroll.use — 控制卷轴使用权,false 时连卷轴也用不了 - 重构皮肤应用/恢复事务,保存修改器链、应用来源和数据版本,解决普通皮肤与 CE 皮肤互相覆盖后的属性残留。 - 孤儿皮肤、旧版物品和缺少备份数据的物品现在会按实际修改链安全恢复,不再盲目重置颜色、模型等原始属性。 - 物理卷轴正式支持 craftengine:命名空间:物品ID 材质,解包器也支持 CE 材质。 - 修正物理操作语义:SkinApplyEvent.isPhysical() 和 SkinRemoveEvent.isPhysical() 现在表示本次是否由卷轴/解包器触发,而 不是皮肤最初的应用来源。 - 卷轴和解包器只有在操作成功后才会消耗;不可堆叠卷轴具有唯一实例 PDC。 - CE 不可用时拒绝应用 CE 皮肤;启动和重载会校验皮肤模型、父材质、CE 限制、卷轴材质及解包器材质,并报告缺失 ID。 - CE 目标物品现在使用真实 CE ID 进行白名单、材质匹配和 GUI 皮肤查询。 - 修复 /yskin reload 绕过部分子系统的问题;现在会统一刷新配置、CE 桥接、皮肤索引、GUI、预览参数、权限扫描和引用校验。 - 修复命令在操作被事件取消后仍显示成功消息,以及控制台执行 create 时发生类型转换异常的问题。 - GUI 收藏判断和排序改为集合查询,收藏变化会精准清除当前玩家缓存;皮肤 ID、UUID、集合和材质查询增加索引。 - 修复 GUI 切换状态、关闭监听、刷新状态清理以及玩家退出后的缓存回收。 - 加强 Folia 调度与并发安全,背包扫描集中在玩家实体线程执行,死亡返还和任务 ID 使用线程安全结构。 - 权限定时扫描只回收虚拟来源皮肤,物理卷轴应用的皮肤不会因权限变化被错误移除。 - config.yml 升级到版本 2,补齐预览、收藏前缀、过滤器、解包器、重复包装、盔甲和调试配置。旧配置升级前会生成备份。 - /yskin create 全面重构与优化 [/MD]
[MD] - 重构GUI(需要重新生成gui文件夹) - 新增HMCWraps迁移功能(测试阶段) - 新增皮肤可在GUI中隐藏的功能 - 新增其他一些小功能 - 修复社区版CE使用此插件的一些bug [/MD]
[MD] - 新增lore匹配方式来应用皮肤,可以在皮肤配置中进配置,符合lore的物品可以自动应用上这对应的皮肤 [/MD]
后退
顶部 底部