Doc ID: SIRC-045

PlayerPoints API 知识库

本文档用于整理 PlayerPoints 插件在插件二次开发中的 API 初始化方式、核心类结构以及常见用法示例

Overview

PlayerPoints API 知识库

本文档用于整理 PlayerPoints 插件在插件二次开发中的 API 初始化方式、核心类结构以及常见用法示例,适用于 Spigot / Paper / Bukkit 服务端环境。

一、核心类与包结构

1️⃣ 插件主类

org.black_ixx.playerpoints.PlayerPoints
  • PlayerPoints 插件的 Bukkit 主类
  • 用于获取 API 实例

2️⃣ API 类

org.black_ixx.playerpoints.PlayerPointsAPI
  • 所有点数相关操作的入口
  • 包含查询、增加、扣除、设置、转账等方法

3️⃣ 包名总览

org.black_ixx.playerpoints

二、API 初始化方式

✅ 标准初始化流程(推荐)

在你自己的插件 onEnable() 中获取 PlayerPoints 实例:

import org.black_ixx.playerpoints.PlayerPoints;
import org.black_ixx.playerpoints.PlayerPointsAPI;
import org.bukkit.plugin.Plugin;

public class MyPlugin extends JavaPlugin {

    private PlayerPoints playerPoints;
    private PlayerPointsAPI pointsAPI;

    @Override
    public void onEnable() {
        Plugin plugin = getServer().getPluginManager().getPlugin("PlayerPoints");
        if (plugin instanceof PlayerPoints) {
            this.playerPoints = (PlayerPoints) plugin;
            this.pointsAPI = playerPoints.getAPI();
        } else {
            getLogger().severe("未找到 PlayerPoints 插件,功能将被禁用");
        }
    }
}

说明

  • 不要自行 new PlayerPointsAPI
  • API 必须从已启用的 PlayerPoints 插件实例中获取
  • 如果插件不存在,应禁用依赖功能而不是抛异常

三、常用 API 方法

🎯 查询玩家点数

int points = pointsAPI.look(player.getName());
  • 返回玩家当前点数
  • 玩家不存在时通常返回 0

➕ 给予玩家点数

boolean success = pointsAPI.give(player.getName(), 100);
  • 返回是否操作成功
  • 一般不会因为负数而自动校验,请自行控制参数

➖ 扣除玩家点数

boolean success = pointsAPI.take(player.getName(), 50);
  • 当余额不足时返回 false
  • 不会自动扣成负数

✏️ 设置玩家点数

boolean success = pointsAPI.set(player.getName(), 1000);
  • 直接覆盖原有点数

🔄 重置 / 删除玩家数据

boolean success = pointsAPI.reset(player.getName());
  • 通常将点数重置为 0

💸 玩家间转账

boolean success = pointsAPI.pay("Alice", "Bob", 200);
  • 从 Alice 扣除点数并给予 Bob
  • 任意一方失败都会返回 false

四、常见使用场景示例

示例:判断点数是否足够并消费

int cost = 300;
int balance = pointsAPI.look(player.getName());

if (balance >= cost) {
    pointsAPI.take(player.getName(), cost);
    // 发放奖励
} else {
    // 点数不足提示
}

示例:给予在线玩家奖励点数

for (Player p : Bukkit.getOnlinePlayers()) {
    pointsAPI.give(p.getName(), 10);
}

五、开发注意事项

⚠️ 玩家标识问题

  • PlayerPoints 主要基于玩家名 而非 UUID
  • 在离线模式或改名环境下要注意数据一致性

⚠️ 线程安全

  • API 应在主线程调用
  • 不要在异步线程中直接操作 PlayerPoints

⚠️ 不要假设返回值一定成功

  • 所有写操作均返回 boolean
  • 必须检查返回值再进行后续逻辑

六、文档定位说明

本文档适用于:

  • 插件中集成 PlayerPoints 点数系统
  • 替代 Vault 以实现轻量级点数逻辑
  • AI / 自动生成插件代码的参考上下文

不适用于:

  • PlayerPoints 插件使用教学
  • 指令、GUI 或 Placeholder 配置

📌 目标:

让你在代码层面对 PlayerPoints 的使用始终“简单、明确、可控”。