From 43c20a9e5ee84967f6390e1ebb69767af559b10d Mon Sep 17 00:00:00 2001 From: CarmJos Date: Tue, 28 Dec 2021 20:02:05 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E6=88=90=E7=95=8C=E9=9D=A2=E9=83=A8?= =?UTF-8?q?=E5=88=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cc/carm/plugin/ultradepository/Main.java | 3 +- .../configuration/PluginMessages.java | 10 +++++- .../depository/DepositoryItem.java | 6 +++- .../configuration/message/ConfigMessage.java | 17 +++++---- .../message/ConfigMessageList.java | 14 +++----- .../plugin/ultradepository/data/UserData.java | 4 +-- .../ultradepository/hooker/PAPIExpansion.java | 6 ++-- .../listener/CollectListener.java | 6 ++-- .../manager/DepositoryManager.java | 6 ++++ .../ultradepository/ui/DepositoryGUI.java | 36 +++++++++++-------- .../ultradepository/ui/SellItemGUI.java | 6 ++-- src/main/resources/messages.yml | 5 +++ 12 files changed, 75 insertions(+), 44 deletions(-) diff --git a/src/main/java/cc/carm/plugin/ultradepository/Main.java b/src/main/java/cc/carm/plugin/ultradepository/Main.java index 54f1005..49baeeb 100644 --- a/src/main/java/cc/carm/plugin/ultradepository/Main.java +++ b/src/main/java/cc/carm/plugin/ultradepository/Main.java @@ -127,11 +127,10 @@ public class Main extends JavaPlugin { return economyManager; } - public static DepositoryManager getBackpackManager() { + public static DepositoryManager getDepositoryManager() { return depositoryManager; } - /** * 注册监听器 * diff --git a/src/main/java/cc/carm/plugin/ultradepository/configuration/PluginMessages.java b/src/main/java/cc/carm/plugin/ultradepository/configuration/PluginMessages.java index a116b49..e43fc8a 100644 --- a/src/main/java/cc/carm/plugin/ultradepository/configuration/PluginMessages.java +++ b/src/main/java/cc/carm/plugin/ultradepository/configuration/PluginMessages.java @@ -9,8 +9,16 @@ public class PluginMessages { "item-sold", new String[0], new String[]{ "%(item)", "%(amount)", "%(money)" }); + + public static final ConfigMessageList PICKUP = new ConfigMessageList( + "item-pickup", new String[0], new String[]{ + "%(item)", "%(amount)" + }); + public static final ConfigMessageList COLLECTED = new ConfigMessageList( "item-collected", new String[0], new String[]{ - "%(item)", "%(amount)", "%(backpack)" + "%(item)", "%(amount)", "%(depository)" }); + + public static final ConfigMessageList NO_SPACE = new ConfigMessageList("no-space"); } diff --git a/src/main/java/cc/carm/plugin/ultradepository/configuration/depository/DepositoryItem.java b/src/main/java/cc/carm/plugin/ultradepository/configuration/depository/DepositoryItem.java index 9b1694a..f1c625b 100644 --- a/src/main/java/cc/carm/plugin/ultradepository/configuration/depository/DepositoryItem.java +++ b/src/main/java/cc/carm/plugin/ultradepository/configuration/depository/DepositoryItem.java @@ -66,8 +66,12 @@ public class DepositoryItem { return lore; } + public ItemStack getRawItem(int amount) { + return new ItemStack(getMaterial(), amount, (short) getData()); + } + public ItemStack getDisplayItem() { - ItemStackFactory factory = new ItemStackFactory(getMaterial(), 1, getData()); + ItemStackFactory factory = new ItemStackFactory(getRawItem(1)); if (getName() != null) factory.setDisplayName(getName()); if (getLore() != null) factory.setLore(getLore()); return factory.toItemStack(); diff --git a/src/main/java/cc/carm/plugin/ultradepository/configuration/message/ConfigMessage.java b/src/main/java/cc/carm/plugin/ultradepository/configuration/message/ConfigMessage.java index be6a4c6..6c45296 100644 --- a/src/main/java/cc/carm/plugin/ultradepository/configuration/message/ConfigMessage.java +++ b/src/main/java/cc/carm/plugin/ultradepository/configuration/message/ConfigMessage.java @@ -1,9 +1,9 @@ package cc.carm.plugin.ultradepository.configuration.message; -import cc.carm.plugin.ultradepository.util.MessageUtil; import cc.carm.plugin.ultradepository.configuration.values.ConfigValue; import cc.carm.plugin.ultradepository.manager.ConfigManager; +import cc.carm.plugin.ultradepository.util.MessageUtil; import org.bukkit.command.CommandSender; import java.util.Collections; @@ -40,14 +40,19 @@ public class ConfigMessage extends ConfigValue { } public void send(CommandSender sender) { - MessageUtil.send(sender, get()); - } - - public void sendWithPlaceholders(CommandSender sender) { MessageUtil.sendWithPlaceholders(sender, get()); } - public void sendWithPlaceholders(CommandSender sender, String[] params, Object[] values) { + public void send(CommandSender sender, Object[] values) { + if (messageParams != null) { + send(sender, messageParams, values); + } else { + send(sender, new String[0], new Object[0]); + } + + } + + public void send(CommandSender sender, String[] params, Object[] values) { MessageUtil.sendWithPlaceholders(sender, Collections.singletonList(get()), params, values); } diff --git a/src/main/java/cc/carm/plugin/ultradepository/configuration/message/ConfigMessageList.java b/src/main/java/cc/carm/plugin/ultradepository/configuration/message/ConfigMessageList.java index c55e3c4..b5f96ec 100644 --- a/src/main/java/cc/carm/plugin/ultradepository/configuration/message/ConfigMessageList.java +++ b/src/main/java/cc/carm/plugin/ultradepository/configuration/message/ConfigMessageList.java @@ -1,9 +1,9 @@ package cc.carm.plugin.ultradepository.configuration.message; -import cc.carm.plugin.ultradepository.util.MessageUtil; import cc.carm.plugin.ultradepository.configuration.values.ConfigValueList; import cc.carm.plugin.ultradepository.manager.ConfigManager; +import cc.carm.plugin.ultradepository.util.MessageUtil; import org.bukkit.command.CommandSender; import org.jetbrains.annotations.Nullable; @@ -43,22 +43,18 @@ public class ConfigMessageList extends ConfigValueList { } public void send(@Nullable CommandSender sender) { - MessageUtil.send(sender, get()); - } - - public void sendWithPlaceholders(@Nullable CommandSender sender) { MessageUtil.sendWithPlaceholders(sender, get()); } - public void sendWithPlaceholders(@Nullable CommandSender sender, Object[] values) { + public void send(@Nullable CommandSender sender, Object[] values) { if (messageParams != null) { - sendWithPlaceholders(sender, messageParams, values); + send(sender, messageParams, values); } else { - sendWithPlaceholders(sender); + send(sender); } } - public void sendWithPlaceholders(@Nullable CommandSender sender, String[] params, Object[] values) { + public void send(@Nullable CommandSender sender, String[] params, Object[] values) { MessageUtil.sendWithPlaceholders(sender, get(), params, values); } } diff --git a/src/main/java/cc/carm/plugin/ultradepository/data/UserData.java b/src/main/java/cc/carm/plugin/ultradepository/data/UserData.java index 8eee8a8..61aa7ee 100644 --- a/src/main/java/cc/carm/plugin/ultradepository/data/UserData.java +++ b/src/main/java/cc/carm/plugin/ultradepository/data/UserData.java @@ -40,7 +40,7 @@ public class UserData { public @Nullable DepositoryData getBackpackData(String backpackID) { - Depository configuration = Main.getBackpackManager().getDepository(backpackID); + Depository configuration = Main.getDepositoryManager().getDepository(backpackID); if (configuration == null) return null; return getBackpackData(configuration); } @@ -61,7 +61,7 @@ public class UserData { public @Nullable ItemData getItemData(@NotNull String backpackID, @NotNull String typeID) { DepositoryData data = getBackpackData(backpackID); if (data == null) return null; - if (!Main.getBackpackManager().hasItem(backpackID, typeID)) return null; + if (!Main.getDepositoryManager().hasItem(backpackID, typeID)) return null; ItemData itemData = data.getItemData(typeID); if (itemData == null) { itemData = ItemData.emptyItemData(); diff --git a/src/main/java/cc/carm/plugin/ultradepository/hooker/PAPIExpansion.java b/src/main/java/cc/carm/plugin/ultradepository/hooker/PAPIExpansion.java index 851e277..d71edc3 100644 --- a/src/main/java/cc/carm/plugin/ultradepository/hooker/PAPIExpansion.java +++ b/src/main/java/cc/carm/plugin/ultradepository/hooker/PAPIExpansion.java @@ -77,20 +77,20 @@ public class PAPIExpansion extends PlaceholderExpansion { Integer sold = Main.getUserManager().getData(player).getItemSold(args[2], args[3]); if (sold == null) return "仓库或物品不存在"; - Integer limit = Main.getBackpackManager().getItemSellLimit(args[2], args[3]); + Integer limit = Main.getDepositoryManager().getItemSellLimit(args[2], args[3]); if (limit == null) return "仓库或物品不存在"; return Integer.toString(limit - sold); } case "limit": { if (args.length < 3) return "参数不足"; - Integer limit = Main.getBackpackManager().getItemSellLimit(args[2], args[3]); + Integer limit = Main.getDepositoryManager().getItemSellLimit(args[2], args[3]); if (limit == null) return "仓库或物品不存在"; else return limit.toString(); } case "price": { if (args.length < 3) return "参数不足"; - Double price = Main.getBackpackManager().getItemPrice(args[2], args[3]); + Double price = Main.getDepositoryManager().getItemPrice(args[2], args[3]); if (price == null) return "仓库或物品不存在"; else return price.toString(); } diff --git a/src/main/java/cc/carm/plugin/ultradepository/listener/CollectListener.java b/src/main/java/cc/carm/plugin/ultradepository/listener/CollectListener.java index 2f65c84..21d4ba2 100644 --- a/src/main/java/cc/carm/plugin/ultradepository/listener/CollectListener.java +++ b/src/main/java/cc/carm/plugin/ultradepository/listener/CollectListener.java @@ -38,7 +38,7 @@ public class CollectListener implements Listener { if (drops.isEmpty()) return; event.setDropItems(false); - Collection finalDrops = Main.getBackpackManager().collectItem(player, drops); + Collection finalDrops = Main.getDepositoryManager().collectItem(player, drops); finalDrops.forEach(finalDrop -> world.dropItemNaturally(location, finalDrop)); } @@ -51,7 +51,7 @@ public class CollectListener implements Listener { if (player == null) return; if (!Main.getUserManager().isCollectEnabled(player)) return; - Collection finalDrops = Main.getBackpackManager().collectItem(player, event.getDrops()); + Collection finalDrops = Main.getDepositoryManager().collectItem(player, event.getDrops()); event.getDrops().clear(); event.getDrops().addAll(finalDrops); } @@ -69,7 +69,7 @@ public class CollectListener implements Listener { if (thrower != null && thrower.equals(player.getUniqueId())) return; ItemStack item = event.getItem().getItemStack(); - if (Main.getBackpackManager().collectItem(player, item)) { + if (Main.getDepositoryManager().collectItem(player, item)) { event.setCancelled(true); event.getItem().remove(); } diff --git a/src/main/java/cc/carm/plugin/ultradepository/manager/DepositoryManager.java b/src/main/java/cc/carm/plugin/ultradepository/manager/DepositoryManager.java index 72a4e08..7b0a92a 100644 --- a/src/main/java/cc/carm/plugin/ultradepository/manager/DepositoryManager.java +++ b/src/main/java/cc/carm/plugin/ultradepository/manager/DepositoryManager.java @@ -8,6 +8,7 @@ import com.google.common.collect.HashMultimap; import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -88,6 +89,11 @@ public class DepositoryManager { public boolean collectItem(Player player, ItemStack item) { if (!Main.getUserManager().isCollectEnabled(player)) return false; + ItemMeta meta = item.getItemMeta(); + if (meta != null && (meta.hasLore() || meta.hasDisplayName() || meta.hasEnchants())) { + // 不收集有特殊属性的物品 + return false; + } Set usableDepositories = getPlayerUsableDepository(player, item); if (usableDepositories.size() < 1) return false; Depository depository = usableDepositories.stream().findFirst().orElse(null); diff --git a/src/main/java/cc/carm/plugin/ultradepository/ui/DepositoryGUI.java b/src/main/java/cc/carm/plugin/ultradepository/ui/DepositoryGUI.java index 8ae5b83..ba24d6b 100644 --- a/src/main/java/cc/carm/plugin/ultradepository/ui/DepositoryGUI.java +++ b/src/main/java/cc/carm/plugin/ultradepository/ui/DepositoryGUI.java @@ -2,8 +2,9 @@ package cc.carm.plugin.ultradepository.ui; import cc.carm.plugin.ultradepository.Main; import cc.carm.plugin.ultradepository.configuration.PluginConfig; -import cc.carm.plugin.ultradepository.configuration.depository.DepositoryItem; +import cc.carm.plugin.ultradepository.configuration.PluginMessages; import cc.carm.plugin.ultradepository.configuration.depository.Depository; +import cc.carm.plugin.ultradepository.configuration.depository.DepositoryItem; import cc.carm.plugin.ultradepository.data.ItemData; import cc.carm.plugin.ultradepository.data.UserData; import cc.carm.plugin.ultradepository.util.ItemStackFactory; @@ -20,28 +21,27 @@ public class DepositoryGUI extends GUI { Player player; UserData userData; - Depository configuration; + Depository depository; - public DepositoryGUI(Player player, Depository configuration) { - super(configuration.getGUIConfiguration().getGUIType(), configuration.getGUIConfiguration().getTitle()); + public DepositoryGUI(Player player, Depository depository) { + super(depository.getGUIConfiguration().getGUIType(), depository.getGUIConfiguration().getTitle()); this.player = player; this.userData = Main.getUserManager().getData(player); - this.configuration = configuration; - + this.depository = depository; + setupItems(); } public void setupItems() { - configuration.getGUIConfiguration().setupItems(this); - for (DepositoryItem depositoryItem : configuration.getItems().values()) { - setItem(depositoryItem.getSlot(), new GUIItem(depositoryItem.getDisplayItem())); - } + depository.getGUIConfiguration().setupItems(this); + depository.getItems().values().forEach(depositoryItem -> setItem(depositoryItem.getSlot(), createGUIItem(depositoryItem))); } + private GUIItem createGUIItem(DepositoryItem item) { ItemStackFactory factory = new ItemStackFactory(item.getDisplayItem()); - ItemData itemData = userData.getItemData(configuration, item); + ItemData itemData = userData.getItemData(depository, item); List additionalLore = PluginConfig.General.ADDITIONAL_LORE.get(player, new Object[]{ item.getName(), itemData.getAmount(), item.getPrice(), itemData.getSold(), item.getLimit() }); @@ -56,14 +56,18 @@ public class DepositoryGUI extends GUI { public void onClick(ClickType type) { if (itemData.getAmount() < 1) return; if (type == ClickType.LEFT) { - SellItemGUI.open(player, userData, itemData, configuration, item); + SellItemGUI.open(player, userData, itemData, depository, item); } else if (type == ClickType.RIGHT) { if (hasEmptySlot(player)) { int pickupAmount = Math.min(itemData.getAmount(), item.getMaterial().getMaxStackSize()); - + player.getInventory().addItem(item.getRawItem(pickupAmount)); + PluginMessages.PICKUP.send(player, new Object[]{ + item.getName(), pickupAmount + }); } else { - + PluginMessages.NO_SPACE.send(player); } + player.closeInventory(); } } }; @@ -75,5 +79,9 @@ public class DepositoryGUI extends GUI { .anyMatch(i -> i == null || i.getType() == Material.AIR); } + public static void open(Player player, Depository depository) { + DepositoryGUI gui = new DepositoryGUI(player, depository); + gui.openGUI(player); + } } diff --git a/src/main/java/cc/carm/plugin/ultradepository/ui/SellItemGUI.java b/src/main/java/cc/carm/plugin/ultradepository/ui/SellItemGUI.java index 7baf47a..313e9e0 100644 --- a/src/main/java/cc/carm/plugin/ultradepository/ui/SellItemGUI.java +++ b/src/main/java/cc/carm/plugin/ultradepository/ui/SellItemGUI.java @@ -1,13 +1,13 @@ package cc.carm.plugin.ultradepository.ui; import cc.carm.plugin.ultradepository.Main; -import cc.carm.plugin.ultradepository.data.ItemData; -import cc.carm.plugin.ultradepository.util.ItemStackFactory; import cc.carm.plugin.ultradepository.configuration.PluginConfig; import cc.carm.plugin.ultradepository.configuration.PluginMessages; import cc.carm.plugin.ultradepository.configuration.depository.Depository; import cc.carm.plugin.ultradepository.configuration.depository.DepositoryItem; +import cc.carm.plugin.ultradepository.data.ItemData; import cc.carm.plugin.ultradepository.data.UserData; +import cc.carm.plugin.ultradepository.util.ItemStackFactory; import cc.carm.plugin.ultradepository.util.gui.GUI; import cc.carm.plugin.ultradepository.util.gui.GUIItem; import cc.carm.plugin.ultradepository.util.gui.GUIType; @@ -127,7 +127,7 @@ public class SellItemGUI extends GUI { int amount = Math.min(getCurrentAmount(), Math.min(getRemainAmount(), getSellLimit() - getSoldAmount())); if (amount > 0) { double money = Main.getEconomyManager().sell(player, getItemPrice(), amount); - PluginMessages.SOLD.sendWithPlaceholders(player, new Object[]{ + PluginMessages.SOLD.send(player, new Object[]{ getItemName(), amount, money }); } diff --git a/src/main/resources/messages.yml b/src/main/resources/messages.yml index 68f2886..bd46ffe 100644 --- a/src/main/resources/messages.yml +++ b/src/main/resources/messages.yml @@ -1,6 +1,11 @@ item-collected: - "&f您收集了 &e%(item)&7x%(amount) &f,已自动放入到您的 &6%(depository) &f中。" + +item-pickup: + - "&f您取出了 &e%(item)&7x%(amount) &f,已自动放入到您的背包中。" + + item-sold: - "&f您出售了 &e%(item)&7x%(amount) &f,共赚取 &6%(money) &f元。"