Doc ID:
SIRC-065
Shopkeepers API 文档
Shopkeepers API 文档
Overview
Shopkeepers API 文档
包名
com.nisovin.shopkeepers.api
核心类
ShopkeepersAPI – 提供对Shopkeepers插件方法的静态访问器
API 启用状态检查
isEnabled()
检查API是否已启用
- 返回:
boolean– 如果启用返回true - 注意: 在插件启动早期调用时,即使返回
true,API可能仍不安全使用
getPlugin()
获取ShopkeepersPlugin实例
- 返回:
ShopkeepersPlugin– 插件实例,不为null - 异常:
IllegalStateException– 如果API当前未启用
权限相关方法
hasCreatePermission(Player player)
检查玩家是否有创建商店的权限
- 参数:
player– 玩家对象 - 返回:
boolean– 如果玩家可以创建商店返回true
商店类型相关
getShopTypeRegistry()
获取商店类型注册表
- 返回:
ShopTypesRegistry<?>– 商店类型注册表
getDefaultShopTypes()
获取默认商店类型
- 返回:
DefaultShopTypes– 默认商店类型
商店对象类型相关
getShopObjectTypeRegistry()
获取商店对象类型注册表
- 返回:
ShopObjectTypesRegistry<?>– 商店对象类型注册表
getDefaultShopObjectTypes()
获取默认商店对象类型
- 返回:
DefaultShopObjectTypes– 默认商店对象类型
UI相关
getUIRegistry()
获取UI注册表
- 返回:
UIRegistry<?>– UI注册表
getDefaultUITypes()
获取默认UI类型
- 返回:
DefaultUITypes– 默认UI类型
商店管理员注册表
getShopkeeperRegistry()
获取商店管理员注册表
- 返回:
ShopkeeperRegistry– 商店管理员注册表
存储相关
getShopkeeperStorage()
获取商店管理员存储
- 返回:
ShopkeeperStorage– 商店管理员存储
物品更新
updateItems()
为Shopkeepers插件存储的每个物品调用UpdateItemEvent
- 功能:
- 为每个已加载的商店管理员调用
Shopkeeper.updateItems() - 为配置中的物品调用事件
- 不调用交易历史中物品的事件
- 可能中止当前打开的UI会话
- 如果物品被更新,自动保存配置并触发存储保存
- 为每个已加载的商店管理员调用
- 返回:
int– 更新的物品数量
商店创建
handleShopkeeperCreation(ShopCreationData shopCreationData)
以与玩家相同的方式创建和生成新的商店管理员
- 参数:
shopCreationData– 包含创建商店所需参数(生成位置、对象类型等)的商店创建数据 - 返回:
Shopkeeper– 新的商店管理员,如果创建不成功则返回null - 注意: 考虑可能影响创建者或所有者的限制,并在创建失败时向创建者发送消息
工厂方法(已弃用)
createPriceOffer(ItemStack item, int price)
创建新的PriceOffer
- 参数:
item– 交易的物品,不能为null或空price– 价格,必须为正数
- 返回:
PriceOffer– 新的报价 - 弃用: 使用
PriceOffer.create(ItemStack, int)
createPriceOffer(UnmodifiableItemStack item, int price)
创建新的PriceOffer(不可变版本)
- 参数:
item– 交易的物品,不能为null或空price– 价格,必须为正数
- 返回:
PriceOffer– 新的报价 - 弃用: 使用
PriceOffer.create(UnmodifiableItemStack, int)
createTradeOffer(ItemStack resultItem, ItemStack item1, ItemStack item2)
创建新的TradeOffer
- 参数:
resultItem– 结果物品,不能为空item1– 第一个购买物品,不能为空item2– 第二个购买物品,可以为空
- 返回:
TradeOffer– 新的交易报价 - 弃用: 使用
TradeOffer.create(ItemStack, ItemStack, ItemStack)
createTradeOffer(UnmodifiableItemStack resultItem, UnmodifiableItemStack item1, UnmodifiableItemStack item2)
创建新的TradeOffer(不可变版本)
- 参数:
resultItem– 结果物品,不能为空item1– 第一个购买物品,不能为空item2– 第二个购买物品,可以为空
- 返回:
TradeOffer– 新的交易报价 - 弃用: 使用
TradeOffer.create(UnmodifiableItemStack, UnmodifiableItemStack, UnmodifiableItemStack)
createBookOffer(String bookTitle, int price)
创建新的BookOffer
- 参数:
bookTitle– 书籍标题,不能为null或空price– 价格,必须为正数
- 返回:
BookOffer– 新的书籍报价 - 弃用: 使用
BookOffer.create(String, int)
导入的包和类
Bukkit相关
org.bukkit.entity.Playerorg.bukkit.inventory.ItemStackorg.bukkit.plugin.Plugin
Shopkeepers API内部包
com.nisovin.shopkeepers.api.events.UpdateItemEventcom.nisovin.shopkeepers.api.internal.InternalShopkeepersAPIcom.nisovin.shopkeepers.api.shopkeeper.DefaultShopTypescom.nisovin.shopkeepers.api.shopkeeper.ShopCreationDatacom.nisovin.shopkeepers.api.shopkeeper.ShopTypesRegistrycom.nisovin.shopkeepers.api.shopkeeper.Shopkeepercom.nisovin.shopkeepers.api.shopkeeper.ShopkeeperRegistrycom.nisovin.shopkeepers.api.shopkeeper.offers.BookOffercom.nisovin.shopkeepers.api.shopkeeper.offers.PriceOffercom.nisovin.shopkeepers.api.shopkeeper.offers.TradeOffercom.nisovin.shopkeepers.api.shopobjects.DefaultShopObjectTypescom.nisovin.shopkeepers.api.shopobjects.ShopObjectTypesRegistrycom.nisovin.shopkeepers.api.storage.ShopkeeperStoragecom.nisovin.shopkeepers.api.ui.DefaultUITypescom.nisovin.shopkeepers.api.ui.UIRegistrycom.nisovin.shopkeepers.api.util.UnmodifiableItemStack
使用示例
// 检查API是否启用
if (ShopkeepersAPI.isEnabled()) {
// 获取插件实例
ShopkeepersPlugin plugin = ShopkeepersAPI.getPlugin();
// 检查玩家权限
Player player = ...;
boolean canCreate = ShopkeepersAPI.hasCreatePermission(player);
// 获取商店管理员注册表
ShopkeeperRegistry registry = ShopkeepersAPI.getShopkeeperRegistry();
// 更新物品
int updatedItems = ShopkeepersAPI.updateItems();
}
注意事项
- API访问器只能在API启用时使用
- 工厂方法已弃用,建议使用相应类的静态create方法
- 物品更新方法可能会中止当前打开的UI会话
- 商店创建方法会考虑所有限制并向创建者发送反馈消息