From 4741e383a1f6a394b1aa5e1e7cb29a5ac885c784 Mon Sep 17 00:00:00 2001 From: XiaoMoMi <972454774@qq.com> Date: Sun, 10 Sep 2023 03:24:56 +0800 Subject: [PATCH] fix fishing bag --- .../customfishing/api/manager/BagManager.java | 2 +- .../api/manager/CommandManager.java | 4 +- .../api/manager/MarketManager.java | 2 + .../condition/FishingPreparation.java | 2 +- .../CustomFishingPluginImpl.java | 3 +- .../command/CommandManagerImpl.java | 70 +++++++++++++------ .../command/sub/FishingBagCommand.java | 13 ++-- .../mechanic/bag/BagManagerImpl.java | 32 ++++++++- .../mechanic/market/MarketManagerImpl.java | 8 +++ plugin/src/main/resources/market.yml | 2 + .../src/main/resources/messages/english.yml | 1 + 11 files changed, 108 insertions(+), 31 deletions(-) diff --git a/api/src/main/java/net/momirealms/customfishing/api/manager/BagManager.java b/api/src/main/java/net/momirealms/customfishing/api/manager/BagManager.java index a7815987..96d1d9b7 100644 --- a/api/src/main/java/net/momirealms/customfishing/api/manager/BagManager.java +++ b/api/src/main/java/net/momirealms/customfishing/api/manager/BagManager.java @@ -24,7 +24,7 @@ import org.bukkit.inventory.Inventory; import java.util.UUID; public interface BagManager { - boolean isBagEnabled(); + boolean isEnabled(); Inventory getOnlineBagInventory(UUID uuid); diff --git a/api/src/main/java/net/momirealms/customfishing/api/manager/CommandManager.java b/api/src/main/java/net/momirealms/customfishing/api/manager/CommandManager.java index af23d775..975ec5e4 100644 --- a/api/src/main/java/net/momirealms/customfishing/api/manager/CommandManager.java +++ b/api/src/main/java/net/momirealms/customfishing/api/manager/CommandManager.java @@ -19,5 +19,7 @@ package net.momirealms.customfishing.api.manager; public interface CommandManager { - void loadCommands(); + void load(); + + void unload(); } diff --git a/api/src/main/java/net/momirealms/customfishing/api/manager/MarketManager.java b/api/src/main/java/net/momirealms/customfishing/api/manager/MarketManager.java index 0c4a8d9d..57ab8045 100644 --- a/api/src/main/java/net/momirealms/customfishing/api/manager/MarketManager.java +++ b/api/src/main/java/net/momirealms/customfishing/api/manager/MarketManager.java @@ -30,4 +30,6 @@ public interface MarketManager { String getFormula(); double getPrice(float base, float bonus, float size); + + boolean isEnable(); } diff --git a/api/src/main/java/net/momirealms/customfishing/api/mechanic/condition/FishingPreparation.java b/api/src/main/java/net/momirealms/customfishing/api/mechanic/condition/FishingPreparation.java index 293792fa..88347549 100644 --- a/api/src/main/java/net/momirealms/customfishing/api/mechanic/condition/FishingPreparation.java +++ b/api/src/main/java/net/momirealms/customfishing/api/mechanic/condition/FishingPreparation.java @@ -69,7 +69,7 @@ public class FishingPreparation extends Condition { this.baitEffect = baitEffect; } - if (plugin.getBagManager().isBagEnabled()) { + if (plugin.getBagManager().isEnabled()) { Inventory fishingBag = plugin.getBagManager().getOnlineBagInventory(player.getUniqueId()); HashSet uniqueUtils = new HashSet<>(4); if (fishingBag != null) { diff --git a/plugin/src/main/java/net/momirealms/customfishing/CustomFishingPluginImpl.java b/plugin/src/main/java/net/momirealms/customfishing/CustomFishingPluginImpl.java index 595591af..5fa98d0d 100644 --- a/plugin/src/main/java/net/momirealms/customfishing/CustomFishingPluginImpl.java +++ b/plugin/src/main/java/net/momirealms/customfishing/CustomFishingPluginImpl.java @@ -158,7 +158,8 @@ public class CustomFishingPluginImpl extends CustomFishingPlugin { ((StatisticsManagerImpl) this.statisticsManager).load(); ((PlaceholderManagerImpl) this.placeholderManager).unload(); ((PlaceholderManagerImpl) this.placeholderManager).load(); - this.commandManager.loadCommands(); + this.commandManager.unload(); + this.commandManager.load(); } private void loadDependencies() { diff --git a/plugin/src/main/java/net/momirealms/customfishing/command/CommandManagerImpl.java b/plugin/src/main/java/net/momirealms/customfishing/command/CommandManagerImpl.java index 5464397e..1998173f 100644 --- a/plugin/src/main/java/net/momirealms/customfishing/command/CommandManagerImpl.java +++ b/plugin/src/main/java/net/momirealms/customfishing/command/CommandManagerImpl.java @@ -17,18 +17,17 @@ package net.momirealms.customfishing.command; -import dev.jorel.commandapi.CommandAPI; -import dev.jorel.commandapi.CommandAPIBukkitConfig; -import dev.jorel.commandapi.CommandAPICommand; -import dev.jorel.commandapi.CommandPermission; +import dev.jorel.commandapi.*; import dev.jorel.commandapi.arguments.EntitySelectorArgument; import net.momirealms.customfishing.CustomFishingPluginImpl; import net.momirealms.customfishing.adventure.AdventureManagerImpl; import net.momirealms.customfishing.api.CustomFishingPlugin; import net.momirealms.customfishing.api.manager.CommandManager; +import net.momirealms.customfishing.api.util.LogUtils; import net.momirealms.customfishing.command.sub.*; import net.momirealms.customfishing.setting.Locale; import org.bukkit.entity.Player; +import org.bukkit.inventory.Inventory; import java.util.Collection; @@ -42,7 +41,7 @@ public class CommandManagerImpl implements CommandManager { } @Override - public void loadCommands() { + public void load() { new CommandAPICommand("customfishing") .withAliases("cfishing") .withPermission(CommandPermission.OP) @@ -57,18 +56,25 @@ public class CommandManagerImpl implements CommandManager { ) .register(); - new CommandAPICommand("sellfish") - .withPermission("customfishing.sellfish") - .executesPlayer((player, args) -> { - plugin.getMarketManager().openMarketGUI(player); - }) - .register(); + if (plugin.getMarketManager().isEnable()) { + new CommandAPICommand("sellfish") + .withPermission("customfishing.sellfish") + .executesPlayer((player, args) -> { + if (plugin.getMarketManager().isEnable()) + plugin.getMarketManager().openMarketGUI(player); + }) + .register(); + } - if (plugin.getBagManager().isBagEnabled()) { + if (plugin.getBagManager().isEnabled()) { FishingBagCommand.INSTANCE.getBagCommand().register(); } } + @Override + public void unload() { + } + private CommandAPICommand getReloadCommand() { return new CommandAPICommand("reload") .executes((sender, args) -> { @@ -80,17 +86,39 @@ public class CommandManagerImpl implements CommandManager { @SuppressWarnings("unchecked") private CommandAPICommand getMarketCommand() { - return new CommandAPICommand("market").withSubcommand( - new CommandAPICommand("open") - .withArguments(new EntitySelectorArgument.ManyPlayers("player")) - .executes((sender, args) -> { - Collection players = (Collection) args.get("player"); - assert players != null; - for (Player player : players) { - plugin.getMarketManager().openMarketGUI(player); + CommandAPICommand command = new CommandAPICommand("open"); + if (plugin.getMarketManager().isEnable()) { + command.withSubcommand( + new CommandAPICommand("market") + .withArguments(new EntitySelectorArgument.ManyPlayers("player")) + .executes((sender, args) -> { + Collection players = (Collection) args.get("player"); + assert players != null; + for (Player player : players) { + plugin.getMarketManager().openMarketGUI(player); + AdventureManagerImpl.getInstance().sendMessageWithPrefix(sender, Locale.MSG_Market_GUI_Open.replace("{player}", player.getName())); + } + })); + } + if (plugin.getBagManager().isEnabled()) { + command.withSubcommand( + new CommandAPICommand("bag") + .withArguments(new EntitySelectorArgument.ManyPlayers("player")) + .executes((sender, args) -> { + Collection players = (Collection) args.get("player"); + assert players != null; + for (Player player : players) { + Inventory inventory = plugin.getBagManager().getOnlineBagInventory(player.getUniqueId()); + if (inventory != null) { + player.openInventory(inventory); AdventureManagerImpl.getInstance().sendMessageWithPrefix(sender, Locale.MSG_Market_GUI_Open.replace("{player}", player.getName())); + } else { + LogUtils.warn("Player " + player.getName() + "'s bag data has not been loaded."); } - })); + } + })); + } + return command; } private CommandAPICommand getAboutCommand() { diff --git a/plugin/src/main/java/net/momirealms/customfishing/command/sub/FishingBagCommand.java b/plugin/src/main/java/net/momirealms/customfishing/command/sub/FishingBagCommand.java index 17036cfd..28b4b0ee 100644 --- a/plugin/src/main/java/net/momirealms/customfishing/command/sub/FishingBagCommand.java +++ b/plugin/src/main/java/net/momirealms/customfishing/command/sub/FishingBagCommand.java @@ -20,6 +20,7 @@ package net.momirealms.customfishing.command.sub; import dev.jorel.commandapi.CommandAPICommand; import dev.jorel.commandapi.arguments.PlayerArgument; import dev.jorel.commandapi.arguments.UUIDArgument; +import net.momirealms.customfishing.CustomFishingPluginImpl; import net.momirealms.customfishing.adventure.AdventureManagerImpl; import net.momirealms.customfishing.api.CustomFishingPlugin; import net.momirealms.customfishing.api.data.user.OfflineUser; @@ -40,11 +41,13 @@ public class FishingBagCommand { .withPermission("fishingbag.user") .withSubcommands(getEditOnlineCommand(), getEditOfflineCommand()) .executesPlayer(((player, args) -> { - var inv = CustomFishingPlugin.get().getBagManager().getOnlineBagInventory(player.getUniqueId()); - if (inv != null) { - player.openInventory(inv); - } else { - AdventureManagerImpl.getInstance().sendMessageWithPrefix(player, Locale.MSG_Data_Not_Loaded); + if (CustomFishingPlugin.get().getBagManager().isEnabled()) { + var inv = CustomFishingPlugin.get().getBagManager().getOnlineBagInventory(player.getUniqueId()); + if (inv != null) { + player.openInventory(inv); + } else { + AdventureManagerImpl.getInstance().sendMessageWithPrefix(player, Locale.MSG_Data_Not_Loaded); + } } })); } diff --git a/plugin/src/main/java/net/momirealms/customfishing/mechanic/bag/BagManagerImpl.java b/plugin/src/main/java/net/momirealms/customfishing/mechanic/bag/BagManagerImpl.java index b6d2daaa..2d5b8ad7 100644 --- a/plugin/src/main/java/net/momirealms/customfishing/mechanic/bag/BagManagerImpl.java +++ b/plugin/src/main/java/net/momirealms/customfishing/mechanic/bag/BagManagerImpl.java @@ -22,15 +22,19 @@ import net.momirealms.customfishing.api.CustomFishingPlugin; import net.momirealms.customfishing.api.data.user.OfflineUser; import net.momirealms.customfishing.api.manager.BagManager; import net.momirealms.customfishing.api.mechanic.bag.FishingBagHolder; +import net.momirealms.customfishing.api.mechanic.condition.Condition; import net.momirealms.customfishing.setting.Config; import org.bukkit.Bukkit; +import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.HandlerList; import org.bukkit.event.Listener; +import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.event.inventory.InventoryCloseEvent; import org.bukkit.event.player.PlayerQuitEvent; import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; import java.util.HashMap; import java.util.UUID; @@ -46,7 +50,7 @@ public class BagManagerImpl implements BagManager, Listener { } @Override - public boolean isBagEnabled() { + public boolean isEnabled() { return Config.enableFishingBag; } @@ -89,6 +93,32 @@ public class BagManagerImpl implements BagManager, Listener { plugin.getStorageManager().saveUserData(offlineUser, true); } + @EventHandler + public void onInvClick(InventoryClickEvent event) { + if (event.isCancelled()) + return; + if (!(event.getInventory().getHolder() instanceof FishingBagHolder)) + return; + Inventory clicked = event.getClickedInventory(); + if (clicked != event.getWhoClicked().getInventory()) + return; + ItemStack clickedItem = event.getCurrentItem(); + if (clickedItem == null || clickedItem.getType() == Material.AIR) + return; + if (Config.bagWhiteListItems.contains(clickedItem.getType())) + return; + String id = plugin.getItemManager().getAnyItemID(clickedItem); + if (plugin.getEffectManager().getEffect("rod", id) != null) + return; + if (plugin.getEffectManager().getEffect("bait", id) != null) + return; + if (plugin.getEffectManager().getEffect("util", id) != null) + return; + if (Config.bagStoreLoots && plugin.getLootManager().getLoot(id) != null) + return; + event.setCancelled(true); + } + @EventHandler public void onQuit(PlayerQuitEvent event) { OfflineUser offlineUser = tempEditMap.remove(event.getPlayer().getUniqueId()); diff --git a/plugin/src/main/java/net/momirealms/customfishing/mechanic/market/MarketManagerImpl.java b/plugin/src/main/java/net/momirealms/customfishing/mechanic/market/MarketManagerImpl.java index 1bda94df..7d65b415 100644 --- a/plugin/src/main/java/net/momirealms/customfishing/mechanic/market/MarketManagerImpl.java +++ b/plugin/src/main/java/net/momirealms/customfishing/mechanic/market/MarketManagerImpl.java @@ -69,6 +69,7 @@ public class MarketManagerImpl implements MarketManager, Listener { private double earningLimit; private boolean allowItemWithNoPrice; private final ConcurrentHashMap marketGUIMap; + private boolean enable; public MarketManagerImpl(CustomFishingPlugin plugin) { this.plugin = plugin; @@ -94,6 +95,8 @@ public class MarketManagerImpl implements MarketManager, Listener { private void loadConfig() { YamlConfiguration config = plugin.getConfig("market.yml"); + this.enable = config.getBoolean("enable", true); + if (!this.enable) return; this.layout = config.getStringList("layout").toArray(new String[0]); this.title = config.getString("title", "market.title"); this.formula = config.getString("price-formula", "{base} + {bonus} * {size}"); @@ -355,4 +358,9 @@ public class MarketManagerImpl implements MarketManager, Listener { public BuildableItem getFunctionIconDenyBuilder() { return functionIconDenyBuilder; } + + @Override + public boolean isEnable() { + return enable; + } } diff --git a/plugin/src/main/resources/market.yml b/plugin/src/main/resources/market.yml index 1c9e8166..ff8dac14 100644 --- a/plugin/src/main/resources/market.yml +++ b/plugin/src/main/resources/market.yml @@ -1,6 +1,8 @@ # Container title title: 'Fish Market' +enable: true + limitation: enable: true earnings: 10000 diff --git a/plugin/src/main/resources/messages/english.yml b/plugin/src/main/resources/messages/english.yml index 56a9e8b0..db8bb503 100644 --- a/plugin/src/main/resources/messages/english.yml +++ b/plugin/src/main/resources/messages/english.yml @@ -26,6 +26,7 @@ messages: never-played: 'That player has never played the server. You can''t edit a non existent player''s fishing bag.' data-not-loaded: 'Your data has not been loaded yet. Try rejoining the server. If the problem still occurs, contact the server administrator.' open-market-gui: 'Successfully opened the market gui for {player}' + open-fishingbag-gui: 'Successfully opened the fishing bag for {player}' format-day: 'd' format-hour: 'h' format-minute: 'm'