更新日志

26.11.6-RC

本版集中在物品安全与信息可读性:把独立的 BanNbt 插件整体合并进来, 查询能直接给出维度坐标,主页与帮助页改为点击即执行。

改动说明
🧪 非法 NBT 物品检测(合并 BanNbt) 原 BanNbt 插件的功能整体并入本插件, 现在只需装一个插件、维护一份配置。检测项:超限附魔等级、 非法属性修饰符(攻击力 / 击退抗性 / 最大生命 / 移动速度 / 护甲 / 护甲韧性)、 抗性提升等级 ≥ 4。周期扫描(默认 20 秒)或手动 /linux nbtview。 26.11.6 起改为全链路拦截:玩家 /give、/replaceitem 直接拦命令; 掉落物生成、拾取、容器取出、创造复制、切到手上、出手瞬间 都前置判定;交互后 2 tick 补扫,覆盖命令方块。 另支持 DuelArena 双 OP 决斗豁免 —— 双方都是 OP 且在对局中时不清理,但每 30 秒互相提醒。 清除时向控制台与服主播报,物品名带悬浮详情 (类型、数量、原因、附魔、lore)。 不含任何硬编码玩家名 —— 豁免名单与世界全部由 nbt.exempt-players / nbt.exempt-worlds 决定, op 不豁免,需显式写进名单
📍 查询显示维度与坐标 /linux lookup 现在会给出玩家所在维度与精确坐标。 在线玩家实时读取当前位置;离线玩家使用 退出服务器时记录的位置;拿不到时明确显示 "无法获取",不会给出错误坐标
🖱️ 主页与帮助改为点击即执行 插件主页的 /linux plugins 与 /linux help 不再需要手动输入,点一下直接执行,悬停有说明文字
🔧 配置键自动补齐 以前新版新增的配置段永远不会出现在已有的 config.yml 里 —— 功能能用(读的是内置默认值),但服主看不到、也改不了。 现改为启动时把缺失的键补进你的 config.yml, 已有的键绝不覆盖,补齐后打印一行日志。 (判据用磁盘上的原始文件,而不是 Bukkit 的 contains() —— 后者会把默认值算进去,导致补键永远不生效)
🔍 命令拦截播报统一 所有拦截点统一为一种措辞: 玩家 <执行者> 尝试对 <被保护者> 使用命令 <完整命令> 已拦截! (控制台触发时去掉"玩家 "前缀)
🧹 其他 移除已废弃的 /linux dumpholders 调试命令; 作者显示修复(读取 plugin.yml 的作者列表); 版本号由 26.11.5-Beta 定为 26.11.6-RC
✅
升级不再需要手动补配置 本版起,插件启动时会自动把新增的配置键补进你的 config.yml, 已存在的键不会被覆盖,你改过的值原样保留。 也就是说,下面 26.11.3 提到的那些新增键(command-takeover 等) 现在会自动出现,不用再手动添加。

26.11.3-Alpha

本版集中在插件间对抗与防护不被绕过,全部改动均经过真机验证 (Paper 1.12.2 + 40 余个插件)。

改动说明
fs1 保护接管 x1(FastMenu.jar)会拦截任何提到 fs1 的命令, 连保护对象本人与控制台都拦。现改为运行时注销 x1 的监听器、由本插件承担保护: 不修改不删除任何 jar。 fs1 本人与保护对象(Linux582021)直接放行, 其他玩家提到 fs1 一律拦截并双向通知。 开关 fs1-protection-takeover(默认 true, 建议保持开启:关掉后我们对 fs1 的放行会被 x1 抢先取消而失效)
命令接管 纯名命令"谁先加载谁占有"。实测本服 /ban、/tempban、 /banip、/unban、/unbanip、/banlist 分别被 Essentials / AdvancedBan 占走,导致这些命令的拦截实际不生效。 现启动时自动抢回。开关 command-takeover,可用 command-takeover-exclude 排除指定插件
插件所有权 保护对象上线即强制授予本插件全部权限节点(权限附件层优先级高于权限插件计算值), 退出时移除。开关 owner-force-permissions
审计防篡改 audit.yml 被改成非法 YAML、结构被改写、条目损坏、解析数与文件行数不符, 或运行时条目数变少 —— 一律 SEVERE 告警并写入自检记录。 /linux logs 会显示"审计完整性 ⚠"
监听器自检 每 30 秒检查本插件监听器数量,发现被 HandlerList.unregisterAll 摘除就重新注册并大声告警
尊重他人取消 原先监听器带 ignoreCancelled = true,任何插件先取消事件, 本插件的登录门禁与 fs1 保护就被整段跳过。 现保护判定不再被跳过,但"代为执行"仍尊重他人的取消
变量扩展修复 旧版把 PlaceholderAPI 的 PlaceholderHook 当接口做动态代理, 但它是抽象类,运行时必然抛 PlaceholderHook is not an interface, 12 个 %inl_*% 变量全部不生效。现改为真正的 PlaceholderExpansion 子类(没装 PAPI 时仍不会加载该类)
口令存储升级 PBKDF2-HMAC-SHA256 · 12 万次迭代,哈希自带算法标识, 旧 SHA-256 哈希在登录成功后自动升级
其他加固 控制台路径不再撤销其他插件的取消裁决;服主权限授予失败不再静默; 进入服务器立即授予权限(去掉 1 tick 空窗); /linux logs 不再输出服务端构建号与 Java 版本
🗑️ 移除「突破 fs1 拦截」通道 该通道能借 fs1 / 控制台身份执行任意含 fs1 的命令,本质是个提权面。 既然 fs1 与服主现在直接放行,它已无存在意义,故整体删除: Fs1Refuse 类、/linux fs 命令、 fs1-refuse-enabled 与 fs1-offline-console 两个配置项、 %inl_fs1% 占位符一并移除
👤 新增普通玩家帮助菜单 此前任何"不是服主、不是协管、也不是管理员"的玩家,打开 /linux help 都会看到一整份管理员帮助(封禁、解封、查询 IP…), 既用不了那些命令,也会以为服务器管理很随意。 现补上普通玩家这一档,只列 5 条真正可用的命令; 帮助菜单改为四档分流:服主 / 管理员 / 协管 / 玩家
⚠️
升级注意(26.11.3 时期的说明,现已自动处理) command-takeover、command-takeover-exclude、 owner-force-permissions 是当时新增的键。 从 26.11.5 起,插件启动时会自动把缺失的键补进 config.yml, 无需再手动添加;已有键不会被覆盖。若你的配置文件里仍看不到这些段, 说明服务端还在跑旧版 jar,重启服务器即可。

更早的版本变更请见插件目录下的 FIXES-*.md 记录文件。

1感谢列表

本插件的开发与维护离不开以下贡献者。

贡献者身份贡献
Linux582021 作者 插件作者与主要维护者:整体架构、封禁 / 举报 / 协管 / 保护体系、配置与文档
星白喵喵 作者 提供 BanNbt 插件源码。其非法 NBT 检测逻辑已成为本插件的一部分, 即 /linux nbtview 与周期扫描功能; 检测阈值与判定规则依据其原始实现

