[1.21-26.2小游戏]陈·村庄保卫战 - PraxVillageDefense

原创 付费 闭源 娱乐 [1.21-26.2小游戏]陈·村庄保卫战 - PraxVillageDefense 2.4.0fix1.0

请登录后获取
陈·村庄保卫战 v2.4.0 fix3.0 问题修复更新
  • 修复了排行榜相关信息出错的问题
  • 修复了竞技场的入口在交互后消失一段时间的问题
  • 优化了一部分逻辑
陈·村庄保卫战 v2.4.0 fix2.0 问题修复更新
  • 修复了进机场入口定点出现问题导致“消失”的问题
陈·村庄保卫战 v2.4.0 fix1.0 问题修复更新
· 修复了多次进行操作导致入口消失的bug
· 增加了管理员工具方便配置
·修复了一部分游戏内的bug
·优化了一部分玩法与内容
·支持竞技场多房间进行游戏(强制需要装载Multverse-Core多世界插件)
·增加了竞技场配置导入导出功能
·增加了全新玩法“肉鸽祈愿”,每过x回合时向玩家推送GUI三选一效果
·增加了全新玩法“最终攻势”,村民出生数量受到限制,每一局仅会出现x只村民
·增加了全新机制“武器词条”,玩家购买原版武器时会随机获取强化
·增加了全新配置项“自定义补给包”,管理员现在可以额外在补给包中加入内容
·增加了房间独立聊天频道,可以使用“!”/“!”前缀发送全服消息
·增加了“玩家指引”/“管理员指引”书籍
2026-08-31 v2.3.1 聊天优化与更好的自定义
  1. 全服广播与频道消息优化
    ChatListener.java:以 ! 或 ! 开头的消息取消默认处理,格式化为 [全服] 玩家名: 内容 发送给所有在线玩家(跨房间),并同步输出控制台。
公共频道消息保持原逻辑,房间内玩家天然可见(已加注释)。

语言键 messages.globalPrefix(中英:&6[全服] / &6[GLOBAL])已添加。

  1. 管理员自定义武器词条页面
    WeaponAffix.java 重构:
applyAffix(item, affix):写 lore + PDC 去重,并即时生效攻速/击退修饰。

新增 byId()、parseAffixId();applyRandomAffixes 复用单条逻辑。

InventoryID.java 新增 AFFIX_EDITOR_MENU。

Inventories.java 创建 createAffixEditorMenu(page)(钻石剑图标,45/页,翻页/退出)。

主菜单新增「武器词条编辑」入口。

InventoryListener.java:点击词条即附加到手持物品,未持物品/重复词条均有中文提示,附加成功后重新打开菜单。

新增语言键:adminGui.affixEditor、affixEditorDesc、confirms.affixAttached、errors.affixNeedItem、affixExists、messages.affixType、affixClickAttach(中英双份)。

  1. 召唤物上限与已召唤数量显示
    消耗品商店(雪傀儡/蜜蜂军团/猫,23/24/25 格)与自定义商店(狼/铁傀儡/雪傀儡/蜜蜂/猫刷怪蛋)的物品 lore 动态显示 上限 / 已召唤。
狼为个人上限并标注 (个人),其余为竞技场全局。

Inventories.refreshSummonCounts() 在每次打开商店时实时刷新,防止超限买入。

新增语言键:messages.summonLimit、summonCurrent、summonPersonal(中英双份)。

  1. 过时 API 警告全部消除
    CustomKit.java:PotionType.getEffectType() 改用反射调用。
RoomManager.java:World.getWorldType() 改用反射兼容读取(新增 readWorldType() 辅助,兜底 NORMAL)。

15 个 NMS 类(v1_21_r1..r5 的 PacketSetter/EntityMetadataPacket/SpawnEntityPacket)以 @SuppressWarnings("deprecation") 标注。

构建日志 0 条 [WARNING],无任何“已过时的 API”提示。

  1. 文档同步
    CHANGELOG.md 新增 2.3.1 条目。
README.md(中文) 与 README_en.md 新增 2.3.1 更新内容/高亮块。

GuideBooks.java:玩家指引书新增「聊天/词条/召唤物」页;管理员指引书新增「补给包池/武器词条」页。

  1. 最终验证
    全仓库 U+FFFD 扫描 → CLEAN(修复 5 个 pom 中历史遗留的乱码注释)。
