记录编写的一个Minecraft服务端插件-QuizzerBot

杂类 · 昨天 · 20 人浏览

QuizzerBot - 多人服务器答题插件

插件已发布:https://modrinth.com/plugin/quizzerbot

该部分通过ai润色,可直接跳转至下方看详细内容

📌 插件简介

QuizzerBot 是一款为 Minecraft Paper/Bukkit/Spigot 服务端设计的智能答题插件,支持 1.21 及以上版本(已测试 1.21-1.21.5)。插件通过随机触发答题活动,为服务器增添趣味互动元素,同时提供完善的题库管理和玩家数据统计功能。

🎯 插件亮点:独创的抢答机制+奖励顺延系统,既鼓励快速反应,又保证公平性!每日奖励限制防止滥用,是服务器活动玩法的绝佳选择!

🚀 核心功能

  • 自动答题活动:随机时间间隔触发全服答题
  • 抢答机制:前几名回答的玩家可获得额外奖励
  • 智能题库系统:支持选择题/判断题等多种题型
  • 玩家数据统计:记录答题次数、正确率等数据
  • 可视化排行榜:多种排序方式的玩家排行榜
  • 高度可配置:奖励、时间间隔等均可自定义

🔧 安装与配置

  1. 将插件放入 plugins 文件夹
  2. 启动服务器自动生成配置文件和数据库
  3. 修改 config.yml 调整参数(详见下方配置说明)
  4. 使用 /quiz add 命令添加题目

⚙️ 技术细节

  • 数据库:使用 SQLite 存储题库和玩家数据
  • 计时系统:基于系统时间的精确计时,不受 TPS 影响
  • 交互设计:支持点击聊天选项直接答题
  • API 版本:1.21+

❓ 常见问题

Q:为什么答题活动没有触发?
A:请检查:

  1. 玩家数量是否达到 min_players 设置值
  2. 题库中是否有启用状态的问题
  3. 系统是否正常加载(查看启动日志)

Q:如何导入题目?
A:目前支持:

  1. 使用 SQLite 编辑器直接操作数据库
  2. 通过 /quiz add 命令逐个添加
  3. (未来版本将支持文件导入)

📧 联系与支持


下面为手搓简介

简单介绍

这是一个minecraft paper系服务端插件,也支持bukkit\spigot等服务端。他的api版本在1.21及以上,经过测试在1.21-1.21.5都可以使用。
插件安装后会释放配置文件和sqlite数据库。数据库内存放题库和玩家数据,请不要删除数据库.db文件。配置文件详情请参考下方配置文件。当插件安装好后开启服务器,会显示如下内容(不同版本以及配置文件不同,内容不完全一样):

[11:15:17 INFO]: [QuizzerBot] Enabling QuizzerBot v1.0-SNAPSHOT
[11:15:17 INFO]: [QuizzerBot] QuizzerBot version v1.0.1 is enabled!
[11:15:17 INFO]: [QuizzerBot] Issues: yanhy2000@foxmail.com 公测期间如有问题请反馈,正式版本发布后将删除本条信息
[11:15:17 INFO]: [QuizzerBot] 测试版信息仅出现在初始化日志与OP帮助菜单内,不影响游玩与使用
[11:15:17 INFO]: [QuizzerBot] 数据库初始化完成
[11:15:17 INFO]: [QuizzerBot] 配置项:最低玩家限制: 1
[11:15:17 INFO]: [QuizzerBot] 配置项:答题时间: 20
[11:15:17 INFO]: [QuizzerBot] 配置项:奖励指令: [say %player% won!, give %player% diamond 1, effect give %player% speed 30 1]
[11:15:17 INFO]: [QuizzerBot] 配置项:每日奖励限制: 5
[11:15:17 INFO]: [QuizzerBot] 配置项:触发间隔: [60, 70]
[11:15:17 INFO]: [QuizzerBot] 答题系统状态已重置
[11:15:17 INFO]: [QuizzerBot] 答题系统已成功启动

如没出现报错即为加载成功。如果是一个人进服测试,请确保配置文件内最低玩家限制为1,否则会因为玩家数量不足不会触发答题活动。
答题活动从开服开始计时,按配置文件内的触发间隔中随机选取一个时间倒计时,倒计时结束会检测触发条件,也就是玩家数量是否达标,然后开始触发答题活动。如题库为空则会在日志播报:

[11:26:10 WARN]: [QuizzerBot] 没有可用的题目或获取题目失败!

管理员可提供指令添加题目(目前不支持导入操作):/quiz add 问题 选项a 选项b 选项c 选项d 正确选项a,如“/quiz add 工作台需要几个木板合成? 2 4 5 7 b”
当数据库存在题目后,倒计时结束会全服触发答题活动,后台也会出现日志:

[11:31:02 INFO]: [答题Bot] 答题时间到~
[11:31:02 INFO]:
===========问题编号: 1================
      工作台需要几个木板合成?
      A: 2         B: 4         C: 5         D: 7
