AdventureBan v1.0.0

现代化跨服封禁管理系统 - 参考 LiteBans 设计

Spigot / Paper / Purpur Velocity 代理端 跨服同步 H2 / MySQL

📋 概述

AdventureBan 是一款功能全面的跨服封禁管理插件,灵感来源于 LiteBans。支持 Spigot/Paper/Purpur 后端服务器和 Velocity 代理端,提供统一的惩罚管理体验。

🔨

多类型惩罚

封禁、禁言、警告、踢出、IP封禁、IP禁言

🌐

跨服同步

通过数据库同步表实现惩罚在多个服务器间实时生效

📋

模板系统

自定义惩罚阶梯,累犯自动升级处罚等级

🔍

关联账号检测

IP关联检测,自动通知管理员已封禁玩家的小号

🗄️

数据库支持

支持 H2 (内嵌) 和 MySQL / MariaDB 数据库

📡

Discord 通知

通过 Webhook 将惩罚信息实时推送到 Discord 频道

✨ 功能特性

惩罚类型

类型描述效果
BAN封禁禁止登录服务器
MUTE禁言禁止聊天和指定命令
WARN警告记录警告,登录时提示
KICK踢出立即踢出服务器
IP_BANIP封禁封禁IP地址,影响所有关联账号
IP_MUTEIP禁言禁言IP地址,影响所有关联账号

命令标记 (Flags)

标记描述
-s静默执行 - 不广播给普通玩家
-g全局范围 - 在所有服务器上生效
-IIP模式 - 同时封禁/禁言IP
-d删除模式 - 删除而非撤销
server:<名称>指定服务器范围

时长格式

支持灵活的时长表达,可组合使用:

  • 30s - 30 秒
  • 10m - 10 分钟
  • 2h - 2 小时
  • 7d - 7 天
  • 2w - 2 周
  • 1mo - 1 个月
  • 1y - 1 年
  • 1d12h30m - 1天12小时30分钟 (组合)
  • permanent - 永久

📦 安装

Spigot / Paper / Purpur 端

  1. AdventureBan-Spigot-1.0.0.jar 放入服务器的 plugins/ 目录
  2. 启动服务器,插件会自动生成默认配置文件
  3. 编辑 plugins/AdventureBan/config.yml,设置数据库和服务器名称
  4. 使用 /adventureban reload 重载配置

Velocity 代理端

  1. AdventureBan-Velocity-1.0.0.jar 放入 Velocity 的 plugins/ 目录
  2. 启动代理服务器,自动生成 config.jsonmessages.json
  3. 编辑配置文件,确保数据库设置与 Spigot 端一致
  4. 重启代理服务器

跨服配置要点

  • 所有服务器必须连接同一数据库(推荐 MySQL)
  • 每个服务器需要设置唯一的 server-name
  • 同步通过数据库 adventureban_sync 表自动完成
  • 可选:在 Velocity 端部署以实现代理级别拦截

⚡ 命令

惩罚命令

命令描述用法
/ban永久封禁/ban <玩家> [时长] [标记] [原因]
/tempban临时封禁/tempban <玩家> <时长> [标记] [原因]
/mute永久禁言/mute <玩家> [时长] [标记] [原因]
/tempmute临时禁言/tempmute <玩家> <时长> [标记] [原因]
/warn警告玩家/warn <玩家> [标记] [原因]
/kick踢出玩家/kick <玩家> [标记] [原因]
/ipbanIP封禁/ipban <玩家|IP> [时长] [原因]
/ipmuteIP禁言/ipmute <玩家|IP> [时长] [原因]

撤销命令

命令描述用法
/unban解除封禁/unban <玩家> [原因]
/unmute解除禁言/unmute <玩家> [原因]
/unwarn撤销警告/unwarn <玩家> [原因]

查询命令

命令描述用法
/checkban检查封禁状态/checkban <玩家>
/checkmute检查禁言状态/checkmute <玩家>
/warnings查看警告列表/warnings [玩家]
/history惩罚历史/history <玩家> [页码]
/staffhistory员工执行记录/staffhistory <执行者> [页码]
/banlist封禁列表/banlist [页码]
/mutelist禁言列表/mutelist [页码]
/dupeip关联账号查询/dupeip <玩家|IP>

