Jobs Reborn API 知识文档
Jobs Reborn Plugin API 文档总结
Overview
Jobs Reborn 插件 API 文档
插件基本信息
- 插件名称: Jobs Reborn
- 开发者: Zrips
- 包名: com.gamingmesh.jobs
- GitHub 仓库: https://github.com/Zrips/Jobs
- Wiki: https://github.com/Zrips/Jobs/wiki
- 官方文档: https://www.zrips.net/jobs/
核心 API 事件
1. JobsAreaSelectionEvent
包名: com.gamingmesh.jobs.api.events.JobsAreaSelectionEvent
描述: 当使用指定物品选择区域时触发
是否可取消: 否
主要方法:
getPlayer()– 获取选择区域的玩家getArea()– 获取选择的区域对象getArea().getHighLoc()– 获取区域高点位置getArea().getLowLoc()– 获取区域低点位置
示例代码:
@EventHandler
public void onJobsAreaSelection(JobsAreaSelectionEvent event) {
event.getPlayer().sendMessage("You have selected the area in high and low location: " + event.getArea().getHighLoc() + " " + event.getArea().getLowLoc());
}
2. JobsChunkChangeEvent
包名: com.gamingmesh.jobs.api.events.JobsChunkChangeEvent
描述: 当区块发生变化时触发
是否可取消: 是
主要方法:
getPlayer()– 获取玩家getNewChunk()– 获取新的区块
示例代码:
@EventHandler
public void onJobsChunkChange(JobsChunkChangeEvent event) {
event.getPlayer().sendMessage("The new chunk is: " + event.getNewChunk());
}
3. JobsExpGainEvent
包名: com.gamingmesh.jobs.api.events.JobsExpGainEvent
描述: 当玩家从工作中获得经验时触发
是否可取消: 是
主要方法:
getPlayer()– 获取玩家getExp()– 获取获得的经验值getJob()– 获取工作对象getJob().getName()– 获取工作名称
示例代码:
@EventHandler
public void onJobsExpGain(JobsExpGainEvent event) {
event.getPlayer().sendMessage("You got " + event.getExp() + " amount exp in job " + event.getJob().getName());
}
4. JobsJoinEvent
包名: com.gamingmesh.jobs.api.events.JobsJoinEvent
描述: 当玩家加入指定工作时触发
是否可取消: 是
主要方法:
getPlayer()– 获取玩家getJob()– 获取工作对象getJob().getName()– 获取工作名称
示例代码:
@EventHandler
public void onJobsJoin(JobsJoinEvent event) {
event.getPlayer().getPlayer().sendMessage("You have joined to " + event.getJob().getName() + " job!");
}
5. JobsLeaveEvent
包名: com.gamingmesh.jobs.api.events.JobsLeaveEvent
描述: 当玩家离开指定工作时触发
是否可取消: 是
主要方法:
getPlayer()– 获取玩家getJob()– 获取工作对象getJob().getName()– 获取工作名称
示例代码:
@EventHandler
public void onJobsLeave(JobsLeaveEvent event) {
event.getPlayer().getPlayer().sendMessage("You have left from " + event.getJob().getName() + " job!");
}
6. JobsLevelUpEvent
包名: com.gamingmesh.jobs.api.events.JobsLevelUpEvent
描述: 当玩家在该工作中升级时触发
是否可取消: 是
主要方法:
getPlayer()– 获取玩家getJob()– 获取工作对象getJob().getName()– 获取工作名称
示例代码:
@EventHandler
public void onJobsLevelUp(JobsLevelUpEvent event) {
event.getPlayer().getPlayer().sendMessage("You have leveled up in " + event.getJob().getName() + " job!");
}
7. JobsPaymentEvent
包名: com.gamingmesh.jobs.api.events.JobsPaymentEvent
描述: 当计算支付时触发
是否可取消: 是
主要方法:
getPlayer()– 获取玩家get(CurrencyType.MONEY)– 获取金钱金额get(CurrencyType.POINTS)– 获取点数金额get(CurrencyType.EXP)– 获取经验金额
示例代码:
@EventHandler
public void onJobsPayment(JobsPaymentEvent event) {
event.getPlayer().sendMessage("You got " + event.get(CurrencyType.MONEY) + " money!");
}
8. JobsPrePaymentEvent
包名: com.gamingmesh.jobs.api.events.JobsPrePaymentEvent
描述: 在支付计算过程开始前触发
是否可取消: 是
主要方法:
getPlayer()– 获取玩家getJob()– 获取工作对象getJob().getName()– 获取工作名称setCancelled(true)– 取消支付事件
示例代码:
@EventHandler
public void onJobsPrePayment(JobsPrePaymentEvent e) {
e.getPlayer().sendMessage("Payment event is cancelled in " + e.getJob().getName() + " job!");
e.getPlayer().sendMessage("You not get any income for doing actions.");
e.setCancelled(true);
}
9. JobsScheduleStartEvent
包名: com.gamingmesh.jobs.api.events.JobsScheduleStartEvent
描述: 当调度器启动时触发
是否可取消: 是
主要方法:
getSchedule()– 获取调度器对象getSchedule().isStarted()– 检查调度器是否已启动
示例代码:
@EventHandler
public void onJobsScheduleStart(JobsScheduleStartEvent ev) {
if (e.getSchedule().isStarted()) {
Bukkit.getLogger().log(Level.INFO, "The scheduler has started.");
}
}
10. JobsScheduleStopEvent
包名: com.gamingmesh.jobs.api.events.JobsScheduleStopEvent
描述: 当调度器停止时触发
是否可取消: 是
主要方法:
getSchedule()– 获取调度器对象getSchedule().isStoped()– 检查调度器是否已停止
示例代码:
@EventHandler
public void onJobsScheduleStop(JobsScheduleStopEvent ev) {
if (e.getSchedule().isStoped()) {
Bukkit.getLogger().log(Level.INFO, "The scheduler has stopped.");
}
}
玩家信息获取 API
获取玩家信息对象
JobsPlayer jobsPlayer = Jobs.getPlayerManager().getJobsPlayer(player);
注意: 如果玩家未缓存到内存中,此方法可能返回 null
获取玩家工作进度列表(不可修改)
JobsPlayer jobsPlayer = Jobs.getPlayerManager().getJobsPlayer(player);
if (jobsPlayer != null) {
List<JobProgression> jobs = jobsPlayer.getJobProgression();
for (JobProgression prog : jobs) {
// 在此处执行操作
}
}
获取不可修改的工作列表
Jobs.getJobs();
主要类结构
核心类
- Jobs – 主类,提供静态访问方法
- JobsPlayer – 玩家信息类
- JobProgression – 工作进度类
- CurrencyType – 货币类型枚举(MONEY, POINTS, EXP)
包结构
com.gamingmesh.jobs.api.events– 所有事件类com.gamingmesh.jobs– 核心功能类com.gamingmesh.jobs.container– 容器类
命令 API
区域命令
/jobs area add– 添加限制区域/jobs area remove– 移除限制区域/jobs area info– 显示区域信息/jobs area list– 列出所有区域
物品奖励编辑
/jobs edititembonus add– 添加物品奖励NBT/jobs edititembonus remove– 移除物品奖励NBT/jobs edititembonus list– 列出物品奖励
点数编辑
/jobs editpoints add– 添加点数/jobs editpoints take– 扣除点数/jobs editpoints set– 设置点数
经验和等级
/jobs exp add– 添加经验/jobs level take– 扣除等级/jobs exp set– 设置经验
提升命令
/jobs expboost– 经验提升/jobs pointboost– 点数提升/jobs moneyboost– 金钱提升
权限系统
核心权限
jobs.use– 使用插件的基本权限jobs.world.worldname– 世界权限jobs.max.[number]– 最大工作数量权限jobs.join.jobname– 加入特定工作的权限
新增权限(v4.17.0+)
jobs.tax.money.[number]– 金钱税收权限jobs.tax.points.[number]– 点数税收权限jobs.petpay.[number]– 宠物支付权限jobs.all.vipmaxlevel.[number]– VIP最大等级权限jobs.tax.bypass– 税收绕过权限jobs.command.leave.[jobName]– 基于工作的离开权限jobs.maxblastfurnaces.[number]– 最大高炉数量jobs.maxsmokers.[number]– 最大烟熏炉数量
任务权限(v4.17.0+)
jobs.maxquest.[jobName].[number]– 特定工作最大任务数jobs.maxquest.all.[number]– 所有工作最大任务数
所有权权限(v4.17.3+)
jobs.maxownership.[number]– 最大所有权数量jobs.maxfurnaceownership.[number]– 最大熔炉所有权数量
提升权限
jobs.boost.jobName.money.amount– 特定工作金钱提升jobs.boost.jobName.exp.amount– 特定工作经验提升jobs.boost.jobName.points.amount– 特定工作点数提升jobs.boost.all.money.amount– 所有工作金钱提升jobs.boost.all.exp.amount– 所有工作经验提升
Placeholders API
基础占位符
%jobsr_user_id%– 玩家数据库ID%jobsr_user_points%– 当前点数%jobsr_user_total_points%– 总点数%jobsr_user_totallevels%– 总等级数%jobsr_user_jobs%– 玩家所有工作%jobsr_user_joinedjobcount%– 加入的工作数量%jobsr_maxjobs%– 最大可加入工作数
设备计数占位符
%jobsr_user_furncount%– 熔炉数量%jobsr_user_maxfurncount%– 最大熔炉数量%jobsr_user_smokercount%– 烟熏炉数量%jobsr_user_maxsmokercount%– 最大烟熏炉数量%jobsr_user_blastcount%– 高炉数量%jobsr_user_maxblastcount%– 最大高炉数量%jobsr_user_bstandcount%– 酿造台数量%jobsr_user_maxbstandcount%– 最大酿造台数量
任务占位符
%jobsr_user_doneq%– 已完成任务数量%jobsr_user_dailyquests_pending%– 待处理任务数量%jobsr_user_dailyquests_completed%– 已完成任务数量%jobsr_user_dailyquests_total%– 总任务数量%jobsr_user_quests%– 当前可用任务
复杂占位符
%jobsr_user_boost_(jname/number)_(money/exp/points)%– 特定工作和类型的提升%jobsr_user_isin_(jname/number)%– 检查玩家是否在特定工作中
使用示例
监听工作加入事件
@EventHandler
public void onJobsJoin(JobsJoinEvent event) {
Player player = event.getPlayer().getPlayer();
String jobName = event.getJob().getName();
player.sendMessage(ChatColor.GREEN + "恭喜你加入了 " + jobName + " 工作!");
// 记录到日志
Bukkit.getLogger().info(player.getName() + " 加入了工作: " + jobName);
}
获取玩家工作信息
public void displayPlayerJobs(Player player) {
JobsPlayer jobsPlayer = Jobs.getPlayerManager().getJobsPlayer(player);
if (jobsPlayer != null) {
List<JobProgression> jobs = jobsPlayer.getJobProgression();
player.sendMessage(ChatColor.GOLD + "=== 你的工作 ===");
for (JobProgression prog : jobs) {
player.sendMessage(ChatColor.YELLOW + "- " + prog.getJob().getName() +
" 等级: " + prog.getLevel() +
" 经验: " + prog.getExperience());
}
}
}
检查玩家是否在特定工作中
public boolean isPlayerInJob(Player player, String jobName) {
JobsPlayer jobsPlayer = Jobs.getPlayerManager().getJobsPlayer(player);
if (jobsPlayer != null) {
for (JobProgression prog : jobsPlayer.getJobProgression()) {
if (prog.getJob().getName().equalsIgnoreCase(jobName)) {
return true;
}
}
}
return false;
}
最佳实践
- 空值检查: 始终检查
getJobsPlayer()返回的JobsPlayer对象是否为null - 事件取消: 在需要时使用
setCancelled(true)取消事件 - 异步操作: 避免在事件处理中进行耗时操作
- 错误处理: 妥善处理可能出现的异常
- 权限验证: 在使用API前验证玩家权限
版本兼容性
- 本API文档基于 Jobs Reborn v4.17.0+ 版本
- 部分功能可能需要特定版本支持
- 建议使用最新版本以获得完整功能支持
支持与贡献
- GitHub Issues: https://github.com/Zrips/Jobs/issues
- Pull Requests: 欢迎贡献代码改进
- 官方文档: https://www.zrips.net/jobs/
- SpigotMC: https://www.spigotmc.org/resources/jobs-reborn.4216/