Skip to content

开发教程

信息

请注意,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();

贡献者

页面历史