- 版权类型
- 原创
- 插件中文名称
- 城市职业系统插件
- 插件英文名称
- CityProfessions
- 支持的核心(服务端)
- Spigot
- 语言支持
- 中文(简体)
- 适配版本(Java)
- 1.20
插件简介
功能特色
安装部署
配置文件详解
命令使用指南
职业系统详解
任务系统详解
NPC系统详解
经济系统详解
MTR交通集成
权限节点
常见问题
进阶配置
CityProfessions 是一个功能全面的城市职业系统插件,为 Minecraft 服务器提供完整的职业体验。玩家可以选择不同职业,完成任务,赚取工资,与NPC互动,深度集成城市生活。
核心设计理念
零硬编码依赖:不强制依赖任何第三方插件
模块化架构:各系统独立,可选择性启用
优雅降级:依赖不存在时功能受限但不崩溃
高度可配置:所有参数均可通过配置文件调整
6种职业:警察、消防员、医护人员、厨师、工程师、海关
等级系统:每个职业有10个等级,解锁新技能
任务系统:每日任务、职业任务、特殊任务
经济系统:内置经济,支持工资、税收、奖金
NPC系统:可选Citizens2集成,职业NPC生成
Citizens2:NPC生成和交互(可选)
MTR:公共交通系统集成(可选)
Vault:经济系统集成(未来支持)
反射加载:动态检测可选依赖
多版本兼容:支持Citizens2不同版本
性能优化:异步处理,低资源占用
完整日志:详细的操作日志和错误追踪
第一步:获取插件
编译获取(推荐):
bash
# 1. 导出项目为 .sirc 文件
# 2. 放入 plugins/ScriptIrc/scripts/src/
# 3. 执行编译
/scriptirc compiler CityProfessions
输出:plugins/ScriptIrc/compiled/CityProfessions.jar
直接使用:
将编译好的 CityProfessions.jar 放入服务器 plugins/ 目录
第二步:依赖准备
必需依赖
无 - 插件可独立运行
可选依赖(增强功能)
插件 作用 是否必需
Citizens2 NPC生成和交互
MTR 公共交通系统集成
Vault 经济系统集成
第三步:启动服务器
将插件放入 plugins/ 目录
启动服务器
首次运行会自动生成配置文件
检查控制台输出:
none
[CityProfessions] 插件已启用!
[CityProfessions] 使用内置经济系统
[CityProfessions] Citizens2未找到,NPC功能将不可用(可选)
[CityProfessions] MTR未找到,交通功能将不可用(可选)
第四步:基础配置
编辑 plugins/CityProfessions/config.yml
根据需求调整基础参数
重启服务器或使用重载命令
配置文件位置
none
plugins/CityProfessions/config.yml
主要配置项
1. 基础设置
yaml
# 配置文件版本 - 不要手动修改
ScriptIrc-config-version: 1
# 插件基础设置
plugin:
# 是否启用调试模式
debug: false
# 数据保存间隔(秒)
save-interval: 300
# 语言文件(未来支持)
language: "zh_CN"
2. 职业系统
yaml
professions:
# 是否启用职业系统
enabled: true
# 默认职业(新玩家)
default: "unemployed"
# 职业切换冷却(秒)
switch-cooldown: 86400
# 最大职业等级
max-level: 10
# 等级经验需求倍率
exp-multiplier: 1.0
3. 经济系统
yaml
economy:
# 是否启用经济系统
enabled: true
# 起始资金
starting-balance: 1000.0
# 工资发放间隔(秒)
salary-interval: 3600
# 税率(0-1)
tax-rate: 0.1
# 是否启用税收
enable-tax: true
4. 任务系统
yaml
tasks:
# 是否启用任务系统
enabled: true
# 每日任务数量
daily-tasks: 3
# 任务刷新间隔(秒)
refresh-interval: 86400
# 最大同时任务数
max-concurrent: 5
# 任务难度系数
difficulty: 1.0
5. NPC系统
yaml
npc:
# 是否启用NPC系统(需要Citizens2)
enabled: true
# 最大NPC数量
max-npcs: 50
# NPC生成间隔(秒)
spawn-interval: 600
# NPC清理时间(秒,-1为不清理)
cleanup-time: -1
# 职业NPC生成位置
spawn-locations:
police:
- "world:100,64,200"
- "world:150,64,250"
firefighter:
- "world:200,64,300"
6. MTR集成
yaml
mtr:
# 是否启用MTR集成(需要MTR插件)
enabled: true
# 交通折扣(0-1)
discount-rate: 0.3
# 免费交通职业
free-transport:
- "police"
- "firefighter"
- "medic"
配置示例
yaml
# 完整配置示例
ScriptIrc-config-version: 1
plugin:
debug: false
save-interval: 300
professions:
enabled: true
default: "unemployed"
switch-cooldown: 86400
max-level: 10
exp-multiplier: 1.0
economy:
enabled: true
starting-balance: 1000.0
salary-interval: 3600
tax-rate: 0.1
enable-tax: true
tasks:
enabled: true
daily-tasks: 3
refresh-interval: 86400
max-concurrent: 5
difficulty: 1.0
npc:
enabled: true
max-npcs: 50
spawn-interval: 600
cleanup-time: -1
spawn-locations:
police:
- "world:100,64,200"
firefighter:
- "world:200,64,300"
medic:
- "world:300,64,400"
mtr:
enabled: true
discount-rate: 0.3
free-transport:
- "police"
- "firefighter"
- "medic"
命令总览
命令 权限 描述 别名
/job cityprofessions.use 职业系统主菜单 /cityjob
/job choose <职业> cityprofessions.choose 选择职业 -
/job info [玩家] cityprofessions.info 查看职业信息 -
/job balance cityprofessions.balance 查看余额 -
/job tasks cityprofessions.tasks 查看任务 -
/job transport cityprofessions.transport 交通信息 -
/profession cityprofessions.use 职业信息 -
/cityjob reload cityprofessions.admin 重载配置 -
详细命令说明
1. 主命令 /job
none
/job
/job help
效果:打开职业系统主菜单
权限:cityprofessions.use
输出示例:
none
§6=== 城市职业系统 ===
§7命令列表:
§f/job choose §7- 选择职业
§f/job info §7- 查看职业信息
§f/job balance §7- 查看余额
§f/job tasks §7- 查看任务
§f/job transport §7- 交通信息
§f/profession §7- 职业详细信息
2. 选择职业 /job choose
none
/job choose <职业ID>
参数:
职业ID:police, firefighter, medic, chef, engineer, customs
效果:选择或切换职业
权限:cityprofessions.choose
冷却时间:24小时(可配置)
输出示例:
none
§a你已成功选择警察职业!
§7等级:1
§7技能:基础执法
§7工资:每小时 100
3. 查看信息 /job info
none
/job info
/job info <玩家名>
效果:查看自己或他人的职业信息
权限:
查看自己:cityprofessions.info
查看他人:cityprofessions.info.others
输出示例:
none
§6=== 玩家信息 ===
§7玩家:Steve
§7职业:警察 (等级 3)
§7经验:150/300
§7技能:基础执法、交通管理
§7工资:每小时 150
4. 经济相关 /job balance
none
/job balance
效果:查看经济余额和工资信息
权限:cityprofessions.balance
输出示例:
none
§6=== 经济信息 ===
§7余额:§a1,250.00
§7职业:警察
§7时薪:100.00
§7下次发薪:30分钟后
§7今日税收:12.50
5. 任务系统 /job tasks
none
/job tasks
/job tasks accept <任务ID>
/job tasks complete <任务ID>
效果:查看、接受、完成任务
权限:cityprofessions.tasks
输出示例:
none
§6=== 可用任务 ===
§71. §e巡逻城市 §7(奖励: 200)
§72. §e处理交通事故 §7(奖励: 350)
§73. §e抓捕小偷 §7(奖励: 500)
§7输入 §f/job tasks accept 1 §7接受任务
6. 交通系统 /job transport
none
/job transport
效果:查看交通信息和折扣(需MTR)
权限:cityprofessions.transport
输出示例:
none
§6=== 交通信息 ===
§7职业:警察
§7折扣:30% off
§7免费线路:所有警用线路
§7最近车站:中央车站 (100m)
7. 管理命令 /cityjob reload
none
/cityjob reload
效果:重载插件配置
权限:cityprofessions.admin
输出示例:
none
§a配置已重载!
§7重新加载了所有配置文件
命令补全
所有命令都支持Tab自动补全:
/job → 补全子命令
/job choose → 补全职业ID
/job info → 补全在线玩家
/job tasks accept → 补全任务ID
6种职业介绍
1.
描述:维护城市治安,执法巡逻
初始等级:1
初始工资:100/小时
技能树:
等级1:基础执法
等级3:交通管理
等级5:刑事侦查
等级7:特警训练
等级10:警长
2.
描述:灭火救援,抢险救灾
初始等级:1
初始工资:90/小时
技能树:
等级1:基础灭火
等级3:高空救援
等级5:危险品处理
等级7:消防指挥
等级10:消防队长
3.
描述:医疗救护,生命救援
初始等级:1
初始工资:95/小时
技能树:
等级1:基础急救
等级3:医疗诊断
等级5:手术技能
等级7:医疗管理
等级10:主任医师
4.
描述:美食烹饪,餐厅经营
初始等级:1
初始工资:80/小时
技能树:
等级1:基础烹饪
等级3:糕点制作
等级5:高级料理
等级7:餐厅管理
等级10:米其林主厨
5.
描述:城市建设,技术维护
初始等级:1
初始工资:110/小时
技能树:
等级1:基础工程
等级3:建筑设计
等级5:机械维修
等级7:城市规划
等级10:总工程师
6.
描述:边境检查,贸易管理
初始等级:1
初始工资:105/小时
技能树:
等级1:基础检查
等级3:文件审核
等级5:违禁品识别
等级7:贸易管理
等级10:海关关长
等级系统
经验获取方式
工作时间:每小时在线获得基础经验
完成任务:根据任务难度获得经验
职业活动:职业相关行为获得经验
特殊事件:服务器活动奖励经验
等级需求公式
none
所需经验 = 基础经验 × 等级 × 经验倍率
基础经验:100
经验倍率:可配置
等级奖励
每级:工资增加10%
特定等级:解锁新技能
满级:特殊称号和权限
职业切换规则
冷却时间:24小时(可配置)
等级保留:切换职业后原职业等级保留
经验重置:新职业从1级开始
工资继承:不继承原职业工资
任务类型
1. 每日任务
数量:每天3个(可配置)
刷新:每天0点自动刷新
特点:简单,奖励适中
示例:
警察:巡逻3个街区
消防员:检查5个消防栓
厨师:制作10份食物
2. 职业任务
触发:与职业NPC交互
特点:职业相关,奖励较高
示例:
警察:抓捕通缉犯
工程师:修复损坏建筑
海关:检查进口货物
3. 特殊任务
触发:服务器事件或管理员发布
特点:难度高,奖励丰厚
示例:
联合行动:多职业协作
紧急事件:自然灾害响应
庆典活动:节日特别任务
任务流程
1. 查看任务
none
/job tasks
显示所有可用任务,按难度排序。
2. 接受任务
none
/job tasks accept <任务ID>
检查前置条件
占用任务栏位
开始任务计时
3. 进行任务
根据任务要求完成相应操作:
位置类:到达指定地点
交互类:与指定NPC/方块交互
收集类:收集指定物品
击杀类:击败指定怪物
4. 完成任务
none
/job tasks complete <任务ID>
自动验证完成条件
发放奖励(金钱+经验)
记录完成统计
5. 放弃任务
none
/job tasks cancel <任务ID>
放弃进行中的任务
可能有冷却惩罚
不获得奖励
任务配置
yaml
# 任务难度系数
tasks:
easy:
reward-multiplier: 1.0
exp-multiplier: 1.0
time-limit: 3600 # 1小时
medium:
reward-multiplier: 1.5
exp-multiplier: 1.5
time-limit: 7200 # 2小时
hard:
reward-multiplier: 2.5
exp-multiplier: 2.5
time-limit: 10800 # 3小时
系统要求
必需插件:Citizens2(可选)
版本兼容:Citizens2 2.0+
功能降级:无Citizens2时NPC功能禁用
NPC类型
1. 职业NPC
生成:根据配置文件位置自动生成
外观:职业特定皮肤和装备
功能:
提供职业信息
发放职业任务
职业相关对话
工资发放(可选)
2. 服务NPC
生成:固定位置,手动配置
功能:
任务发布
物品交易
信息查询
传送服务
NPC交互
右键交互
基础对话:职业介绍和问候
任务菜单:查看和接受任务
职业服务:工资领取、技能学习
信息查询:职业排名、服务器信息
对话系统
none
[警察NPC] §6你好,我是警察张三!
[警察NPC] §f有什么可以帮你的吗?
1. §a查看任务
2. §e领取工资
3. §b学习技能
4. §c离开
NPC配置
位置配置
yaml
npc:
spawn-locations:
police:
- "world:100,64,200:90" # 世界:x,y,z:朝向
- "world:150,64,250:0"
firefighter:
- "world:200,64,300:180"
# 格式说明
# 世界名:X坐标,Y坐标,Z坐标:朝向角度
# 朝向:0=南,90=西,180=北,270=东
外观配置
yaml
npc:
appearance:
police:
skin: "PoliceOfficer"
equipment:
hand: "IRON_SWORD"
helmet: "LEATHER_HELMET"
firefighter:
skin: "Firefighter"
equipment:
hand: "IRON_AXE"
helmet: "IRON_HELMET"
行为配置
yaml
npc:
behavior:
# 是否看向玩家
look-at-players: true
# 对话冷却(秒)
chat-cooldown: 5
# 移动范围(方块)
move-radius: 10
# 是否可被攻击
invulnerable: true
NPC管理命令
none
# 管理员命令
/cityjob npc spawn <职业> [位置]
/cityjob npc remove <NPC_ID>
/cityjob npc list
/cityjob npc reload
系统架构
1. 内置经济(默认)
存储:YAML文件
功能:基础经济操作
优点:无依赖,简单稳定
缺点:功能有限
2. Vault集成(未来)
存储:支持所有Vault经济插件
功能:完整经济功能
优点:功能强大,生态丰富
缺点:需要Vault依赖
经济功能
1. 工资系统
发放方式:定时自动发放
计算规则:基础工资 × 等级系数 × 在线时间
发放时间:每小时整点(可配置)
税收扣除:发放前自动扣税
2. 税收系统
税率:10%(可配置)
计算方式:工资 × 税率
税收用途:服务器公共基金
免税职业:可配置特定职业免税
3. 交易系统
职业交易:NPC物品买卖
服务收费:交通、传送等服务
任务奖励:任务完成奖励
惩罚扣款:违规行为罚款
经济命令
玩家命令
none
/job balance # 查看余额
/job salary # 查看工资信息
/job pay <玩家> <金额> # 转账给其他玩家
管理员命令
none
/cityjob economy give <玩家> <金额>
/cityjob economy take <玩家> <金额>
/cityjob economy set <玩家> <金额>
/cityjob economy tax <税率>
/cityjob economy stats
经济配置
yaml
economy:
# 基础设置
enabled: true
currency-symbol: "$"
decimal-places: 2
# 工资设置
salary:
enabled: true
interval: 3600 # 发放间隔(秒)
base-amount: 100.0
level-multiplier: 1.1 # 每级增加10%
# 税收设置
tax:
enabled: true
rate: 0.1 # 10%
exempt-professions: # 免税职业
- "unemployed"
- "student"
# 交易设置
transaction:
fee-rate: 0.01 # 1%手续费
min-amount: 1.0
max-amount: 10000.0
系统要求
必需插件:MTR Mod(可选)
版本要求:MTR 3.0+
功能降级:无MTR时交通功能禁用
集成功能
1. 职业折扣
警察/消防/医护:免费乘坐
其他职业:30%折扣(可配置)
验证方式:刷卡时自动识别职业
2. 专用线路
警用线路:连接警察局和重要设施
消防线路:连接消防站和居民区
医疗线路:连接医院和社区
工程线路:连接工地和材料区
3. 交通任务
巡逻任务:乘坐指定线路巡逻
应急响应:快速到达事故现场
通勤任务:按时上下班打卡
使用方式
1. 查看交通信息
none
/job transport
显示:
当前职业的折扣信息
可用的专用线路
最近的车站距离
交通任务状态
2. 刷卡乘车
靠近MTR闸机
右键刷卡
自动识别职业
应用相应折扣
记录乘车日志
3. 交通任务
none
/job tasks transport <任务类型>
任务类型:
patrol - 线路巡逻
commute - 上下班通勤
response - 应急响应
配置说明
yaml
mtr:
# 基础设置
enabled: true
auto-detect: true # 自动检测MTR
# 折扣设置
discounts:
police: 1.0 # 100%免费
firefighter: 1.0 # 100%免费
medic: 1.0 # 100%免费
chef: 0.7 # 30%折扣
engineer: 0.7 # 30%折扣
customs: 0.7 # 30%折扣
default: 1.0 # 默认无折扣
# 专用线路
dedicated-lines:
police:
- "Police Line 1"
- "Emergency Response"
firefighter:
- "Fire Department Line"
- "Rescue Express"
# 交通任务
transport-tasks:
enabled: true
min-distance: 100 # 最小乘车距离(米)
reward-per-km: 10 # 每公里奖励
玩家权限
权限节点 默认 描述
cityprofessions.use OP 使用基础命令
cityprofessions.choose OP 选择职业
cityprofessions.info OP 查看自己信息
cityprofessions.info.others OP 查看他人信息
cityprofessions.balance OP 查看经济信息
cityprofessions.tasks OP 使用任务系统
cityprofessions.transport OP 使用交通系统
管理员权限
权限节点 默认 描述
cityprofessions.admin OP 所有管理权限
cityprofessions.reload OP 重载配置
cityprofessions.npc.manage OP NPC管理
cityprofessions.economy.manage OP 经济管理
cityprofessions.task.manage OP 任务管理
职业特定权限
权限节点 职业 描述
cityprofessions.profession.police 警察 警察职业权限
cityprofessions.profession.firefighter 消防员 消防员职业权限
cityprofessions.profession.medic 医护人员 医护人员权限
cityprofessions.profession.chef 厨师 厨师职业权限
cityprofessions.profession.engineer 工程师 工程师权限
cityprofessions.profession.customs 海关 海关权限
权限配置示例
yaml
# LuckPerms 配置示例
groups:
default:
permissions:
- cityprofessions.use
- cityprofessions.info
- cityprofessions.balance
police:
permissions:
- cityprofessions.profession.police
- cityprofessions.tasks
- cityprofessions.transport
admin:
permissions:
- cityprofessions.admin
- cityprofessions.*
安装问题
Q1: 插件无法加载,提示类找不到
A: 这是正常的,插件使用反射动态加载可选依赖。确保:
使用的是最新编译版本
没有手动修改import语句
服务器日志没有其他错误
Q2: Citizens2/MTR功能不工作
A: 检查:
依赖插件是否正确安装
配置文件中的enabled是否为true
服务器重启后是否正常加载
查看控制台启动日志
配置问题
Q3: 配置文件修改后不生效
A:
使用 /cityjob reload 重载配置
检查YAML语法是否正确
确保文件编码为UTF-8
重启服务器彻底重载
Q4: NPC不生成
A:
确认Citizens2已安装并启用
检查npc.enabled配置
验证位置坐标是否正确
查看是否有生成权限限制
功能问题
Q5: 任务无法完成
A:
检查任务要求是否满足
确认玩家职业与任务匹配
查看任务是否已过期
尝试放弃后重新接受
Q6: 经济数据显示为0
A:
确认经济系统已启用
检查玩家是否有职业
等待工资发放周期
查看经济配置文件
Q7: 命令没有自动补全
A:
确认插件正确加载
检查命令是否注册成功
尝试重新登录游戏
查看服务器版本兼容性
性能问题
Q8: 服务器卡顿
A: 优化建议:
减少NPC生成数量
增加任务刷新间隔
关闭调试模式
限制经济数据保存频率
Q9: 内存占用过高
A:
清理长时间未登录玩家数据
减少NPC数量
优化任务数据存储
定期重启服务器
自定义职业
1. 创建新职业
yaml
# 在配置文件中添加
custom-professions:
teacher:
display-name: "教师"
description: "教育学生,传授知识"
base-salary: 85
max-level: 10
skills:
1: "基础教学"
3: "课程设计"
5: "教育管理"
7: "学术研究"
10: "教授"
2. 自定义任务
yaml
custom-tasks:
teacher-lecture:
name: "进行讲座"
description: "在学校进行2小时讲座"
profession: "teacher"
difficulty: "medium"
reward: 300
exp: 150
requirements:
- "location:school"
- "time:2h"
数据存储
1. 数据文件位置
none
plugins/CityProfessions/
├── data/
│ ├── players.yml # 玩家数据
│ ├── economy.yml # 经济数据
│ └── tasks.yml # 任务数据
├── logs/
│ ├── economy.log # 经济日志
│ └── actions.log # 操作日志
└── backups/ # 自动备份
2. 数据备份
自动备份:每天0点自动备份
手动备份:/cityjob backup
恢复备份:/cityjob restore <备份名>
备份保留:最近7天(可配置)
性能优化
1. 配置优化
yaml
performance:
# 异步处理
async-saving: true
async-npc-spawn: true
# 缓存设置
cache-players: true
cache-time: 300 # 5分钟
# 数据清理
cleanup-inactive-days: 30
max-player-data: 1000
2. 监控指标
NPC数量:控制最大数量
任务并发:限制同时任务数
数据大小:定期清理旧数据
响应时间:监控命令响应
扩展开发
1. API接口(未来)
java
// 获取职业管理器
ProfessionManager pm = plugin.getProfessionManager();
// 获取玩家职业
Profession profession = pm.getPlayerProfession(player);
// 检查任务状态
TaskManager tm = plugin.getTaskManager();
boolean hasTask = tm.hasActiveTask(player);
2. 事件系统(未来)
java
// 职业切换事件
@EventHandler
public void onProfessionChange(ProfessionChangeEvent event) {
Player player = event.getPlayer();
Profession oldProf = event.getOldProfession();
Profession newProf = event.getNewProfession();
}
// 任务完成事件
@EventHandler
public void onTaskComplete(TaskCompleteEvent event) {
Player player = event.getPlayer();
Task task = event.getTask();
double reward = event.getReward();
}
获取帮助
查看日志:plugins/CityProfessions/logs/
调试模式:设置debug: true查看详细日志
社区支持:相关Minecraft社区论坛
问题反馈:提供详细错误信息和日志
更新日志
v1.0.0:初始版本,基础职业系统
未来计划:
Vault经济集成
数据库支持(MySQL/SQLite)
图形用户界面(GUI)
更多职业和任务
API接口开放
注意事项
定期备份:重要数据定期备份
测试环境:新配置先在测试服验证
版本兼容:确认依赖插件版本兼容
权限管理:合理配置权限节点
现在你已经掌握了CityProfessions插件的完整使用方法。按照以下步骤开始:
安装插件:将插件放入plugins/目录
基础配置:编辑config.yml设置基础参数
启动测试:启动服务器,检查功能是否正常
玩家引导:向玩家介绍职业系统和命令
持续优化:根据服务器情况调整配置
祝你在Minecraft中建设繁荣的城市职业生态!