管理命令

命令描述用法
/staffrollback回滚员工操作/staffrollback <执行者> [时长]
/lockdown锁定服务器/lockdown [end] [server:名称]
/adventureban reload重载配置/adventureban reload
/adventureban info查看数据库信息/adventureban info

命令使用示例

# 永久封禁并广播
/ban Steve 使用外挂

# 临时封禁 7 天并静默执行
/tempban Steve 7d -s 使用 X-Ray

# 全局禁言 1 小时
/mute Steve 1h -g 刷屏

# 使用模板 (自动阶梯升级)
/ban Steve cheating

# 指定服务器范围
/ban Steve 30d server:survival 滥用Bug

# IP 封禁
/ipban Steve 30d 使用外挂 (IP封禁)

# 关联账号查询
/dupeip Steve
/dupeip 192.168.1.100

🔑 权限

命令权限

权限描述默认
adventureban.admin管理员权限OP
adventureban.ban封禁权限OP
adventureban.mute禁言权限OP
adventureban.warn警告权限OP
adventureban.kick踢人权限OP
adventureban.ipbanIP封禁权限OP
adventureban.ipmuteIP禁言权限OP
adventureban.unban解封权限OP
adventureban.unmute解除禁言权限OP
adventureban.unwarn撤销警告权限OP
adventureban.check检查惩罚状态OP
adventureban.history查看历史OP
adventureban.staffhistory查看员工记录OP
adventureban.warnings查看警告全部
adventureban.banlist查看封禁列表OP
adventureban.mutelist查看禁言列表OP
adventureban.dupeip查看关联账号OP
adventureban.staffrollback员工回滚OP
adventureban.lockdown锁服权限OP

通知权限

权限描述默认
adventureban.notify.broadcast接收惩罚广播全部
adventureban.notify.silent查看静默惩罚OP
adventureban.notify.alts接收关联账号通知OP

豁免 / 绕过权限

权限描述默认
adventureban.exempt.ban免疫封禁
adventureban.exempt.mute免疫禁言
adventureban.exempt.warn免疫警告
adventureban.exempt.kick免疫踢出
adventureban.bypass.mute绕过禁言
adventureban.lockdown.bypass锁服绕过OP

⚙️ 配置文件

config.yml

# 当前服务器名称 (跨服同步标识)
server-name: "lobby"

# 数据库配置
database:
  type: h2          # h2 或 mysql
  mysql:
    host: localhost
    port: 3306
    database: adventureban
    username: root
    password: ""
    ssl: false

# 跨服同步轮询间隔 (ticks)
sync:
  interval-ticks: 40

# 默认行为
defaults:
  silent: false

# 关联账号检测
alt-detection:
  notify: true       # 加入时通知管理员
  auto-ban: false    # 自动封禁关联账号

# 禁言时屏蔽的命令
mute:
  blocked-commands:
    - msg
    - tell
    - whisper
    - r
    - reply
    - me
    - say

# 锁服设置
lockdown:
  bypass-op: true

messages.yml (部分)

prefix: "&6[AdventureBan] "

# 封禁踢出界面 (支持 \n 换行)
ban-screen: "&c&l你已被封禁\n\n&7原因: &f$reason\n..."

# 广播消息
broadcast-ban: "&c$player &7被 &e$executor &7封禁了..."

# 禁言提示
muted-message: "&c你已被禁言! &7剩余: &f$remaining..."

# 变量: $player, $executor, $reason, $duration, $remaining, $date, $id, $server, $type

📋 惩罚模板

模板系统允许创建自动升级的惩罚阶梯。使用 /ban 玩家 模板ID 即可触发,系统自动根据历史违规次数选择对应等级。

模板示例 - templates.yml

