From ebaaf4dcee0450b547830d3364928ab7d28ab027 Mon Sep 17 00:00:00 2001 From: pastelnata Date: Thu, 25 Apr 2024 01:50:33 +0200 Subject: [PATCH] Fix police can drop essential items --- .../java/net/tiagofar78/prisonescape/Events.java | 9 +++++++-- .../prisonescape/game/PrisonEscapeGame.java | 16 +++++++++++++--- .../prisonescape/game/PrisonEscapePlayer.java | 10 ++++++++-- .../managers/MessageLanguageManager.java | 6 ++++++ src/main/resources/languages/english.yml | 1 + 5 files changed, 35 insertions(+), 7 deletions(-) diff --git a/src/main/java/net/tiagofar78/prisonescape/Events.java b/src/main/java/net/tiagofar78/prisonescape/Events.java index 9b9a149c..ad6193f3 100644 --- a/src/main/java/net/tiagofar78/prisonescape/Events.java +++ b/src/main/java/net/tiagofar78/prisonescape/Events.java @@ -166,7 +166,9 @@ public void playerClickInventory(InventoryClickEvent e) { if (e.getAction() == InventoryAction.DROP_ALL_SLOT || e.getAction() == InventoryAction.DROP_ONE_SLOT) { int slot = e.getSlot(); - game.playerDropItem(player.getName(), slot); + if (game.playerDropItem(player.getName(), slot) == -1) { + e.setCancelled(true); + } return; } @@ -317,7 +319,10 @@ public void onPlayerDropItem(PlayerDropItemEvent e) { Player player = e.getPlayer(); int slot = player.getInventory().getHeldItemSlot(); - game.playerDropItem(player.getName(), slot); + int return_code = game.playerDropItem(player.getName(), slot); + if (return_code == -1) { + e.setCancelled(true); + } } } diff --git a/src/main/java/net/tiagofar78/prisonescape/game/PrisonEscapeGame.java b/src/main/java/net/tiagofar78/prisonescape/game/PrisonEscapeGame.java index 58db7cb0..5dc6223f 100644 --- a/src/main/java/net/tiagofar78/prisonescape/game/PrisonEscapeGame.java +++ b/src/main/java/net/tiagofar78/prisonescape/game/PrisonEscapeGame.java @@ -154,7 +154,6 @@ public int playerRejoin(String playerName) { ); } - return 0; } @@ -698,9 +697,20 @@ private void playerOpenVault(PrisonEscapePlayer player, int vaultIndex, Item ite vault.open(player); } - public void playerDropItem(String playerName, int slot) { + /** + * @return 0 if success
+ * -1 if cannot drop that item + */ + public int playerDropItem(String playerName, int slot) { PrisonEscapePlayer player = getPrisonEscapePlayer(playerName); - player.removeItem(slot); + + int return_code = player.removeItem(slot); + if (return_code == -1) { + MessageLanguageManager messages = MessageLanguageManager.getInstanceByPlayer(playerName); + BukkitMessageSender.sendChatMessage(player, messages.getCannotDropThatItemMessage()); + } + + return return_code; } private void policeSearchVault(PrisonEscapePlayer player, Vault vault, MessageLanguageManager messagesPolice) { diff --git a/src/main/java/net/tiagofar78/prisonescape/game/PrisonEscapePlayer.java b/src/main/java/net/tiagofar78/prisonescape/game/PrisonEscapePlayer.java index b787f349..e5d93a12 100644 --- a/src/main/java/net/tiagofar78/prisonescape/game/PrisonEscapePlayer.java +++ b/src/main/java/net/tiagofar78/prisonescape/game/PrisonEscapePlayer.java @@ -122,13 +122,19 @@ public void setItem(int index, Item item) { BukkitMenu.setItem(_name, index, item); } - public void removeItem(int slot) { + + /** + * @return 0 if success
+ * -1 if cannot remove item + */ + public int removeItem(int slot) { int index = BukkitMenu.convertToIndexPlayerInventory(slot); if (index == -1) { - return; + return -1; } _inventory.set(index, new NullItem()); + return 0; } public boolean hasIllegalItems() { diff --git a/src/main/java/net/tiagofar78/prisonescape/managers/MessageLanguageManager.java b/src/main/java/net/tiagofar78/prisonescape/managers/MessageLanguageManager.java index 16b57d28..07150b22 100644 --- a/src/main/java/net/tiagofar78/prisonescape/managers/MessageLanguageManager.java +++ b/src/main/java/net/tiagofar78/prisonescape/managers/MessageLanguageManager.java @@ -107,6 +107,7 @@ private static String getPlayerLanguage(String playerName) { private String _reachedItemLimitMessage; private String _notEnoughMoneyMessage; private String _successfullyBoughtItemMessage; + private String _cannotDropThatItemMessage; // ######################################## // # Announcements # @@ -230,6 +231,7 @@ private MessageLanguageManager(String language) { _reachedItemLimitMessage = createMessage(messages.getString(warningPath + "ReachedItemLimit")); _notEnoughMoneyMessage = createMessage(messages.getString(warningPath + "NotEnoughMoney")); _successfullyBoughtItemMessage = createMessage(messages.getString(warningPath + "SuccessfullyBoughtItem")); + _cannotDropThatItemMessage = createMessage(messages.getString(warningPath + "CannotDropThatItem")); String announcementPath = messagePath + "Announcements."; _gameStartingAnnouncementMessage = createMessage(messages.getStringList(announcementPath + "GameStarting")); @@ -462,6 +464,10 @@ public String getSuccessfullyBoughtItemMessage(int balance) { return _successfullyBoughtItemMessage.replace("{BALANCE}", Integer.toString(balance)); } + public String getCannotDropThatItemMessage() { + return _cannotDropThatItemMessage; + } + // ######################################## // # Announcements # // ######################################## diff --git a/src/main/resources/languages/english.yml b/src/main/resources/languages/english.yml index 066ea8ae..a7502754 100644 --- a/src/main/resources/languages/english.yml +++ b/src/main/resources/languages/english.yml @@ -108,6 +108,7 @@ Messages: ReachedItemLimit: "&cSorry, you've already reached the maximum limit for this item." NotEnoughMoney: "&cYou do not have enough money to buy this item." SuccessfullyBoughtItem: "&aSuccessfully bought item. Your current balance is: {BALANCE}." + CannotDropThatItem: "&cYou cannot drop that item." Announcements: GameStarting: - "&6==================================="