产物:plugin/target/PraxVillageDefense-2.3.1.jar(959,438 字节),plugin.yml 内 version 为 2.3.1,22 个 pom 同步升版。

共改动 53 个文件(15 NMS + 10 Java + 22 pom + 3 yml + 3 文档)。
2026-08-31 v2.3.0 平衡性调整与玩法优化
① 附魔 / 补给 / 强化

附魔商店扩展至 26 种(新增火焰保护、摔落保护、深海探索者、效率、灵魂疾行、冰霜行者、抢夺),价格可配置。

EnchantingBook.check() 支持中英文双语匹配,修复中文服附魔书无法使用。

补给包改为分级概率池(小/中/大/特大),权重可配置。

强化机制:对已附魔物品使用附魔书可提升等级 +1(已验证)。

② 控制台日志优化

局内击杀日志降为 3 级调试,移除“Removing unwanted mob”等冗余日志。

③ 村民 AI

中心偏置随机散步(间隔 60t / 半径 15 / 概率 50%),不再挤角落。

④ 怪物 AI

寻路优先路径点/村民,卡住时跳跃脱困(可爬楼梯/台阶),路径跟随优化。

⑤ 多房间支持(核心)

右键传送门 → 房间选择 GUI(箱子图标,45/页,最多 16 房)。

三态显示:已开始/等待中/结束中(绿可加入,已开始红禁入)。

每房间异步复制世界 + 生成点,房间名 arena.{id},命名 竞技场名-房间序号。

游戏结束 +14s 删除世界(保留记录),启动时清扫 vdroom_* 孤儿文件夹。

未装 Multiverse-core 时醒目告警并用内置复制兜底。

⑥ 独立聊天频道

每房间独立频道(前缀 竞技场名-房间号),回大厅/离开/重连自动切回公共频道。

⑦ 中文化 + 多页化

全部商店/套装中文,自定义套装选择界面 45/页分页,原版 24 套单页可全容。

⑧ 图标替换

自定义套装及商店中“木棍”统一改为“烈焰棒”。

⑨ 文档同步

README.md(中文)、README_en.md、CHANGELOG.md 全部更新。

新增武器词条系统(任务 4)

WeaponAffix.java:config 驱动注册表(12 条内置:锋利/迅捷/吸血/暴击/重击/烈焰/冰霜/剧毒/处决/狂怒/穿刺/格挡)。

购买武器时按权重随机附加 1-2 条,写入 lore + PDC。

InventoryListener 附加词条,BonusListener 结算全部效果(伤害/暴击/吸血/点燃/减速/中毒/处决/狂怒/穿刺/格挡,攻速/击退附魔生效)。

config.yml 新增 weaponAffixes 段,语言文件新增 weaponAffix 中英词条。

PAPI 变量(任务 7)

VDExpansion 新增:

%vd_channel%(频道前缀,公共为空)

%vd_room_count%、%vd_room_max%

数值真无限
全面 long 化:中途入场宝石平均、离场/结算奖励、波次利息、余额/签到、addGems/addBankBalance、addBpXp 等,钳制 Long.MAX_VALUE,杜绝溢出回绕。
商店村民看向玩家(10-tick 转头)
编辑状态出生点粒子
补给包池 admin GUI(四等级分页编辑 + 开包额外掉落)
入口村民头顶房间数 x/y
WE 导入兼容 FAWE
版本号升级至 2.3.0