templates:
  cheating:
    type: ban                    # 惩罚类型
    tiers:
      - duration: 7d             # 第一次: 7天封禁
        reason: "作弊行为 (第一次)"
      - duration: 30d            # 第二次: 30天封禁
        reason: "作弊行为 (第二次)"
      - duration: permanent      # 第三次: 永久封禁
        reason: "作弊行为 (永久封禁)"

  toxic:
    type: mute
    group: chat-offense          # 组名 (同组共享进度)
    tiers:
      - duration: 1h
        reason: "辱骂 (第一次)"
      - duration: 1d
        reason: "辱骂 (第二次)"
      - duration: permanent
        reason: "辱骂 (永久禁言)"

  rule-break:
    type: warn
    tiers:
      - reason: "违反规则 (警告)"
      - reason: "再次违规"
        commands:                 # 触发附加命令
          - "tempban $player 1d 多次违规"

# 模板组 (同组模板共享违规计数)
groups:
  chat-offense:
    - toxic
    - spam

工作原理

  1. 执行 /ban Steve cheating
  2. 系统查找名为 cheating 的模板
  3. 计算 Steve 在该模板(及同组模板)中的历史违规次数
  4. 根据违规次数选择对应的 Tier(等级)
  5. 自动使用 Tier 中定义的时长和原因执行惩罚
  6. 如果 Tier 中定义了 commands,自动执行附加命令

🏷️ PlaceholderAPI

需要安装 PlaceholderAPI 插件,变量前缀为 %adventureban_

变量描述
%adventureban_is_banned%是否被封禁 (true/false)
%adventureban_is_muted%是否被禁言 (true/false)
%adventureban_ban_reason%封禁原因
%adventureban_ban_remaining%封禁剩余时间
%adventureban_ban_executor%封禁执行者
%adventureban_mute_reason%禁言原因
%adventureban_mute_remaining%禁言剩余时间
%adventureban_warning_count%活跃警告数量

📡 Discord Webhook

webhooks.yml 中配置 Discord Webhook,自动将惩罚信息推送到频道。

discord:
  enabled: true
  url: "https://discord.com/api/webhooks/YOUR_ID/YOUR_TOKEN"
  username: "AdventureBan"

每种惩罚类型使用不同的颜色:

  • 封禁/IP封禁 - 🔴 红色
  • 禁言/IP禁言 - 🟠 橙色
  • 警告 - 🟡 黄色
  • 踢出 - 🔵 蓝色

🏗️ 项目架构

AdventureBan/
├── common/           # 共享模块
│   ├── model/        # Punishment, PunishmentType, PlayerRecord
│   ├── database/     # DatabaseManager (H2/MySQL, HikariCP)
│   ├── template/     # Template, TemplateManager
│   └── util/         # DurationParser, UUIDUtil, CommandFlagParser
├── spigot/           # Spigot/Paper 端
│   ├── command/      # MainCommand (所有命令)
│   ├── listener/     # Login, Join, Chat, CommandBlock 监听
│   ├── manager/      # PunishmentManager, TemplateManager, SyncService
│   ├── config/       # ConfigManager, Messages
│   └── hook/         # PlaceholderAPIHook, DiscordWebhook
└── velocity/         # Velocity 代理端
    ├── command/       # VelocityBanCommand, VelocityAdminCommand
    ├── listener/      # VelocityLoginListener, VelocityChatListener
    ├── manager/       # VelocitySyncService
    └── config/        # VelocityConfig

📝 更新日志

v1.0.0 - 初始版本

  • 完整的惩罚系统: 封禁、禁言、警告、踢出、IP封禁、IP禁言
  • 跨服同步 (通过数据库同步表)
  • 模板/阶梯惩罚系统
  • 关联账号 (Alt) 检测和通知
  • 数据库: H2 内嵌 + MySQL/MariaDB
  • PlaceholderAPI 集成
  • Discord Webhook 通知
  • Velocity 代理端完整支持
  • 员工回滚 (staffrollback)
  • 服务器锁定 (lockdown)
  • 完整的权限系统 (命令/通知/豁免/绕过)
  • 自定义消息和踢出界面
  • 命令标记: 静默、全局、IP、删除、服务器范围