- 版权类型
- 原创
- 插件中文名称
- 第一响应人
- 插件英文名称
- JMFirstResponders
- 支持的核心(服务端)
- Spigot
- Paper
- Leaves
- 语言支持
- 中文(简体)
- 适配版本(Java)
- 最新版本
[MD]
# JMFirstResponders
> 一款面向 Minecraft Paper 1.21.4 服务器的全方位角色扮演(RP)插件。
此页面为基础展示,详情请到[URL='https://github.com/jingmi0v0/JMFirstResponders']github[/URL]查看
>
> 作者:[jingmi0v0]
---
## 目录
- [简介](#简介)
- [功能总览](#功能总览)
- [安装](#安装)
- [依赖](#依赖)
- [快速开始](#快速开始)
- [命令一览](#命令一览)
- [占位符一览](#占位符一览)
- [权限一览](#权限一览)
- [配置体系](#配置体系)
- [存储系统](#存储系统)
- [模块状态](#模块状态)
- [构建](#构建)
- [项目结构](#项目结构)
---
## 简介
**JMFirstResponders** 是一个功能完备的 Minecraft RP 插件,目前以 **PD(警察部门)** 模块为核心,同时包含枪械系统、濒死系统和多后端存储架构。插件参考 LAPD/NYPD 体系设计,提供了完整的职级晋升、绩效考评、通缉追捕、调度通信和月度工资发放等机制。
模块代号:
| 缩写 | 全称 | 状态 |
|------|------|------|
| **PD** | Police Department(警察部门) | ✅ **已实现** |
| **GUN** | 枪械系统 | ✅ **已实现** |
| **Dying** | 濒死系统 | ✅ **已实现**(需 EMS 配合) |
| **EMS** | Emergency Medical Service(医疗部门) | ❌ **暂未实现** |
| **FD** | Fire Department(消防部门) | ❌ **暂未实现** |
---
## 功能总览
### 🚔 PD(警察部门)
完整的警察职级模拟系统,采用 8 级 NYPD 职级体系。包含职级晋升、绩效考评、月度工资发放、通缉追捕、支援代码调度、三部门通信、警笛、补给、逮捕/拘留/罚款/警告/搜身等完整执法流程。
📖 **详见 [`READ/README_PD.md`](READ/README_PD.md)**
### 🔫 枪械系统
基于钓鱼竿 + 雪球发射机制的枪械系统:
- 5 种枪械:泰瑟枪、Glock_17、MP5、AR-15、HK416
- 独立的伤害值、弹夹容量、备弹管理、特殊效果(减速/凋零等)
- 动作栏实时显示弹药状态
- 自动换弹逻辑
- 射击音效与粒子效果
### 🚑 EMS(医疗部门)—请查看github
📖 **详见 [`READ/README_EMS.md`](READ/README_EMS.md)**
### 🚒 FD(消防部门)请查看github
📖 **详见 [`READ/README_FD.md`](READ/README_FD.md)**
### 💀 濒死系统
- 生命归零后进入濒死状态(锁血 1 点、游泳姿态、禁止移动)
- 可配置倒计时(默认 10 分钟)
- 濒死时限制命令执行(白名单/黑名单模式)
- 濒死警员自动触发 CODE 99 紧急调度
- **注意**:需要 EMS 模块配合使用
### 💾 存储系统
支持三种存储后端,通过策略模式路由:
| 类型 | 说明 | 适用场景 |
|------|------|----------|
| **YAML** | 本地文件存储(默认) | 单服小型服务器 |
| **SQLite** | 嵌入式数据库 | 单服中型服务器 |
| **MySQL** | 远程数据库 | 多服共享数据/大型服务器 |
---
## 安装
### 前置条件
1. **Paper 1.21.4** 服务端(或兼容的衍生端)
2. **Java 21** 运行环境
### 步骤
1. 从 Release 下载 `JMFirstResponders-1.1.0.jar`
2. 将 jar 放入服务端的 `plugins/` 目录
3. 安装 [Vault](https://www.spigotmc.org/resources/vault.34315/) 插件和一个经济插件(如 EssentialsX、CMI)
4. 安装 [PlaceholderAPI](https://www.spigotmc.org/resources/placeholderapi.6245/) 插件(软依赖)
5. 重启服务端
6. 编辑 `plugins/JMFirstResponders/config.yml` 进行基础配置
7. 编辑 `plugins/JMFirstResponders/configs/config_PD.yml` 配置 PD 模块参数
8. 使用 `/jmfirstresponders reload` 重载配置
---
## 依赖
| 依赖 | 版本 | 类型 | 用途 |
|------|------|------|------|
| [Paper API](https://papermc.io/) | 1.21.4-R0.1-SNAPSHOT | 必要 | Minecraft 服务端 API |
| [VaultAPI](https://github.com/MilkBowl/VaultAPI) | 1.7 | 必要 | 经济系统(罚款/工资发放) |
| [PlaceholderAPI](https://placeholderapi.com/) | 2.11.6 | 可选 | 占位符扩展(`%rp_*%`) |
> Vault 和配套的经济插件是**必须安装**的,否则 PD 模块的罚款和工资功能无法正常工作。
---
## 快速开始
> PD 模块的详细命令、权限和配置请参阅 [`READ/README_PD.md`](READ/README_PD.md)。
### 1. 使用枪械
```minecraft
/rpgun <枪械名称>
```
---
## 命令一览
PD 相关的所有命令(`/pd`、`/code`、`/wanted`、`/rpcar`)及支援代码表详见 [`READ/README_PD.md`](READ/README_PD.md)。
| 命令 | 描述 |
|------|------|
| `/911 [pd\|ems\|fd]` | 紧急呼叫(打开 GUI) |
| `/deth` | 濒死时放弃医疗帮助 |
| `/rpgun <枪械名>` | 创建枪械(仅 OP) |
| `/jmfirstresponders reload` | 重载插件配置 |
---
## 占位符一览
安装 PlaceholderAPI 后可使用以下占位符:
| 占位符 | 描述 |
|--------|------|
| `%city_p_deth_time%` | 濒死剩余时间(分钟) |
| `%rp_Occupation%` | 完整职业显示(格式见 config.yml) |
| `%MiniMessage_rp_Occupation%` | MiniMessage 格式的职业显示 |
PD 模块占位符(`%RP_name%`、`%rp_pd_level%`、`%rp_pd_rank_name%`、`%rp_pd_performance%`、`%rp_pd_on_duty%`、`%rp_wanted_reward%` 等)详见 [`READ/README_PD.md`](READ/README_PD.md)。
---
## 权限一览
### PD 权限
所有 `RP_PD.*` 权限节点及按职级分配的 RBAC 配置详见 [`READ/README_PD.md`](READ/README_PD.md)。
### 其他权限
| 权限节点 | 描述 |
|----------|------|
| `RP_car.create` | 创建服务车辆 |
| `rpgun.create` | 创建枪械(仅 OP) |
---
## 配置体系
### 主配置 `config.yml`
位于 `plugins/JMFirstResponders/config.yml`,包含:
- **lang** — 语言选择(`zh_cn` / `en_us`)
- **world** — 启用的世界列表
- **fine** — 公资金账户名称和初始资金
- **storage** — 存储类型(YAML / SQLITE / MYSQL)及 MySQL 连接参数
- **Dying** — 濒死系统开关、倒计时、命令控制
- **Gun** — 枪械列表、伤害、弹夹容量、特殊效果
- **rp_Occupation** — 职业占位符显示格式
### PD 配置
PD 模块的 `configs/config_PD.yml`、`premission/premission_PD.yml` 及 GUI 配置详见 [`READ/README_PD.md`](READ/README_PD.md)。
### EMS / FD 配置
EMS 和 FD 模块暂未实现,相应配置文件及 GUI 均为空,详情见 [`READ/README_EMS.md`](READ/README_EMS.md) 和 [`READ/README_FD.md`](READ/README_FD.md)。
---
## 存储系统
插件支持三种存储后端,通过 `config.yml` 的 `storage.type` 切换:
### YAML(默认)
无需额外配置,数据存储在 `plugins/JMFirstResponders/data/` 目录下。
### SQLite
数据存储在 `plugins/JMFirstResponders/data/JMFirstResponders.db`。
### MySQL
需要配置 `config.yml` 中的 MySQL 连接参数:
```yaml
storage:
type: MYSQL
mysql:
host: localhost
port: 3306
database: jmfirstresponders
username: root
password: ""
```
---
---
## 构建
### 前置条件
- JDK 21+
- Maven 3.8+
### 构建步骤
```bash
# 克隆仓库
git clone https://github.com/jingmi0v0/JMFirstResponders.git
cd JMFirstResponders
# 编译打包
mvn clean package
# 输出在 target/JMFirstResponders-1.1.0.jar
```
---
## 📊 数据统计 (bStats)
本插件使用 [bStats](https://bstats.org) 进行匿名使用统计,帮助作者了解插件使用情况。
[](https://bstats.org/plugin/bukkit/FirstResponders/33152)
**统计内容:**
| 项目 | 说明 | 查看方式 |
|------|------|---------|
| 服务器数量 | 有多少服务器正在使用本插件 | 上图徽章(自动更新) |
| PD 警员数 | 所有服务器在线的 PD 警员总数 | 面板自定义图表 `pd_players` |
| EMS 玩家数 | 所有服务器在线的 EMS 玩家总数 | 面板自定义图表 `ems_players` |
| FD 玩家数 | 所有服务器在线的 FD 玩家总数 | 面板自定义图表 `fd_players` |
📈 查看全部统计图表:<https://bstats.org/plugin/bukkit/FirstResponders/33152>
## 项目结构
```
JMFirstResponders/
├── pom.xml # Maven 构建配置
├── README.md # 本文件
├── READ/
│ ├── README_PD.md # PD 模块详细文档
│ ├── README_EMS.md # EMS 模块文档(暂未实现)
│ └── README_FD.md # FD 模块文档(暂未实现)
├── src/
│ ├── main/
│ │ ├── java/me/jingmi/mc/KY/jMCityProtector/
│ │ │ ├── JMFirstResponders.java # 主入口(JavaPlugin)
│ │ │ ├── PD/ # 警察部门模块 (~30个文件)
│ │ │ │ ├── PDPapiExpansion.java # PlaceholderAPI扩展
│ │ │ │ ├── MiniMessageExpansion.java
│ │ │ │ ├── command/ # 7个命令类
│ │ │ │ │ ├── PDCommand.java # /pd 主命令
│ │ │ │ │ ├── PDTabCompleter.java # /pd Tab补全
│ │ │ │ │ ├── CodeCommand.java # /code 支援代码
│ │ │ │ │ ├── CodeTabCompleter.java # /code Tab补全
│ │ │ │ │ ├── Command911.java # /911 紧急呼叫
│ │ │ │ │ ├── DethCommand.java # /deth 放弃救治
│ │ │ │ │ ├── JMFirstRespondersCommand.java # 管理命令
│ │ │ │ │ ├── RPCarCommand.java # /rpcar 服务车辆
│ │ │ │ │ └── WantedCommand.java # /wanted 通缉榜
│ │ │ │ ├── gui/
│ │ │ │ │ └── GUIManager.java # GUI管理
│ │ │ │ ├── listener/ # 5个事件监听器
│ │ │ │ │ ├── PDListener.java
│ │ │ │ │ ├── ActivityListener.java
│ │ │ │ │ ├── ArrestListener.java
│ │ │ │ │ ├── CallListener.java
│ │ │ │ │ └── VehicleRideListener.java
│ │ │ │ ├── manager/ # 10个子管理器
│ │ │ │ │ ├── PDManager.java # 核心外观类
│ │ │ │ │ ├── WantedManager.java # 通缉系统
│ │ │ │ │ ├── PerformanceManager.java # 绩效系统
│ │ │ │ │ ├── SirenManager.java # 警笛系统
│ │ │ │ │ ├── RadioManager.java # 通信频道
│ │ │ │ │ ├── SupplyManager.java # 补给系统
│ │ │ │ │ ├── BonusManager.java # 工资发放
│ │ │ │ │ ├── CodeManager.java # 支援代码
│ │ │ │ │ ├── DispatchManager.java # 调度系统
│ │ │ │ │ └── VehicleManager.java # 车辆标记
│ │ │ │ └── model/
│ │ │ │ └── PDPlayerData.java # 警员数据
│ │ │ ├── GUN/ # 枪械系统
│ │ │ │ ├── GunManager.java
│ │ │ │ ├── command/RPGunCommand.java
│ │ │ │ └── listener/GunListener.java
│ │ │ └── publicRP/ # 公共RP基础设施
│ │ │ ├── DyingManager.java # 濒死系统
│ │ │ ├── MessageUtil.java # 消息工具
│ │ │ ├── manager/Call911Manager.java # 911呼叫流程
│ │ │ ├── model/
│ │ │ │ ├── DispatchEvent.java # 调度事件
│ │ │ │ ├── PoliceStation.java # 警局区域
│ │ │ │ └── WantedEntry.java # 通缉令
│ │ │ └── storage/ # 存储系统
│ │ │ ├── DataStorage.java # 存储接口
│ │ │ ├── StorageManager.java # 存储路由
│ │ │ ├── YamlStorage.java # YAML实现
│ │ │ ├── SQLiteStorage.java # SQLite实现
│ │ │ └── MySQLStorage.java # MySQL实现
│ │ └── resources/
│ │ ├── plugin.yml # 插件描述
│ │ ├── config.yml # 主配置
│ │ ├── configs/
│ │ │ ├── config_PD.yml # PD配置
│ │ │ ├── config_EMS.yml # EMS配置(空)
│ │ │ └── config_FD.yml # FD配置(空)
│ │ ├── GUI/
│ │ │ ├── PD.yml # PD菜单GUI
│ │ │ ├── 911.yml # 911呼叫GUI
│ │ │ ├── EMS.yml # EMS菜单GUI(空)
│ │ │ ├── FD.yml # FD菜单GUI(空)
│ │ │ ├── wanted.yml # 通缉榜GUI
│ │ │ └── code/
│ │ │ ├── PD.yml # PD代码GUI
│ │ │ ├── EMS.yml # EMS代码GUI(空)
│ │ │ └── FD.yml # FD代码GUI(空)
│ │ └── premission/
│ │ └── premission_PD.yml # PD权限配置
```
---
## 技术架构
| 设计模式 | 应用位置 |
|----------|----------|
| **外观模式** | `PDManager` 作为所有子管理器的统一入口 |
| **策略模式** | `StorageManager` 根据配置路由到 YAML/SQLite/MySQL |
| **命令模式** | `CodeManager.executeCode()` switch 分发 |
| **观察者模式** | Bukkit 事件监听器体系 |
| **委托模式** | `PDManager` 方法委托给子管理器 |
---
## 开源协议:
MIT
[/MD]