Skip to content

小游戏

文档版本:基于 2026-06-01 代码分析

概述

扩展模组提供三个内置小游戏:骰子游戏(投掷虚拟骰子达到目标点数)、心算读秒(5轮制,玩家猜测经过的时间)和抽签(设定数字范围,玩家抽取唯一号码)。小游戏配置支持数据包自定义(data/<namespace>/minigames/ 路径)。


一、骰子游戏

状态机

等待(WAITING) → 滚动(ROLLING) → 结果显示(RESULT) → 成功/失败(SUCCESS/FAILURE) → 等待

流程

  1. 管理员 /nfarfm minigames dice start 启动
  2. 玩家 /nfarfm minigames dice throw 投掷骰子
  3. 系统随机生成点数,与目标点数比较
  4. 达到目标 → 成功;未达到 → 可继续投掷
  5. 管理员 /nfarfm minigames dice stop 停止

骰子面板

  • DicePanelBlock(2×3 面板)显示当前游戏状态
  • 通过 DicePanelBlockEntitysetDisplayStateSupplier() 注入显示数据

指令

指令说明
dice start启动骰子游戏
dice stop停止骰子游戏
dice throw玩家投掷骰子
dice points set <value>设置目标点数
dice points show显示当前点数

二、心算读秒

机制

  • 5 轮制,系统计时(使用 System.currentTimeMillis()
  • 玩家需要在心中默数指定秒数,在认为时间到达时按标记
  • 全服标题显示游戏状态

流程

  1. 管理员设置列表(参与者、目标秒数)
  2. /nfarfm minigames mental start 开始
  3. 系统静默计时,玩家 mark 标记
  4. 最接近目标时间的玩家获胜
  5. 结束后显示排名

指令

指令说明
mental start开始心算读秒
mental stop停止
mental mark玩家标记当前时间
mental list add/delete/clear/show管理参与者列表
mental showtime <seconds>设置显示延迟

三、抽签

机制

管理员设定数字范围(如 1-100),玩家执行抽取获得唯一号码。

指令

指令说明
roll start开始抽签
roll stop停止抽签
roll draw玩家抽取号码

数据包集成

小游戏的配置可通过数据包 data/<namespace>/minigames/ 路径自定义(MinigameDatapackReloadListener 监控 minigames 目录):

相对路径用途JSON 关键字段
minigames/dice/config骰子目标点数target_points(正整数)
minigames/mental_countdown/config心算读秒目标秒数target_seconds(5 个正整数的数组,总和必须 = 60)
minigames/common_logic公共逻辑配置success_functionfailure_function(函数 ID 字符串)

注:dice/config 在代码中已支持(MinigameDatapackState.java:80),DataPacks 示例目录中暂无骰子预设文件。


关键文件

文件说明
com/chenxi/chenxi_rfm_addition/server/minigames/DiceMinigameManager.java骰子游戏管理器
com/chenxi/chenxi_rfm_addition/server/minigames/MentalCountdownManager.java心算读秒管理器
com/chenxi/chenxi_rfm_addition/server/roll/RollSessionManager.java抽签管理器
com/chenxi/chenxi_rfm_addition/common/block/DicePanelBlock.java骰子显示面板
com/chenxi/chenxi_rfm_addition/server/minigames/datapack/MinigameDatapackReloadListener.java数据包重载
com/chenxi/chenxi_rfm_addition/server/config/minigames/PersistentMentalCountdownSavedData.java心算读秒持久化

注意事项

  1. 心算读秒使用系统时间(非游戏 tick),精度受服务器时钟影响
  2. 抽签确保每个号码唯一(不重复抽取)
  3. 数据包配置修改后通过 /reload 或自动检测生效
  4. 所有小游戏权限要求 GAME_ADMIN

相关文档