• 欢迎加入MineBBS QQ讨论群:点击查看所有的官方讨论群
  • 我们将于近期对服务器进行迁移,服务可能中断至多2日。请各位安排好自己的访问计划,造成不便敬请谅解!
  • MineBBS入站考试已经上线!想要成为【正式会员】解锁更多功能吗?快来参与吧!【点我去看】
【1.13-1.21+|Folia】BetterLottery —— 老牌经典抽奖插件重出江湖-高版本重制版!|修复Bug|现代化升级

二次开发 娱乐 【1.13-1.21+|Folia】BetterLottery —— 老牌经典抽奖插件重出江湖-高版本重制版!|修复Bug|现代化升级 3.4.0

请登录后获取
  • 新增可选存储后端:PrizeStorageService.java
  • 默认配置:config.yml
    • storage.type: YAML
    • storage.auto-migrate: true
  • YAML 奖品会存到:plugins/BetterLottery/PrizeData.yml
  • 旧箱子世界方式仍可选:把 storage.type 改成 CHEST
  • 旧数据支持自动迁移,也支持手动:
    • /bl migrate
    • /bl migrate overwrite
  • 抽奖预览、添加奖品、删除奖品、单抽、十连都已经切到统一存储服务。
  • 说明文档已加:存储迁移说明.md

  • [MD] [*]# BetterLottery 3.4.0 存储迁移说明 ## 新存储方式 3.4.0 开始,奖品物品默认存储到: ```text plugins/BetterLottery/PrizeData.yml ``` 奖池标题、开关、概率和公告设置仍保留在: ```text plugins/BetterLottery/BetterLottery.yml ``` ## 配置项 ```yaml storage: type: YAML auto-migrate: true ``` - `YAML`:默认新方式,不再依赖 `BetterLotteryChest` 世界存奖品。 - `CHEST`:旧方式,继续用 `BetterLotteryChest` 世界箱子存奖品。 - `auto-migrate: true`:YAML 模式下启动时自动把旧箱子数据导入 `PrizeData.yml`。 ## 手动迁移 ```text /bl migrate ``` 如果要覆盖已有 `PrizeData.yml` 中对应奖池记录: ```text /bl migrate overwrite ``` ## 回退旧方式 如果需要临时回退旧箱子存储,修改: ```yaml storage: type: CHEST ``` 然后 `/bl reload` 或重启服务器。 [*][/MD]
[MD] ### v3.3 - **修复**: 解决了抽奖GUI显示物品与实际到账物品不一致的问题。现在动画结束后会强制同步显示最终奖品。 - **新增**: 添加了“十连抽”功能。 - 在抽奖界面增加了十连抽按钮(绿宝石块)。 - 消耗10张奖券,一次性抽取10个奖品。 - 背包空间不足时,多余奖品会自动掉落。 - 支持十连抽的全服公告。 [/MD]
本次更新主要修复了一个导致服务端崩溃的严重 Bug:

- 🐛 空指针异常修复 (NPE Fix) :
- 修复了在抽奖结束并广播获奖消息时,如果玩家手持的抽奖券物品(Hand Item)没有 ItemMeta 或 DisplayName (例如普通物品或 AIR),插件会因无法获取名称而抛出 NullPointerException 导致报错的问题。
- 改进逻辑 : 增加了空值检查。如果物品没有自定义名称,系统现在会自动回退使用物品的原版类型名称(如 PAPER )或显示为 "Unknown" ,确保流程稳定运行。
修正了 BLEvent.java 中的标题匹配逻辑,确保其与实际 GUI 的生成逻辑完全一致:

- 统一标题格式 : 将 menu , select-pool , setting 等管理界面的标题获取方式从 Lang.getRaw (无前缀)改为 Lang.get (带前缀)。
- 保留抽奖界面逻辑 : 抽奖界面的标题逻辑保持不变(因为它使用自定义前缀),确保抽奖功能不受影响。
更新内容总结 (v3.1-Modernized)
本次更新主要集中在 核心架构升级 与 高版本兼容性修复 ,特别是针对 Paper 1.21.10+ 和 Folia 1.20+ 环境的深度适配。
1. 核心架构升级
- Folia 原生支持 : 引入 SchedulerAdapter 适配层,插件现在可以自动识别运行环境。
- 在 Bukkit/Spigot 环境下使用标准的 BukkitScheduler 。
- 在 Folia 环境下自动切换至 RegionScheduler 和 EntityScheduler ,确保在多线程环境下任务调度的安全性与稳定性。
- 语言系统重构 : 全面重写了 Lang.java 和 messages.yml 。
- 支持 HEX 颜色代码 (格式 &#RRGGBB ),让界面更美观。
- 将所有硬编码文本移入配置文件,实现了 100% 的文本自定义 。 2. 严重 Bug 修复
- GUI 交互失效修复 (Paper 1.21.10+) :
- 问题 : 高版本 Adventure 库导致 InventoryView.getTitle() 返回的标题包含隐式格式代码,使得基于标题判断的 GUI 点击事件失效,导致玩家可以从 GUI 中拿走装饰物品,且按钮点击无反应。
- 修复 : 引入了 BetterLotteryHolder (实现 InventoryHolder 接口) 来标识插件的 GUI。现在插件通过检查 Inventory 的持有者对象来精准识别界面类型 (Menu, Setting, Lottery),彻底解决了该兼容性问题。
- Leaves 环境动画修复 :
- 问题 : 在 1.21.8 Leaves 环境下,原有的任务调度逻辑导致抽奖动画无法启动,界面卡死。
- 修复 : 修正了 Folia 调度器的调用参数,并增加了对空奖池的防御性检查,确保动画流畅运行。
- 在 Lang.java 中补充了缺失的 send 方法。
- 解决了 SchedulerUtils 中的 Folia API 兼容性问题。
- 通过分离 SchedulerAdapter 、 BukkitSchedulerAdapter 和 FoliaSchedulerAdapter ,确保插件在 Bukkit/Spigot 环境下运行时不会因加载 Folia 类而报错。
- 修正了 FoliaSchedulerAdapter 中 runAtFixedRate 方法的参数调用(移除了 TimeUnit ,直接使用 tick)。
- 功能修复 :

- 抽奖动画修复 :通过正确适配 Folia 的 runAtFixedRate 和 EntityScheduler ,解决了 1.21.8 Leaves 环境下抽奖动画卡死的问题。
- 抽奖券提示优化 :在 messages.yml 中添加了 ticket-usage 提示,并在拓印抽奖券时自动添加到物品 Lore 中,引导玩家右键使用。
📋 更新日志总结 (BetterLottery v3.1-Modernized) 🚀 核心更新
- 全版本兼容 : 插件核心已升级,完美支持 Minecraft 1.13 - 1.21+ 版本。
- Folia 原生支持 : 引入了智能调度器 ( SchedulerUtils ),原生适配 Folia 核心 (Region Scheduler),彻底解决了在 Folia 服务器上的线程安全问题。 🎨 视觉与交互优化
- 全新语言文件 ( messages.yml ) :
- 重构了语言文件结构,分类更加清晰(GUI、消息、公告等)。
- 移除了所有硬编码文本,现在 100% 的插件提示语均可自定义。
- 色彩升级 : 全面支持 HEX 颜色代码 (格式: &#RRGGBB ),同时兼容传统 & 颜色代码,让您的服务器公告和菜单更加炫酷。
- 控制台美化 : 重新设计了插件启动和卸载时的控制台输出,增加了作者信息、版本号及醒目的分隔线。 🛠️ 修复与改进
- 硬编码修复 : 修复了旧版本中大量存在的硬编码中文提示,现在所有文本均从配置文件读取。
- 非玩家执行保护 : 修复了控制台执行 /bl 指令时的报错问题,增加了友好的提示信息。
- GUI 标题匹配 : 优化了 GUI 监听逻辑,修复了因颜色代码转换导致的部分菜单点击无效的问题。
后退
顶部 底部