=======================================
[11:31:02 INFO]: 答案在 10s 后揭晓,【点击选项】即可答题

>

玩家可以打开聊天框直接点击选项即可作答,或者通过指令/quiz ans [选项]进行作答。
答题具有抢答机制,前几个答题则判定为抢答(人数可在配置文件修改)。抢答后会在全服显示:

[11:32:37 INFO]: [答题Bot] yanhy2000 抢答成功![1/3]

在抢答名额用完后,剩下的玩家为普通作答。
按照逻辑,只有抢答的玩家答对了才能获得奖励。普通答题玩家答对了没有奖励。但是如果抢答的玩家答错了,奖励会顺延给普通作答玩家。答错没有惩罚。
在答题时间结束后,会揭晓答案并公布答题数据:

[11:32:41 INFO]: [答题Bot] 答案揭晓: 【B】! 抢答正确: 1人, 普通回答正确: 0人, 共发放奖励: 1人

无论答题活动生成成功或者失败,均会在活动结束后开始计时下一场的随机时间。如答题活动正常进行完成,则在揭晓答案后才开始下一场计时。

配置文件

# 答题活动配置
quiz:
  # 最小参与玩家数量
  min_players: 1

  # 活动触发时间范围 (秒) - 系统会在此区间随机选择开始时间
  trigger_interval_sec: [20, 25]

  # 答题持续时间 (秒) - 从题目公布到揭晓答案的间隔
  answer_reveal_delay_sec: 10

  # 获胜奖励指令 (多个指令用 | 分隔)
  reward_commands:
    - 'say %player% won!'
    - 'give %player% diamond 1'
    - 'effect give %player% speed 30 1'

  # 每日奖励领取上限 (每人每天)
  daily_reward_limit: 5

  # 每回合奖励的玩家数量上限
  player_reward_limit: 3

  # 每回合抢答玩家数量上限
  player_QuickAnswer_limit: 3

数据库结构

可自行将题库导入到数据库,目前插件不支持直接导入外部题库,只能管理员添加或者sql编辑器导入

题目表 (QuizzerBook)

字段名数据类型是否为空默认值说明
idINTEGERNOT NULLAUTOINCREMENT题目ID,主键,自增
quizTEXTNOT NULL-题目内容
optATEXTNULL-选项A内容
optBTEXTNULL-选项B内容
optCTEXTNULL-选项C内容
optDTEXTNULL-选项D内容
answerTEXTNOT NULL-正确答案(A/B/C/D)
isEnableBOOLEANNOT NULLTRUE是否启用该题目
showCountINTEGERNULL-题目出现次数

玩家数据表 (PlayerStats)

字段名数据类型是否为空默认值说明
uuidTEXTNOT NULL-玩家UUID,主键
usernameTEXTNOT NULL-玩家用户名
total_attemptsINTEGERNULL0总答题次数
correct_answersINTEGERNULL0答对次数
quick_answersINTEGERNULL0抢答次数
daily_rewardsINTEGERNULL0每日奖励获得次数
last_played_dateTEXTNULL-最后答题日期(YYYY-MM-DD格式)

指令帮助

指令未做权限节点处理,仅判断是否op来区分执行指令。后续会加上权限节点。

玩家指令

指令参数说明权限要求
/quiz ans<答案>提交答题答案 (A/B/C/D)
/quiz me-查看自己的答题统计
/quiz top[排序方式]查看排行榜 (可选排序方式: total/correct/quick/rewards/rate)

管理员指令

指令参数说明权限要求
/quiz add<问题> A B [C] [D] <答案>添加新题目 (最少2个选项)OP
/quiz delete删除指定ID的题目OP
/quiz toggle <true/false>启用/禁用题目OP
/quiz modify <字段> <新值>修改题目内容OP
/quiz start-开启答题系统OP
/quiz startnow-立即触发一次答题活动OP
/quiz stop-停止答题活动OP
/quiz list[show/report] [页码]列出所有题目 (可排序)OP
/quiz detail查看题目详情OP
/quiz reload-重载插件配置OP

部分指令补充说明

  • /quiz start - 服务器开启后答题系统会自动开启,无需手动开启。(该指令有bug,如果通过/quiz stop禁用调度器后,通过start不一定能拉起调度器,可以尝试使用/quiz reload来恢复运行)
  • /quiz add - 添加问题时,如果选项不满4个,可使用“-”表示选项为空,触发答题后会自动隐藏空选项
  • /quiz startnow - 执行3秒后立即触发一次答题活动。如果答题活动已经开启则无法再次触发,同理如果触发后调度器计时结束,则因为拉起答题失败会直接进行下一轮计时。
  • /quiz top/list - 执行后会出现列表数据,列表中每个元素均可点击查看,如玩家信息、题目信息等。
  • /quiz modify 可修改该题目对应数据库全部字段:quiz, optA, optB, optC, optD, answer, enable, showCount
编程 java
Theme Jasmine by Kent Liao
beian
皖公网安备34122202000364号