Commit Graph
507 Commits
Author SHA1 Message Date
youpaishidifu e08a6bc4c7 修复领地权限系统4大bug:DB列缺失+成员不同步+管理员继承+login.db校验
1. AreaProtection.updateVisitorPermFromWeb: INSERT语句去掉不存在的land_name/synced_at列,修复"table area_land_permissions has no column named land_name"
2. AreaProtection.removePlayerFromAreaWhitelist: 移除成员时同步删除area_land_permissions记录,确保admin身份一并清除,不再继承
3. AreaProtection.removeLandMember: GUI移除成员也同步删除area_land_permissions
4. AreaProtection.insertLandPermission: 新增公共方法,PHP添加成员时写入权限表
5. AreaProtection.handlePendingAddMemberInput: 添加成员前校验login.db(DatabaseManager.userExists),拒绝不存在的玩家
6. WebManager: 新增add_visitor/remove_visitor变更类型处理,PHP添加/移除成员后Java自动同步白名单+权限表
2026-07-11 13:36:26 +08:00
youpaishidifu 5ec61a1d2e 修复PHP→Java权限同步断裂:内存缓存不刷新+syncLandData改POST
1. AreaProtection.updateLandFieldFromWeb: 新增applyFieldToAreaConfig()直接更新内存AreaConfig(原reloadAreaConfigFromDb只重载area_config全局表,不碰area_lands领地权限)
2. WebManager.syncLandData: GET改POST(JSON body)解除URL长度限制
3. WebManager.syncLandData: hash补全遗漏字段(9个)确保所有变更能触发同步
2026-07-11 12:21:32 +08:00
youpaishidifu 8c1e1a89bd 修复PHP↔Java领地同步断裂:GET改POST+补全hash漏检字段
根因:syncLandData用GET发送全部领地JSON到sync.php,超URL长度限制→静默失败→PHP永远收不到Java的权限/效果变更。

