Doc ID: SIRC-074

ASkyBlock API 开发知识文档

ASkyBlock 插件的编程接口

Overview

ASkyBlock API 开发参考文档

概述

ASkyBlockAPI 是 ASkyBlock 插件的编程接口,位于 com.wasteofplastic.askyblock 包中。该API提供了一套相对稳定的方法供其他插件使用,避免直接依赖内部类导致代码破坏。

核心API方法

1. 获取API实例

// 获取ASkyBlockAPI实例
ASkyBlockAPI api = ASkyBlockAPI.getInstance();

2. 岛屿信息查询

2.1 检查玩家是否有岛屿

boolean hasIsland = api.hasIsland(playerUUID);
// 返回:true - 玩家拥有岛屿,false - 玩家没有岛屿

2.2 获取岛屿位置

Location islandLocation = api.getIslandLocation(playerUUID);
// 返回:玩家岛屿的位置(团队岛屿或个人岛屿)

2.3 获取岛屿等级

long islandLevel = api.getLongIslandLevel(playerUUID);
// 返回:玩家岛屿的等级(长整型)
// 注意:getIslandLevel() 方法已弃用,建议使用 getLongIslandLevel()

2.4 获取岛屿名称

String islandName = api.getIslandName(ownerUUID);
// 返回:岛屿的名称

3. 岛屿对象操作

3.1 获取岛屿对象

Island island = api.getIslandOwnedBy(playerUUID);
// 返回:玩家拥有的岛屿对象副本

3.2 根据位置获取岛屿

Island island = api.getIslandAt(location);
// 返回:该位置的岛屿对象,如果不存在则返回null

4. 团队管理

4.1 获取团队队长

UUID teamLeader = api.getTeamLeader(playerUUID);
// 返回:玩家的团队队长UUID

4.2 获取团队成员列表

List<UUID> teamMembers = api.getTeamMembers(playerUUID);
// 返回:玩家的团队成员UUID列表

4.3 检查是否为队长

boolean isLeader = api.isLeader(playerUUID);
// 返回:true - 玩家是队长,false - 玩家不是队长

5. 位置检查

5.1 检查位置是否在岛屿上

boolean onIsland = api.islandAtLocation(location);
// 返回:true - 位置在岛屿区域内,false - 不在岛屿上

5.2 检查玩家是否在岛屿上

boolean playerOnIsland = api.playerIsOnIsland(player);
// 返回:true - 玩家在自己的岛屿、团队岛屿或合作岛屿上

5.3 检查是否在出生点

boolean atSpawn = api.isAtSpawn(location);
// 返回:true - 位置在出生点,false - 不在出生点

6. 世界信息

6.1 获取岛屿世界

World islandWorld = api.getIslandWorld();
// 返回:岛屿主世界

6.2 获取下界世界

World netherWorld = api.getNetherWorld();
// 返回:下界世界

7. 挑战系统

7.1 获取所有挑战

LinkedHashMap<String, List<String>> allChallenges = api.getAllChallenges();
// 返回:所有挑战的映射表

7.2 获取挑战状态

Map<String, Boolean> challengeStatus = api.getChallengeStatus(playerUUID);
// 返回:玩家挑战完成状态的映射表

8. 传送点管理

8.1 获取玩家传送点

Location warpLocation = api.getWarp(playerUUID);
// 返回:玩家传送点的位置

8.2 列出所有传送点

Set<UUID> allWarps = api.listWarps();
// 返回:所有已知传送点的UUID集合

9. 岛屿设置

9.1 设置岛屿生物群系

boolean success = api.setIslandBiome(islandLocation, biomeType);
// 返回:true - 设置成功,false - 设置失败

9.2 设置岛屿名称

api.setIslandName(ownerUUID, "新岛屿名称");
// 设置岛屿名称

9.3 设置岛屿等级

api.setIslandLevel(playerUUID, 100);
// 设置玩家的岛屿等级

10. 重置次数管理

10.1 获取剩余重置次数

int resetsLeft = api.getResetsLeft(playerUUID);
// 返回:玩家剩余的岛屿重置次数

10.2 设置重置次数

api.setResetsLeft(playerUUID, 5);
// 设置玩家的重置次数

11. 消息系统

11.1 设置离线消息

boolean messageSet = api.setMessage(playerUUID, "欢迎回来!");
// 返回:true - 消息设置成功,false - 设置失败
// 玩家下次登录时会收到此消息

11.2 发送消息给离线队友

api.tellOfflineTeam(playerUUID, "团队消息");
// 向团队中所有离线玩家发送消息

12. 排行榜

12.1 获取前十排行榜

Map<UUID, Long> topTen = api.getLongTopTen();
// 返回:前十岛屿等级的映射表(UUID -> 等级)
// 注意:getTopTen() 方法已弃用,建议使用 getLongTopTen()

13. 合作岛屿

13.1 检查是否为合作岛屿

boolean isCoop = api.isCoop(player);
// 返回:true - 玩家在合作岛屿中,false - 不在

13.2 获取合作岛屿列表

Set<Location> coopIslands = api.getCoopIslands(player);
// 返回:玩家参与的所有合作岛屿位置集合

14. 岛屿数量统计

14.1 获取岛屿总数

int islandCount = api.getIslandCount();
// 返回:服务器中的岛屿总数

15. 传送点面板更新

15.1 强制更新传送点面板

api.updateWarpPanel();
// 强制更新传送点面板并触发传送点列表事件

使用示例

基本使用

import com.wasteofplastic.askyblock.ASkyBlockAPI;

public class MyPlugin {
    private ASkyBlockAPI api;
    
    public void onEnable() {
        api = ASkyBlockAPI.getInstance();
        
        // 检查玩家是否有岛屿
        UUID playerUUID = player.getUniqueId();
        if (api.hasIsland(playerUUID)) {
            // 获取岛屿位置
            Location islandLoc = api.getIslandLocation(playerUUID);
            player.sendMessage("你的岛屿在: " + islandLoc);
            
            // 获取岛屿等级
            long level = api.getLongIslandLevel(playerUUID);
            player.sendMessage("岛屿等级: " + level);
        }
    }
}

团队管理示例

public void checkTeamInfo(UUID playerUUID) {
    // 检查是否在团队中
    if (api.inTeam(playerUUID)) {
        // 获取团队队长
        UUID leader = api.getTeamLeader(playerUUID);
        
        // 获取团队成员
        List<UUID> members = api.getTeamMembers(playerUUID);
        
        // 检查是否为队长
        boolean isLeader = api.isLeader(playerUUID);
        
        // 处理团队信息...
    }
}

注意事项

  1. API稳定性:建议只使用ASkyBlockAPI类中的方法,避免直接调用其他内部类
  2. 数据类型:岛屿等级现在使用long类型,已弃用的int类型方法可能不准确
  3. 线程安全:API方法通常不是线程安全的,建议在主线程调用
  4. 空值检查:某些方法可能返回null,需要进行空值检查
  5. 玩家状态:某些方法需要玩家在线,某些可以处理离线玩家

包依赖

  • 主包:com.wasteofplastic.askyblock
  • 岛屿对象:com.wasteofplastic.askyblock.Island
  • 需要Bukkit/Spigot API支持

这个文档涵盖了ASkyBlock插件最常用的15个核心API方法,为其他AI开发提供了完整的参考。