带有许多功能的白名单插件. 标签: [白名单, 参观账户, Ban, AuthMe 集成, SQLite, 离线, 正版, Geyser]
....
时代表这里支持通过输入的内容进行补全.
补全内容可以直接在指令中使用, 包括控制台中补全内容带反斜杠的情况# [事件程序] 以 "on" 开头, "Event" 结尾的配置均可使用此模板
# kick = 同步踢出玩家, 并显示消息
# cmd = 同步运行控制台命令
# msg = 发送消息给这个玩家
# msgBroadcast = 广播消息给所有玩家
# msgExclude = 广播消息给其他所有玩家
# [变量] 对于操作数据的功能尽量使用 UUID 而非 NAME, 防止因为名称冲突而影响数据
# %playerUUID% = 玩家 UUID 36 位字符串
# %playerName% = 玩家名称, 区分大小写
-1
的功能, 这在旧版本代表永远不会过期或等待玩家加入时进行更新/wl
- 显示指令列表/wl reload
- 重载插件/wl add <Name|UUID>
- 添加到白名单/wl del <Name|UUID>
- 从白名单移出/wl ban <Name|UUID>
- 封禁一个玩家/wl unban <Name|UUID>
- 解除封禁玩家/wl info <Name|UUID>
- 显示玩家信息/wl list <Type>
- 查询玩家数据/wl clear PLAYER|TYPE <Name|UUID|Type>
- 清除数据/wl importData
- 导入数据支持使用 32 或 36 位的 UUID. 我们有完整的指令补全支持!
del
和 ban
实现, 但这两者有区别:
"取消白名单" 功能目前并没有一个很好的设计, 如果您有建议欢迎提出
del
会将账户标签标记为NOT
这同时代表数据已被删除. 如果不需要删除玩家数据, 请不要使用此方法ban
操作不会修改账户的数据, 同时会防止其他操作影响账户数据, 适合需要保持玩家数据不被改动的情况
如果您对此功能没有足够的了解和测试, 不应该随意使用它!!
推荐让参观账户使用观察模式加入服务器, 特别是红石服务器. 因为还无法解决生存模式下玩家碰撞实体的问题. 参观账户是外挂在当前的游戏环境中的, 并不是完美的隔离.
可以配合这些插件使用:
白名单中存在两种地址限制功能, ipBlacklist
用于限制玩家的 IP, addressConfig
用于限制玩家连接的服务器地址.
插件会在玩家加入时同时显示玩家 IP 和玩家使用的服务器地址, 可以直接用于配置. 日志格式为 [IpacWhitelist] 玩家名称[玩家IP] -> Server[服务器地址]
.
ipBlacklist
地址格式使用服务端提供的地址, 格式为 /127.0.0.1
, /0:0:0:0:0:0:0:1
. 暂时没有支持端口.addressConfig
用于限制玩家通过服务器的哪个线路 (域名) 或 IP 连接服务器, 支持端口.
要注意其中域名是有可能被伪造的, 并且无法获取 SRV 记录名称, 只能得到 SRV 记录中的域名和端口.一个简单的配置, 让长时间没有上线的账户被锁定, 需要通过 /wl add
指令重置时间才可恢复.
此功能无法直接禁用, 您可以通过将其改为较大的值来防止它被触发.
%iwl_player_type%
- 显示当前玩家类型的内部名称%iwl_player_type(playerName|playerUUID)%
- 显示指定玩家类型的内部名称%iwl_player_type_name%
- 显示当前玩家类型的显示名称, 名称可配置%iwl_player_type_name(playerName|playerUUID)%
- 显示指定玩家类型的显示名称, 名称可配置
# 数据库配置
sqlite:
# 是否区分玩家名称的大小写, 仅可在创建数据库时启用, 影响所有需要查询名称的功能
# 启用后, 使用指令可能会变得麻烦
nameCaseSensitive: false
# 连接到其他插件
hook:
AuthMe: true # 离线登录插件
# 白名单配置
# 白名单验证流程与配置的顺序相同
whitelist:
# 简易的 ip 黑名单. 在这里添加正则表达式, 匹配的ip不允许加入服务器 (也不允许使用参观账户
# 使用 /wl reload 重载配置即可应用
# IP 地址格式: ipv4: "/127.0.0.1", ipv6: "/0:0:0:0:0:0:0:1" 没有方括号
ipBlacklist: [ ]
# - '^/192\.168\.100\..+$'
# - '^/fe80::1234:.+$'
ipBlacklistMsg: '§6IpacEL §f> §b您的 IP 已被列入黑名单' # var: %ip%
# 限定玩家只能通过以下地址连接服务器
addressConfig:
enable: false
list: [ ]
# - '^0:0:0:0:0:0:0:0:25565$'
kickMsg: '§6IpacEL §f> §b此地址不可用'
# 玩家名称字符检查
# 名称长度为 3 到 16 字符, 允许包含 Geyser 的 "." 前缀
playerNameRule: '^(?:\.?[a-zA-Z0-9_]{3,16})$'
playerNameRuleMsg: '§6IpacEL §f> §a名称中包含不支持的字符: §b%playerName%'
# 服务器启动完毕后需要等待多长时间才允许玩家加入 (毫秒
lateJoinTime: 4000 # 4秒
lateJoinTimeMsg: '§6IpacEL §f> §b服务器正在启动'
# 防止玩家短时间内重复加入退出 (毫秒
repeatJoinInterval: 1200 # 1.2秒
repeatJoinIntervalMsg: '§6IpacEL §f> §b连接受限, 请稍后重试'
# 启用最大玩家数量限制
# 拥有 IpacWhitelist.maxPlayers.bypass 权限的玩家可绕过最大人数限制
maxPlayers: true
maxPlayersIncludesVisit: true # 参观账户是否包含在玩家总数中
maxPlayersMsg: '§6IpacEL §f> §b服务器已满'
# 防止名称相同, 但 UUID 不同的玩家加入
preventNameDuplication: true
preventNameDuplicationMsg: '§6IpacEL §f> §b存在名称重复的玩家, 请联系管理员检查'
# 允许这些玩家加入游戏, 不参与白名单检查
# 与 AutoWL 不同的是, 通过这些方法加入的玩家不会被记入白名单, 也不参与白名单配置中的其他检查
bypass:
enable: false
bypassMaxPlayersLimit: false # 同时绕过最大玩家数限制
# 通过 IP 检查玩家
ipList: [ ]
# - '^/127\.0\.0\.1$'
# - '^/0:0:0:0:0:0:0:1$'
# 从这里开始, 接下来的操作涉及数据库查询与更新
# 根据玩家登录来源自动添加到白名单, 这仅适用于新玩家
AutoWL:
enable: false
# 通过 Geyser 插件检查, 如果没有安装此插件, 则设置为 NOT
onGeyserPlayer: WHITE # 将所有新的基岩版玩家添加到白名单
# 通过 MojangApi **粗略**地检查是否为正版账户 https://api.mojang.com/users/profiles/minecraft/<playerName>
onPremiumPlayer: WHITE # 将所有新的正版账户添加到白名单
onPremiumPlayerErrMsg: '§6IpacEL §f> §b无法连接身份验证服务器, 请稍后重试'
# 不属于以上任何一类玩家
onOtherPlayer: NOT # 不处理其他玩家
# 以下根据玩家当前的类型对配置分类
# 玩家不在白名单中
NOT:
# 使用参观账户, 允许玩家参观服务器
visitEnable: true
# 否则不允许加入, 发出以下消息
notMsg: '§6IpacEL §f> §b您不在白名单中或已失效, 请联系管理员恢复§7: §a%playerName%'
# 注意! 这里可能缺少 UUID 或 NAME, 这取决于使用 `/wl add` 指令时的输入内容
onWhitelistAddEvent: [ ] # 玩家被添加到白名单
# 参观账户
VISIT:
# 限定参观模式可使用的地址
addressConfig:
enable: false
list: [ ]
kickMsg: '§6IpacEL §f> §b您不在白名单中'
# 参观账户的名称字符检查
playerNameRule: '^(?:\.?[a-zA-Z0-9_]{3,16})$'
playerNameRuleMsg: '§6IpacEL §f> §a名称中包含不支持的字符: §b%playerName%'
# 同时允许多少参观账户加入服务器
maxPlayers: 10
maxPlayersMsg: '§6IpacEL §f> §b参观队列已满'
# [AuthMe] 自动注册登录参观账户
AuthMePlugin:
# 为参观账户自动注册和登录, 相当于 `/authme register <playerName> <password>` 和 `/authme forcelogin <playerName>`, 但不会踢出玩家
autoRegisterAndLogin: true
# 需要在这里填写一个复杂的密码, 只要满足 AuthMe 的密码规则即可
autoRegisterPassword: 'complexPassword'
# [事件程序] 以 "on" 开头, "Event" 结尾的配置均可使用此模板
# kick = 同步踢出玩家, 并显示消息
# cmd = 同步运行控制台命令
# msg = 发送消息给这个玩家
# msgBroadcast = 广播消息给所有玩家
# msgExclude = 广播消息给其他所有玩家
# [变量] 对于操作数据的功能尽量使用 UUID 而非 NAME, 防止因为名称冲突而影响数据
# %playerUUID% = 玩家 UUID 36 位字符串
# %playerName% = 玩家名称, 区分大小写
onNewPlayerLoginEvent: # 参观账户第一次登录服务器
cmd:
- 'lp user %playerUUID% parent add visit' # 将玩家添加到 visit 权限组
onPlayerLoginEvent: [ ] # 参观账户每次登录服务器
onPlayerJoinEvent: # 参观账户加入服务器
cmd:
- 'gamemode spectator %playerName%' # 将玩家设置为观察模式
msg:
- '§6IpacEL §f> §a您正在使用参观账户=w='
# - '§6IpacEL §f> §b如需加入, 请访问我们的网站: §ahttps://ipacel.cc/'
msgExclude:
- '§6IpacEL §f> §a%playerName% §b使用参观账户加入游戏'
onPlayerQuitEvent: # 参观账户退出服务器
msgBroadcast:
- '§6IpacEL §f> §a%playerName% §b跑了'
onWhitelistAddEvent: # 参观账户被添加到白名单
kick:
- '§6IpacEL §f> §a您已添加到白名单, 请重新登录服务器'
cmd:
- 'lp user %playerUUID% parent remove visit' # 将玩家移出 visit 用户组
- 'authme unregister %playerName%' # 取消注册玩家
# 被添加到白名单中的参观账户, 需要通过此流程进行数据转换
# 之后在 WHITE 分类中继续运行
VISIT_CONVERT:
onPlayerLoginEvent: [ ] # 需要转换账户类型的玩家登录
onPlayerJoinEvent: # 需要转换账户类型的玩家加入
cmd:
- 'spawn %playerName%' # 传送到重生点
- 'gamemode survival %playerName%' # 将玩家设置为生存模式
# <- 现在玩家正式添加到白名单, 将继续运行 WHITE 中的配置
# 白名单中的玩家
WHITE:
# 距离上一次上线超过此时间就踢出, 如果需要取消可以修改为较大的数值
timeOut: 18394560 # 7个月
timeOutMsg: '§6IpacEL §f> §a太久没有上线? 请联系管理员恢复'
onPlayerLoginEvent: [ ] # 玩家登录服务器
onPlayerJoinEvent: # 玩家加入服务器
msgBroadcast:
- '§6IpacEL §f> §a%playerName% §b加入游戏'
onAuthMeLoginEvent: # 玩家通过 AuthMe 登录成功
msgBroadcast:
- '§6IpacEL §f> §a%playerName% §b登录成功'
onAuthMeFailedLoginEvent: # 玩家通过 AuthMe 登录失败
msgBroadcast:
- '§6IpacEL §f> §a%playerName% §b断开连接: §7密码错误'
onPlayerQuitEvent: # 玩家退出服务器
msgBroadcast:
- '§6IpacEL §f> §a%playerName% §b跑了'
onAuthMeLogoutEvent: [ ] # 玩家通过 AuthMe 注销
onWhitelistDelEvent: # 白名单被移除
kick:
- '§6IpacEL §f> §b您已被移出白名单'
# 被封禁的账户
BAN:
# 被封禁账户登录时的消息
kickMsg: '§6IpacEL §f> §a您已被列入黑名单: §b%playerName%'
onWhitelistBanEvent: # 任何玩家被添加到黑名单
kick:
- '§6IpacEL §f> §b您已被添加到黑名单'
onWhitelistUnbanEvent: [ ] # 玩家从黑名单中移出
onPlayerLoginEvent: [ ] # 玩家登录服务器
# 指令配置
# 如无必要, 请勿修改这部分消息, 防止信息显示错误
command:
add:
title: '§6IpacEL §f> §a添加到白名单[§b%var%§a]:'
isBan: ' - §a%playerName%§f[§7%playerUUID%§f] §b已在黑名单中, 不可操作'
isExist: ' - §a%playerName%§f[§7%playerUUID%§f] §b已在白名单中, 已更新时间记录'
isVisit: ' - §a%playerName%§f[§7%playerUUID%§f] §a已从参观账户中重置'
finish: ' - §a%playerName%§f[§7%playerUUID%§f] §a已完成'
# 尝试记录最后一个操作者的信息
logger_sender:
enable: false
isPlayer: '%playerName%[%playerUUID%]'
isOther: '[控制台]'
del:
title: '§6IpacEL §f> §b从白名单移出[§a%var%§b]:'
isEmpty: ' - §a%playerName%§f[§7%playerUUID%§f] §b不存在'
isMulti: ' - §a%playerName%§f[§7%playerUUID%§f] §b存在重复数据'
isBan: ' - §a%playerName%§f[§7%playerUUID%§f] §b已在黑名单中, 不可操作'
finish: ' - §a%playerName%§f[§7%playerUUID%§f] §a已完成'
ban:
title: '§6IpacEL §f> §b添加到黑名单[§a%var%§b]:'
isBan: ' - §a%playerName%§f[§7%playerUUID%§f] §b已在黑名单中'
isMulti: ' - §a%playerName%§f[§7%playerUUID%§f] §b存在重复数据'
finish: ' - §a%playerName%§f[§7%playerUUID%§f] §a已完成'
unban:
title: '§6IpacEL §f> §a从黑名单移出[§b%var%§a]:'
isEmpty: ' - §a%playerName%§f[§7%playerUUID%§f] §b不存在'
isMulti: ' - §a%playerName%§f[§7%playerUUID%§f] §b存在重复数据'
isUnban: ' - §a%playerName%§f[§7%playerUUID%§f] §b不在黑名单中'
finish: ' - §a%playerName%§f[§7%playerUUID%§f] §a已完成'
info:
title: '§6IpacEL §f> §b查询玩家信息[§a%var%§b]:'
isEmpty: ' - §a%playerName%§f[§7%playerUUID%§f] §b不存在'
finish: >
§f - §a%playerName%§f[§7%playerUUID%§f]: [§bID: §6%id%§f]
- §bTYPE: §6%type%
- §bBAN: §6%ban%
- §bTIME: §6%time%
config: ' - §bDATA: §6%key% §f-> §a%var%'
list:
title: '§6IpacEL §f> §b查询玩家信息[§a%type%§b]:'
noData: ' - §b这个标签下没有任何数据'
isEmpty: ' - §a%playerName%§f[§7%playerUUID%§f] §b不存在'
finish: ' - [§6%time%§f] {§bID§f: §6%id%§f, §bType§f: "§6%type%§f", §bBan§f: "§6%ban%§f", §bUUID§f: "§a%playerUUID%§f", §bName§f: "§a%playerName%§f", §bTime§f: §6%timeLong%§f}'
# 用于清理玩家数据的功能, 请提前在本地测试完毕后再启用
# [注意]
# 在使用清理功能前请检查是否存在名称重复的数据: /wl list NAME_CONFLICT
clear:
enable: false
title: '§6IpacEL §f> §b运行数据清理[§a%type%:%var%§b]:'
isMiss: ' - §a%playerName%§f[§7%playerUUID%§f] §b缺少必要的玩家信息'
online: ' - §a%playerName%§f[§7%playerUUID%§f] §b玩家在线'
# 只处理离线超过指定时间的账户, 防止清除后被保存 (秒
delTime: 43200 # 12小时. 它必须大于数据缓存时间
delTimeMsg: ' - §a%playerName%§f[§7%playerUUID%§f] §b未达到可删除的时间'
# 不应该处理存在重复名称的数据
repeat: ' - §a%playerName%§f[§7%playerUUID%§f] §b存在重复的名称'
# [注意]
# 清理数据的配置尽量使用 playerUUID, 而非 playerName, 防止因为重名而误删数据
# 运行指令
runCommand:
- 'lp user %playerUUID% clear' # 清除玩家权限
- 'authme unregister %playerName%' # 取消注册玩家
# 运行指令和清除文件之间的间隔 (毫秒
delayStep: 270
# 清除文件
# %worldPath% = 所有地图的根目录
# %worldName% = 所有地图的名称
# %playerUUID32% = 32位, 不带连字符的 UUID
clearFile:
# 清理所有地图下的存档
- '%worldPath%/playerdata/%playerUUID%.dat'
- '%worldPath%/playerdata/%playerUUID%.dat_old'
- '%worldPath%/advancements/%playerUUID%.json'
- '%worldPath%/stats/%playerUUID%.json'
# 清理 Essentials 插件下的玩家数据
- 'plugins/Essentials/userdata/%playerUUID%.yml'
# 清理粘液科技文件
- 'data-storage/Slimefun/waypoints/%playerUUID%.yml'
# 循环之间的时间间隔 (毫秒
delayLoop: 727
ing: ' - [%var%:%id%] §a%playerName%§f[§7%playerUUID%§f] §a已完成'
finish: '§6IpacEL §f> §a数据清理运行完毕'
# 从旧版本 IpacWhitelist 导入数据的功能, 默认关闭防止误触
importData:
enable: false
# 从文本文件中导入数据, 每行一条数据
file: 'Data.txt'
# 用于匹配数据的正则, 这里是 v3 版本的 List 指令导出格式. 使用指令: /wl list * ALL
regExp: '\{ID: \d+, Type: "([^"]+)", Ban: "([^"]+)", UUID: "([^"]+)", Name: "([^"]+)", Time: (-?\d+)\}$'
# 不同数据所在的匹配组 ID
TYPE: 1
BAN: 2
UUID: 3
NAME: 4
TIME: 5
# API 相关配置
api:
PlaceholderAPI:
iwl_player_type: {}
iwl_player_type_name:
NOT: '不存在'
VISIT: '参观账户'
WHITE: '白名单'
VISIT_CONVERT: '白名单 (正在转换)'
BAN: '已封禁'
# 其他消息
message:
noEnable: '§6IpacEL §f> §b功能未启用'
noPermission: '§6IpacEL §f> §b没有权限'
parameterErr: '§6IpacEL §f> §a参数不可识别或未通过检查: §b%var%'
playerLoginErr: '§6IpacEL §f> §b出现未知的错误, 请联系管理员检查'
permissions:
IpacWhitelist.maxPlayers.bypass:
description: '绕过最大人数限制'
default: op
IpacWhitelist.cmd:
description: '使用指令和指令补全'
default: op
IpacWhitelist.cmd.reload:
description: '使用 /wl reload 指令'
default: op
IpacWhitelist.cmd.add:
description: '使用 /wl add 指令'
default: op
IpacWhitelist.cmd.del:
description: '使用 /wl del 指令'
default: op
IpacWhitelist.cmd.ban:
description: '使用 /wl ban 指令'
default: op
IpacWhitelist.cmd.unban:
description: '使用 /wl unban 指令'
default: op
IpacWhitelist.cmd.info:
description: '使用 /wl info 指令'
default: op
IpacWhitelist.cmd.list:
description: '使用 /wl list 指令'
default: op
IpacWhitelist.cmd.clear:
description: '使用 /wl clear 指令'
default: op
IpacWhitelist.cmd.importData:
description: '使用 /wl importData 指令'
default: op