From 49c70243f8896e64653bdaaf8069d2fdcfbcea1d Mon Sep 17 00:00:00 2001 From: mfnalex <1122571+mfnalex@users.noreply.github.com> Date: Thu, 15 Apr 2021 19:27:56 +0200 Subject: [PATCH] 9.6.0 release --- CHANGELOG.md | 7 ++ .../ChestSort/ChestSortAdminCommand.java | 80 +++++++++++++++++++ .../ChestSort/ChestSortListener.java | 27 ++++++- .../ChestSort/ChestSortMessages.java | 9 ++- .../ChestSort/ChestSortPlayerSetting.java | 9 ++- .../jeff_media/ChestSort/ChestSortPlugin.java | 49 ++++++++---- .../ChestSort/ChestSortSettingsGUI.java | 12 ++- src/main/resources/config.yml | 25 ++++++ src/main/resources/plugin.yml | 5 ++ 9 files changed, 199 insertions(+), 24 deletions(-) create mode 100644 src/main/java/de/jeff_media/ChestSort/ChestSortAdminCommand.java diff --git a/CHANGELOG.md b/CHANGELOG.md index 06f04de..43bc2a0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## 9.6.0 +- Added hotkey to sort chests/barrels etc. by shiftclicking them + - Can be configured per player using "/sort hotkeys" + - By default it's allowed but disabled +- Added command "/chestsortadmin reset " to reset hotkey settings for specific players +- Old YML PlayerData is automatically converted to the new NBT storage + ## 9.5.2 - PlayerData is stored as NBT data instead of using separate files in 1.14.4 and later diff --git a/src/main/java/de/jeff_media/ChestSort/ChestSortAdminCommand.java b/src/main/java/de/jeff_media/ChestSort/ChestSortAdminCommand.java new file mode 100644 index 0000000..dce55fe --- /dev/null +++ b/src/main/java/de/jeff_media/ChestSort/ChestSortAdminCommand.java @@ -0,0 +1,80 @@ +package de.jeff_media.ChestSort; + +import de.jeff_media.jefflib.NBTAPI; +import org.bukkit.Bukkit; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.jetbrains.annotations.NotNull; + +public class ChestSortAdminCommand implements CommandExecutor { + + private final ChestSortPlugin plugin; + + public ChestSortAdminCommand(ChestSortPlugin plugin) { + this.plugin = plugin; + } + + @Override + public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String alias, @NotNull String[] args) { + + if(!sender.hasPermission("chestsort.admin")) { + sender.sendMessage(command.getPermissionMessage()); + return true; + } + + if(args.length==0) { + sender.sendMessage(new String[] { + "Available admin commands:", + "reset -- Resets a player's hotkey settings" + }); + return true; + } + + switch(args[0].toLowerCase()) { + case "reset": + reset(sender, args); + break; + default: + sender.sendMessage("Unknown command: "+args[0]); + break; + } + + return true; + } + + private void reset(CommandSender sender, String[] args) { + if(args.length!=2) { + sender.sendMessage("Usage: /chestsortadmin reset "); + return; + } + + Player player = Bukkit.getPlayer(args[1]); + if(player == null) { + sender.sendMessage("Could not find player "+args[1]); + return; + } + + plugin.unregisterPlayer(player); + + String[] tags = new String[] { + "sortingEnabled", + "invSortingEnabled", + "leftClick", + "rightClick", + "shiftClick", + "doubleClick", + "middleClick", + "shiftRightClick", + "leftClickOutside", + "hasSeenMessage" + }; + + for(String nbtTag : tags) { + NBTAPI.removeNBT(player,nbtTag); + } + + sender.sendMessage("Reset hotkey settings for player "+player.getName()); + } +} diff --git a/src/main/java/de/jeff_media/ChestSort/ChestSortListener.java b/src/main/java/de/jeff_media/ChestSort/ChestSortListener.java index d9d1036..93bfe48 100644 --- a/src/main/java/de/jeff_media/ChestSort/ChestSortListener.java +++ b/src/main/java/de/jeff_media/ChestSort/ChestSortListener.java @@ -2,25 +2,30 @@ package de.jeff_media.ChestSort; import de.jeff_media.ChestSort.hooks.*; import de.jeff_media.ChestSort.utils.LlamaUtils; +import de.jeff_media.ChestSortAPI.ChestSortAPI; import de.jeff_media.ChestSortAPI.ChestSortEvent; import de.jeff_media.ChestSortAPI.ISortable; +import net.md_5.bungee.api.ChatMessageType; +import net.md_5.bungee.api.chat.TextComponent; import org.bukkit.Bukkit; import org.bukkit.GameMode; import org.bukkit.Material; -import org.bukkit.block.Chest; -import org.bukkit.block.DoubleChest; +import org.bukkit.block.*; import org.bukkit.entity.ChestedHorse; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; +import org.bukkit.event.block.Action; import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.event.inventory.InventoryCloseEvent; import org.bukkit.event.inventory.InventoryOpenEvent; import org.bukkit.event.inventory.InventoryType; import org.bukkit.event.inventory.InventoryType.SlotType; +import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.event.player.PlayerQuitEvent; +import org.bukkit.inventory.EquipmentSlot; import org.bukkit.inventory.Inventory; import org.bukkit.inventory.InventoryHolder; import org.bukkit.inventory.ItemStack; @@ -44,6 +49,23 @@ public class ChestSortListener implements Listener { this.goldenCratesHook = new GoldenCratesHook(plugin); } + @EventHandler + public void onLeftClickChest(PlayerInteractEvent event) { + if(!event.getPlayer().hasPermission("chestsort.use")) return; + if(event.getHand() != EquipmentSlot.HAND) return; + if(event.getAction() != Action.LEFT_CLICK_BLOCK) return; + if(!plugin.getConfig().getBoolean("allow-left-click-to-sort")) return; + Block clickedBlock = event.getClickedBlock(); + if(!(clickedBlock.getState() instanceof Container)) return; + plugin.registerPlayerIfNeeded(event.getPlayer()); + ChestSortPlayerSetting playerSetting = plugin.getPlayerSetting(event.getPlayer()); + if(!playerSetting.leftClickOutside) return; + Container containerState = (Container) clickedBlock.getState(); + Inventory inventory = containerState.getInventory(); + plugin.getAPI().sortInventory(inventory); + event.getPlayer().spigot().sendMessage(ChatMessageType.ACTION_BAR, TextComponent.fromLegacyText(plugin.messages.MSG_CONTAINER_SORTED)); + } + @EventHandler public void onPlayerJoin(PlayerJoinEvent event) { @@ -403,7 +425,6 @@ public class ChestSortListener implements Listener { if (!isAPICall && (event.getClickedInventory().getHolder() != null && event.getClickedInventory().getHolder() == p && event.getClickedInventory() != p.getInventory())) { - if(plugin.debug) System.out.println("10"); return; } diff --git a/src/main/java/de/jeff_media/ChestSort/ChestSortMessages.java b/src/main/java/de/jeff_media/ChestSort/ChestSortMessages.java index 2b8715a..e9e4fb5 100644 --- a/src/main/java/de/jeff_media/ChestSort/ChestSortMessages.java +++ b/src/main/java/de/jeff_media/ChestSort/ChestSortMessages.java @@ -3,8 +3,9 @@ package de.jeff_media.ChestSort; import org.bukkit.ChatColor; public class ChestSortMessages { + final String MSG_GUI_LEFTCLICKOUTSIDE, MSG_CONTAINER_SORTED; - // Messages can be customized in the config.yml + // Messages can be customized in the config.yml // To avoid problems with missing messages in the config, the default messages // are // hardcoded. @@ -25,6 +26,9 @@ public class ChestSortMessages { ChestSortMessages(ChestSortPlugin plugin) { this.plugin = plugin; + MSG_CONTAINER_SORTED = ChatColor.translateAlternateColorCodes('&', plugin.getConfig() + .getString("message-container-sorted","&aContainer sorted!")); + MSG_ACTIVATED = ChatColor.translateAlternateColorCodes('&', plugin.getConfig() .getString("message-sorting-enabled", "&7Automatic chest sorting has been &aenabled&7.&r")); @@ -66,6 +70,9 @@ public class ChestSortMessages { MSG_GUI_DOUBLECLICK = ChatColor.translateAlternateColorCodes('&', plugin.getConfig() .getString("message-gui-double-click","Double-Click")); + + MSG_GUI_LEFTCLICKOUTSIDE = ChatColor.translateAlternateColorCodes('&', plugin.getConfig() + .getString("message-gui-left-click-outside", "Left-Click")); MSG_GUI_SHIFTRIGHTCLICK = ChatColor.translateAlternateColorCodes('&', plugin.getConfig() .getString("message-gui-shift-right-click","Shift + Right-Click")); diff --git a/src/main/java/de/jeff_media/ChestSort/ChestSortPlayerSetting.java b/src/main/java/de/jeff_media/ChestSort/ChestSortPlayerSetting.java index 58fd06c..b99984a 100644 --- a/src/main/java/de/jeff_media/ChestSort/ChestSortPlayerSetting.java +++ b/src/main/java/de/jeff_media/ChestSort/ChestSortPlayerSetting.java @@ -17,7 +17,7 @@ public class ChestSortPlayerSetting { public boolean invSortingEnabled; // Hotkey settings - boolean middleClick, shiftClick, doubleClick, shiftRightClick, leftClick, rightClick; + boolean middleClick, shiftClick, doubleClick, shiftRightClick, leftClick, rightClick, leftClickOutside; Inventory guiInventory = null; @@ -33,7 +33,7 @@ public class ChestSortPlayerSetting { NONE, RIGHT_CLICK, LEFT_CLICK } - ChestSortPlayerSetting(boolean sortingEnabled, boolean invSortingEnabled, boolean middleClick, boolean shiftClick, boolean doubleClick, boolean shiftRightClick, boolean leftClick, boolean rightClick, boolean changed) { + ChestSortPlayerSetting(boolean sortingEnabled, boolean invSortingEnabled, boolean middleClick, boolean shiftClick, boolean doubleClick, boolean shiftRightClick, boolean leftClick, boolean rightClick, boolean leftCLickOutside, boolean changed) { this.sortingEnabled = sortingEnabled; this.middleClick = middleClick; this.shiftClick = shiftClick; @@ -42,6 +42,7 @@ public class ChestSortPlayerSetting { this.invSortingEnabled = invSortingEnabled; this.leftClick = leftClick; this.rightClick = rightClick; + this.leftClickOutside = leftCLickOutside; this.changed = changed; } @@ -75,6 +76,10 @@ public class ChestSortPlayerSetting { shiftRightClick = !shiftRightClick; changed = true; } + void toggleLeftClickOutside() { + leftClickOutside = !leftClickOutside; + changed = true; + } void toggleLeftClick() { leftClick = !leftClick; changed = true; diff --git a/src/main/java/de/jeff_media/ChestSort/ChestSortPlugin.java b/src/main/java/de/jeff_media/ChestSort/ChestSortPlugin.java index 33b4e27..4945d9f 100644 --- a/src/main/java/de/jeff_media/ChestSort/ChestSortPlugin.java +++ b/src/main/java/de/jeff_media/ChestSort/ChestSortPlugin.java @@ -285,6 +285,7 @@ public class ChestSortPlugin extends JavaPlugin implements de.jeff_media.ChestSo ChestSortInvSortCommand invsortCommandExecutor = new ChestSortInvSortCommand(this); this.getCommand("invsort").setExecutor(invsortCommandExecutor); this.getCommand("invsort").setTabCompleter(tabCompleter); + this.getCommand("chestsortadmin").setExecutor(new ChestSortAdminCommand(this)); if (verbose) { getLogger().info("Use permissions: " + getConfig().getBoolean("use-permissions")); @@ -431,6 +432,7 @@ public class ChestSortPlugin extends JavaPlugin implements de.jeff_media.ChestSo p.getUniqueId().toString() + ".yml"); YamlConfiguration playerConfig = YamlConfiguration.loadConfiguration(playerFile); + playerConfig.addDefault("sortingEnabled", getConfig().getBoolean("sorting-enabled-by-default")); playerConfig.addDefault("invSortingEnabled", getConfig().getBoolean("inv-sorting-enabled-by-default")); playerConfig.addDefault("middleClick", getConfig().getBoolean("sorting-hotkeys.middle-click")); playerConfig.addDefault("shiftClick", getConfig().getBoolean("sorting-hotkeys.shift-click")); @@ -438,6 +440,7 @@ public class ChestSortPlugin extends JavaPlugin implements de.jeff_media.ChestSo playerConfig.addDefault("shiftRightClick", getConfig().getBoolean("sorting-hotkeys.shift-right-click")); playerConfig.addDefault("leftClick", getConfig().getBoolean("additional-hotkeys.left-click")); playerConfig.addDefault("rightClick", getConfig().getBoolean("additional-hotkeys.right-click")); + playerConfig.addDefault("leftClickOutside", getConfig().getBoolean("left-click-to-sort-enabled-by-default")); boolean activeForThisPlayer; boolean invActiveForThisPlayer; @@ -447,28 +450,34 @@ public class ChestSortPlugin extends JavaPlugin implements de.jeff_media.ChestSo boolean shiftRightClick; boolean leftClick; boolean rightClick; - boolean changed = false; + boolean leftClickFromOutside; + boolean changed; - if (!playerFile.exists()) { + if (playerFile.exists() || VersionUtil.getServerBukkitVersion().isLowerThan(VersionUtil.v1_14_4_R01)) { // If the player settings file does not exist for this player, set it to the // default value - activeForThisPlayer = getConfig().getBoolean("sorting-enabled-by-default"); - invActiveForThisPlayer = getConfig().getBoolean("inv-sorting-enabled-by-default"); - middleClick = getConfig().getBoolean("sorting-hotkeys.middle-click"); - shiftClick = getConfig().getBoolean("sorting-hotkeys.shift-click"); - doubleClick = getConfig().getBoolean("sorting-hotkeys.double-click"); - shiftRightClick = getConfig().getBoolean("sorting-hotkeys.shift-right-click"); - leftClick = getConfig().getBoolean("additional-hotkeys.left-click"); - rightClick = getConfig().getBoolean("additional-hotkeys.right-click"); + activeForThisPlayer = playerConfig.getBoolean("sortingEnabled"); + invActiveForThisPlayer = playerConfig.getBoolean("invSortingEnabled"); + middleClick = playerConfig.getBoolean("middleClick"); + shiftClick = playerConfig.getBoolean("shiftClick"); + doubleClick = playerConfig.getBoolean("doubleClick"); + shiftRightClick = playerConfig.getBoolean("shiftRightClick"); + leftClickFromOutside = playerConfig.getBoolean("leftClickOutside"); + leftClick = playerConfig.getBoolean("leftClick"); + rightClick = playerConfig.getBoolean("rightClick"); - if (debug) { - getLogger().info("Player " + p.getName() + " does not have player settings yet, using default values."); - } - - // Because this is new a file, we have to save it on shutdown/disconnect changed = true; + + if(VersionUtil.getServerBukkitVersion().isHigherThanOrEqualTo(VersionUtil.v1_14_4_R01)) { + if (playerFile.delete()) { + this.getLogger().info("Converted old .yml playerdata file to NBT tags for player " + p.getName()); + } else { + this.getLogger().warning("Could not remove old playerdata .yml file for player " + p.getName()); + } + } } else { // If the file exists, check if the player has sorting enabled + // NBT Values activeForThisPlayer = Boolean.parseBoolean(NBTAPI.getNBT(p, "sortingEnabled", String.valueOf(playerConfig.getBoolean("sortingEnabled")))); invActiveForThisPlayer = Boolean.parseBoolean(NBTAPI.getNBT(p, "invSortingEnabled", String.valueOf(playerConfig.getBoolean("invSortingEnabled", getConfig().getBoolean("inv-sorting-enabled-by-default"))))); middleClick = Boolean.parseBoolean(NBTAPI.getNBT(p, "middleClick", String.valueOf(playerConfig.getBoolean("middleClick")))); @@ -477,10 +486,12 @@ public class ChestSortPlugin extends JavaPlugin implements de.jeff_media.ChestSo shiftRightClick = Boolean.parseBoolean(NBTAPI.getNBT(p, "shiftRightClick", String.valueOf(playerConfig.getBoolean("shiftRightClick")))); leftClick = Boolean.parseBoolean(NBTAPI.getNBT(p, "leftClick", String.valueOf(playerConfig.getBoolean("leftClick", getConfig().getBoolean("additional-hotkeys.left-click"))))); rightClick = Boolean.parseBoolean(NBTAPI.getNBT(p, "rightClick", String.valueOf(playerConfig.getBoolean("rightClick", getConfig().getBoolean("additional-hotkeys.right-click"))))); - playerFile.delete(); + leftClickFromOutside = Boolean.parseBoolean(NBTAPI.getNBT(p, "leftClickOutside", String.valueOf(playerConfig.getBoolean("leftClickOutside", getConfig().getBoolean("left-click-to-sort-enabled-by-default"))))); + + changed = true; } - ChestSortPlayerSetting newSettings = new ChestSortPlayerSetting(activeForThisPlayer, invActiveForThisPlayer, middleClick, shiftClick, doubleClick, shiftRightClick, leftClick, rightClick, changed); + ChestSortPlayerSetting newSettings = new ChestSortPlayerSetting(activeForThisPlayer, invActiveForThisPlayer, middleClick, shiftClick, doubleClick, shiftRightClick, leftClick, rightClick, leftClickFromOutside, changed); // when "show-message-again-after-logout" is enabled, we don't care if the // player already saw the message @@ -581,6 +592,8 @@ public class ChestSortPlugin extends JavaPlugin implements de.jeff_media.ChestSo getConfig().addDefault("use-permissions", true); getConfig().addDefault("allow-automatic-sorting", true); getConfig().addDefault("allow-automatic-inventory-sorting", true); + getConfig().addDefault("allow-left-click-to-sort",true); + getConfig().addDefault("left-click-to-sort-enabled-by-default", false); getConfig().addDefault("sorting-enabled-by-default", false); getConfig().addDefault("inv-sorting-enabled-by-default", false); getConfig().addDefault("show-message-when-using-chest", true); @@ -683,6 +696,7 @@ public class ChestSortPlugin extends JavaPlugin implements de.jeff_media.ChestSo NBTAPI.addNBT(p, "shiftRightClick", String.valueOf(setting.shiftRightClick)); NBTAPI.addNBT(p, "leftClick", String.valueOf(setting.leftClick)); NBTAPI.addNBT(p, "rightClick", String.valueOf(setting.rightClick)); + NBTAPI.addNBT(p, "leftClickOutside", String.valueOf(setting.leftClickOutside)); } else { File playerFile = new File(getDataFolder() + File.separator + "playerdata", @@ -697,6 +711,7 @@ public class ChestSortPlugin extends JavaPlugin implements de.jeff_media.ChestSo playerConfig.set("shiftRightClick", setting.shiftRightClick); playerConfig.set("leftClick", setting.leftClick); playerConfig.set("rightClick", setting.rightClick); + playerConfig.set("leftClickOutside", setting.leftClickOutside); try { // Only saved if the config has been changed if (setting.changed) { diff --git a/src/main/java/de/jeff_media/ChestSort/ChestSortSettingsGUI.java b/src/main/java/de/jeff_media/ChestSort/ChestSortSettingsGUI.java index fb7d892..3d22df4 100644 --- a/src/main/java/de/jeff_media/ChestSort/ChestSortSettingsGUI.java +++ b/src/main/java/de/jeff_media/ChestSort/ChestSortSettingsGUI.java @@ -21,6 +21,7 @@ public class ChestSortSettingsGUI implements Listener { public static final int slotShiftClick = 3 ; public static final int slotDoubleClick = 5 ; public static final int slotShiftRightClick = 7 ; + public static final int slotLeftClickFromOutside = 4 + 9; public static final int slotLeftClick = 2+18; public static final int slotRightClick = 6+18; @@ -28,7 +29,7 @@ public class ChestSortSettingsGUI implements Listener { final static Material green = Material.EMERALD_BLOCK; enum Hotkey { - MiddleClick, ShiftClick, DoubleClick, ShiftRightClick, LeftClick, RightClick + MiddleClick, ShiftClick, DoubleClick, ShiftRightClick, LeftClick, RightClick, LeftClickOutside } ChestSortSettingsGUI(ChestSortPlugin plugin) { @@ -63,6 +64,9 @@ public class ChestSortSettingsGUI implements Listener { case ShiftRightClick: meta.setDisplayName(ChatColor.RESET + plugin.messages.MSG_GUI_SHIFTRIGHTCLICK + ": " + suffix); break; + case LeftClickOutside: + meta.setDisplayName(ChatColor.RESET + plugin.messages.MSG_GUI_LEFTCLICKOUTSIDE + ": " + suffix); + break; case LeftClick: meta.setDisplayName(ChatColor.RESET + plugin.messages.MSG_GUI_LEFTCLICK + ": "+ suffix); break; @@ -89,6 +93,9 @@ public class ChestSortSettingsGUI implements Listener { inventory.setItem(slotDoubleClick, getItem(setting.doubleClick, Hotkey.DoubleClick)); inventory.setItem(slotShiftRightClick, getItem(setting.shiftRightClick, Hotkey.ShiftRightClick)); } + if(plugin.getConfig().getBoolean("allow-left-click-to-sort")) { + inventory.setItem(slotLeftClickFromOutside, getItem(setting.leftClickOutside, Hotkey.LeftClickOutside)); + } if(plugin.getConfig().getBoolean("allow-additional-hotkeys")) { inventory.setItem(slotLeftClick, getItem(setting.leftClick,Hotkey.LeftClick)); inventory.setItem(slotRightClick, getItem(setting.rightClick,Hotkey.RightClick)); @@ -146,6 +153,9 @@ public class ChestSortSettingsGUI implements Listener { } else if(event.getSlot() == ChestSortSettingsGUI.slotDoubleClick) { setting.toggleDoubleClick(); plugin.settingsGUI.openGUI(p); + } else if(event.getSlot() == ChestSortSettingsGUI.slotLeftClickFromOutside) { + setting.toggleLeftClickOutside(); + plugin.settingsGUI.openGUI(p); } else if(event.getSlot() == ChestSortSettingsGUI.slotShiftRightClick) { setting.toggleShiftRightClick(); plugin.settingsGUI.openGUI(p); diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index 1052ed0..63705ee 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -149,6 +149,13 @@ sorting-hotkeys: # sorting mechanism hotkey-cooldown: 0.2 +# When enabled, players can leftclick on chests, barrels etc. +# to sort them without having to open them. +allow-left-click-to-sort: true + +# When set to true, sorting a chest by left-clicking it is enabled by default +left-click-to-sort-enabled-by-default: false + # Additionally to sorting hotkeys, you can quickly unload your inventory into a chest and vice versa # using left-click or right-click outside of a chest's inventory. # A single click will only affect matching items (items that are already present in the other inventory) @@ -337,6 +344,7 @@ message-inv-sorting-enabled: "&7Automatic inventory sorting has been &aenabled&7 message-player-inventory-sorted: "&7Your inventory has been sorted." message-error-players-only: "&cError: This command can only be run by players." message-error-invalid-options: "&cError: Unknown option %s. Valid options are %s." +message-hotbar-container-sorted: "&aContainer sorted!" message-gui-enabled: "&aEnabled" message-gui-disabled: "&cDisabled" message-gui-middle-click: "Middle-Click" @@ -345,6 +353,7 @@ message-gui-double-click: "Double-Click" message-gui-shift-right-click: "Shift + Right-Click" message-gui-left-click: "Fill Chest (Left-Click/Double-Left-Click)" message-gui-right-click: "Empty Chest (Right-Click/Double-Right-Click)" +message-gui-left-click-outside: "Left-Click from outside" ##### English #message-when-using-chest: "&7Hint: Type &6/chestsort&7 to enable automatic chest sorting." @@ -364,6 +373,8 @@ message-gui-right-click: "Empty Chest (Right-Click/Double-Right-Click)" #message-gui-shift-right-click: "Shift + Right-Click" #message-gui-left-click: "Fill Chest (Left-Click/Double-Left-Click)" #message-gui-right-click: "Empty Chest (Right-Click/Double-Right-Click)" +#message-gui-left-click-outside: "Left-Click from outside" + ##### Chinese - Thanks to qsefthuopq, Aira-Sakuranomiya and BackWheel for translating! #message-when-using-chest: "&7提示: 输入 &6/chestsort&7 来启用自动整理箱子." @@ -383,6 +394,7 @@ message-gui-right-click: "Empty Chest (Right-Click/Double-Right-Click)" #message-gui-shift-right-click: "Shift + 右键" #message-gui-left-click: "填充箱子 (左键/双击左键)" #message-gui-right-click: "清空箱子 (右键/双击右键)" +#message-gui-left-click-outside: "Left-Click from outside" ##### Chinese (Traditional) 繁體中文 - Thanks to Command1264 for translating! #message-when-using-chest: "&7小提醒: 輸入 &6/chestsort&7 來開啟自動整理箱子" @@ -402,6 +414,7 @@ message-gui-right-click: "Empty Chest (Right-Click/Double-Right-Click)" #message-gui-shift-right-click: "Shift + 右鍵" #message-gui-left-click: "填滿箱子 (左鍵/雙擊左鍵)" #message-gui-right-click: "清空箱子 (右鍵/雙擊右鍵)" +#message-gui-left-click-outside: "Left-Click from outside" ##### Dutch - Thanks to Xeyame for translating! ##### Note: Some messages are still untranslated. Please send me your translation at SpigotMC @@ -422,6 +435,7 @@ message-gui-right-click: "Empty Chest (Right-Click/Double-Right-Click)" #message-gui-shift-right-click: "Shift + Right-Click" #message-gui-left-click: "Fill Chest (Left-Click/Double-Left-Click)" #message-gui-right-click: "Empty Chest (Right-Click/Double-Right-Click)" +#message-gui-left-click-outside: "Left-Click from outside" ##### French / Français - Thanks to automatizer, demon57730, FichdlMaa and Stalk3r77 for translating! # Note: The following messages have been changed in version 8.11 and need a new translation: @@ -444,6 +458,7 @@ message-gui-right-click: "Empty Chest (Right-Click/Double-Right-Click)" #message-gui-shift-right-click: "Shift + Clic droit" #message-gui-left-click: "Remplir le coffre (Clic-gauche)" #message-gui-right-click: "Vider le coffre (Clic-droit)" +#message-gui-left-click-outside: "Left-Click from outside" ##### German #message-when-using-chest: "&7Hinweis: Benutze &6/chestsort&7 um die automatische Kistensortierung zu aktivieren." @@ -463,6 +478,7 @@ message-gui-right-click: "Empty Chest (Right-Click/Double-Right-Click)" #message-gui-shift-right-click: "Shift + Rechtsklick" #message-gui-left-click: "Kiste füllen (Linksklick/doppelter Linksklick)" #message-gui-right-click: "Kiste leeren (Rechtsklick/doppelter Rechtsklick)" +#message-gui-left-click-outside: "Linksklick von außen" ##### Hungarian - Thanks to Letter and Polaroli for translating! # Note: The following messages have been changed in version 8.11 and need a new translation: @@ -485,6 +501,7 @@ message-gui-right-click: "Empty Chest (Right-Click/Double-Right-Click)" #message-gui-shift-right-click: "Shift + Jobb klikk" #message-gui-left-click: "Láda feltöltés (Bal klikk)" #message-gui-right-click: "Láda ürítés (Jobb klikk)" +#message-gui-left-click-outside: "Left-Click from outside" ##### Italian ##### Note: Some messages are still untranslated. Please send me your translation at SpigotMC @@ -505,6 +522,7 @@ message-gui-right-click: "Empty Chest (Right-Click/Double-Right-Click)" #message-gui-shift-right-click: "Shift + Right-Click" #message-gui-left-click: "Fill Chest (Left-Click/Double-Left-Click)" #message-gui-right-click: "Empty Chest (Right-Click/Double-Right-Click)" +#message-gui-left-click-outside: "Left-Click from outside" ##### Japanese - Thanks to Sefyy for translating! # Note: The following messages have been changed in version 8.11 and need a new translation: @@ -527,6 +545,7 @@ message-gui-right-click: "Empty Chest (Right-Click/Double-Right-Click)" #message-gui-shift-right-click: "シフト+右クリック" #message-gui-left-click: "チェストを埋める(左クリック)" #message-gui-right-click: "チェストを空ける(右クリック)" +#message-gui-left-click-outside: "Left-Click from outside" ##### Korean (한국어) - Thanks to kf12 for translating! ##### Note: Some messages are still untranslated. Please send me your translation at SpigotMC @@ -547,6 +566,7 @@ message-gui-right-click: "Empty Chest (Right-Click/Double-Right-Click)" #message-gui-shift-right-click: "쉬프트 + 우클릭" #message-gui-left-click: "Fill Chest (Left-Click/Double-Left-Click)" #message-gui-right-click: "Empty Chest (Right-Click/Double-Right-Click)" +#message-gui-left-click-outside: "Left-Click from outside" ##### Polish - Thanks to PLKaratusPL for translating! #message-when-using-chest: "&7Wskazówka: Wpisz &6/chestsort&7 by włączyć automatyczne sortowanie skrzyń." @@ -566,6 +586,7 @@ message-gui-right-click: "Empty Chest (Right-Click/Double-Right-Click)" #message-gui-shift-right-click: "Shift + PPM" #message-gui-left-click: "Wypełnienie Skrzyni (LPM/Podwójny LPM)" #message-gui-right-click: "Opróżnienie Skrzyni (PPM/Podwójny PPM)" +#message-gui-left-click-outside: "Left-Click from outside" ##### Portuguese - Thanks to wildastral for translating! ##### Note: Some messages are still untranslated. Please send me your translation at SpigotMC @@ -586,6 +607,7 @@ message-gui-right-click: "Empty Chest (Right-Click/Double-Right-Click)" #message-gui-shift-right-click: "Shift + Right-Click" #message-gui-left-click: "Fill Chest (Left-Click/Double-Left-Click)" #message-gui-right-click: "Empty Chest (Right-Click/Double-Right-Click)" +#message-gui-left-click-outside: "Left-Click from outside" ##### Russian #message-when-using-chest: "&7Подсказка: введите &6/chestsort&7, чтобы включить автоматическую сортировку вещей в сундуках." @@ -605,6 +627,7 @@ message-gui-right-click: "Empty Chest (Right-Click/Double-Right-Click)" #message-gui-shift-right-click: "Shift + Правый клик" #message-gui-left-click: "Заполнить сундук (ЛКМ/Двойной ЛКМ)" #message-gui-right-click: "Освободить сундук (ПКМ/Двойной ПКМ)" +#message-gui-left-click-outside: "Left-Click from outside" ##### Spanish #message-when-using-chest: "&7Sugerencia: Escribe &6/chestsort&7 para activar la clasificación automática de cofres." @@ -624,6 +647,7 @@ message-gui-right-click: "Empty Chest (Right-Click/Double-Right-Click)" #message-gui-shift-right-click: "Mayus + Clic Derecho" #message-gui-left-click: "Llenar Cofre (Clic Izquierdo / Doble Clic Izquierdo)" #message-gui-right-click: "Vaciar Cofre (Clic Derecho / Doble Clic Derecho)" +#message-gui-left-click-outside: "Left-Click from outside" ##### Turkish #message-when-using-chest: "&7İpucu: &6/chestsort&7 yazarak otomatik sandık düzenlemesini aktif edebilirsiniz" @@ -643,6 +667,7 @@ message-gui-right-click: "Empty Chest (Right-Click/Double-Right-Click)" #message-gui-shift-right-click: "Shift + Sağ tık" #message-gui-left-click: "Sandığı doldur (Sol tık/Çift sol tık)" #message-gui-right-click: "Sandığı boşalt (Sağ tık/Çift sağ tık)" +#message-gui-left-click-outside: "Left-Click from outside" ############################ ##### Technical stuff! ##### diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 3716716..63d50ad 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -33,6 +33,11 @@ commands: / help -- Shows help about this command aliases: [invsort,inventorysort] permission: chestsort.use.inventory + chestsortadmin: + description: Admin command for ChestSort + usage: | + / reset -- Reset's a player's hotkey settings + permission: chestsort.admin permissions: chestsort.use: description: Allows chest sorting