✨ 新功能 (New Features)​

  • WorldEdit 选区一键导入竞技场边界:在「竞技场设置 → 边界」菜单中新增木质斧按钮。管理员先用 WorldEdit 选好区域(//pos1/pos2 或木斧),点击按钮即可把选区作为竞技场角落1/角落2 写入配置,无需逐点设置。WorldEdit 为软依赖,未安装时按钮会提示「未安装 WorldEdit」。
  • 塔位争夺(塔位保护窗口):玩家放置防御塔/陷阱后,该方块位置会在 turrets.claimSeconds 秒内(默认 8)保留给自己;其他玩家在 turrets.claimRadius(默认 3)方块内尝试建造会被拒绝,弹出红色「该位置刚被其他玩家占领」并播放 ANGRY_VILLAGER 粒子。同一玩家不会阻止自己的连续建造。
  • 动态物价 · 波次加成:在原 (玩家数 - 5)² / 200 + 1 公式上叠加波次系数 1 + min(波次 / 25, 0.6)(最高 +60%)。通过 shopPrices.waveBoostEnabled 配置开关;武器/护甲/消耗品三个商店同步生效。
  • 职业向套装 · 草药师 / 医疗兵:
    • Herbalist 草药师:POPPY 图标,永久 REGENERATION(恢复 I)+ SATURATION(饱和),售价 3000 / 7000。
    • Medic 医疗兵:GLISTERING_MELON_SLICE 图标,REGENERATION(恢复 II)+ INSTANT_HEALTH(即时治疗),售价 3500 / 8000。
  • 职业系统扩列 · Shepherd / Mason:新增两位村民职业(JUMP_BOOST 牧羊人 / HEALTH_BOOST 石匠),可在波次结束时为玩家提供增益。
  • 银行快捷入口:消耗品商店(CONSUMABLE_SHOP_MENU)新增金锭按钮,点击直接执行 /vd bank,免去反复输指令的麻烦。
  • 总自定义套装入口:局内/局外套装选择页面将原本逐个显示的「自定义套装」折叠为一个总入口「总自定义套装 (数量)」(BUNDLE 图标)。点击后进入原有的自定义套装子菜单,避免主菜单拥挤。
  • VIP 村民完美复刻护送者路线:护送波中的 VIP 村民不再简单「锁定跟随」,而是由 pathRecorder 每 2 tick 采样护送者的实际移动路线(距离² ≥ 0.5 时记录一个路径点,最多 1024 个,自动丢弃最旧的),VIP 沿该路线逐点前进,做到与被指定护送者的路线高度一致。护送者离线/离开区域时退回朝村庄中心直走。
  • 护送者右键认领:护送波默认需要玩家右键 VIP 村民认领护送者(objectiveWaves.escort.requireRightClick,默认 true)。右键后 VIP 立即把该玩家设为护送者并清空旧路线,从这一刻开始复刻新护送者的移动。认领提示会广播给竞技场内所有活跃玩家。
  • 护送者转让开关:objectiveWaves.escort.allowTransfer(默认 false)。开启后允许后来的玩家右键夺取已认领的护送权;关闭时非护送者右键会收到「护送者已认领,无法更换」提示。
  • VIP 出生点可自定义:新增竞技场命令 /vd admin <竞技场> vipSpawn-set|teleport|center|remove,可在配置的 vipSpawn 位置生成 VIP 村民(后台自动持久化到 objectiveWaves.escort 锚点)。未设置时回退到随机怪物出生点或玩家出生点。
  • 护送途中受击脱离 3 秒:护送中的 VIP 村民被攻击时,通过 objectiveWaves.escort.disengageDurationMs(默认 3000 毫秒)暂停跟随,原地待机(清空水平速度、保留 Y 轴重力),到期后自动恢复跟随原路线。脱离提示广播给竞技场玩家。

🛠 重构 (Refactor)​

  • Arena 目标波次状态:新增 escortPath(ConcurrentLinkedDeque<Location>)、vipDisengagedUntil(volatile long)字段;clearObjective() 同步清空路线与脱离状态。
  • GameListener:新增 onVipRightClick(EventPriority.HIGHEST)截获右击,避免 onTrade 打开交易界面;新增 onVipHurt(EventPriority.HIGH)处理受击脱离。
  • ArenaSpawnType.VIP:新增枚举,getName() 返回 &6VIP Spawn,用于 VIP 出生点的指示牌显示。

🆙 版本 (Version)​

  • 插件版本 2.1.0 → 2.2.0:全量更新(含所有 Maven 子模块及打包产物更名为 VillagerDefense-2.2.0.jar)。
  • languageFileVersion 32 → 33:新增草药/医疗两套职业向套装的中英翻译。

🐞 修复 (Bug Fixes)​

  • /vd admin 标签语言缺失:LanguageManager 内的 no / none / on / off / yes 改成 getConfigStringOrDefault,旧语言文件去除对应键也不会再抛 InvalidLanguageKeyException;同时为中文 / 英文资源补回 professionShepherd(牧羊人)与 professionMason(石匠)两条缺失的村民职业标签。
  • 榜单 / 水晶获取量溢出:GiftCodeManager.giveRewards 改用 long 读取 crystalBalance,新增 Long.MAX_VALUE 上限防止礼包码叠加爆掉;Expansion.addBpXp 同步加 overflow guard。
  • /vd pass 声望截断:Commands 渲染声望值由 getInt 改为 getLong,避免长时间玩家累计超过 Integer.MAX_VALUE 后被截断。
  • 镜像波攻击目标:镜像暗影波过去会跟随原版 monster AI 优先打村民,导致「暗影反而帮怪物」。现已给镜像暗影打 VD_MOLE 镜像标记(VD_MIRROR),由 MonsterAI.tickMirrorShadow 专用 AI 处理,只锁定最近的同竞技场怪物。
  • 竞技场无人不停止:除 onLeave 事件外,新增 monitorEmpty 每 20 tick 兜底任务 + Tasks.endIfEmpty() 在 calibrate/monsterTargeting/updateBoards 核心循环中重复判断。emptyEndScheduled 标志在 cancelAllTasks() 重置,避免下一局开局误判结束。
  • 箭塔卡地里:箭塔基座与发射点 Y 抬升(盔甲架放在方块顶面 +1,箭矢发射点在 +1.8),箭矢不再贴地、易被地面反弹。
  • 内鬼村民:恢复 Mobs.setVillager 中的内鬼标记 + 区域减益任务,配置项 villagers.mole.*(开关 / 减益半径 / 间隔 / 概率)现在真正生效。被玩家击杀时按既有 GameListener 路径获得高额民心与团队增益。
  • 自定义套装跨重启:自定义套装已经在 plugins/<plugin>/custom_kits.yml 持久化,启动时 CustomKitManager.init(this) 自动重载,无需手动迁移。
  • 开局装备:玩家入局 giveItems 现赠送 WOODEN_SWORD + BREAD x16,避免波次初期没饭吃。
  • 波次奖励:第一波奖励由 0 修正为 multiplier,避免首波绿宝石被吞。

🛠 重构 (Refactor)​

  • 插件名:plugin.yml 中 name 字段正式更新为 PraxVillageDefense(中文名 陈·村庄保卫战)。
  • 删除积分商店:移除 PointsManager / PointsShopManager、相关菜单(POINTS_SHOP_*)、CommandTab root arg、Commands / InventoryListener / Inventories / InventoryID 的全部引用。
  • 删除原版幻影套装:移除 Kit.phantom() 工厂 + 注册表 + 成就要求,命令 /vd join 改为通用复活入口。
  • Tasks 责任拆分:endIfEmpty / monitorEmpty / cancelAllTasks 协同解决"竞技场无人不结束"问题,Folia 区域循环任务跨局清理时自动重置标志位。

⚠ 注意事项 (Caveats)​

  • 包路径已完整迁移到 me.prax.villagerdefense.*(含 plugin、nms.common、nms.v1_*、common 模块)。plugin.yml 的 main 同步更新为 me.prax.villagerdefense.plugin.Main,旧 me.theguyhere.* 路径在 2.2.0 起彻底移除,外部 API/SDK 引用需同步更新。
  • 难度 1 难度缩放由 0.6 下调至 0.50,简单模式每波怪物数量、词缀概率、属性成长和村庄绝望惩罚同步下降;难度 2/3/4 倍率保持不变。
  • 塔位争夺依赖服务器时区与时钟;玩家使用客户端时钟作弊会绕过判定。

更新日志 (Changelog)​

2026-08-26 · 版本更新 2.1.0 · 肉鸽卡池扩充​

🆙 版本 (Version)​

  • 插件版本 2.0.0 → 2.1.0:全量更新(含所有 Maven 子模块及打包产物更名为 VillagerDefense-2.1.0.jar)。

✨ 新功能 (New Features)​

  • 肉鸽模式(Roguelike 模式):可在竞技场游戏设置内开关。每过 N 回合(默认 5,可在游戏设置内修改),对局内所有玩家收到一个 3 选 1 投票 GUI,选择一个增益+敌方增强组合——生命之光 / 急速风暴 / 力量祝福。得票最多者胜出,平票随机,无人投票随机,投票窗口 5 秒。
    • 生命之光:团队 +4 生命上限 + 再生,怪物生命上限 +20%。
    • 急速风暴:团队速度 II,怪物移动速度 +15%。
    • 力量祝福:团队力量 I,怪物攻击力 +30%。
    • 投票在波间休息(intermission)期间进行,投票结束后怪物正常生成;肉鸽选择对整个下一波生效。
  • 肉鸽卡池扩充:原 3 张固定卡牌(生命之光 / 急速风暴 / 力量祝福)扩为 9 张卡牌池,每次投票从中随机抽取 3 张互不相同的卡牌供玩家选择,避免每轮选项固定。新增卡牌:
    • 铁壁坚城:团队抗性提升 I + 吸收 II;怪物生命 +15% 且获得抗性提升。
    • 生命涌动:团队再生 II + 饱和 II;怪物生命 +25%。
    • 疾风迅影:团队速度 II + 跳跃 II;怪物移速 +20%。
    • 狂战士之怒:团队力量 II + 速度 I;怪物攻击力 +35%。
    • 守护之光:团队防火 + 抗性 + 吸收;怪物全属性 +10%。
    • 攻守兼备:团队力量 I + 抗性 I;怪物生命 +10% / 攻击 +15% / 移速 +10%。

🛠 重构 (Refactor)​

  • 肉鸽内部模型:卡牌改为结构化 Card 类(id / 显示名 / 图标 / 描述 / 玩家效果列表 / 三个倍率 / 可选怪物药水效果),便于后续继续扩充卡池。
  • 肉鸽投票上下文:每次投票保存独立的候选索引数组 int[] choices,结算按卡池索引计票,平票/无人投票时仅在候选 3 张中随机。

🐛 修复 (Bug Fixes)​

  • 修复村民"固定循环跟随玩家"的真正根因:此前移除【好奇】村民机制后村民仍会跟随——真正原因是怪物寻路任务(Tasks.monsterTargeting)把带 VD 标记的村民误当成"敌人敌人",对最近的玩家执行导航(Villager 继承自 Mob,且带 VD 标记,未在敌怪过滤中排除)。现已在敌怪过滤中显式排除 Villager,村民不再被怪物 AI 驱动跟随玩家。
  • 修复 EntityDamageByEntityEvent 药水粒子崩溃:MonsterAffix 词缀组合技(毒+凋零)用 Particle.ENTITY_EFFECT 刷粒子,Leaf 26.x 上缺少必需的 org.bukkit.Color 数据抛 IllegalArgumentException,每次怪物攻击都刷屏。改为 Particle.WITCH(无需数据),效果云粒子同步替换,全版本稳定。
  • 修复村民/召唤物挡住 QA 枪械子弹:村民及全部召唤物(狼/铁傀儡/雪傀儡/蜜蜂/猫)现在生成时 setCollidable(false),子弹/箭矢等弹道直接穿过友好单位,不再被其碰撞箱拦截。

📝 涉及文件​

文件改动摘要
RoguelikeMode.java新增肉鸽模式核心:触发投票、计票(多数/平票随机/无人随机)、玩家/敌方增益应用
Tasks.java敌怪过滤显式排除 Villager(根治村民跟随);波间触发肉鸽投票并顺延波次生成
Arena.java新增肉鸽开关/间隔配置项 + 当前生效选择;新一局重置肉鸽状态
Mobs.java召唤物/村民 setCollidable(false);怪物生成时应用肉鸽敌方增强
MonsterAffix.javaParticle.ENTITY_EFFECT → Particle.WITCH(修复缺 Color 崩溃)
Inventories.java游戏设置菜单新增肉鸽开关/间隔按钮;新增投票 GUI 与间隔菜单
InventoryListener.java肉鸽开关/间隔/投票点击处理
InventoryID.java新增 ROGUELIKE_INTERVAL_MENU / ROGUELIKE_VOTE_MENU
ArenaListener.java游戏结束清理残留肉鸽投票
LanguageManager.java新增肉鸽相关语言键
zh_CN.yml / en_US.yml肉鸽模式语言条目
config.yml语言文件版本 31 → 32

🐛 修复 (Bug Fixes)​

  • 修复自定义套装效果编辑器崩溃:原 PotionEffectType.getKeyOrThrow() 在 Leaf 26.1.2 不存在,保存/移除效果时触发 NoSuchMethodError 刷屏。本次回退到 getKey().getKey()(自 1.16 起即存在)并支持原版命名空间格式输入。
  • 修复效果编辑器输入格式不识别:原提示要求 SPEED 200 1,对原版格式如 minecraft:absorption infinite 2 不友好。提示词改为 minecraft:<类型> <时长> <等级>,时长支持关键字 infinite / inf 表示永久,且自动为缺省命名空间的输入补 minecraft: 前缀。
  • 修复 VIP 护送目标波无法完成:原 VIP 村民仅依赖 Mob.getPathfinder().moveTo(...),原版村民 AI 对路径查找反应迟缓,甚至完全静止。改为 Pathfinder 寻路 + 每 tick 速度向量兜底,平地/直线路径上 VIP 持续前进,到达村庄中心正常结算奖励。

🗑️ 移除 (Removed)​

  • 移除【好奇】村民机制:村民不再按 villagers.curiousChance概率获得【好奇】标签、不会主动跟随玩家、不再有右键驱离与喂食提升亲密度、好感度挡刀逻辑。
    • 玩家反馈"所有村民依旧会莫名跟随玩家,即使没有好奇标签也会跟随"——此类遗留行为正是因为好奇村民机制被反复打补丁叠加产生;本次直接移除机制根除问题。
    • 保留 Mobs.withCuriousTag() / getAffinity() / feedAffinity() 作为空实现,兼容旧代码引用。
    • 保留 VD_EXPELLED / VD_MOLE 等元数据识别通道,作为对历史数据/外部插件的兼容(默认生成的村民不再带这些标记)。
    • config 的 villagers.curious* / villagers.affinity* / villagers.scare* / villagers.expelCooldownSeconds / morale.expelKillPenalty 等字段保留代码骨架以避免旧配置报错,但不生效。
    • 需要村民"跟着玩家"的护送类需求请使用目标波次的 escort(VIP 村民护送)——其走完整的目标完成/失败结算路径。

📝 涉及文件​

文件改动摘要
InventoryListener.java效果编辑器输入解析:支持 minecraft:类型 命名空间 + infinite 关键字
Mobs.java移除村民生成时的 VD_CURIOUS / VD_MOLE 概率分支;withCuriousTag / getAffinity / feedAffinity 改为空实现
GameListener.java移除 feedCuriousVillager / expelCuriousVillager 互动逻辑;onAffinityBlock 监听器保留但不再生效
ArenaListener.javaVIP 护送任务增加 applyVillagerWalkVelocity 直走兜底,保证平原路径前进
zh_CN.yml / en_US.ymlchatEffectInput 提示词改为 minecraft:<类型> <时长> <等级>
[MD] # 更新日志 (Changelog) ## 2.0.0 · 多版本支持与元数据批次 ### 🎉 版本与元数据 - **插件版本 26.1.2 → 2.0.0**:`plugin.yml` 与所有 Maven `pom.xml`(含子模块 parent 引用)统一改为 `2.0.0`,打包产物更名为 `VillagerDefense-2.0.0.jar`。 - **作者与主页**:作者统一为 **Ivan Chen**,主页 <https://gitee.com/RootpiXiaocheng>。已写入 `plugin.yml`(`author` / `website`)、根 `pom.xml`(`<url>` / `<developers>`)、两份 README,以及插件加载横幅。 - **插件加载信息**:`Main.onEnable()` 启动时向控制台打印作者 / 主页 / 版本信息横幅。 ### 🌐 多版本支持(1.21.x + 26.x 全版本) - **NMS 版本检测**:`NMSVersion.java` 从仅支持 26.x 扩展为同时识别 1.21.x 全版本——`1.21.0/1` → `R1`、`1.21.2/3` → `R2`、`1.21.4` → `R3`、`1.21.5/6` → `R4`、`1.21.7/8` → `R5`、`26.x` → `v1_26_R1`。 - **接入 1.21.x NMS 模块**:`nms/pom.xml`、根 `pom.xml` dependencyManagement、`plugin/pom.xml` 运行时依赖重新接入 `v1_21_r1` ~ `v1_21_r5` 五个模块,打包时全部 shade 进单一 JAR。 - **1.21.5/1.21.7(R4/R5)模块改造**:原 R4/R5 模块依赖特殊 `remapped-mojang` 混淆映射 jar(本地缺失、无法构建),已改为与 R3 一致的直接混淆编译,并按 1.21.5 / 1.21.8 修正混淆字段名(R5 连接字段 `f`→`g`、发包方法 `b`→`a(Packet, ChannelFutureListener)`)。R5 以 1.21.8 本地 jar 编译(与 1.21.7 同为 R5 revision,映射一致)。 - **主模块 API 基线降至 1.21.1**:`plugin/pom.xml` 的 spigot-api 从 26.1.2 降到 1.21.1,确保主代码只使用 1.21.x 与 26.x 共有的 API。 - **跨版本 `Attribute` 常量兼容**:新增 `Attributes` 工具类,运行时按服务端版本回退解析 `MAX_HEALTH`/`ATTACK_DAMAGE`/`MOVEMENT_SPEED`(1.21.1 及以前为 `GENERIC_*` 前缀),替换全项目 118 处直接引用,同一 JAR 兼容全部 1.21.x 与 26.x。 - **26.x 专属材质回退**:忍者套装图标 `Material.IRON_CHAIN`(仅 26.x 存在)改为全版本通用的 `Material.CHAIN`。 ### 🧹 信息板精简 - **InfoBoard**:移除"特殊玩法 / 指令教学"两个模块,只保留简要玩法介绍(玩法标题 + 保护村民 + 入口操作提示),避免冗长浮字遮挡视线。 ### 📝 说明 - `api-version` 由 `'26.1'` 调整为 `'1.21'`,声明最低兼容基线。 - 三个 NMS 旧版本模块(1.16~1.20)仍保留在目录树中但未接入构建(本次仅按要求覆盖 1.21.x 与 26.x)。 --- ## 2026-08 · 村庄与玩法扩展批次 ### 🐛 修复 (Bug Fixes) - **修复自定义套装效果菜单崩溃**:`Inventories.java` 与 `CustomKit.java` 中调用 Paper 专属的 `PotionEffectType.getKeyOrThrow()` 在 Leaf 26.1.2 运行时报 `NoSuchMethodError`。改用空安全的 `getKey()`/`getName()` 回退,兼容旧服务端运行时。 - **修复铁傀儡刷怪蛋图标错误**:消耗品商店与召唤师套装三级的铁傀儡物品此前误用 `GHAST_SPAWN_EGG`(恶魂刷怪蛋)图标,现已改为 `IRON_GOLEM_SPAWN_EGG`,并同步修正点击判定材质列表。 - **修复排行榜不更新**:`topBalance`(最高余额)此前只在捡宝石/击杀时写入,结算时的波次清怪奖励、幸存者奖励等加成不会进入排行榜;`topWave`(最高波次)也未在离场时补写。现已在离场结算处补写这两个统计,保证排行榜准确。 - **修复无【好奇】标签村民仍跟随玩家**:护送目标波结束时 `clearObjective()` 只取消任务、未移除仍在跟随护送者的 VIP 村民,留下"没有好奇标签却一直跟着玩家"的遗留村民。现目标清理时同步移除 VIP 村民。 ### ✨ 新机制 (New Features) - **回收站**:原公共箱子改为回收站。玩家放入不要的物品,其他玩家可自行取用;内容在每波结束后自动清空(保留一回合)。 - **村民内鬼**:每只村民有可配置概率(默认 5%)成为隐藏内鬼——无任何身份标签,在场时持续给附近玩家施加虚弱/中毒/缓慢;内鬼可被玩家攻击(近战/远程),被玩家击杀时提升村庄民心并给全队增益。配置见 `villagers.mole`。 - **村庄节日**:随机波次触发节日波(默认 15% 概率),全场波次奖励额外加成(默认 +50%)并伴随村民烟花粒子。配置见 `festival`。 - **怪物进化线**:塔型级适应性进化——同一塔型杀怪越多,后续怪物对该塔型抗性越高(箭/闪电/爆炸/火焰/投石各自独立进化,叠加于既有伤害类型 `adaptation` 之上)。 - **股票式投资**:新增 `/vd bank` 命令,玩家可在波间将绿宝石存入银行,存款按波次计息,利率随村庄民心波动(民心越高利率越高)。配置见 `economy.bank`。 ### 🗑️ 移除 (Removed) - **新手引导**:默认关闭(`tutorial.enabled: false`),不再自动启动 5 步引导;保留代码骨架以兼容旧配置与占位符。 [/MD]
后退
顶部 底部