关于非法 NBT 检测的来源

该功能原本是一个独立插件 BanNbt,源码由 星白喵喵 提供。 现已整体合并进 InTheNameOfLinux,因此不再需要单独安装 BanNbt.jar。

  • 沿用其原始实现:附魔等级上限、属性修饰符阈值(攻击力 / 击退抗性 / 最大生命 / 移动速度 / 护甲 / 护甲韧性)、抗性提升压缩规则。
  • 在此基础上补充:豁免玩家与世界配置化(不再硬编码名字)、饰品兼容(#pscharm: 标记)、悬浮详情播报、/linux nbtview 手动扫描。
💡
插件内也能看到作者 执行 /linux 打开主页时,显示的作者列表直接读取 plugin.yml, 因此会同时显示 Linux582021 与 星白喵喵。

2快速开始

3 步完成安装,5 分钟即可上手。适用于 Minecraft 1.12.2(Paper / Spigot)。

环境要求

项目 要求
服务端 Paper 或 Spigot 1.12.2
Java Java 8(推荐)或 Java 17/21(需加 --add-opens 参数)
内存 建议 ≥ 2GB
依赖插件 无硬性依赖,可选 XlandCore / 假人插件 / XlandStop

安装步骤

  1. 获取插件 请联系 Linux582021(QQ:2703441387)获取插件文件。
  2. 放入插件目录 将 InTheNameOfLinux.jar 放入服务器 plugins/ 目录。
  3. 启动服务器 首次启动会生成默认配置,控制台应输出"首次初始化登录密码"。
  4. 登录验证 保护对象(默认 Linux582021)进服后,输入 /linux login,然后在聊天栏发送初始密码 password。
  5. 修改密码 登录成功后,执行 /linux chargepw 新密码 修改密码(至少 6 位)。
⚠️
务必第一时间修改密码 初始密码 password 是明文公开的,未修改前任何人都可以登录。
💡
为什么密码要在聊天栏输入? 因为 /linux login 密码 这种形式会被服务端日志记录(Minecraft 原生行为)。而聊天栏消息会被插件拦截,控制台和日志完全看不到密码。

3命令详解

登录相关

命令说明权限
/linux login 进入密码输入模式,在聊天栏发送密码即可验证身份 仅 Linux582021
/linux chargepw <新密码> 修改登录密码(需先登录,至少 6 位) 仅 Linux582021
🚨
不支持 /linux login <密码> 26.11.2 起已移除该用法。服务端会在命令交给插件之前就把它写进 logs/latest.log,等于把明文口令落盘。请只用 /linux login 后在聊天栏发送密码。
💡
与 NalxerPDR 的分工(软依赖) /report 是本插件的正式命令(启动时从占用者手里抢回,别名 /jb),举报流程由本插件负责(编号、接受/驳回、回执、分流通知); 行为记录交给 NalxerPDR。举报一旦提交,被举报人会 自动进入录制,事后用 /nar rcd <编号> 逐页回放。
没装 NalxerPDR 时举报照常工作,只是不做自动录制 —— 两者互相独立。

命令拦截:黑名单 / 白名单两种模式

拦截规则是“命令里提到保护对象(protected-player)时才判断”, 所以不会牵连其它无关命令。保护对象本人不受限制。 按词匹配,Linux582021x 这类不会被误认为保护对象。

配置项默认作用
command-filter-mode blacklist 拦截模式。blacklist = 命中名单就拦; whitelist = 不在名单就拦
blocked-commands ban / tempban / banip / kick / linux ban / xlban … 黑名单模式使用:命中的命令会被拦下
whitelist-commands [] 白名单模式使用:只有这些命令被允许, 其余提到保护对象的命令一律拦下
💡
两种模式对照(保护对象 = Linux582021,白名单只放行 list / help)
命令白名单模式黑名单模式(默认)
/list放行(在白名单里)放行
/spawn放行(没提到保护对象)放行
/gamemode 1 Linux582021拦放行
/tp Steve Linux582021拦放行
/tp Linux582021 Steve拦(提到了就拦)放行
/give Linux582021 diamond拦放行
/kill Linux582021拦放行
/msg Linux582021 hi拦放行
/ban Linux582021 原因拦拦
/gamemode 1 Linux582021x放行(不是保护对象)放行
/kill @e · /gamemode 1 @e · /tp @s ... 放行(没点名,黑名单不认选择器)拦
/s · /e · /linux help 放行放行
保护对象本人执行任何命令都放行,不受限制。
注意:黑名单模式只认明确点名(全名 / UUID), 不认 @ 选择器与名字前缀 —— 所以 /kill @e 这类 在黑名单模式下会放行(原生里它确实会作用到保护对象)。 要连这类一起防住,请把 command-filter-mode 改成 whitelist;白名单模式仍然判定选择器与前缀。
⚠️
白名单别留空 command-filter-mode: whitelist 而 whitelist-commands 为空时,任何提到保护对象的命令都会被拦下。 配置校验会就此告警(/linux reload 时会打印)。
🛡️
防绕过:按“实际执行的目标”判定,不看玩家敲的原文 列表只按字面比对是能被绕开的,所以判定做了这几层:
  • 命令简写 / 别名会被还原:名单里写 gamemode, 玩家敲 /gm 一样命中;写 teleport, /tp 一样命中(走 CommandMap 解析实际命令名)
  • 命名空间前缀被剥掉:/minecraft:ban、 /essentials:msg 与裸名等价
  • 大小写不敏感:/GM 1 LINUX582021 同样命中
  • UUID 写法也认:/tp Steve <保护对象UUID> 原文里没有名字,照样判定为“提到保护对象”
  • 目标用名字简写也认:/tp Steve Linux —— 服务端会把 Linux 按前缀补全成 Linux582021, 所以判定也按前缀走(有歧义时不当作命中)
  • 目标用 @ 选择器也认:/gamemode 1 @p、 @s、@a、@e[type=player] 都可能作用到他 → 拦;@e[type=zombie]、 @e[name=!他] 明确不是他 → 放行
  • 按词匹配,不是子串:Linux582021x 不会被误判
写法是否命中保护对象
/gamemode 1 Linux582021命中
/gm 1 Linux582021(简写)命中
/minecraft:gamemode 1 Linux582021命中
/GM 1 LINUX582021命中
/tp Steve <UUID>命中
/gamemode 1 Linux582021x不命中(不是他)
/gamemode 1 SomeoneElse不命中

目标参数的各种写法(这是最容易漏的一层 —— 玩家可以不写全名)

目标写法是否算作用到他说明
Linux582021算全名
LINUX582021算大小写不敏感
<UUID>算UUID 写法
Linu / Li算唯一前缀,服务端会补全成他
@p @s @a @r @e 算可能作用到他(@p 与站位有关,静态证不了不是)
@e[type=player]算选择玩家
@e[name=Linux582021]算指名道姓
@e[type=zombie]不算明确不是玩家
@e[name=!Linux582021]不算明确排除他
Linux582021x不算不是他

注意:@p / @a 这类保守判定意味着 白名单模式下「/gamemode 1 @p」也会被拦 —— 因为它可能落到保护对象身上。这是刻意的:宁可多拦一次,不能漏一次。 确需放行就把对应命令加进 whitelist-commands。

封禁相关

命令说明权限
/ban <玩家> [时间] [原因]封禁玩家。省略时间 = 永久封禁;写了时间(如 30m / 12h / 7d / 裸秒数)则是临时封禁,到期自动解封ban
/report <玩家> <理由>
别名 /jb
举报玩家。本插件正式命令,启动时会从占用者手里抢回来(NalxerPDR 也声明了 /report)。提交后自动让 NalxerPDR 记录被举报人的行为(位置 / 破坏与放置方块 / 造成伤害 / 指令 / 聊天),用 /nar rcd <编号> 回放
/linux ban <玩家> [时间] [原因]与 /ban 等价;省略时间 = 永久(拦截列表统一按 /linux ban 口径处理)ban
/tempban <玩家> <时间> [原因]临时封禁,到期自动解封(/ban 已支持同样写法,此命令保留兼容)tempban
/banip <玩家/IP> [原因]封禁 IP 地址,同 IP 玩家会被踢出banip
/unban <玩家>解封玩家(同时删除最近一条封禁历史)unban
/unbanip <IP>解封 IPunbanip

功能封禁(协管可用)

命令说明权限
/linux banblock <玩家> [时间] [原因]禁止方块交互(挖掘、放置、交互)协管
/linux banmove <玩家> [时间] [原因]禁止移动,玩家会被冻结在原位置协管
/linux banmsg <玩家> [时间] [原因]禁言,拦截聊天、私聊、/say 等协管
/linux banall <玩家> [时间] [原因]以上三者合一,全面封禁协管
/linux unbanblock <玩家>解除方块交互禁用协管
/linux unbanmove <玩家>解除移动禁止协管
/linux unbanmsg <玩家>解除禁言协管
/linux unbanall <玩家>解除所有功能封禁协管

查询与信息

命令说明权限
/linux lookup <玩家/IP>查询 UUID、IP、身份、游玩时长、封禁历史,并显示所在维度与坐标(在线实时读取;离线用退出时记录的位置;拿不到则显示"无法获取")lookup
/linux logs [页码]插件状态总览:运行时、开关状态、各数据文件(含记录数/大小/落盘是否成功)、定时任务、以及 XlandCore / 假人插件 / XlandStop / PlaceholderAPI 的联动状态。分页显示,每页 10 行lookup
/linux audit [玩家] [页码]审计日志:谁在什么时候改了什么(惩罚 / 权限开关 / 认证 / 举报 / 拦截)。分页显示,每页 10 行;带玩家名时只看该玩家相关记录lookup
/linux seenip <IP>查询使用过该 IP 的所有玩家lookup
/linux history <玩家>查看玩家完整封禁历史history
/linux clearhistory <玩家>清除玩家全部历史(需二次确认)clearhistory
/banlist [页码]查看所有封禁记录(账号 + 功能),可点击翻页ban
/linux checkop检查自己的身份与管理权限(服主 / 管理员 / 协管都能用,不需要额外权限)所有人
/linux checkop list管理层列表:直接读原版 ops.json 与 plugins/XlandCore/config.yml,按 服主 → 副服主 → 协管 → 管理员 排序并标注在线状态。每次执行都会同步身份记录,改完权限立刻反映lookup
/hide切换隐身(等价于执行 /vanish),不带参数。仅保护对象本人可用仅 Linux582021
/linux plugins插件联动状态一览:XlandCore 身份识别、假人插件(含假人数量)、XlandStop 监听、LinuxTitle 头衔、命令接管状态、非法 NBT 检测状态;末尾的「拓展插件」小节(青色菱形 + 淡紫名字,和联动行的金色区分)列出给本插件加功能的外挂 —— LinuxACE 反作弊(强度 / 检查数 / 踢出阈值)与 LinuxChestGUI 箱子面板,装了才显示。主页可点击直达lookup
/linux nbtview立即扫描并清除在线玩家的非法 NBT 物品(不等周期扫描)。结果播报到控制台与服主,物品名带悬浮详情nbtview
/linux cmd <玩家> <命令>以指定玩家身份执行命令sudo
/linux refuse查看 / 修改命令拦截列表reload
/linux reload重载配置文件,并回报配置校验结果reload
/linux help [页码]分页帮助菜单,按身份四档分流:服主 / 管理员 / 协管 / 玩家。可点击翻页、悬停查看说明所有人

时间格式

10s # 10 秒
5m # 5 分钟
1h # 1 小时
1d # 1 天
1w # 1 周
1d12h # 1 天 12 小时(组合)
1w2d3h30m # 1 周 2 天 3 小时 30 分钟

支持单位:s(秒)、m(分钟)、h(小时)、d(天)、w(周)。可以组合使用。

也可以只写数字,按秒计算(例如 /tempban Steve 600 刷屏 = 10 分钟)。

⚠️
非法时长会被拒绝,而不是当成永久封禁 像 0、abc、1x、超长数字(如 99999999999999999999h)这类输入会直接报错中止。 26.11.2 之前这些输入可能被静默当成"永久封禁",升级后不会再有这个风险。

4举报系统 NEW

插件内置举报系统,玩家提交举报后,管理层调查处理,结果自动通知当事人与服主。

提交流程

  1. 玩家提交举报 执行 /linux report <玩家> <原因>,提交后进入 1 分钟全局冷却。
  2. 智能分流通知 根据被举报人身份决定通知对象(见下表)。
  3. 24 小时调查冷却 举报提交后 24 小时内不能接受 / 驳回,用于调查。
  4. 管理层处理 管理员 / 协管执行 /linux report accept <ID> 或 reject <ID>,可附加备注。
  5. 结果通知 举报人上线后立即收到处理结果,服主也会收到同步广播。

智能分流规则

被举报人身份通知对象说明
服主(Linux582021)仅服主本人不会广播给其他管理层
协管 / 管理员 / 副服主其他管理层不会通知被举报人本人
普通玩家所有管理层举报人自己除外

离线消息缓存

  • 服主离线时收到新举报 → 消息暂存到 reports.yml。
  • 服主上线 10 秒后自动推送所有暂存消息。
  • 暂存上限 100 条,超出丢弃最早的。
  • 举报人离线期间的处理结果也会缓存,上线后延迟 3 秒推送。

清理举报记录

支持多种清理模式,全部需要二次确认。

/linux report clear handled # 清空已处理的举报
/linux report clear all # 清空所有举报(不可恢复)
/linux report clear pending # 清空待广播消息
/linux report clear player Steve # 清空某玩家相关举报
/linux report clear id 3 # 删除指定举报
/linux report clear confirm # 确认执行(5 分钟内有效)
⚠️
清空操作需二次确认 输入 /linux report clear <模式> 后,需要再执行 /linux report clear confirm 才会真正清空。 确认有效期 5 分钟,过期自动取消。
💡
控制台无需二次确认 如果从控制台执行清空命令,会直接执行,不经过 confirm 步骤。

5二次确认机制 NEW

为了防止误操作,以下命令都需要二次确认才能执行。确认有效期统一为 5 分钟。

操作第一步第二步(确认)
清空玩家历史 /linux clearhistory Steve /linux clearhistory confirm
清空已处理举报 /linux report clear handled /linux report clear confirm
清空全部举报 /linux report clear all /linux report clear confirm
清空待广播消息 /linux report clear pending /linux report clear confirm
清空玩家相关举报 /linux report clear player Steve /linux report clear confirm
删除指定举报 /linux report clear id 3 /linux report clear confirm

确认机制规则

  • 第一步输入后,插件会显示"确认要清空 XXX 吗?"并给出 confirm 提示。
  • 玩家需要在 5 分钟内执行 confirm,过期自动取消。
  • 如果重复执行第一步,上一次待确认操作会被替换(会显示提示)。
  • 玩家退出游戏时,待确认状态会被清除。
  • 控制台执行时无需二次确认,直接生效。
  • 清空待广播消息(pending)时,如果当前没有待广播消息,会提示无需清空。
🚨
清空操作不可恢复 尤其是 /linux report clear all 会删除全部举报记录,请谨慎使用。

6权限说明

插件使用三级权限体系:OP / 协管 / 普通玩家。/linux help 会据此自动分流,只列出该身份真正能用的命令。

帮助菜单的四档分流

/linux help [页码] 每页 5 条,底部可点击翻页。目录按身份切换:

身份看到的内容
服主(protected-player) 完整目录:管理命令 + 功能封禁 + 举报 + 服主专用(登录 / 改密 / 拦截开关)
管理员(OP / 持有管理权限节点) 管理命令 + 功能封禁 + 举报
协管(XlandCore 身份或 inthenameoflinux.moderator) 仅功能封禁 + 举报处理(不能账号封禁、不能清空举报)
普通玩家 仅 2 条:/linux help、/linux report <玩家> <原因>
💡
普通玩家这一档是后补的:在此之前,任何不是服主、不是协管、也没有管理权限的玩家, 打开帮助都会看到一整份「管理员帮助」(封禁、解封、查询 IP…), 既用不了那些命令,也会以为服务器管理很随意。
权限节点说明默认
inthenameoflinux.reload重载配置、修改拦截列表、开关控制台拦截OP
inthenameoflinux.ban使用 /ban /xlban /banlistOP
inthenameoflinux.tempban使用 /tempbanOP
inthenameoflinux.banip使用 /banipOP
inthenameoflinux.unban使用 /unbanOP
inthenameoflinux.unbanip使用 /unbanipOP
inthenameoflinux.lookup使用 /linux lookup / seenip / fpOP
inthenameoflinux.history使用 /linux historyOP
inthenameoflinux.clearhistory使用 /linux clearhistoryOP
inthenameoflinux.penalty完整惩罚权限(banblock / banmove / banmsg / banall 等)OP
inthenameoflinux.report查看 / 处理举报(list / info / accept / reject)OP / 协管
inthenameoflinux.report.admin清空举报记录(clear 系列命令)OP
inthenameoflinux.nbtview使用 /linux nbtview 手动扫描并清除非法 NBT 物品OP
inthenameoflinux.moderator协管权限节点(XlandCore 未加载时的回退)否
inthenameoflinux.sudo.wildcard允许使用 sudo 通配符(everyone / all / @a)驱动其他在线玩家执行命令OP

协管说明

  • 协管身份优先从 XlandCore 读取(身份 = "协管",且需确实持有 xlcore.mod)。
  • 如果 XlandCore 未加载,则回退到权限节点 inthenameoflinux.moderator。
  • 协管可用 8 个功能封禁命令,不能使用账号封禁(/ban、/tempban、/banip)。
  • 协管可以查看 / 处理举报(list / info / accept / reject),但不能清空举报(需要 report.admin)。
  • 协管封禁时长上限为 7 天,不能执行永久封禁;/tempban 也受同一上限约束(26.11.2 起补齐)。
  • 协管的帮助菜单和 TAB 补全只显示可用命令。
⚠️
协管必须写明封禁时长 /linux banmsg Steve 1h 刷屏 ✅  ·  /linux banmsg Steve 刷屏 ❌
省略时长会被当作"永久",而协管无权永久封禁,命令会被直接拒绝并提示 「协管不能执行永久封禁,最长 7 天」。超过 7 天同样会被拒绝。
💡
OP 优先原则 如果玩家同时是 OP 和协管,插件会将其识别为"完整管理员",显示完整帮助。
也就是说:给协管 OP 会让他获得完整的封号权限,按最小权限原则不要这样做。

身份数据从哪来

/linux checkop list、/linux lookup、/linux seenip 都会读取服务器上的权威配置,而不是玩家登录时才记录的身份缓存。

身份数据来源
管理员服务器根目录的原版 ops.json
服主 / 副服主 / 协管 plugins/XlandCore/config.yml 的 owner / co-owners / moderators
🔄
查看即同步 以前身份只在玩家登录时记录,管理员的 OP 被改动后要等那人重新登录才会更新。 现在每次查看都会用配置数据刷新一次,并写回 userip.yml(立即落盘), 所以改完权限立刻准确,没进过服的管理员也能被查到。

协管 / 管理员 权限对照

能力协管管理员(非 Linux)服主
功能封禁(禁言 / 禁移动 / 禁交互 / 全面)✅✅✅
举报处理(list / info / accept / reject)✅✅✅
/linux checkop(身份自检)✅✅✅
账号封禁 /ban /tempban❌✅✅
IP 封禁 /banip❌✅✅
解封 /unban /unbanip❌✅✅
封禁列表 /banlist❌✅✅
封禁历史 / 清除历史❌✅✅
查询 /linux lookup seenip❌✅✅
举报清理 report clear❌✅✅
重载配置 / 审计日志 / 状态总览❌✅✅
隐身 /hide❌❌✅
拦截列表 / 控制台开关 / NBT 扫描 / 改密❌❌✅

简言之:协管只能"限制功能",管理员可以真正"封号"; 涉及插件配置与服主安全的操作(拦截列表、控制台开关、NBT 扫描、改密、隐身) 只有服主本人能做 —— 这是防止管理员借插件配置提权的边界。

📄
完整使用说明 插件压缩包内附两份纯文本说明,可直接发给对应人员: 协管使用说明-26.11.5正式版.txt 与 管理员使用说明-26.11.5正式版.txt。

7配置说明

所有配置都在 plugins/InTheNameOfLinux/config.yml,修改后执行 /linux reload 即可生效(无需重启)。

关键配置项

配置项默认值说明
protected-playerLinux582021重点保护的玩家名
blocked-playerfs1受保护、禁止他人提及的玩家名
fs1-protection-takeovertrue是否接管 x1 插件(FastMenu.jar)的 fs1 保护。x1 会拦截任何提到 fs1 的命令(含保护对象本人与控制台),导致突破通道不可用;开启后本插件会在运行时注销 x1 的监听器(不修改、不删除 jar,重启即恢复)
fs1-hide-join-messagetrue是否隐藏 fs1 的进服提示(接管自 x1 的 setJoinMessage(null))
command-takeovertrue是否把被其他插件占用的纯名命令抢回本插件。Bukkit 的命令名是"谁先加载谁占有",Essentials / AdvancedBan 等更早加载的插件会占走 /ban、/tempban 等,导致本插件对它们的拦截实际不生效
command-takeover-exclude[]不要抢这些插件的命令(按 plugin.yml 里的 name 匹配,忽略大小写)。例:想让 Essentials 保留 /ban 就填 [Essentials]
owner-force-permissionstrue保护对象上线时,强制授予本插件 plugin.yml 里声明的全部权限节点。即使权限插件漏配或有人剥夺节点,服主本人也一定能管理自己的插件(退出时自动移除,恢复权限插件计算)
appeal-group925200745封禁踢出消息里的申诉群号
broadcast-bantrue是否全服广播封禁消息(false 只广播给管理员)
refuse-enabledtrue全局命令拦截开关
console-cmd-enabledtrue控制台 fs1 保护(26.11.3 起默认开启)。控制台 / Rcon 发出的、提到 blocked-player(fs1)的命令一律拦截,判定与玩家路径一致(按独立参数匹配,/say fs1x 不会误拦)。与登录态无关 —— 即使你不在线也会拦。原"突破通道"豁免已移除,现在没有例外
命令被拦截时的通报(26.11.5 起统一措辞):
统一文案:玩家 <执行命令的玩家> 尝试对 <被保护的玩家> 使用命令 <完整命令> 已拦截!
执行者是控制台 / Rcon 时去掉"玩家 "前缀:控制台 尝试对 fs1 使用命令 /ban fs1 已拦截!
命令统一带斜杠,不会出现 ban fs1 这种缺斜杠的写法。
此文案由全部拦截点共用(玩家命令、控制台命令、sudo、命令接管路径),便于日志检索与玩家理解。
非法 NBT 物品检测(合并自原 BanNbt 插件) —— 详见下方「非法 NBT 检测」章节
nbt.enabledtrue非法 NBT 检测总开关
nbt.scan-seconds20周期扫描间隔(秒)。设为 0 = 关闭周期扫描,仍可用 /linux nbtview 手动扫
nbt.exempt-players""豁免玩家(逗号分隔,大小写不敏感)。留空 = 所有人(含 op)都会被检查。op 不会自动豁免,需要豁免就显式写进来
nbt.exempt-worlds""豁免世界(逗号分隔):这些世界里跳过物品检测。用于兼容带自定义属性的机器/道具
nbt.skip-charmstrue跳过带饰品标记(lore 里的 #pscharm:)的物品,避免误删玩家购买的饰品
nbt.compress-resistancetrue把抗性提升等级 ≥ 4 压回 3 级(原 BanNbt 行为),仅在非豁免世界生效
nbt.max-enchant-level20附魔等级上限,超过即判定为非法并清除
nbt.max.*—属性修饰符上限:attack-damage 50、knockback-resistance 1、max-health 10、movement-speed 0.5、armor 30、armor-toughness 20
tempban-reminder.enabledtrue临时封禁即将解封时的全服提醒开关
tempban-reminder.advance-seconds60提前多少秒提醒(服务器重启后提醒任务会自动重建)
penalty-sync.interval-seconds60功能封禁缓存与文件对齐间隔
data-save.interval-seconds30数据文件批量写盘间隔(设为 0 = 每次立即写盘)

登录配置

login:
password-salt: "" # 自动生成,勿改
password-hash: "" # 自动生成,勿改
min-length: 6 # 密码最短长度
fail-delay-seconds: 3 # 失败冷却(秒)
max-fails: 5 # 连续失败多少次锁定
lockout-seconds: 300 # 锁定时长(秒)
timeout-seconds: 90 # 登录超时踢出(秒)

协管配置

moderator:
enabled: true # 协管功能开关
max-duration-days: 7 # 协管封禁时长上限(天)
fallback-permission: "inthenameoflinux.moderator"
⚠️
不要手动修改 login.password-salt / password-hash 这两行由插件自动生成。如果修改错误,会导致无法登录。想重置密码,删掉这两行的值(改成 ""),重启后会自动重置为 password。

完整配置参考

下表列出 config.yml 里的全部配置项与默认值,按插件里的顺序排列。缺项会在启动时自动补齐,已有项不会被覆盖。

配置项默认值说明
保护对象与基础
protected-playerLinux582021重点保护的玩家名(服主本人)。他会获得本插件全部权限节点;其他人对他执行命令会被拦截并双向通知。填错会导致"服主自己反被限制",请填准。
blocked-playerfs1另一个受保护的玩家名。任何其他玩家在命令里提到这个名字都会被拦下,并通知双方(按独立参数匹配,/msg fs1x 不会误拦)。留空 = 关闭该项保护。
appeal-group925200745申诉群号,显示在封禁踢出提示里,让被封玩家知道去哪申诉。
broadcast-bantrue执行封禁时是否全服广播。设为 false 则只广播给管理员。
命令拦截
blocked-commandsxlcore ban, xlcore kick, ban, banip, kick, tempban, linux ban, xlban拦截命令列表。普通玩家执行列表里的命令会被拦下;保护对象与 blocked-player 本人不受限。两种写法:ban(只匹配命令名)、xlcore ban(带空格 = 匹配整行文字)。
refuse-enabledtrue上面那个拦截列表的总开关。关掉后普通玩家也能随意执行列表里的命令,请谨慎。
console-cmd-enabledtrue控制台 / Rcon 发出的、提到 blocked-player 的命令是否也拦截。与登录态无关 —— 服主不在线时照样拦。
提醒与定时任务
tempban-reminder.enabledtrue临时封禁即将到期时,是否全服提醒。
tempban-reminder.advance-seconds60提前多少秒提醒。注意:该提醒任务在服务器重启后会自动重建,不会丢失。
命令接管与权限
command-takeovertrue是否把被其他插件占用的纯名命令抢回本插件。Bukkit 的命令名是"谁先加载谁占有",Essentials / AdvancedBan 等比本插件先加载的插件会占走 /ban、/tempban 等,导致本插件对它们的拦截实际不生效。(如果你的服用 Essentials 管封禁,可以关掉这项。)
command-takeover-exclude[]不抢这些插件的命令(按 plugin.yml 里的 name 匹配,忽略大小写)。例:想让 Essentials 保留 /ban 就填 [Essentials]。
owner-force-permissionstrue保护对象上线时,强制授予本插件 plugin.yml 里声明的全部权限节点。即使权限插件漏配或有人剥夺节点,服主本人也一定能管理自己的插件(退出时自动移除)。
fs1 保护(接管自 x1 插件)
fs1-protection-takeovertrue是否接管 x1 插件(FastMenu.jar)的 fs1 保护。x1 会拦截任何提到 fs1 的命令(连本人与控制台都拦),开启后本插件会在运行时注销 x1 的监听器(不改不删 jar,重启即恢复),改由本插件承担保护:fs1 本人与服主放行,其他玩家照样拦。建议保持开启,否则我们的"放行"会被 x1 抢先取消而失效。
fs1-hide-join-messagetrue是否隐藏 fs1 的进服提示(接管自 x1 原本的 setJoinMessage(null))。
数据同步与定时写盘
penalty-sync.enabledtrue是否开启功能封禁记录的定时同步。
penalty-sync.interval-seconds60内存缓存与 penalty.yml 对齐的间隔(秒)。
data-save.interval-seconds30数据文件批量写盘的间隔(秒)。设为 0 = 每次改动立即写盘(更安全但更频繁)。
假人插件联动
fakeplayer.info-classexample.fakeplayer.FakePlayerInfo假人插件里保存假人信息的类名。一般不用改。
fakeplayer.init-delay-seconds20插件启动后延迟多久初始化假人联动(秒)。给假人插件留加载时间。
fakeplayer.sync-interval-seconds60假人列表同步间隔(秒)。
登录验证
login.password-salt""不要手改。密码的随机盐,首次运行自动生成。
login.password-hash""不要手改。密码哈希(PBKDF2-HMAC-SHA256 · 12 万次迭代)。想重置密码就删掉这两项的值,重启后会自动生成新初始密码并打印到控制台。
login.min-length6新密码的最短长度。
login.fail-delay-seconds3密码输错后的等待时间(秒)。
login.max-fails5连续输错几次后锁定账号。
login.lockout-seconds300锁定时长(秒)。默认 5 分钟。
login.timeout-seconds90进服后多久没完成验证就踢出(秒)。想宽松点就调大。
login.lockout-until0运行时状态,不要手改。锁定截止时间戳,插件自己维护。
login.fail-count0运行时状态,不要手改。当前连续失败次数。
login.last-fail-time0运行时状态,不要手改。最后一次失败的时间戳。
协管
moderator.enabledtrue是否启用协管体系。关闭后没有人会被识别为协管。
moderator.max-duration-days7协管能执行的最长封禁时长(天)。防止协管滥用长期封禁;协管不能执行永久封禁。
moderator.fallback-permissioninthenameoflinux.moderator协管权限节点。XlandCore 未加载、或 XlandCore 没给身份时的回退判定依据。
非法 NBT 检测
nbt.enabledtrue非法 NBT 物品检测的总开关。
nbt.scan-seconds20周期扫描间隔(秒)。设为 0 = 关闭周期扫描,仍可用 /linux nbtview 手动扫一次。
nbt.exempt-players""豁免玩家(逗号分隔,大小写不敏感)。留空 = 所有人(含 op)都会被检查。op 不会自动豁免 —— 需要豁免谁就把名字写进来。
nbt.exempt-worlds""豁免世界(逗号分隔):这些世界里跳过物品检测。用于兼容会给道具加自定义属性的自定义世界。
nbt.skip-charmstrue跳过带饰品标记(lore 里的 #pscharm:)的物品,避免误删玩家花点卷买的饰品。建议保持开启。
nbt.compress-resistancetrue把抗性提升等级 ≥ 4 压回 3 级(原 BanNbt 的行为)。只在非豁免世界生效。
nbt.max-enchant-level20附魔等级上限,超过即判定为非法并清除该物品。
nbt.max.attack-damage50.0属性修饰符 generic.attackDamage 的数值上限,超过即清除。
nbt.max.knockback-resistance1.0属性修饰符 generic.knockbackResistance 的数值上限,超过即清除。
nbt.max.max-health10.0属性修饰符 generic.maxHealth 的数值上限,超过即清除。
nbt.max.movement-speed0.5属性修饰符 generic.movementSpeed 的数值上限,超过即清除。
nbt.max.armor30.0属性修饰符 generic.armor 的数值上限,超过即清除。
nbt.max.armor-toughness20.0属性修饰符 generic.armorToughness 的数值上限,超过即清除。

8非法 NBT 检测 NEW

本功能由原独立插件 BanNbt 整体合并而来:现在只需装一个插件、维护一份配置, 不必再单独摆放 BanNbt.jar。

检测哪些东西

检测项判定处理
超限附魔任一附魔等级 > nbt.max-enchant-level(默认 20)清除该物品
非法属性数值属性修饰符的数值为 NaN 或 Infinity清除该物品
超限属性攻击力 / 击退抗性 / 最大生命 / 移动速度 / 护甲 / 护甲韧性 超过配置上限清除该物品
抗性提升效果等级 ≥ 4压回 3 级(不删物品)

什么时候检测

  • 周期扫描:默认每 20 秒一次,间隔由 nbt.scan-seconds 控制。设为 0 可关闭周期扫描。
  • 手动扫描:执行 /linux nbtview 立即扫一次全体在线玩家,不必等周期。

触发后会发生什么

  • 违规物品被清除(抗性提升只压级,不删物品)。
  • 向控制台与服主播报,物品名带悬浮详情: 鼠标移上去可看到类型、数量、判定原因、附魔、lore,便于确认是不是误判。
  • 播报文案:玩家 <玩家名> 持有非法NBT物品,物品为 <物品名> 已清除非法NBT物品。

豁免与兼容

配置项作用
nbt.exempt-players豁免名单(逗号分隔,大小写不敏感)。op 不豁免,需要豁免必须显式写进名单
nbt.exempt-worlds这些世界里跳过物品检测。用于兼容会给道具加自定义属性的自定义世界
nbt.skip-charms跳过带饰品标记(lore 里的 #pscharm:)的物品,避免误删玩家花点卷买的饰品
nbt.compress-resistance是否执行"抗性提升压级"。仅在非豁免世界生效,避免削掉自定义世界有意给玩家的效果
✅
不含任何硬编码玩家名 原 BanNbt 把豁免名单写死在代码里,换人管理就得改代码。 现在豁免完全由配置决定,改配置 + /linux reload 即可生效。

9插件联动

XlandCore

用于读取玩家身份(服主 / 副服主 / 管理员 / 协管)。协管体系依赖此插件。

  • 如果 XlandCore 在服务器启动时已加载,静态块会立即检测到。
  • 如果 XlandCore 后加载,插件会在 20 秒后延迟检测一次。
  • 执行 /linux reload 也会重新检测。
⚠️
XlandCore 的两个权限节点请谨慎授予 xlcore.admin 与 xlcore.bypass.* 都等同于完全管理员权限, 副服主(co-owners)同样拥有管理员权限。持有它们的人可以执行 /xlcore add|remove 管理协管列表。

2026-09-29 修复:/xlcore add|remove 原先未校验玩家名, 而该名字会被拼进以控制台身份执行的 lp user … 命令, 输入 Steve permission set * true 这类内容即可借控制台把 * 权限刷给任意玩家。现已加入严格玩家名校验 (仅允许 1-16 位字母/数字/下划线),并在拼接出口处二次校验。 升级后若输入不合法名字会收到"玩家名不合法"提示,属正常防护。

假人插件(FakePlayerPlugin)

同步假人数据,用于 /linux fp 和查询识别。

⚠️
如果假人插件改过包名 请在 config.yml 修改 fakeplayer.info-class 的值。

PlaceholderAPI 变量

装好 PlaceholderAPI 后,插件会注册 inl 前缀的变量,可在计分板 / 聊天 / Tab 插件里直接用:

⚠️
26.11.5 修复 旧版把 PlaceholderHook 当接口做动态代理,但它是抽象类, 注册时必然抛 PlaceholderHook is not an interface —— 下表的变量一个都不生效。 现已改为真正的 PlaceholderExpansion 子类。升级后请重启服务器, 并确认控制台出现 [PAPI] 已注册变量扩展: %inl_*%(12 个变量)。
变量说明
%inl_identity%身份(服主 / 副服主 / 管理员 / 协管 / 普通玩家)
%inl_banned%该玩家是否被账号封禁(是 / 否)
%inl_penalty%该玩家是否有任意功能封禁(是 / 否)
%inl_penalty_types%功能封禁类型,逗号分隔(如 禁言,禁用方块)
%inl_playtime%累计在线(如 3天2小时)
%inl_playtime_millis%累计在线(毫秒,便于排序或条件判断)
%inl_bans%全服封禁记录总数
%inl_reports%待处理举报数
%inl_online%在线人数
%inl_fakeplayers%假人数量
%inl_version%插件版本
%inl_fs1%fs1 提权通道是否开启(提权通道已移除,固定返回"关")

没装 PlaceholderAPI 时插件会安静跳过注册,不影响其他功能。可用变量清单也可以直接用 /linux logs 查看。

💡
分页显示与状态查看 /linux logs、/linux audit、/linux help、/banlist 都是每页 10 行、带可点击的「◀ 上一页 / 下一页 ▶」;玩家点一下即可翻页,控制台会显示纯文字页码提示。

想快速看子插件联动状态,直接用 /linux plugins —— 一屏列出 XlandCore 身份识别、假人插件(含数量)、XlandStop 监听、 LinuxTitle 头衔、命令接管、非法 NBT 检测的当前状态, 比翻 /linux logs 更直观。插件主页也可点击直达。

数据文件

全部在 plugins/InTheNameOfLinux/,可用 /linux logs 一次看到记录数与落盘状态:

文件内容
data.yml账号封禁记录(含到期时间、操作者)
penalty.yml功能封禁(禁言 / 禁移动 / 禁方块)
reports.yml举报记录与待广播消息
userip.yml玩家 IP 与身份记录
playtime.yml累计在线时长
fp.yml假人数据快照
audit.yml审计日志(保留最近 5000 条,用 /linux audit 查询)

XlandStop

监听 xstop / xlstop / xlandstop 命令,全服广播谁在重启服务器。

  • 插件启动时延迟 20 秒检测这三个命令是否注册。
  • 如果检测到,会注册监听器全服广播重启操作。
  • 执行 /linux reload 会重新检测。

10故障排查

问题:登录后仍然无法执行命令

  • 确认输对了密码(大小写敏感)。
  • 如果被锁定,等待锁定时间结束(默认 300 秒)。
  • 查看控制台是否输出"验证身份成功"。

问题:封禁命令没有生效

  • 检查是否拥有对应权限(/linux checkop 检查自己的身份与管理权限)。
  • 检查 config.yml 里的 refuse-enabled 是否为 true。
  • 查看控制台是否有错误堆栈。

问题:举报提交后无法立即处理

💡
这是设计行为,不是故障 举报提交后 24 小时内不能处理,用于给管理层留出调查时间。等待冷却结束后即可 accept / reject。

问题:服主离线时举报消息没收到

  • 消息会暂存到 reports.yml 的 pending 列表。
  • 服主上线后 10 秒才会推送,请稍等。
  • 如果延迟期间服主又掉线,消息会保留,下次上线继续推送。
  • 如果长时间未收到,检查 reports.yml 的 pending-reports 字段。

问题:清空命令执行后没反应

  • 清空命令需要二次确认。先执行第一步,再执行 confirm。
  • 检查确认是否过期(5 分钟有效期)。
  • 如果是控制台执行,则无需确认,直接生效。
  • 如果提示"没有待确认的清空操作",说明第一步没有执行或被替换。

问题:ProtocolLib 报错 "Unable to make protected final java.lang.Class..."

💡
这是 ProtocolLib 与 Java 17+ 的兼容问题,与本插件无关。 在启动脚本的 java 命令中加参数: --add-opens java.base/java.lang=ALL-UNNAMED

问题:假人插件显示"版本不兼容"

  • 插件会先用假人插件自己的类加载器加载 fakeplayer.info-class,失败时自动改用实际取到的假人类,所以一般不需要手改。
  • 如果仍然报错,检查假人插件的 FakePlayerInfo 类是否还存在、方法名是否改过。
  • 必要时修改 config.yml 的 fakeplayer.info-class(默认 example.fakeplayer.FakePlayerInfo)。
  • 改完执行 /linux reload。

问题:重启后临时封禁没有恢复 / 到解封时间了还没解封

  • 临时封禁的到期时间是写在 data.yml 里的,重启后插件会自动重建到期任务和"即将解封"提醒任务,无需手动处理。
  • 检查 data.yml 是否损坏(YAML 格式)。
  • 检查服务器时间是否准确(时间错乱会导致到期判断错误)。
  • 到期时间若已被手工改成非法值(例如 2026-02-30),插件会跳过该条并打告警,请检查控制台日志。

问题:封禁记录里一直留着一条"临时"封禁

💡
26.11.2 起会自动清理 临时封禁到期自动解封时,会同时删除 data.yml 里那条记录,/banlist 不会再有幽灵条目。 升级前遗留的过期记录会在下次启动时自动清理一次。

问题:/linux reload 后功能失效

  • 检查控制台是否有异常堆栈。
  • 尝试完全重启服务器(而非 /reload)。
  • 如果仍然异常,删除 plugins/InTheNameOfLinux/ 下的缓存文件(保留 config.yml)。

11常见问题

为什么密码要在聊天栏输入,不能直接 /linux login 密码?
Minecraft 服务端在处理命令前,会先把 /linux login 密码 整条命令写进日志。 而聊天栏消息可以被插件"提前拦截",不会进入日志。 为了密码安全,本插件采用聊天栏输入方式。
忘记密码了怎么办?
两种方法:
  • 方法一:编辑 config.yml,把 login.password-salt 和 login.password-hash 两行改成 ""(空字符串),重启服务器后密码重置为 password。
  • 方法二:删除整个 config.yml,重启后会自动生成新配置。
举报系统是怎么通知管理层的?
插件会根据被举报人身份智能分流:
  • 被举报人是服主:只通知服主本人。
  • 被举报人是协管 / 管理员 / 副服主:通知其他管理层,不通知被举报人。
  • 被举报人是普通玩家:通知所有管理层(举报人除外)。
如果服主离线,消息会被暂存,上线 10 秒后自动推送。
为什么举报提交后 24 小时内不能处理?
这是调查冷却期,给管理层留出充足时间核实举报内容。 如果举报提交后立刻就能 accept / reject,可能会被恶意利用(例如报复性举报、快速驳回掩盖问题)。 冷却期可确保处理决策是经过调查的。
二次确认过期了怎么办?
直接重新执行第一步命令即可。确认有效期是 5 分钟,过期后旧的待确认状态会被自动清除, 再次执行第一步会生成新的待确认状态。
协管为什么不能封禁账号?
这是设计选择。协管权限有限,只能使用"功能封禁"(禁方块 / 禁移动 / 禁言 / 全封)。 账号封禁(/ban、/tempban、/banip)属于更高级的操作,仅限完整管理员。
协管为什么不能永久封禁?
防止协管滥用权限。永久封禁是不可逆操作,需要完整管理员执行。 协管最长可封 7 天(可配置)。
封禁后玩家还能上线吗?
  • 账号封禁:直接踢出,登录时被拒绝。
  • 功能封禁(禁方块 / 禁移动 / 禁言):可以正常登录,但对应功能被限制。
为什么被禁言后,我说话没反应?
这是正常的。禁言会拦截你的所有聊天消息、私聊指令、/say 等。你只能与管理员私聊。 屏幕上会显示一条提示"你已被禁言!"。
/linux login 后没有提示我输密码?
检查几点:
  • 你是否是保护对象(默认 Linux582021)?
  • 聊天栏有没有显示黄色提示"请在聊天栏直接输入密码"?
  • 如果提示出现后你退出了游戏,再次进服需要重新输入 /linux login。
数据文件在哪里?如何备份?
所有数据都在 plugins/InTheNameOfLinux/ 目录下:
  • config.yml — 插件配置
  • data.yml — 封禁历史
  • penalty.yml — 功能封禁记录
  • userip.yml — IP 与身份缓存
  • playtime.yml — 游玩时长
  • fp.yml — 假人数据快照
  • reports.yml — 举报记录与待广播消息
直接复制整个文件夹即可备份。
插件会影响服务器性能吗?
影响极小。插件采用了多重优化:
  • 所有数据都缓存到内存,避免频繁读磁盘。
  • 封禁缓存 3 秒,重复查询不重建。
  • 数据文件批量保存(默认 30 秒一次)。
  • 举报待广播消息 5 分钟定时写盘。
  • 异步事件只读判断,回主线程处理。
  • 反射方法首次调用后缓存。
实测 TPS 影响 < 0.5%。
如何修改封禁广播的范围?
编辑 config.yml 里的 broadcast-ban:
  • true(默认):全服广播。
  • false:只广播给有权限的管理员。
修改后 /linux reload 生效。
为什么我不能对 fs1 使用命令?
fs1 受保护,只有两个身份可以对他使用命令:
  • fs1 本人;
  • 保护对象(默认 Linux582021,即服主)。
其他任何玩家,只要命令里出现 fs1(作为独立参数,/msg fs1x 不会误拦), 都会被拦下并收到:你没有权限对 fs1 执行命令。

同时会双向通知:服主看到"谁 尝试对 fs1 执行了什么(已拦截)", fs1 本人看到"谁 尝试对你执行了什么(已拦截)"。 每次拦截都写入审计日志,可用 /linux audit 查看。

注:原「突破 fs1 拦截」提权通道已整体移除 —— 既然 fs1 与服主在保护判定里直接放行,那条能"借他人身份执行命令"的通道就没有存在意义了。
装了 x1(FastMenu.jar)后我对 fs1 的命令执行不了?
这是插件冲突,不是配置问题。x1 的 shouldBlock() 会对任何提到 fs1 的命令直接取消事件, 且只给"当前在线的 fs1 本人"放行 —— 连服主和控制台都被它拦下。

解决办法:保持 fs1-protection-takeover: true(默认)。本插件会在启动时用 Bukkit 的 HandlerList.unregisterAll() 注销 x1 的监听器并接管保护 —— 非授权玩家提到 fs1 一样被拦,但 fs1 本人与服主直接放行。

不修改、不删除任何 jar 文件,重启服务器即可完全恢复 x1 原状。 用 /linux logs 可以查看接管状态。

注意:这项不能关。 关掉后 x1 会重新生效并抢先取消事件,我们这边的"放行"就失效了 —— 表现为服主完全无法管理 fs1。
如何让某个玩家也能对 fs1 使用命令?
目前放行名单是写死的两个身份:blocked-player(fs1 本人) 与 protected-player(保护对象,默认 Linux582021)。

改 config.yml 的 protected-player 会同时改变"谁是受保护的人", 副作用较大,不建议为了给第三人授权而改它。
能同时封禁多个玩家吗?
目前不支持批量命令。可以写循环脚本调用 /ban。 批量封禁时,插件会立即写盘(不受 30 秒批量保存影响)。
玩家改名后历史记录会丢失吗?
  • 正版服务器:UUID 不变,改名后历史记录仍在(用 UUID 关联)。
  • 离线服务器:UUID 由名字计算,改名 = 换人,历史记录不会关联。
帮助菜单和封禁列表的翻页怎么用?
两种方式:
  • 在聊天栏点击底部的 ◀ 上一页 / 下一页 ▶ 文字即可翻页。
  • 直接输入 /linux help <页码> 或 /banlist <页码>。
命令条目本身也可以点击:带 <参数> 的命令会自动填充到聊天框,无参数的命令会直接执行。

12到期自动解除与手动解除

两种解除方式对封禁记录的处理不同,这是本插件的一个明确设计。

方式触发场景封禁记录
到期自动解除 临时封禁 / 功能封禁设定的时间到了,系统自动解除 保留记录,并写入解除时间; 可在 /linux history、/linux lookup 中查到, 显示为 [已解除 时间]
手动解除 /unban、/unbanip、 /linux unbanmsg、/linux unbanall 等 删除记录(视为误封或提前解封)
💡
为什么自动到期要保留记录 到期解封是正常流程,记录本身就是「该玩家曾被处罚」的履历, 删掉会丢失追溯依据。所以自动解除只把记录标记为「已解除」:
  • 玩家不再受限 —— 是否生效由到期时间决定
  • /banlist 不会把它列为生效中的封禁
  • 记录保留在 data.yml / penalty.yml 里,可事后追溯

13卸载与备份

备份

  1. 停止服务器(stop)。
  2. 复制 plugins/InTheNameOfLinux/ 整个目录到安全位置。
  3. 如果使用了协管功能,同时备份 XlandCore 的配置文件。

卸载

  1. 停止服务器。
  2. 删除 plugins/InTheNameOfLinux.jar。
  3. 可选:删除 plugins/InTheNameOfLinux/ 目录(保留则下次安装时数据仍存在)。
  4. 启动服务器。
🚨
卸载前请注意 如果插件中存在活跃的临时封禁任务,卸载后这些任务会被取消,被封禁的玩家将立刻可以进入服务器。 卸载前建议先手动解封所有玩家。
✅
更新插件时 直接替换 jar 文件即可,不需要删除数据目录。配置和数据会自动保留。