逐游戏配置
每款游戏的运行参数(图标、费用、GUI 尺寸、计分折算、奖励、专属设置等)都存放在独立的 plugins/JoyMart/games/<id>/config.yml 文件中。首次启动服务器时,插件会从 jar 内自动复制默认配置;之后管理员既可手动编辑,也可通过游戏内 GUI 修改(推荐)。无论用哪种方式,改完执行 /gba reload 即可热重载,无需重启服务器。
本页按 15 款游戏逐一说明其专属配置项与完整示例。各游戏的玩法见 游戏模式,分数与奖励的计算逻辑见 计分与事件。
自动复制机制
插件会在 plugins/JoyMart/games/ 下为每款游戏创建一个以游戏 id 命名的子目录(如 2048/、minesweeper/、monopoly/)。若某个 config.yml 不存在,插件会从 jar 内的同名默认文件复制一份;删除该文件后下次启动会重新生成默认配置。游戏的启用开关与子命令见 配置文件说明。
通用字段
下列字段是各游戏 config.yml 共有的基础结构。并非每个字段都会出现在每个文件中——某些游戏会省略不适用项(例如对战类游戏通常没有 scorePerToken / trackHighScore),省略时取对应默认值。
| 字段 | 类型 | 说明 |
|---|---|---|
icon.material | 物品材质 | 在游戏选择 GUI 中显示的图标(Spigot 1.21 材质名,如 PAPER) |
cost | 小数 | 开始一局游戏的经济费用(0.0 = 免费) |
guiSize | 整数 | 游戏箱子界面大小(必须为 9 的倍数,范围 9–54) |
scorePerToken | 整数 | 奖励代币 = 分数 ÷ scorePerToken(0 = 不按分数折算代币) |
moneyPerToken | 小数 | 奖励金币 = 奖励代币数 × moneyPerToken(0.0 = 不折算金币,需 Vault) |
trackHighScore | 布尔 | 是否把分数写入高分榜 |
rewards.win.tokens | 整数 | 胜利时奖励的代币 |
rewards.win.money | 小数 | 胜利时奖励的金币(需 Vault) |
rewards.win.commands | 列表 | 胜利时以控制台身份执行的命令(%player% 替换为玩家名) |
rewards.lose.tokens | 整数 | 失败时奖励的代币 |
rewards.lose.money | 小数 | 失败时奖励的金币(需 Vault) |
单人游戏与对战游戏的奖励结构差异
- 单人 / 彩票 / 抽奖机:使用
rewards.win与rewards.lose两个分支。 - 对战类游戏(国际象棋、战舰、四子棋、井字棋、石头剪刀布、大富翁):使用
rewards.winner/rewards.loser/rewards.draw三个分支,winner与loser还可各自带commands。
彩票与抽奖机的实际奖励来自各自的 prizes 奖项池,rewards 节点仅作占位(通常为 0)。完整的奖励计算逻辑见 计分与事件。
材质名以 1.21 为准
icon.material 必须使用 Spigot 1.21 的材质枚举名(如 BROWN_CONCRETE、END_PORTAL_FRAME)。低版本服务器上的部分名称可能不同,升级后请同步更新。
2048
经典数字合并游戏:在 4×4 网格中合并相同数字,目标是合成 2048 方块。合并产生的分数会按 scorePerToken 折算成额外代币。
| 专属设置 | 默认值 | 说明 |
|---|---|---|
settings.gridSize | 4 | 网格边长(4 = 4×4) |
settings.targetTile | 2048 | 通关目标方块值 |
icon:
material: PAPER
cost: 0.0
guiSize: 45
scorePerToken: 100
moneyPerToken: 0.0
trackHighScore: true
settings:
gridSize: 4
targetTile: 2048
rewards:
win:
tokens: 10
money: 5.0
commands: []
lose:
tokens: 1
money: 0.0扫雷(Minesweeper)
经典扫雷。guiSize 必须等于 rows × cols 且不超过 54;列数 cols 上限为 9 以适配箱子宽度。默认 6×9 = 54 格、10 颗雷。
| 专属设置 | 默认值 | 说明 |
|---|---|---|
settings.rows | 6 | 行数(受 guiSize 上限约束) |
settings.cols | 9 | 列数(最大 9) |
settings.mines | 10 | 地雷数量 |
icon:
material: TNT
cost: 0.0
guiSize: 54
scorePerToken: 100000
moneyPerToken: 0.0
trackHighScore: true
settings:
rows: 6
cols: 9
mines: 10
rewards:
win:
tokens: 15
money: 10.0
commands: []
lose:
tokens: 1
money: 0.0网格与界面尺寸联动
修改 rows / cols 后,请同步把 guiSize 设为 rows × cols(且为 9 的倍数),否则格子无法铺满界面。
打地鼠(Whack-a-Mole)
限时击打地鼠。durationSeconds 控制一局时长,popIntervalTicks 控制地鼠冒出的节奏(20 ticks = 1 秒)。击中得分按 scorePerToken 折算代币。
| 专属设置 | 默认值 | 说明 |
|---|---|---|
settings.durationSeconds | 30 | 单局时长(秒) |
settings.popIntervalTicks | 20 | 地鼠冒出间隔(ticks,20 = 1 秒) |
icon:
material: BROWN_CONCRETE
cost: 0.0
guiSize: 27
scorePerToken: 2
rewards:
win:
tokens: 5
money: 0.0
commands: []
lose:
tokens: 0
money: 0.0
settings:
durationSeconds: 30
popIntervalTicks: 20宝石迷阵(Bejeweled)
三消游戏。在 rows × cols 网格中交换相邻宝石,连成 3 个及以上即消除。moveLimit 为步数上限,用尽即结算。行数上限 6、列数上限 8。
| 专属设置 | 默认值 | 说明 |
|---|---|---|
settings.rows | 6 | 行数(最大 6) |
settings.cols | 8 | 列数(最大 8) |
settings.moveLimit | 20 | 允许的交换次数 |
icon:
material: PURPLE_CONCRETE
cost: 0.0
guiSize: 54
scorePerToken: 5
rewards:
win:
tokens: 5
money: 0.0
commands: []
lose:
tokens: 0
money: 0.0
settings:
rows: 6
cols: 8
moveLimit: 20彩票(Lottery)
数字型彩票:玩家从 poolSize 个号码中选 pickCount 个,系统再开出 pickCount 个中奖号码。命中的个数决定落入哪一档奖项(prizes[命中数])。
仅奖励代币
彩票只发放代币,不支持物品或金币奖励。prizes 中每项的 money / commands 字段即使填写也不会生效。
| 专属设置 | 默认值 | 说明 |
|---|---|---|
settings.poolSize | 16 | 号码池大小 |
settings.pickCount | 4 | 玩家选择 / 系统开出的号码个数 |
奖项档位格式
prizes 是一个按命中数索引的列表(下标 0..pickCount),weight 在彩票中无效(档位由命中数决定,而非加权随机)。material / name 仅用于"编辑奖项"GUI 的展示。
| 命中数 | 材质 | 名称 | 代币 |
|---|---|---|---|
| 0 | COAL | &8安慰奖 (0 中) | 0 |
| 1 | IRON_INGOT | &f小奖 (1 中) | 1 |
| 2 | GOLD_INGOT | &e中奖 (2 中) | 5 |
| 3 | DIAMOND | &b大奖 (3 中) | 20 |
| 4 | NETHER_STAR | &6头奖 (4 中全中!) | 100 |
icon:
material: SUNFLOWER
cost: 0.0
guiSize: 45
scorePerToken: 0
moneyPerToken: 0.0
trackHighScore: true
settings:
poolSize: 16
pickCount: 4
rewards:
win:
tokens: 0
money: 0.0
commands: []
lose:
tokens: 0
money: 0.0
# 奖项档位,按下标 = 命中数取用(0..pickCount)。
# weight 在彩票中无效;仅 tokens 生效。
prizes:
- material: COAL
name: '&8安慰奖 (0 中)'
weight: 0
tokens: 0
money: 0.0
commands: []
- material: IRON_INGOT
name: '&f小奖 (1 中)'
weight: 0
tokens: 1
money: 0.0
commands: []
- material: GOLD_INGOT
name: '&e中奖 (2 中)'
weight: 0
tokens: 5
money: 0.0
commands: []
- material: DIAMOND
name: '&b大奖 (3 中)'
weight: 0
tokens: 20
money: 0.0
commands: []
- material: NETHER_STAR
name: '&6头奖 (4 中全中!)'
weight: 0
tokens: 100
money: 0.0
commands: []用 GUI 编辑更省事
彩票的奖项档位可在游戏内通过"编辑奖项"按钮(需 gamebox.admin.games 权限)直接增删改,保存后回写到此文件。通用的奖项池字段说明见 配置文件说明。
抽奖机(SlotMachine)
经典拉霸机:每次旋转消耗 spinCostTokens 个代币,三个滚轮停在随机图案上。结果由 prizes 列表按权重加权随机抽取一项(weight 越大越易中)。material 同时作为中心滚轮上展示的图案。
奖项池格式
prizes 每项可同时下发代币、金币(需 Vault)与控制台命令(%player% 替换为玩家名)。该格式与彩票共享,详见 配置文件说明。
| 材质 | 名称 | 权重 | 代币 | 金币 | 命令 |
|---|---|---|---|---|---|
COAL | &8没中奖 | 60 | 0 | 0.0 | — |
IRON_INGOT | &f小奖 | 25 | 3 | 0.0 | give %player% iron_ingot 1 |
GOLD_INGOT | &e中奖 | 12 | 8 | 0.0 | give %player% gold_ingot 1 |
DIAMOND | &b大奖 | 2 | 30 | 0.0 | give %player% diamond 1 |
NETHER_STAR | &6超级大奖! | 1 | 150 | 100.0 | give %player% nether_star 1 |
| 专属设置 | 默认值 | 说明 |
|---|---|---|
settings.spinCostTokens | 2 | 每次旋转消耗的代币 |
icon:
material: DISPENSER
cost: 0.0
guiSize: 27
scorePerToken: 0
moneyPerToken: 0.0
trackHighScore: true
settings:
spinCostTokens: 2
rewards:
win:
tokens: 0
money: 0.0
commands: []
lose:
tokens: 0
money: 0.0
# 加权奖项池:weight 越大越易抽中;命中后同时下发 tokens/money/commands。
prizes:
- material: COAL
name: '&8没中奖'
weight: 60
tokens: 0
money: 0.0
commands: []
- material: IRON_INGOT
name: '&f小奖'
weight: 25
tokens: 3
money: 0.0
commands:
- 'give %player% iron_ingot 1'
- material: GOLD_INGOT
name: '&e中奖'
weight: 12
tokens: 8
money: 0.0
commands:
- 'give %player% gold_ingot 1'
- material: DIAMOND
name: '&b大奖'
weight: 2
tokens: 30
money: 0.0
commands:
- 'give %player% diamond 1'
- material: NETHER_STAR
name: '&6超级大奖!'
weight: 1
tokens: 150
money: 100.0
commands:
- 'give %player% nether_star 1'迷宫(Maze)
从左上角走到右下角终点,步数越少分越高。得分公式为 max(0, 1000 - moves × 10)。gridSize 上限为 6(必须能塞进 6 行的箱子界面)。
| 专属设置 | 默认值 | 说明 |
|---|---|---|
settings.gridSize | 6 | 迷宫边长(上限 6) |
icon:
material: END_PORTAL_FRAME
cost: 0.0
guiSize: 54
scorePerToken: 0
moneyPerToken: 0.0
trackHighScore: true
settings:
gridSize: 6
rewards:
win:
tokens: 5
money: 0.0
commands: []
lose:
tokens: 0
money: 0.0贪吃蛇(Snake)
在网格中控制蛇移动吃食物,蛇身越长移动越快。startIntervalTicks 为初始移动间隔,每吃一个食物减少 speedupTicks ticks,最快不超过 minIntervalTicks。
| 专属设置 | 默认值 | 说明 |
|---|---|---|
settings.startIntervalTicks | 20 | 初始移动间隔(ticks,20 = 1 秒) |
settings.minIntervalTicks | 6 | 加速后的最小移动间隔(越小越快) |
settings.speedupTicks | 1 | 每吃一个食物减少的间隔(ticks) |
icon:
material: LIME_WOOL
cost: 0.0
guiSize: 54
scorePerToken: 50
moneyPerToken: 0.0
trackHighScore: true
settings:
startIntervalTicks: 20
minIntervalTicks: 6
speedupTicks: 1
rewards:
win:
tokens: 10
money: 5.0
commands: []
lose:
tokens: 1
money: 0.0小恐龙跑酷(DinoRun)
侧向滚动跑酷:恐龙原地奔跑,仙人掌从右侧滚入,点击跳跃躲避。scrollIntervalTicks 控制世界滚动速度;minObstacleGap / maxObstacleGap 控制相邻仙人掌的间距范围(分数越高间隔越短,难度递增)。
| 专属设置 | 默认值 | 说明 |
|---|---|---|
settings.scrollIntervalTicks | 6 | 世界滚动间隔(ticks,越小越快) |
settings.minObstacleGap | 4 | 相邻仙人掌最小间距(滚动步数) |
settings.maxObstacleGap | 9 | 相邻仙人掌最大间距(滚动步数) |
icon:
material: LIME_WOOL
cost: 0.0
guiSize: 54
scorePerToken: 30
moneyPerToken: 0.0
trackHighScore: true
settings:
scrollIntervalTicks: 6
minObstacleGap: 4
maxObstacleGap: 9
rewards:
win:
tokens: 10
money: 5.0
commands: []
lose:
tokens: 1
money: 0.0国际象棋(Chess)
6×6 洛斯阿拉莫斯变体(无象),支持双人对战与 AI 对战。每方棋子:1 王、1 后、2 车、2 马、6 兵。选用 6×6 是因为箱子界面最多 54 格,这是最接近标准国际象棋的可玩变体。胜负与平局分别使用 rewards.winner / rewards.loser / rewards.draw。
icon:
material: GOLD_BLOCK
cost: 0.0
guiSize: 54
scorePerToken: 0
moneyPerToken: 0.0
trackHighScore: true
rewards:
winner:
tokens: 15
money: 10.0
commands: []
loser:
tokens: 1
money: 0.0
commands: []
draw:
tokens: 2
money: 0.0玩法与 AI
棋子走法、将军/将杀/逼和判定,以及两步 minimax AI 的行为见 游戏模式 — 国际象棋。
战舰(Battleship)
双人对战(或对战 AI)。gridSize 为海洋网格列数(上限 7,需保留两列信息栏),gridRows 为行数(上限 6 以适配 54 格界面)。
| 专属设置 | 默认值 | 说明 |
|---|---|---|
settings.gridSize | 7 | 海洋网格列数(最大 7) |
settings.gridRows | 6 | 海洋网格行数(最大 6) |
icon:
material: IRON_BLOCK
cost: 0.0
rewards:
winner:
tokens: 5
money: 10.0
commands:
- "say %player% won a game of Battleship!"
loser:
tokens: 1
money: 0.0
commands: []
draw:
tokens: 2
money: 0.0
settings:
gridSize: 7
gridRows: 6关于 cost
战舰通过双人邀请流程开始,不会收取 cost;该值仅用于单人流程的可负担性检查(当前无单人流程)。默认为 0.0。
四子棋(Connect4)
双人对战(或对战 AI)。cols 为列数(上限 7),rows 为行数(上限 6 以适配 54 格界面)。
| 专属设置 | 默认值 | 说明 |
|---|---|---|
settings.cols | 7 | 棋盘列数(最大 7) |
settings.rows | 6 | 棋盘行数(最大 6) |
icon:
material: YELLOW_CONCRETE
cost: 0.0
rewards:
winner:
tokens: 5
money: 10.0
commands:
- "say %player% won a game of Connect 4!"
loser:
tokens: 1
money: 0.0
commands: []
draw:
tokens: 2
money: 0.0
settings:
cols: 7
rows: 6井字棋(TicTacToe)
bestOf 决定一场比赛包含几局(1 = 单局定胜负)。
| 专属设置 | 默认值 | 说明 |
|---|---|---|
settings.bestOf | 1 | 一场比赛的局数 |
icon:
material: RED_CONCRETE
cost: 0.0
rewards:
winner:
tokens: 5
money: 0.0
commands: []
loser:
tokens: 1
money: 0.0
commands: []
draw:
tokens: 2
money: 0.0
settings:
bestOf: 1石头剪刀布(RockPaperScissors)
bestOf 决定比赛长度;先赢得 ceil(bestOf / 2) 局者赢得整场。默认 bestOf: 3,即先胜 2 局者获胜。
| 专属设置 | 默认值 | 说明 |
|---|---|---|
settings.bestOf | 3 | 比赛局数;先达 ceil(bestOf/2) 胜者夺冠 |
icon:
material: SHEARS
cost: 0.0
rewards:
winner:
tokens: 5
money: 0.0
commands: []
loser:
tokens: 1
money: 0.0
commands: []
draw:
tokens: 2
money: 0.0
settings:
bestOf: 3大富翁(Monopoly)
经典大富翁的 GUI 复刻,支持 2–3 人或 1 人 + AI。startMoney 为每名玩家初始资金,passGoBonus 为经过起点领取的奖金,jailFee 为出狱费用。17 块地产围绕 26 格环形棋盘布置,价格与租金可直接编辑或通过游戏内设置编辑器 GUI 修改。
| 专属设置 | 默认值 | 说明 |
|---|---|---|
settings.startMoney | 2000 | 每名玩家初始资金 |
settings.passGoBonus | 200 | 经过起点(GO)领取的奖金 |
settings.jailFee | 50 | 出狱需支付的费用 |
地产列表
下表为默认的 17 块可购买地产。name 中的 & 为 Minecraft 颜色代码,随源文件原样保留。
| # | 名称 | 价格 | 租金 |
|---|---|---|---|
| 1 | &6老街 | 60 | 4 |
| 2 | &6市政厅 | 80 | 6 |
| 3 | &a公园大道 | 100 | 8 |
| 4 | &a商业街 | 120 | 10 |
| 5 | &e火车站 | 200 | 25 |
| 6 | &a购物中心 | 160 | 14 |
| 7 | &b金融街 | 180 | 16 |
| 8 | &b科技园 | 200 | 18 |
| 9 | &e机场 | 200 | 25 |
| 10 | &b大学城 | 240 | 20 |
| 11 | &c艺术区 | 260 | 22 |
| 12 | &c夜市 | 280 | 24 |
| 13 | &c海滩 | 300 | 26 |
| 14 | &d别墅区 | 320 | 28 |
| 15 | &d摩天大楼 | 400 | 50 |
| 16 | &d港口 | 350 | 35 |
| 17 | &6金矿 | 380 | 38 |
棋盘布局
26 格环形棋盘(顺时针,从 GO 起编号 0–25):
| 格子 | 类型 |
|---|---|
| 0 | 起点(GO) |
| 8 | 监狱(Jail) |
| 13 | 免费停车(FreeParking) |
| 19 | 入狱(GoToJail) |
| 4 / 15 / 21 | 机会(Chance) |
| 2 / 11 | 命运(CommunityChest) |
| 1, 3, 5, 6, 7, 9, 10, 12, 14, 16, 17, 18, 20, 22, 23, 24, 25 | 17 块地产(按上表顺序) |
完整配置
icon:
material: GOLD_BLOCK
cost: 0.0
settings:
startMoney: 2000
passGoBonus: 200
jailFee: 50
rewards:
winner:
tokens: 10
money: 0.0
commands: []
loser:
tokens: 2
money: 0.0
commands: []
draw:
tokens: 3
money: 0.0
# 17 块地产围绕 26 格棋盘布置(从 GO 起顺时针):
# 0=GO, 8=Jail, 13=FreeParking, 19=GoToJail(四个角)
# 4,15,21=Chance 2,11=CommunityChest
# 地产占据其余 17 个位置:
# 1,3,5,6,7,9,10,12,14,16,17,18,20,22,23,24,25
properties:
- name: '&6老街'
price: 60
rent: 4
- name: '&6市政厅'
price: 80
rent: 6
- name: '&a公园大道'
price: 100
rent: 8
- name: '&a商业街'
price: 120
rent: 10
- name: '&e火车站'
price: 200
rent: 25
- name: '&a购物中心'
price: 160
rent: 14
- name: '&b金融街'
price: 180
rent: 16
- name: '&b科技园'
price: 200
rent: 18
- name: '&e机场'
price: 200
rent: 25
- name: '&b大学城'
price: 240
rent: 20
- name: '&c艺术区'
price: 260
rent: 22
- name: '&c夜市'
price: 280
rent: 24
- name: '&c海滩'
price: 300
rent: 26
- name: '&d别墅区'
price: 320
rent: 28
- name: '&d摩天大楼'
price: 400
rent: 50
- name: '&d港口'
price: 350
rent: 35
- name: '&6金矿'
price: 380
rent: 38玩法与下注
2–3 人同场对战的完整流程、3 人专属下注机制与 AI 对手行为见 游戏模式 — 大富翁。