原创指南 · 目标版本:Minecraft 1.20.1 + Forge 47.4.10+ + FPSMatch 1.26.9(快照 2026-09-19) 面向服主 / 地图作者(不需要写代码)。命令、设置键、能力、物品 ID 均按最新版源码与仓库内
docs/mapper逐条核对;游戏内/fpsm help永远是最新的事实来源。
FPSMatch 使用指南(最新版):把枪战玩法开起来¶
版本变化提醒(对比老教程)
最新版 groupId / 包名已整体改名:com.ptcrys.fpsmatch → net.ptcrys.fpsmatch,Maven 坐标是 net.ptcrys:FPSMatch:<版本>(artifact 名大写),版本号形式变为 1.26.9-SNAPSHOT / v1.26.9.19。
另外 LDLib2 已彻底移除(界面改为 Modern UI),Kotlin for Forge 仍是必需依赖。
目录¶
- 开篇:这份指南能让你做什么
- 安装与环境:版本、依赖、装哪边
- 概念速通:游戏类型 / 地图 / 队伍 / 区域 / 能力 / 设置
- 建图:两对角点 + 图形工具 + 命令
- 队伍与出生点
- 区域:地图区域 / 爆破区(包点)/ 商店区
- 地图设置
- 起始装备(kits)
- 商店:让玩家有钱买枪
- 商店监听模块:退货 / 护甲 / 动态换物
- 房间与比赛管理
- 制图工具四件套
- 地图展示资源:名称 / 图标 / 背景
- 导入另一张地图的配置
- 保存与维护
- 命令速查表
- 排错与常见问题
- 相关链接
开篇¶
FPSMatch 是一个对局框架(库模组):它提供地图实例、队伍、经济与商店、能力、HUD 与统计、房间大厅,但不自己提供玩法。要有可打的地图,必须先有一个注册了「游戏类型」的玩法模组(例如 cs 爆破、csdm 死斗,或你自己的玩法)。
读完你能做到:
- 装好 FPSMatch 及其依赖,用
/fpsm help验证 - 用工具或命令建出第一张可打的地图
- 配出生点、爆破区(包点)、起始装备、商店与购买区
- 配好商店联动(自动退货、护甲 + 头盔升级、动态换物)
- 管房间、开比赛、存数据、按需导入复用配置
安装¶
版本与依赖¶
| 项 | 值 |
|---|---|
| Minecraft | 1.20.1 |
| Forge | 47.4.10+ |
| FPSMatch | 1.26.9-SNAPSHOT(或正式版,见下) |
| Java | 17+ |
| 必需依赖 | Kotlin for Forge 4.11.0(FPSMatch 现在有 Kotlin 代码) |
| 客户端必需 | Modern UI Forge 1.20.1-3.12.0.1(界面用;专用服务端不需要) |
| 可选联动 | TaCZ 1.1.7-hotfix(枪械)、counterstrikegrenade(手雷)、tacz-tweaks、lr-tactical、KubeJS |
| 不需要 | ~~LDLib2~~(已彻底移除) |
别装 LDLib2
老版本(1.2.5 时代)才需要 LDLib2。现在装上它会拖入独立的 kotlin-stdlib,和 Kotlin for Forge 抢 kotlin.jvm.functions,直接 ResolutionException。
从哪拿¶
- 官方 Maven(新增,推荐)
- 正式版:
https://maven.ptcrys.net/releases - 快照:
https://maven.ptcrys.net/snapshots - 坐标:
net.ptcrys:FPSMatch:1.26.9-SNAPSHOT - GitHub Releases / Modrinth / CurseForge 也可以下 jar
- 客户端和服务端必须同一份 FPSMatch(网络协议号不一致会握手失败)
验证安装¶
- 进游戏敲
/fpsm help→ 出现可展开的命令树 = 装好了 - 创造模式物品栏找 FPSMatch 分页 → 应有地图创建工具、复活点工具、对局配置工具、商店配置工具,以及手雷 / 闪光弹 / 烟雾弹 / 燃烧弹 / 防弹护甲等物品
常见坑:只装了客户端或只装了服务端、漏 Kotlin for Forge、漏客户端 Modern UI、Forge 低于 47.4.10。
概念¶
| 概念 | 说明 | 谁提供 |
|---|---|---|
| 游戏类型(game type) | 字符串 ID(如 cs、csdm),决定有哪些队伍、能力、商品分类 |
玩法模组注册 |
| 地图 ID | 1~48 位小写字母/数字/下划线/连字符(如 training),是存档身份,别写中文 |
你创建时填写 |
| 维度 | 创建时所处的服务端维度,之后不会变 | 创建时确定 |
| 地图区域 | 两个对角方块坐标围成的长方体,覆盖所有可玩空间 | 你用工具/命令设置 |
| 队伍 | 玩法定义(如 T/CT、红/蓝),外加框架自管的旁观队 | 玩法模组创建 |
| 能力(capability) | 挂在地图或队伍上的功能模块:出生点、商店、起始装备、爆破区、结束传送点… | FPSMatch + 玩法 |
| 设置(setting) | 每张地图的独立字段:展示名、自动开始、准备时间… | 玩法注册字段,地图存值 |
| 商店 | 队伍能力:用钱买枪械/道具,有分组与监听模块联动 | 队伍能力 |
三种区域别搞混:
- 地图区域 = 最外层边界(玩家与地图对象的总空间)
- 爆破区(包点) = 允许安包的空间
- 商店区(购买区) = 该队玩家能开商店的位置(不配 = 全图可买)
推荐制作顺序:世界建筑 → 地图区域 → 出生点 → 目标区域 → 设置 → 装备 → 商店。 地图边界是外层约束:普通出生点和爆破区都必须落在边界内,缩小边界时若会把爆破区挤出去,服务端会直接拒绝。
建图¶
图形工具(推荐)¶
拿创造物品栏里的地图创建工具 fpsmatch:map_creator_tool:
- 左键方块 = 设
Pos1;右键方块 = 设Pos2;Ctrl + 右键= 打开创建界面 - 界面里选游戏类型(如
cs)、填地图 ID(如training),点「创建地图」 - 更新已有地图边界:选中「已有地图」,重设两点,点「保存地图」
- 手持续持工具时会实时预览当前选区;换下工具预览清除
命令¶
相对坐标同样可用:
创建时会用该游戏类型的工厂生成队伍、能力与默认设置,并立即保存。
修改边界¶
- 工具:选已有地图 → 重设两点 → 保存
- 详情页:
/fpsm mapselect→ 进入地图 → 「管理 → 区域编辑」→ 地图区域 - 限制:地图未开始、操作者在同维度、已有爆破区仍完整位于新区域内
队伍¶
队伍由玩法创建,你一般不新增/删除队伍,只给已有普通队伍配出生点、装备、商店。旁观队由框架单独管理,不需要出生点。
加出生点(工具)¶
- 拿复活点工具
fpsmatch:spawn_point_tool,Ctrl + 右键打开界面 - 依次选游戏类型 → 地图 → 普通队伍
- 对作为地面的方块右键:出生点取该方块上方位置,朝向取你当时的朝向
- 界面可浏览点位数量/坐标、删当前点、「清空」该队全部点
会被拒绝的情况:不同维度 / 不在图内 / 脚下没有可站立面 / 脚部或头部空间被方块占住 / 空间有液体 / 与已有出生点重复 / 比赛进行中。
想让玩家出生就面朝战场入口?先站好位置、看向目标方向再点右键。
加出生点(命令)¶
站在希望玩家出生的位置、朝向东方向,然后:
/fpsm map modify cs training team teams <队伍> capability spawnpoints add
/fpsm map modify cs training team teams <队伍> capability spawnpoints clear
<队伍> 用命令补全里的内部名(界面上的中文翻译名不能代替)。
管理地图成员¶
/fpsm map modify cs training team join ← 自己进自动分配队伍
/fpsm map modify cs training team join @a[tag=builders] ← 指定玩家
/fpsm map modify cs training team teams <队伍> players <目标> join
/fpsm map modify cs training team teams spectator players <目标> join
对应的 leave 表示移出。/fpsm mapselect 详情页里的队伍管理走同一套服务端规则。
区域¶
地图区域¶
详情页「管理 → 区域编辑 → 地图区域」:填 Pos1 / Pos2 三个整数坐标,「当前位置」按钮把玩家所在方块写进去。改边界不会重建地图 ID / 维度 / 设置 / 队伍 / 商店 / 装备,也不会自动移动出生点。
爆破区(包点)¶
a) 命令(新增 + 显示)
/fpsm map modify cs training capability demolition bomb_area add <from> <to>
/fpsm map modify cs training capability demolition bomb_area display
- 两点 = 一个长方体区域 = 一个包点;A/B 两个包点就 add 两次
- 区域必须完全落在地图区域内,否则被拒
- 区域要足够高并盖住地面:判定「能不能安包」是看玩家是否位于区域内
- 只有
add/display两个子命令
b) 图形界面(改 / 删更顺手) 详情页「管理 → 区域编辑」→「爆破区域 / 新爆破区域」:填两点保存,左侧选已有区域可改,删除需二次确认。当前实现每张地图最多 256 个爆破区。
看不到「爆破区域」页签
说明这张地图没有 DemolitionModeCapability。死斗类地图不会因为填了坐标就获得安包规则。
商店区(购买区)¶
属于队伍商店能力,在商店里配置:shop areas add/display/clear。不配 = 允许全图开商店;多队要共用同一购买区,必须每队分别配。
设置¶
每张地图独立设置,界面从服务端读取当前实际注册的字段,不依赖固定清单。
基础设置表¶
| 设置 | 默认 | 含义 |
|---|---|---|
displayName |
空 | 玩家看到的地图名;空 = 用地图 ID |
iconTexture |
空 | 地图列表缩略图资源位置 |
backgroundTexture |
空 | 详情页背景资源位置 |
allowJoinInProgress |
true |
开局后是否允许加入 |
minAssistDamageRatio |
0.25 |
助攻所需伤害占目标最大生命的比例 |
teammateGlow |
false |
队友发光 |
enemyGlow |
false |
敌人发光 |
hideEnemyNameTag |
true |
隐藏敌方名牌 |
autoStart |
false |
满足玩法开始条件后启用自动开始计时 |
autoStartTime |
6000 |
自动开始等待 tick(6000 ≈ 5 分钟) |
readyStartEnabled |
true |
允许全员准备触发开始倒计时 |
readyStartTime |
200 |
全员准备后的等待 tick(200 ≈ 10 秒) |
自动开始 ≠ 无条件定时启动
玩法仍会判断人数等开始条件;条件不满足时计时器会复位。别把 readyStartTime 设成 0——那会让准备倒计时每 tick 都判定完成,客户端「准备开始」文字会一直卡着。
三种改法¶
详情页(一次改多项):/fpsm mapselect → 地图 → 「管理 → 设置」,按分类展示、可搜索;布尔用开关、数值用控件、其它用文本框;改完点保存。
对局配置工具(站在地图里快速改一个):fpsmatch:match_config_tool 右键 → 选类型和地图 → 布尔直切、其它填值后点该行「应用」。
命令:
/fpsm map modify cs training settings list
/fpsm map modify cs training settings get displayName
/fpsm map modify cs training settings set displayName 训练场
/fpsm map modify cs training settings set readyStartTime 200
/fpsm map modify cs training settings save
/fpsm map modify cs training settings load
/fpsm map modify cs training settings reset displayName
/fpsm map modify cs training settings reset all
set / reset 只改内存,save 才写文件;load 会用文件内容覆盖未保存的内存改动。
起始装备(kits)¶
拥有 StartKitsCapability 的队伍可以保存一套开局物品,玩法在准备流程里发放。
/fpsm map modify cs training team teams <队伍> capability kits add ← 复制主手完整物品栈(含 NBT)
/fpsm map modify cs training team teams <队伍> capability kits add minecraft:bread 3 ← 按物品 ID + 数量
/fpsm map modify cs training team teams <队伍> capability kits list
/fpsm map modify cs training team teams <队伍> capability kits clear
发放时会先清空玩家物品栏
护甲进装备槽,其它进背包;枪械会经枪械兼容层修正后整理物品栏。所以 kits 适合「背包完全由比赛管理」的玩法,不是给生存背包加奖励,离场也不会自动还原赛前背包。
当前没有「按序号删单件」的命令:要么 clear 后按顺序重加,要么用导入复制整套。
商店¶
商店属于队伍。可用的商品分类和槽位数由玩法决定;你负责选类型、填商品和价格。
初始化(必须有这一步)¶
<商店类型>用补全看(内置分类形如equipment装备 /pistol手枪 /mid_rank中级 /rifle步枪 /throwable投掷物,实际以服务器注册为准)- 初始资金省略 = 800
- 初始化成功后,该队才会出现在地图详情页与商店配置工具的可编辑列表里
其它管理命令:
... capability shop info ← 队伍 / 商店类型 / 初始资金 / 玩家数
... capability shop reset ← 清玩家本局购买状态(不动商品模板)
... capability shop sync ← 把最新槽位数据推给玩家(改完命令后建议执行)
购买区域¶
... capability shop areas add <pos1> <pos2>
... capability shop areas display
... capability shop areas clear ← ⚠️ 真删除,不只是隐藏
改槽位(命令)¶
... capability shop modify set <商店类型> <槽位> cost <价格>
... capability shop modify set <商店类型> <槽位> item [物品] ← 不写物品 = 取主手
... capability shop modify set <商店类型> <槽位> dummy_ammo_amount <数量>
... capability shop modify set <商店类型> <槽位> group_id <值> ← -1 需用图形编辑器恢复
... capability shop modify set <商店类型> <槽位> listener_module add <模块名>
... capability shop modify set <商店类型> <槽位> listener_module remove <模块名>
槽位号从 1 开始;<商店类型> 可小写输入(服务端转大写)。连续改多条后执行 shop sync + /fpsm save。
图形编辑器(推荐)¶
- 详情页「管理 → 商店编辑」,或手持
fpsmatch:shop_config_tool右键 - 打开单个槽位可:换商品(从背包选)、改价格(0 ~ 1,000,000)、枪械虚拟弹药(0 ~ 999,999)、分组 ID(
-1= 不分组)、挂监听模块 - 改动先存草稿,点「保存」后服务端复核
- 保存槽位会替换默认模板、重建该队现有玩家的商店状态并同步客户端 → 请在正式开赛前配好
监听模块¶
模块挂在某个槽位上,只在同一分组里的另一个槽位被买/退时触发。触发方向就是最常配错的地方:
| 想实现 | 模块挂哪 |
|---|---|
| 买 B 时自动退掉已买的 A | returnGoods 挂 A |
| 买 A 时让 B 变成别的商品 | changeItem_... 挂 B |
| 买含头盔护甲时启用头盔属性 | bulletproof_with_helmet 挂同组另一格护甲上 |
groupId = -1 不参与分组;命令的 group_id 只接受 ≥ 0,清除分组用图形编辑器。
内置模块¶
returnGoods:同组另一格被购买时,检查本格商品是否已买、还在背包且可退,可退则移除一件并退款。 ⚠️ 会先按新商品完整价格检查余额再退货:已有 650 护甲、要买 1000 头盔护甲,购买前仍需 ≥ 1000。bulletproof_without_helmet:写入 100 点护甲耐久 +hasHelmet=false(身体吃甲、爆头不吃);同组退回时移除护甲属性。bulletproof_with_helmet:写入 100 点护甲耐久 +hasHelmet=true(身体和爆头都吃甲)。changeItem_...:动态换物(见下),默认注册示例changeItem_minecraft_apple(苹果 50 → 金苹果 300)。- 其它扩展模块:服务器装的玩法模组注册什么就有什么,编辑器只显示名字。
完整示例:护甲 + 头盔升级(交叉挂载)¶
| 槽位 | 商品 | 价格 | 分组 | 模块 |
|---|---|---|---|---|
equipment 1 |
fpsmatch:bulletproof_armor |
650 | 100 | returnGoods、bulletproof_with_helmet |
equipment 2 |
fpsmatch:bulletproof_with_helmet |
1000 | 100 | returnGoods、bulletproof_without_helmet |
/fpsm map modify cs training team teams ct capability shop modify set equipment 1 item fpsmatch:bulletproof_armor
/fpsm map modify cs training team teams ct capability shop modify set equipment 1 cost 650
/fpsm map modify cs training team teams ct capability shop modify set equipment 1 group_id 100
/fpsm map modify cs training team teams ct capability shop modify set equipment 1 listener_module add returnGoods
/fpsm map modify cs training team teams ct capability shop modify set equipment 1 listener_module add bulletproof_with_helmet
/fpsm map modify cs training team teams ct capability shop modify set equipment 2 item fpsmatch:bulletproof_with_helmet
/fpsm map modify cs training team teams ct capability shop modify set equipment 2 cost 1000
/fpsm map modify cs training team teams ct capability shop modify set equipment 2 group_id 100
/fpsm map modify cs training team teams ct capability shop modify set equipment 2 listener_module add returnGoods
/fpsm map modify cs training team teams ct capability shop modify set equipment 2 listener_module add bulletproof_without_helmet
动态换物模块¶
创建(OP 2,玩家执行;默认商品放副手、换后商品放主手):
例(副手苹果、主手金苹果):
- 非枪械商品的名字来自默认商品 ID →
changeItem_minecraft_apple - 换后商品是枪械时,名字用换后枪械 ID(如
changeItem_example_rifle) - 同名再次创建会覆盖旧定义
- 配好后:触发槽位与目标槽位同分组合 → 模块挂到目标槽位 → 买触发槽位时目标槽位换物换价,退回则恢复 →
/fpsm save
顺序与重置¶
同槽位多模块按优先级执行:returnGoods = 5、changeItem_... = 1、护甲模块 = 0;同优先级按挂载顺序。商店重置会恢复价格/购买次数/锁定状态并调用模块重置(换物模块恢复默认商品与价格)。
常见问题¶
- 列表里没模块:模块来自服务器注册表;第三方模块缺失 = 提供它的模组没装/版本不匹配/注册失败;动态换物要先创建再重开编辑器
- 买了没反应:两格
groupId是否相同的非负数、模块是否挂另一格上 - 没自动退货:商品已丢弃/消耗/被锁定,或没满足新商品完整价格
- 保存提示模块无效:重开槽位编辑器刷新目录;重名/空名/未注册/超过 64 个都会被拒
房间¶
地图选择界面既是玩家入口也是管理台:
- 列表显示游戏类型、人数、状态、加入条件,可按状态/类型筛选
- 进详情的页面会持续订阅该房间状态,不用反复关开
- 普通玩家:加入 / 离开 / 准备 / 允许的换队
- 管理员额外看到:管理、邀请、设置、商店、区域、导入、比赛操作
管理动作(与命令一一对应):
| 界面 | 命令 | 作用 |
|---|---|---|
| 开始 | debug start |
调起玩法开始流程 |
| 重置 | debug reset |
恢复玩法定义的重置状态 |
| 新回合 | debug new_round |
请求下一回合 |
| 清理 | debug cleanup |
清运行状态与临时对象 |
| 调试 | debug switch |
切换地图调试模式 |
/fpsm map modify cs training debug start|new_round|reset|cleanup|switch
/fpsm map modify cs training team join <目标> ← 不写目标 = 自己(命令方块/控制台不能用省略形式)
/fpsm map modify cs training team leave <目标>
改配置前的状态限制
区域、出生点和部分管理员编辑只在地图未开始时开放;要改空间先「重置」或「清理」让地图回到非运行状态。
工具¶
| 物品 | ID | 操作 |
|---|---|---|
| 地图创建工具 | fpsmatch:map_creator_tool |
左键设 Pos1 / 右键设 Pos2 / Ctrl+右键 开界面 |
| 复活点工具 | fpsmatch:spawn_point_tool |
Ctrl+右键 开界面选类型/地图/队伍,右键地面方块加点位 |
| 对局配置工具 | fpsmatch:match_config_tool |
右键开界面,循环选类型/地图,逐项改设置 |
| 商店配置工具 | fpsmatch:shop_config_tool |
右键选类型/地图 → 进入该队商店编辑器 |
- 工具只是服务端管理界面的便携入口,配置都存在地图数据里
- 工具的选择状态存在物品自己的 NBT 里,复制工具会连选择一起复制
- 工具没反应时:检查 OP 2 权限、服务器有无该游戏类型、地图是否缺能力、维度是否一致、比赛是否进行中——服务端会给出具体失败消息
资源¶
显示名¶
/fpsm map modify cs training settings set displayName 训练场
/fpsm map modify cs training settings save
展示名可含空格和中文,不会改变命令里的 training,也不会新建地图。
图标 / 背景¶
把图片放进(自己做的)资源包:
assets/my_maps/textures/gui/maps/training_icon.png
assets/my_maps/textures/gui/maps/training_background.png
然后填资源位置(不是文件路径、不是 URL):
/fpsm map modify cs training settings set iconTexture my_maps:textures/gui/maps/training_icon.png
/fpsm map modify cs training settings set backgroundTexture my_maps:textures/gui/maps/training_background.png
/fpsm map modify cs training settings save
- 图标用于列表卡片,背景用于详情页;缺失或为空时客户端用按地图身份生成的色块
- 缩略图与背景建议接近 16:9
- 每个客户端都要能拿到资源(模组内置或服务器资源包);资源包 只改图片不用重建地图设置,但客户端要重载资源
displayName是纯文本,不会自动解析翻译键
导入¶
详情页「管理 → 导入地图配置」可把同类地图的设置 / 商店 / 起始装备复制过来(支持已加载地图,也会扫描 FPSMatch 数据目录里的其它世界存档)。
- 来源必须同游戏类型、不能是自己;历史存档还要求保存分组相符
- 商店和起始装备按队伍内部名映射,同名且有相应能力才复制,映射不上的会跳过(消息里显示跳过数量)
- 三类内容分别可勾选:地图设置 / 商店 / 起始装备(起始装备是整套替换,不是追加)
- 不会复制:地图边界、维度、地图 ID、出生点、爆破区、结束传送点、世界建筑
- 不能撤销;导入前先备份对应 FPSMatch 数据目录
- 玩法版本升级后如果设置字段对不上,设置导入可能整体失败(要求目标每个设置都能从来源解析)
持久化¶
数据位置:
- 地图数据:
<游戏目录>/fpsmatch/<世界存档名>/ - 地图区域、队伍、能力、玩家比赛数据都在这里;地图设置另有自己的
.cfg - 实际子目录名由注册该数据类型的模组决定 → 备份要整个世界目录一起备,别只挑一个 JSON
- 全局数据:路径由
fpsmatch/config.json的globalDataPath决定,默认fpsmatch/global/
常用命令:
/fpsm save ← 写出所有已注册数据
/fpsm reload ← 发布重载事件(不是 /reload 的别名,不会重载 Java 模组)
/fpsm map modify cs training settings load
会自动保存的操作:地图创建、区域修改、出生点修改、配置导入、多种能力命令。settings set/reset 只改内存,要 settings save 才落盘。运行时别用外部程序直接覆盖同样的文件。
世界文件夹改名后 = 换了一套 FPSMatch 世界数据;想沿用旧配置,保留原目录供「导入」发现,或在停服状态下整体管理存档。
命令速查¶
地图管理命令默认要求 OP 等级 2。尖括号 = 必填,方括号 = 可省;类型/地图/队伍/设置/能力都由服务器动态补全。
# 帮助与全局
/fpsm help
/fpsm save
/fpsm reload
# 建图
/fpsm map create <游戏类型> <地图名> <from> <to>
# 队伍
/fpsm map modify <类型> <地图> team join [目标]
/fpsm map modify <类型> <地图> team leave [目标]
/fpsm map modify <类型> <地图> team teams <队伍> players <目标> <join|leave>
/fpsm map modify <类型> <地图> team teams spectator players <目标> <join|leave>
# 设置
/fpsm map modify <类型> <地图> settings list|get|set|save|load|reset
# 地图能力
/fpsm map modify <类型> <地图> capability demolition bomb_area add <from> <to>
/fpsm map modify <类型> <地图> capability demolition bomb_area display
/fpsm map modify <类型> <地图> capability match_end_teleport_point <pos>
# 队伍能力
/fpsm map modify <类型> <地图> team teams <队伍> capability spawnpoints add|clear
/fpsm map modify <类型> <地图> team teams <队伍> capability kits add [物品] [数量] | list | clear
/fpsm map modify <类型> <地图> team teams <队伍> capability shop initialize <类型> [初始资金]
/fpsm map modify <类型> <地图> team teams <队伍> capability shop info|reset|sync
/fpsm map modify <类型> <地图> team teams <队伍> capability shop areas add|display|clear
/fpsm map modify <类型> <地图> team teams <队伍> capability shop modify set <商店类型> <槽位> <参数…>
# 比赛管理
/fpsm map modify <类型> <地图> debug start|reset|new_round|cleanup|switch
# 模块与调试
/fpsm listener_module add change_item_module <改变后价格> <默认价格>
/fpsm debug
/fpsm tacz dummy <数量>
会随服务器注册内容变化,以 /fpsm help 为准。
排错¶
| 症状 | 可能原因 | 怎么办 |
|---|---|---|
| 没有能建的地图类型 | 没装注册游戏类型的玩法模组 | 装玩法模组(如 BlockOffensive 的 cs) |
/fpsm map create 报「无效或未注册的游戏类型」 |
类型名写错 | 用补全 |
| 建图报「请先设置 Pos1/Pos2」 | 命令/工具两点没给全 | 给两个对角坐标 |
| 建图报重名 | 同类型下 ID 重复 | 换 ID |
| 开不了局 | 队伍没有出生点 / 出生点不足 | 每队加 3~5 个落地可站的点位 |
| 出生点加不上 | 不在图内 / 脚下悬空 / 空间被占 / 有液体 / 维度不符 / 重复 | 换位置,或先修地图边界 |
| 包点加不上 | 超出地图区域 | 扩大地图区域,或挪包点 |
| 详情页没有「爆破区域」 | 该地图没有爆破能力 | 换 cs 类地图,或让玩法给能力 |
| 开不了商店 | 没进图 / 未开局 / 购买时间过期 / 离开购买区 / 玩法不支持商店 | 对应检查;购买区用 shop areas add 圈 |
| 商店改了没变化 | 没 shop sync / 没 save |
先 sync 再 /fpsm save |
| 监听模块没反应 | 分组不同 / 模块挂错槽位 | 见监听模块触发方向表 |
| 起始装备没发 | 玩法没在准备流程发 / 队伍没 kits 能力 | 检查队伍能力与玩法发放时点 |
| 房间界面不刷新 | roomSync 关了 |
fpsmatch-server.toml 的 roomSync.* |
| 改了配置不生效 | 没重启或没 /fpsm reload |
重启或 reload |
| 客户端连不上/握手失败 | 两端 FPSMatch 版本不同 | 换成同一份 |
启动崩 Missing mandatory dependencies |
缺 Kotlin for Forge 或客户端缺 Modern UI | 补齐;不要加 LDLib2 |
| 非 OP 也能看到地图选择按钮 | 配置允许 | fpsmatch-server.toml 顶层 EnableMapSelectionButtonForNonOps = false |
链接¶
- 官方文档站:https://fpsmatch.ptcrys.net/
- GitHub:https://github.com/PhasetransCrystal/FPSMatch
- 兄弟模组 BlockOffensive:https://github.com/PhasetransCrystal/BlockOffensive
- 官方 Maven:
https://maven.ptcrys.net/releases(正式)/.../snapshots(快照) - QQ 群:771884981
开服前 checklist
- 依赖齐:Forge ≥ 47.4.10、Kotlin for Forge 4.11.0、客户端 Modern UI 1.20.1-3.12.0.1、TaCZ(可选);没装 LDLib2
-
/fpsm help正常,玩法模组的游戏类型出现在补全里 - 每队出生点 ≥ 3 个且都能站稳、朝向正确
- 爆破区(包点)落在地图区域内、够高够盖地
- 商店:
initialize过、购买区圈好、槽位与价格配好、监听模块方向正确、sync+/fpsm save - 测试过一局:
debug start→ 打完 →debug reset - 数据目录已备份(整个世界目录 +
fpsmatch/global)