【Lv:4】
我对 weiwei121 发布的 【原创 - spectatorManager folia自动观战玩家,实现直播解放双手】的资源更新 进行了举报。原因为:
被举报的内容:
发的是我的插件,请求下架并封号处理,最好看看有没有小号,解压可看到 entiv 包名
被举报的内容:
主要基于paper api用deepseek写出的插件,为了做出来跟deepseek唠了一早上,修复了很多逻辑bug
以下是deepseek对插件的运行逻辑解析
下载新版本:
密码:c47e
SpectatorManager 插件逻辑详解
核心设计目标
- 为特定玩家提供观战模式,让他们可以"附身"在其他玩家身上观看游戏
- 解决观战者在旁观模式下无法登录游戏的问题(通过创造模式过渡)
- 自动管理观战状态,包括暂停和恢复机制
- 智能AFK检测和观战目标选择
- 完全兼容Folia调度系统
主要功能和工作流程
1. 玩家加入服务器
- 观战者检测:
- 检查玩家是否在配置的
target-players列表中- 如果是观战者,进入创造模式准备阶段
- 如果有暂停的观战者,尝试恢复他们的观战状态
2. 创造模式准备阶段
- 目的:解决观战者无法登录的问题(旁观模式无法输入/login等命令)
- 设置玩家为创造模式
- 开启飞行和无敌状态
- 显示倒计时消息(默认30秒)
- 如果有可观的玩家 → 进入观战模式
- 如果没有可观的玩家 → 恢复生存模式并取消观战
3. 观战模式激活
- 进入观战模式:
- 设置玩家为旁观模式
- 标记为活跃观战者
- 延迟1tick后选择观战目标(确保游戏模式完全切换)
- 优先选择非AFK玩家
- 其次选择AFK玩家
- AFK玩家只观战10秒(可配置)
- 非AFK玩家观战60秒(可配置)
4. 观战目标切换
- 自动切换:
- 根据目标是否为AFK设置不同的观战时长
- 时间到后自动切换到下一个目标
- 观战者按下Shift键强制切换目标
- 使用
/sm skip命令立即切换5. 观战模式暂停
- 触发条件:
- 没有可观的普通玩家在线
- 观战者退出游戏
- 保存当前位置
- 传送到安全等待位置
- 清除观战目标
- 恢复生存模式
- 显示暂停提示
6. 观战模式恢复
- 触发条件:
- 普通玩家加入服务器
- 使用命令强制恢复
- 传送回之前保存的位置
- 重新进入观战模式
- 显示恢复消息
7. AFK检测系统
- 检测机制:
- 每5秒扫描一次所有非观战玩家
- 记录玩家最后活动时间
- 超过阈值(默认60秒)标记为AFK
- 玩家移动、聊天、交互、切换物品等都会更新活动时间
- 活动时自动移出AFK黑名单
8. 安全等待位置
- 默认位置:主世界出生点
- 自定义设置:使用
/sm setwaiting设置安全位置- 用途:观战暂停时传送的位置
关键问题解决方案
1. 观战者登录问题
- 问题:旁观模式下无法使用/login等命令
- 观战者先进入创造模式
- 给予30秒时间登录
- 登录完成后自动进入观战模式
2. 游戏模式切换冲突
- 问题:事件监听器阻止模式更改
- 使用
bypassModeChangeCheck标记内部模式更改- 在事件监听器中忽略标记的更改
3. 观战目标设置时机
- 问题:游戏模式未完全切换时设置目标会报错
- 添加1tick延迟确保模式完全切换
- 使用玩家调度器在正确区域执行
4. 观战者暂停状态管理
- 问题:没有可观的玩家时观战者状态处理
- 保存当前位置和状态
- 传送到安全位置
- 恢复生存模式
- 普通玩家加入时自动恢复
命令系统
[th]
命令
[/th][th]
权限
[/th][th]
描述
[/th]
[td]/sm reload[/td][td]所有玩家[/td][td]重载插件配置[/td][td]/sm afk[/td][td]所有玩家[/td][td]检查AFK状态[/td][td]/sm skip[/td][td]所有玩家[/td][td]跳过等待或切换目标[/td][td]/sm list[/td][td]spectatormanager.admin[/td][td]查看AFK名单[/td][td]/sm setwaiting[/td][td]spectatormanager.admin[/td][td]设置安全位置[/td][td]/sm force[/td][td]所有玩家[/td][td]强制进入观战模式[/td]
配置选项
yaml
# 观战玩家列表
target-players:
- Spectator
# 正常观战切换间隔 (秒)
switch-interval: 60
# AFK玩家观战时长 (秒)
afk-spectate-duration: 10
# AFK判定阈值 (秒)
afk-threshold: 60
# 登录后倒计时 (秒)
countdown: 30
# 消息自定义
messages:
countdown: "&6观战模式将在 &e{time}&6 秒后启动..."
activated: "&a观战模式已启动"
spectating: "&e正在观战: &6{player}"
spectating-afk: "&e正在观战挂机玩家: &6{player}&c (仅{time}秒)"
cannot-exit: "&c您无法退出观战模式!"
cannot-change-mode: "&c观战模式下无法更改游戏模式!"
paused-title: "&4观战已暂停"
paused-subtitle: "&7等待其他玩家加入..."
resumed: "&a观战模式已恢复!"
技术实现亮点
- Folia兼容性:
- 使用
GlobalRegionScheduler处理全局任务- 使用
EntityScheduler处理玩家特定任务- 区域感知的任务调度
- 使用
ConcurrentHashMap和ConcurrentHashSet- 避免同步阻塞操作
- 异步事件处理