1. WebManager.syncLandData: 领地同步从httpGet改为httpPost(JSON body),解除URL长度限制
2. WebManager.syncLandData: hash补全遗漏字段(allow_visitor_teleport/confiscate_items/deny_use_items/punish_commands/peace_whitelist/mode_exempt/enable_announce/announce_template/txt_content),确保这些字段变更能触发同步
3. PHP sync.php syncLands(): 已兼容POST JSON body(getParam从php://input读取)
2026-07-11 11:57:22 +08:00
youpaishidifu bc155526ab 止住效果解析刷屏:加强JSON解析、去除残留反斜杠、同一名称只警告一次
1. AreaProtection.resolveEffectType: 解析前去除首尾空白/引号/反斜杠,识别\试炼之兆等残留转义名
2. AreaProtection.splitToList/parseEffectsString: 用正则提取JSON字符串并unescape \ " \/ \b \f \n \r \t 及 \uXXXX
3. 新增UNKNOWN_EFFECT_WARNINGS集合,同一名称只打印一次[防护]无法识别效果,避免控制台持续刷屏
2026-07-11 11:11:59 +08:00
youpaishidifu 4ae1589883 修复Web通信禁用仍轮询+PVP远程武器与击杀奖励+修复splitToList编译错误
1. WebManager: 5个合并定时器(A/B/C/D/E)新增enabled运行时守卫,Web通信关闭后立即停止请求web配置地址;reloadWebConfig支持运行时启停定时器
2. PVPTestManager: 测试场新增弓/弩二选一(默认弓)默认装备,完成一波击杀发放16牛排补血
3. PVPArenaManager: 正式场新增弓/弩二选一(默认弓)默认装备+GUI切换,每2次杀敌发放16牛排补血
4. AreaProtection: 修复splitToList中[\""未结束字符串字面量导致的编译失败
2026-07-11 01:04:32 +08:00
youpaishidifu 9121bb069d 修复PHP权限同步游戏:1.updateLandFieldFromWeb白名单补充is_public_building/allow_visitor_teleport;2.updateVisitorPermFromWeb支持PHP显式角色切换(admin↔member↔visitor) 2026-07-10 23:16:32 +08:00
youpaishidifu d306431c55 修复两大关键bug:1.saveAreaToDb参数绑定从位置32开始整体偏移一位导致权限保存到错误列(权限回滚根因);2.onDisable取消所有定时任务解决async task未关闭警告 2026-07-10 21:32:08 +08:00
youpaishidifu 0354156eec 新增载具乘坐拦截:VehicleEnterEvent处理器,层级为L2实体交互→L3骑乘(denyMount),与放置/破坏权限统一 2026-07-10 21:01:19 +08:00
youpaishidifu aa8b7ce47a 修复实体破坏防护:新增载具与悬挂物权威破坏事件拦截(VehicleDestroyEvent/HangingBreakEvent),统一 L1破坏总开关→L2实体交互 层级,区域取法统一为实体坐标优先 2026-07-10 19:55:56 +08:00
youpaishidifu 483acbdbb6 修复领地权限系统:新增实体交互二级权限,并修复领地数据保存因重复列导致落库失败的问题 2026-07-10 19:08:18 +08:00
youpaishidifu 0775f2e84d fix(core): restore PHP sync disabled for debugging; root cause confirmed as INSERT OR REPLACE id change 2026-07-10 15:29:03 +08:00
youpaishidifu ebd26ee123 fix(core): saveAreaToDb 的 INSERT OR REPLACE 导致自增 id 变更,切断 area_land_permissions.land_id 引用 2026-07-10 15:22:47 +08:00
youpaishidifu 0ff274896a 修复测试场/back返回不刷怪:startTest未写入chosenDiff/chosenEquip;注释领地PHP同步排查权限强制同步bug 2026-07-10 13:42:23 +08:00
youpaishidifu f345f60ac0 修复PVP测试场强制选装:进入测试世界必须选装备,关闭2次GUI遣返主世界;/back禁止传送至测试世界 2026-07-10 13:17:00 +08:00
youpaishidifu babbe8936a 修复: PVP/测试场护甲穿戴顺序修正+强制穿戴到装备槽
- PVPTestManager.giveEquip: ARMOR_SETS[头盔,胸甲,护腿,靴子] 反转为 setArmorContents 期望的 [靴子,护腿,胸甲,头盔]
- PVPArenaManager.equipFullSet: addItem → setArmorContents,护甲自动穿戴到装备槽而非放在物品栏
2026-07-10 12:52:44 +08:00
youpaishidifu 0e0d6c6247 修复: 领地管理员永不被PHP perm_change降级 + 测试场KEEP_INVENTORY=false
- AreaProtection.updateVisitorPermFromWeb: admin角色永远保留, perm_change只更新permissions JSON不动role
- PVPTestManager: KEEP_INVENTORY从true改为false, onPlayerDeath不再直接clearInventory, 改由onRespawn统一还原
2026-07-10 12:18:46 +08:00
youpaishidifu c6d0222c1e 修复: setPlayerPermJson保留已有角色+PVP测试场死亡清空装备
- AreaProtection.setPlayerPermJson: ON CONFLICT替代INSERT+UPDATE两步, 新行默认visitor(非member), 已有行仅更新permissions保留role
- PVPTestManager: 新增onPlayerDeath清空测试装备掉落+setKeepInventory(false), 死亡界面不再显示测试装备
  防止玩家死亡后快速重连/返回时携带测试场装备
2026-07-10 11:58:23 +08:00
youpaishidifu 2bdb577c89 修复: 领地权限拦截船/矿车等实体放置和破坏 2026-07-10 11:23:10 +08:00
youpaishidifu b29284bb1b 修复: Java端调整访客权限误降级管理员+PVP/测试场装备隔离
- AreaProtection.updateVisitorPermFromWeb: 拦截PHP发来member角色时降级admin
- Web/api/sync.php: syncPermissions ON CONFLICT替代INSERT OR REPLACE防角色降级
- Web/api/land_api.php: handleSyncPermissions同上
- PVPTestManager: respawn立即恢复背包, join时空降检测恢复
- PVPArenaManager: 入场立即备份清空背包, respawn时恢复+送出PVP世界
2026-07-10 10:58:55 +08:00
youpaishidifu 97d96d747d 测试场GUI改直选式+领地权限降级拦截与全链路日志+backup保留3份修复
- PVPTestManager: openGUI/handleClick 重写为直选式(武器/护甲/难度/场景/食物直接点选),对齐正式场 PVPArenaManager
- AreaProtection: updateVisitorPermFromWeb 加端到端 info 日志(land/player/localRole/effectiveRole),追踪已授权用户被同步访客问题
- land_api 联动: handleChangeVisitorRole 修复$permRow未定义,新增 admin/member 降级为 visitor 的拦截
- WebManager: perm_change 路由按 changeData 是否含 player 区分 target/player
- DatabaseManager: 背包备份由子查询LIMIT改为先查后删,修复仅保留最新一份
2026-07-10 01:33:38 +08:00
youpaishidifu 2c9aa6bd8e 修复领地主调整访客权限时管理员身份丢失:Web端perm_change现同步role到本地,且updateVisitorPermFromWeb不降级已授权管理员 2026-07-10 00:15:53 +08:00
youpaishidifu 89b3167d67 修复附魔书显示名罗马数字V解析失败:ROMAN_PAT无法匹配单独V,导致锋利V等五级附魔书被发成一级 2026-07-09 23:21:27 +08:00
youpaishidifu 2e869a1c94 修复测试场和平模式不刷怪:测试场难度提为非和平改为权威helper(创建/开始/离场三处调用),不再依赖startTest入口 2026-07-09 23:15:08 +08:00
youpaishidifu 9d8d70f63f 修复竞技场断线重进绕过公平限制(上线遣返出生点);backup命令放开控制台执行(支持指定玩家);测试场装备自由选武器/护甲档位;食物shift点击±16 2026-07-09 22:59:48 +08:00
youpaishidifu e03db026b9 修复PVP竞技场/测试场掉线覆盖主背包:主备份改保留最近3份且竞技场内跳过写入,新增/sdf1_login backup玩家自助还原(最近3份任选) 2026-07-09 22:29:02 +08:00
youpaishidifu 36b8192dc9 测试场装备对齐主场(可调熟牛肉/去金苹果)并禁止玩家互殴,只能打练习生物 2026-07-09 22:28:56 +08:00
youpaishidifu 2c12bbde8b PVP装备系统改版:铁剑+铁斧+可选盾牌+可选附魔(锋利V+击退II),移除护甲;PVP竞技场首位玩家定死附魔后续仅可调盾牌与熟牛肉数量;测试场全员自由选 2026-07-09 21:59:11 +08:00
youpaishidifu 9b725791aa 封堵容器管理禁用时访客越权开箱
onInventoryOpen 在 denyContainer=false 时直接放行所有人,
导致完全无领地权限的外部玩家也能开箱。
现于 denyContainer 判定前拦截 getPermissionLevel 返回 null 的未授权玩家,
一律禁止访问容器;VISITOR 成员行为不变。
2026-07-09 20:58:02 +08:00
youpaishidifu 0b8feab3e5 修复领地管理员越权:setadmin改为限领地+OP认全局
- 根因:/protect setadmin|unsetadmin 给玩家加全局 ScoreboardTag(areaProtectAdminTag),使其在所有领地拥有管理员权限(跨领地越权);而 isAreaAdmin 又不认 OP,导致 OP 反而无全局权限
- 修复1: isAreaAdmin(Player) 增加 player.isOp() 判定,OP 即真正的全局领地管理员
- 修复2: setadmin/unsetadmin 改为限领地: /protect setadmin <领地名> <玩家> 仅在该领地写 role='admin'(DB),不再授予全局标签;unsetadmin 同理并兼容清除旧版遗留的全局标签
- getPermissionLevel 第3步 isLandAdmin(ac.name,...) 本就限领地,无需改动;GUI toggleAdmin 路径(归属校验+限领地)本就干净
- 注释更新:领地管理员严格按领地限定,绝不跨领地生效
2026-07-09 20:45:27 +08:00
youpaishidifu 4c100a0c9f PVP测试场:改为全清后才间隔10秒刷,全清给可点击回床链接
- 撤掉每10秒无脑刷的全局定时器,改为事件驱动:监听 EntityDeathEvent 反查练习生物所属玩家
- 玩家清空当前波次(无存活练习生物)后:发送提示 + 可点击超链接[/pvp back 返回床],并排程10秒后刷下一波
- 新增 mobOwner 反查表 + pendingRespawn 防重复排程;退场(离开/死亡/退出/跨世界)均清理 pendingRespawn
- /pvp back 子命令:在测试场先清理还原背包,再传送至床(出生点),无床则回主世界出生点
- checkAllLeft 改为无人时还原测试场难度(和平模式临时提困难语义保持)
2026-07-09 20:30:38 +08:00
youpaishidifu 5fa12cddbf PVP测试场:修复和平模式刷怪 + 死循环刷怪 + 回血食物
- 和平模式修复:主世界为和平时,有人在场则临时把测试场难度提为困难(HARD),保证亡灵生物不被移除;主世界非和平则跳过
- 死循环刷怪:Bukkit runTaskTimer 每10秒一波,遍历所有在场玩家各补一波
  - 单场景(近战/远程)每组3只;混合场景每组6只(3僵尸+3小白)
  - 全部退场自动停刷怪并还原测试场难度为当前主世界难度
  - 加单玩家存活上限(30)安全阀,防止无限堆积卡服
- 回血食物:进入即发放金苹果x16 + 熟牛肉x32
- AttributeModifier 改用非过时3参构造(String,double,Operation)
2026-07-09 20:15:29 +08:00
youpaishidifu 0ae5c8d16e 改用无限耐久帽子免疫太阳灼烧(替换防火效果)
- 撤销练习生物 FIRE_RESISTANCE 效果(实测仍灼烧)
- 改为给每只练习生物(僵尸/小白)戴一顶 Unbreakable 皮革帽:
  原版机制下亡灵生物有帽子时太阳灼烧先耗帽耐久,帽子永不复破即永久免灼烧
- 用 Attribute.ARMOR 属性修正(-1)抵消皮革帽自带1点护甲,纯挡太阳不增加伤害减免
- 帽子 setHelmetDropChance(0) 不会被打掉
2026-07-09 19:56:55 +08:00
youpaishidifu d7afdd2a47 修复PVP测试场亡灵生物白天被太阳灼烧(SUNBURN)的bug
- 生成练习生物(僵尸/小白)时挂载长时效防火(PotionEffectType.FIRE_RESISTANCE)效果
- 防火直接免疫太阳灼烧的着火伤害,亡灵生物不再白天自燃
- 仅作用于测试场练习生物,不影响玩家与其他世界
2026-07-09 19:46:09 +08:00
youpaishidifu ac92cdb31e 新增PVP练习测试场(pvp_test独立世界)与完善/pvp命令补全
- 新增 PVPTestManager:首次加载预生成30x30露天FLAT世界(pvp_test),worldborder边界+玻璃围墙+关闭自然刷怪
- /pvp test 打开GUI面板选择难度(简单/中等/噩梦)与装备(近战/远程/混合)
- 开始:备份背包、发放装备、传送、生成40血僵尸/小白(近战=僵尸/远程=小白/混合=两者)
- 难度固定伤害:简单(僵尸4/小白2)、中等(僵尸4/小白3)、噩梦(僵尸8/小白7)
- 噩梦难度被玩家击中随机走位;测试场敌对生物互不攻击(取消mob→mob目标与伤害、小白箭不伤友军)
- /pvp命令补全补齐 join/leave/exit/test 一级子命令
- /pvp leave|exit 统一经 Main.leavePVP 路由(测试场优先,否则竞技场)
2026-07-09 19:36:29 +08:00
youpaishidifu 4812c093ea 将 /ban-ip 命令重命名为 /banip,避免与原版 ban-ip 冲突
- plugin.yml 命令名 ban-ip → banip,usage 同步更新
- Main.onCommand 分发与 doBanIp 用法提示同步改为 /banip
- ChatFilterManager 内转发原版 ban-ip 自动封禁的逻辑保持不变(本就调用原版命令)
2026-07-09 18:09:18 +08:00
youpaishidifu 9916968152 新增 ban-ip/tempbanip 封禁命令与 whois/who 查询命令
- 新增 /tempbanip:临时封禁IP或玩家,与 /tempban 共用实现
- 新增 /ban-ip:永久封禁IP或玩家(支持 永久/forever/perm 标识)
- /tempban 与 /tempbanip 统一支持名字或IP,无需专门区分地址类型
- 新增 /whois:玩家自查(注册时间/最近登录/登录IP/禁言状态/理由/效期),
  普通玩家仅可查自己,OP或插件tag管理员或控制台可查指定玩家,
  唯独控制台禁止不带参数
- 新增 /who:查看在线玩家列表,限 OP/插件管理员/控制台
- ChatFilterManager 新增 getMuteExpire 取当前仍有效的禁言到期时间戳
- 封禁与查询权限统一采用 isPrivileged(OP + 插件tag + 控制台)
2026-07-09 17:51:12 +08:00
youpaishidifu 41d8ffce3d 新增/tempban临时封禁、/chat mute禁言、异地登录检测与账号冻结解冻
- DurationParser: 通用时长解析(时间戳/日期/相对时长)
- /tempban: Bukkit原生封禁(1秒~10年)
- ChatFilterManager: 持久化禁言(muted_until)+loadMutes启动加载
- 异地登录检测: onJoin异步通知PHP比对IP归属(ip9.com.cn)
- freeze/unfreeze: web_admin_changes通道执行/解除Bukkit原生封禁
- PVPArenaManager: 移植PVP全服连杀/终结播报逻辑
- DatabaseManager/plugin.yml: 风控列 + tempban命令注册
2026-07-09 17:09:35 +08:00
youpaishidifu 2e417c67b3 调整商店出售限额为部分出售,并修复单件附魔书NBT重建
- 出售限额改为部分出售:超出限额只卖限额内部分,背包剩余不动
- sellItem/sellAllOf 引入 getMaxSellableUnits 计算可卖单位数
- 新增 removeItemsOfMaterial 按材质精确移除指定数量,保留背包剩余
- 修复单件PHP购买附魔书(itemStack为null)按商品ID权威重建NBT,避免整单退款
2026-07-09 13:59:11 +08:00
youpaishidifu 626fbcd591 附魔书NBT:移除空壳兜底,解析失败则整单取消并退款(含单笔购买退款) 2026-07-09 13:32:50 +08:00
youpaishidifu e4e74f1cb8 修复三处Bug:附魔书NBT空壳(ID权威重建)、PVP死亡榜世界未销毁不清战机、TPA processedRequests永不清导致秒过期 2026-07-09 13:15:57 +08:00
youpaishidifu 8fd5b06960 修复雪球菜单可被丢弃导致永久丢失的问题
- 新增 PlayerDropItemEvent 拦截:玩家主动丢弃菜单雪球时取消丢弃并提示,雪球留在手中
- 调整 EntityPickupItemEvent:仅阻止生物(如恶魂)拾取菜单雪球,允许玩家自身拾取,避免任何掉落路径导致永久丢失
2026-07-09 11:17:06 +08:00
youpaishidifu 70bbdba16d 修复附魔书材料匹配失败+购物车发货失败自动退款
- ShopManager: .md加载时对附魔书ID格式(material无效但id像MENDING_I)容错默认ENCHANTED_BOOK,不再静默跳过
- WebManager dispatchItemByMaterialOrId: 增加方式3附魔书兜底(名称含附魔关键词时直接getShopStackByName)
- WebManager shop_cart: 发货跟踪failedItems列表,任一商品失败→不confirm交易+writeRefundTransaction写回PHP退款
- WebManager: 新增writeRefundTransaction方法通过sync.php写退款记录
- PHP sync.php: 新增write_shop_refund action(接收Java退款请求,恢复bond_cache+写refund交易+标记原交易refunded)
- PHP shop.php buy_cart: 扣款前验证每件商品material有效性(防止扣款后无法发货)
2026-07-09 10:54:35 +08:00
youpaishidifu dfd8fee381 优化PVP世界创建:关闭结构生成+简化安全出生点,消除主线程长时卡服
- createPVPWorld: 加 c.generateStructures(false),去除村庄/神庙/矿洞等结构生成(出生点搜索时单区块十几秒卡死的主因);hill/water/cave/tree 自然地形特征不受影响

- forceSafeSpawn: 删除半径8广域扫描(289列同步区块生成),改为仅检查Minecraft已生成的(0,0)出生列,不安全才原地搭3x3小平台(O(1)零额外生成)

- 预生成半径 4->2(25区块),进一步缩短主线程占用
2026-07-09 00:37:12 +08:00
youpaishidifu 7a14457713 修复PVP装备确认后被误遣返及榜单残留
- onInventoryClose: 关闭事件判定同时检查 equipmentConfirmed,避免确认装备后 selectedTier 已移除导致误判未选择而遣返

- 遣返路径补 cleanupPlayerStats(player),修复回到主世界仍携带PVP榜单

- joinArena: createPVPWorld 移入 runTask 下一tick执行,/pvp join 命令即时返回,不再冻结命令线程
2026-07-09 00:18:49 +08:00
youpaishidifu a8451a4ccf 修复PVP chunk预生成:异步改同步分批,消除AsyncCatcher全拦截
- preGenerateSpawnChunksAsync: runTaskAsynchronous → runTaskTimer 同步分批(每tick一行chunk)
- 原因:Paper AsyncCatcher 强制要求 chunk 操作在主线程,原异步方案导致81个区块全部失败
- 新方案:radius=4 时 9 tick 完成(每行 9 chunk),均摊不冻服,自取消用 BukkitTask[] 闭包
- 日志清理:SFTP /logs 删除50个6月旧日志,保留59个7月日志
2026-07-09 00:05:10 +08:00
youpaishidifu 2df8c44cda 传送请求改为纯内存存储并改用JVM运行时长计时
- TeleportManager: 移除 saveTeleportRequest 及全部 DB 读写回退,传送请求仅驻留内存
- 计时改用 ManagementFactory.getRuntimeMXBean().getUptime() 单调钟,不再依赖墙钟时间戳
- 新增 teleportRequestTypes 内存映射记录 tpa/tpahere/tpaall 类型,移除时同步清理
- DatabaseManager: 删除不再使用的 teleport_requests 表
2026-07-08 23:49:47 +08:00
youpaishidifu 46a3dc2515 修复传送请求过期key不对称:incoming循环/清理统一为sender:receiver,确保接收方请求能被定时器正常清理 2026-07-08 23:17:13 +08:00
youpaishidifu 9fab58afe8 修复:回退PVP异步创建世界(改用主线程NORMAL避免IllegalStateException崩溃),保留真实自然地形 2026-07-08 23:00:50 +08:00
youpaishidifu 33ea4292b7 修复PVP地形与日志:改回NORMAL真实自然地形(异步创建避免主线程卡服),ConfigManager改用Bukkit.getLogger()消除System.out警告 2026-07-08 22:50:58 +08:00
youpaishidifu f4c5c0049a 修复PVP加入卡服(13s看门狗)并新增公共设施连控权限
- PVP世界改由 WorldType.FLAT 空世界+手动地形生成:createWorld 毫秒级返回,
  彻底杜绝主线程13s卡服与 Chunk wait 看门狗报错;随机种子仍保证每次地形不同(防背图);
  新增 forceSafeSpawn 固化安全出生点,绕开原'水→删除重建换种子'卡服链路
- 公共设施连控:领地 isPublicBuilding 启用时,所有访客自动获得 传送/容器交互/攻击敌对生物
  3项权限(传送在 canTeleportToLand,容器交互在两处 denyContainer 检查,攻击敌对生物复用既有逻辑)
2026-07-08 20:58:41 +08:00