开发教程
信息
请注意,UltimateShop 并非传统的商店插件。它可以动态显示商店商品与价格(甚至细分到每种货币/物品的数量),这与其他一个 ItemStack 对应一个价格的商店插件有很大区别。
获取商店对象
Java
ConfigManager.configmanager.shopConfigs.get(shopID);
获取物品对象
Java
ObjectShop shop = ConfigManager.configmanager.shopConfigs.get(shopID);
if (shop == null) {
return;
}
ObjectItem item = shop.getProduct("TEST");
List<ObjectItem> items = shop.getProductList();
发起购买物品请求
Java
BuyProductMethod.startBuy(Inventory inventory, String shop, String product, Player player, boolean quick, boolean test, int multi);
inventory
为 Bukkit 界面对象,对于玩家的界面,请使用player.getInventory()
方法。shop
为商店 ID。product
为物品 ID。quick
表示是否在购买后发送消息(若在config.yml
中启用send-message-after-buy
选项,则消息仍会发送)。test
表示是否从玩家处取走物品,若你不知道玩家是否有足够的物品,请填入true
。multi
为单次交易次数,默认为1
。
发起出售物品请求
Java
SellProductMethod.startSell(Inventory inventory, String shop, String product, Player player, boolean quick, boolean test, boolean ableMaxSell, int multi);
ableMaxSell
表示在multi
给定次数交易无法完成时,是否改为玩家能够出售的最大次数。适用于全部出售功能。
获取玩家缓存对象
Java
CacheManager.cacheManager.playerCacheMap.get(player);
能够获取玩家的购买次数、出售次数等数据。
获取服务器缓存对象
Java
CacheManager.cacheManager.serverCache;
从 ItemStack 获取价格
Java
ShopHelper.getBuyPrices(items, player, 1);
ShopHelper.getSellPrices(items, player, 1);
获取 Vault 货币价格
Java
Map<AbstractSingleThing, BigDecimal> resultMap = takeResult.getResultMap();
for (AbstractSingleThing singleThing : resultMap.keySet()) {
if (singleThing.getSingleSection().getString("economy-plugin", "").equals("Vault") {
return "这个商品的价格设置包含 Vault 货币";
}
}
GiveResult
信息
此方法无视购买/出售限量、条件检查等限制。如果你需要插件检查是否能购买或出售这个物品,你需要使用 BuyProductMethod SellProductMethod 方法。
Java
int sellUseTimes = ShopHelper.getSellUseTimes(item, player);
GiveResult giveResult = ShopHelper.getSellPrices(items, player, 1);
giveResult.give(sellUseTimes, 1, player, 1.01);
TakeResult
信息
此方法无视购买/出售限量、条件检查等限制。如果你需要插件检查是否能购买或出售这个物品,你需要使用 BuyProductMethod SellProductMethod 方法。
Java
int buyUseTimes = ShopHelper.getBuyUseTimes(item, player);
TakeResult takeResult = ShopHelper.getBuyPrices(items, player, 1);
if (!takeResult.getResultBoolean) return "金额不足";
takeResult.take(sellUseTimes, 1, player.getInventory(), player);
从商品获取 TakeResult
java
ObjectItem item = takeResult.getThings().getItem();