LogoArcartX Doc

ArcartXLinkManager:第三方桥接

第三方插件桥接API

ArcartXLinkManager

  • 第三方桥接管理器允许你为ArcartX注册自定义的属性系统、经济系统、物品系统和PlaceholderAPI变量。
  • ArcartXLinkManager 是一个 Kotlin object 单例。在 Kotlin 中直接以 ArcartXLinkManager.xxx() 调用;在 Java 中通过 ArcartXLinkManager.INSTANCE.xxx() 调用。

属性系统

registerAttributeProvider(attributeProvider)

  • 注册一个属性提供者
  • 参数attributeProvider: AttributeProvider — 属性提供者实例
  • 返回值:无
  • 调用示例
ArcartXLinkManager.INSTANCE.registerAttributeProvider(new MyAttributeProvider());

getAttributeProvider(name)

  • 获取指定名称的属性提供者
  • 参数name: String — 提供者标识
  • 返回值AttributeProvider? — 未找到时为 null

AttributeProvider 接口

public interface AttributeProvider {
    String getIdentifier();
    void addAttribute(LivingEntity livingEntity, String sourceID, List<String> list);
    void addAttribute(LivingEntity livingEntity, String sourceID, ItemStack itemStack);
    void removeAttribute(LivingEntity livingEntity, String sourceID);
}

经济系统

registerEconomyProvider(economyProvider)

  • 注册一个经济提供者
  • 参数economyProvider: EconomyProvider — 经济提供者实例
  • 返回值:无
  • 调用示例
ArcartXLinkManager.INSTANCE.registerEconomyProvider(new MyEconomyProvider());

getEconomyProvider(name)

  • 获取指定名称的经济提供者
  • 参数name: String — 提供者标识
  • 返回值EconomyProvider? — 未找到时为 null

EconomyProvider 接口

public interface EconomyProvider {
    String getIdentifier();
    String getDisplayName(); // 具有默认实现,可不重写
    boolean addEconomy(Player player, double amount);
    double getEconomy(Player player);
    boolean takeEconomy(Player player, double amount);
}

Rondo 内置兼容

服务端安装并启用 Rondo 时,ArcartX 会在启动阶段为 Rondo 当前注册的每一种货币创建一个经济提供者。提供者标识就是 Rondo 的规范小写货币 ID:

EconomyProvider gold = ArcartXLinkManager.INSTANCE.getEconomyProvider("gold");
  • 展示名默认读取 Rondo 的货币 display-nameplugins/ArcartX/link/economy.yml 中的同名配置仍可覆盖。
  • 存入和扣除分别调用 Rondo 的原子 depositwithdraw API,交易来源记录为 arcartx:link
  • EconomyProvider 使用 double,Rondo 会再按对应货币的小数位规则归一金额;NaN 和无穷大金额会被拒绝。
  • 新增或移除货币 ID 后需要完整重启服务端,使 ArcartX 重新建立提供者列表。只调整已有 ID 的展示名或余额规则时,Rondo 当前配置会在后续调用中生效。

物品系统

registerItemProvider(itemProvider)

  • 注册一个物品提供者
  • 参数itemProvider: ItemProvider — 物品提供者实例
  • 返回值:无
  • 调用示例
ArcartXLinkManager.INSTANCE.registerItemProvider(new MyItemProvider());

getItemProvider(name)

  • 获取指定名称的物品提供者
  • 参数name: String — 提供者标识
  • 返回值ItemProvider? — 未找到时为 null

ItemProvider 接口

public interface ItemProvider {
    String getIdentifier();
    ItemStack generateItemStack(String id); // 可能返回 null
}

Overture 内置兼容

服务端同时安装并启用 Overture 时,ArcartX 会注册标识严格为 Overture 的物品提供者:

val provider = ArcartXLinkManager.getItemProvider("Overture")
val item = provider?.generateItemStack("example_sword")
ItemProvider provider = ArcartXLinkManager.INSTANCE.getItemProvider("Overture");
ItemStack item = provider == null ? null : provider.generateItemStack("example_sword");
  • 名称查找区分大小写,必须写成 Overture
  • 未知物品 ID 或 Overture 构建取消时返回 null
  • ItemProvider 只有物品 ID 参数,因此该桥接按 player = null 生成。需要玩家参与条件展示或渲染时,应直接调用 OvertureAPI.generateItem(id, player)
  • 提供者只负责生成物品;ArcartX 特殊 Tag 的 Overture 配置方式见 Overture 兼容

PlaceholderAPI

registerPlaceholder(placeholder)

  • 注册一个ArcartX PlaceholderAPI变量
  • 参数placeholder: AXPlaceholder — 变量实例
  • 返回值:无
  • 调用示例
ArcartXLinkManager.INSTANCE.registerPlaceholder(new MyPlaceholder());

需要服务端安装PlaceholderAPI插件才能使用此功能。

unregisterPlaceholder(placeholder)

  • 注销一个PlaceholderAPI变量
  • 参数placeholder: AXPlaceholder — 变量实例
  • 返回值:无
  • 调用示例
ArcartXLinkManager.INSTANCE.unregisterPlaceholder(myPlaceholder);

AXPlaceholder 抽象类

  • 继承此类并使用 @Placeholder 注解标记方法即可注册变量
  • 方法参数为 PlaceholderContext,返回值为 String
  • 使用 @PlaceholderArgs 注解声明参数
public class MyPlaceholder extends AXPlaceholder {
    @Override
    public String getIdentifier() {
        return "myplugin";
    }
 
    @Placeholder("level")
    public String getLevel(PlaceholderContext context) {
        // %arcartx_myplugin_level%
        return String.valueOf(getPlayerLevel(context.getPlayer()));
    }
 
    @Placeholder("stat")
    @PlaceholderArgs({"statName"})
    public String getStat(PlaceholderContext context) {
        // %arcartx_myplugin_stat_<statName>%
        String statName = context.getArg(0);
        return getStatValue(context.getPlayer(), statName);
    }
}