API
2024年10月20日大约 2 分钟
ItemManager
加载物品
加载由你的配置文件传递的物品,通常我们可以把物品配置上传云端
例如自己的管理系统 或者是OSS镜像 来实现多服同步配置文件
java:
/**
 * 加载物品列表
 * 注意事项:
 * 1. 不可以覆盖其他group的key值
 * 2. 不会被SX重载时清除
 * 3. 每次加载清空上次的存储
 * 4. 覆盖会清空之前的值
 *
 * @param group     组名
 * @param directory 文件夹
 */
public void loadItem(String group,File directory)
public void loadItem(String group,ConfigurationSection...configs)
public void loadItem(String group,Map<String, ConfigurationSection> configs)获取一个物品
java:
/**
 * 获取一个物品
 *
 * @param itemName  物品名
 * @param player 玩家
 * @param args 额外参数(局部变量) K,V,K,V 形式传递
 *
 */
public ItemStack getItem(String itemName,@Nonnull Player player,Object...args)
//用法:
        SXItem.getItemManager().getItem("item_name",player,"key","value")存入物品
分为 SXITEM 模式 (Default)
无损 Import 模式 (Import) java:
/**
 * 保存物品
 *
 * @param key  编号
 * @param item 物品
 * @param type 类型 Default / Import
 * @Return boolean
 * @throws IOException IOException
 */
public boolean saveItem(String key,ItemStack item,String type)throws IOException数字ID兼容
老东西们 这是适合1.7.10遗老的玩具 数字ID转换
java:
/**
 * 获取物品材质
 *
 * @param key 索引
 * @Return 材质
 */
public static Material getMaterial(String key)Event
MM死亡后物品放入背包事件
java:
class SXItemMythicMobsGiveToInventoryEvent {
// 物品抽象
private final IGenerator item;
// 获得物品的玩家
private final Player player;
// 怪物类型
private final String mobType;
// 物品实例
private final ItemStack itemStack;
// 是否取消
private boolean cancelled;
}插件重载事件
java:
SXItemReloadEvent物品更新与生成
java:
SXItemSpawnEvent // 物品生成
SXItemUpdateEvent // 物品更新例子 兼容ItemsAdder 来自拓展工具包
kotlin:
@SubscribeEvent(priority = EventPriority.LOWEST)
fun itemsAdder(event: SXItemSpawnEvent) {
    val items = event.ig.config?.getString("ItemsAdder") ?: return
    val ia = CustomStack.getInstance(items)?.itemStack ?: return
    val customData = ia.itemMeta?.customModelData ?: return
    val item = event.item ?: return
    item.modifyMeta<ItemMeta> {
        setCustomModelData(customData)
    }
    val old = item.itemMeta?.clone() ?: return
    item.type = ia.type
    item.itemMeta = old
}
@SubscribeEvent(priority = EventPriority.LOWEST)
fun itemsAdder(event: SXItemUpdateEvent) {
    val items = event.ig.config?.getString("ItemsAdder") ?: return
    val ia = CustomStack.getInstance(items)?.itemStack ?: return
    val customData = ia.itemMeta?.customModelData ?: return
    val item = event.item ?: return
    item.modifyMeta<ItemMeta> {
        setCustomModelData(customData)
    }
    val old = item.itemMeta?.clone() ?: return
    item.type = ia.type
    item.itemMeta = old
}不被保护的NBT是不会被继承的 通常为Lore MetaData
 自定义NBT可以通过保护的手段来不被更新
 但是原版的NBT 比如 Lore就要通过这种方式
 或者是可以把lore放入NBT 然后Lore中进行<s>引用
 也可以实现动态跟进