Merge pull request #25 from JEFF-Media-GbR/Hotkey

Hotkey
This commit is contained in:
JEFF 2019-07-13 14:18:52 +02:00 committed by GitHub
commit ff330bae45
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 86 additions and 21 deletions

View File

@ -6,7 +6,7 @@
<groupId>de.jeffclan</groupId> <groupId>de.jeffclan</groupId>
<artifactId>JeffChestSort</artifactId> <artifactId>JeffChestSort</artifactId>
<version>5.1</version> <version>6.0</version>
<packaging>jar</packaging> <packaging>jar</packaging>
<name>JeffChestSort</name> <name>JeffChestSort</name>

View File

@ -9,16 +9,21 @@ import org.bukkit.block.DoubleChest;
import org.bukkit.block.EnderChest; import org.bukkit.block.EnderChest;
import org.bukkit.block.ShulkerBox; import org.bukkit.block.ShulkerBox;
import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.entity.HumanEntity;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority; import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
import org.bukkit.event.inventory.ClickType;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.event.inventory.InventoryCloseEvent; import org.bukkit.event.inventory.InventoryCloseEvent;
import org.bukkit.event.inventory.InventoryEvent; import org.bukkit.event.inventory.InventoryEvent;
import org.bukkit.event.inventory.InventoryOpenEvent; import org.bukkit.event.inventory.InventoryOpenEvent;
import org.bukkit.event.inventory.InventoryType.SlotType;
import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.event.player.PlayerQuitEvent; import org.bukkit.event.player.PlayerQuitEvent;
import org.bukkit.inventory.Inventory; import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.InventoryHolder;
public class JeffChestSortListener implements Listener { public class JeffChestSortListener implements Listener {
@ -93,12 +98,11 @@ public class JeffChestSortListener implements Listener {
plugin.unregisterPlayer(event.getPlayer()); plugin.unregisterPlayer(event.getPlayer());
} }
@EventHandler @EventHandler
public void onInventoryEvent(InventoryEvent event) { public void onInventoryEvent(InventoryEvent event) {
plugin.getLogger().info("InventoryEvent"); plugin.getLogger().info("InventoryEvent");
} }
// This event fires when someone closes an inventory // This event fires when someone closes an inventory
// We check if the closed inventory belongs to a chest, shulkerbox or barrel, // We check if the closed inventory belongs to a chest, shulkerbox or barrel,
// and then call the Organizer to sort the inventory (if the player has // and then call the Organizer to sort the inventory (if the player has
@ -110,7 +114,7 @@ public class JeffChestSortListener implements Listener {
|| plugin.getConfig().getString("sort-time").equalsIgnoreCase("both"))) { || plugin.getConfig().getString("sort-time").equalsIgnoreCase("both"))) {
return; return;
} }
// event.getPlayer returns HumanEntity, so it could also be an NPC or something // event.getPlayer returns HumanEntity, so it could also be an NPC or something
if (!(event.getPlayer() instanceof Player)) { if (!(event.getPlayer() instanceof Player)) {
return; return;
@ -118,7 +122,7 @@ public class JeffChestSortListener implements Listener {
Player p = (Player) event.getPlayer(); Player p = (Player) event.getPlayer();
Inventory inventory = event.getInventory(); Inventory inventory = event.getInventory();
if(!belongsToChestLikeBlock(inventory)) { if (!belongsToChestLikeBlock(inventory)) {
return; return;
} }
@ -129,19 +133,19 @@ public class JeffChestSortListener implements Listener {
} }
} }
@EventHandler(priority=EventPriority.MONITOR) @EventHandler(priority = EventPriority.MONITOR)
public void onChestClose(InventoryOpenEvent event) { public void onChestClose(InventoryOpenEvent event) {
if (!(plugin.getConfig().getString("sort-time").equalsIgnoreCase("open") if (!(plugin.getConfig().getString("sort-time").equalsIgnoreCase("open")
|| plugin.getConfig().getString("sort-time").equalsIgnoreCase("both"))) { || plugin.getConfig().getString("sort-time").equalsIgnoreCase("both"))) {
return; return;
} }
if(event.isCancelled()) { if (event.isCancelled()) {
return; return;
} }
// event.getPlayer returns HumanEntity, so it could also be an NPC or something // event.getPlayer returns HumanEntity, so it could also be an NPC or something
if (!(event.getPlayer() instanceof Player)) { if (!(event.getPlayer() instanceof Player)) {
return; return;
@ -149,7 +153,7 @@ public class JeffChestSortListener implements Listener {
Player p = (Player) event.getPlayer(); Player p = (Player) event.getPlayer();
Inventory inventory = event.getInventory(); Inventory inventory = event.getInventory();
if(!belongsToChestLikeBlock(inventory)) { if (!belongsToChestLikeBlock(inventory)) {
return; return;
} }
@ -166,10 +170,9 @@ public class JeffChestSortListener implements Listener {
if (inventory.getHolder() == null) { if (inventory.getHolder() == null) {
return false; return false;
} }
//System.out.println(inventory.getHolder().getClass().getName()); // System.out.println(inventory.getHolder().getClass().getName());
// Only continue if the inventory belongs to a chest, double chest, shulkerbox // Only continue if the inventory belongs to a chest, double chest, shulkerbox
// or barrel // or barrel
// NOTE: We use .getClass().toString() for new items instead of directly // NOTE: We use .getClass().toString() for new items instead of directly
@ -179,8 +182,7 @@ public class JeffChestSortListener implements Listener {
// WARNING: The names are inconsistent! A chest will return // WARNING: The names are inconsistent! A chest will return
// org.bukkit.craftbukkit.v1_14_R1.block.CraftChest // org.bukkit.craftbukkit.v1_14_R1.block.CraftChest
// in Spigot 1.14 while a double chest returns org.bukkit.block.DoubleChest // in Spigot 1.14 while a double chest returns org.bukkit.block.DoubleChest
if (!(inventory.getHolder() instanceof Chest) if (!(inventory.getHolder() instanceof Chest) && !(inventory.getHolder() instanceof DoubleChest)
&& !(inventory.getHolder() instanceof DoubleChest)
&& !(inventory.getHolder().getClass().toString().endsWith(".CraftShulkerBox")) && !(inventory.getHolder().getClass().toString().endsWith(".CraftShulkerBox"))
&& !(inventory.getHolder().getClass().toString().endsWith(".CraftBarrel"))) { && !(inventory.getHolder().getClass().toString().endsWith(".CraftBarrel"))) {
return false; return false;
@ -249,7 +251,7 @@ public class JeffChestSortListener implements Listener {
@EventHandler @EventHandler
public void onEnderChestOpen(InventoryOpenEvent event) { public void onEnderChestOpen(InventoryOpenEvent event) {
if (!(event.getPlayer() instanceof Player)) { if (!(event.getPlayer() instanceof Player)) {
return; return;
} }
@ -268,4 +270,60 @@ public class JeffChestSortListener implements Listener {
} }
} }
@EventHandler(ignoreCancelled = true, priority = EventPriority.HIGHEST)
public void onInventoryClickEvent(InventoryClickEvent event) {
if(!plugin.getConfig().getBoolean("allow-shortcut")) {
return;
}
if(!(event.getWhoClicked() instanceof Player)) {
return;
}
Player p = (Player) event.getWhoClicked();
if(!p.hasPermission("chestsort.use")) {
return;
}
InventoryHolder holder = event.getInventory().getHolder();
if(event.getClick() != ClickType.MIDDLE) {
return;
}
if(belongsToChestLikeBlock(event.getInventory())) {
//p.sendMessage("Sorting chest");
plugin.organizer.sortInventory(event.getInventory());
updateInventoryView(event);
return;
} else if(holder instanceof Player) {
//p.sendMessage("Sorting player inv");
if(event.getSlotType() == SlotType.QUICKBAR) {
//p.sendMessage("Sorting Hotbar");
plugin.organizer.sortInventory(p.getInventory(),0,8);
updateInventoryView(event);
return;
}
else if(event.getSlotType() == SlotType.CONTAINER) {
//p.sendMessage("Sorting container");
plugin.organizer.sortInventory(p.getInventory(),9,35);
updateInventoryView(event);
return;
}
return;
}
}
void updateInventoryView(InventoryClickEvent event) {
for(HumanEntity viewer : event.getViewers()) {
if(viewer instanceof Player) {
Player playerViewer = (Player) viewer;
playerViewer.updateInventory();
}
}
}
} }

View File

@ -61,7 +61,7 @@ public class JeffChestSortPlugin extends JavaPlugin {
JeffChestSortListener listener; JeffChestSortListener listener;
String sortingMethod; String sortingMethod;
ArrayList<String> disabledWorlds; ArrayList<String> disabledWorlds;
int currentConfigVersion = 11; int currentConfigVersion = 12;
boolean usingMatchingConfig = true; boolean usingMatchingConfig = true;
boolean debug = false; boolean debug = false;
boolean verbose = true; boolean verbose = true;
@ -134,6 +134,7 @@ public class JeffChestSortPlugin extends JavaPlugin {
getConfig().addDefault("check-for-updates", "true"); getConfig().addDefault("check-for-updates", "true");
getConfig().addDefault("auto-generate-category-files", true); getConfig().addDefault("auto-generate-category-files", true);
getConfig().addDefault("sort-time", "close"); getConfig().addDefault("sort-time", "close");
getConfig().addDefault("allow-shortcut", true);
getConfig().addDefault("verbose", true); // Prints some information in onEnable() getConfig().addDefault("verbose", true); // Prints some information in onEnable()
} }
@ -251,6 +252,7 @@ public class JeffChestSortPlugin extends JavaPlugin {
getLogger().info("Sorting enabled by default: " + getConfig().getBoolean("sorting-enabled-by-default")); getLogger().info("Sorting enabled by default: " + getConfig().getBoolean("sorting-enabled-by-default"));
getLogger().info("Auto generate category files: " + getConfig().getBoolean("auto-generate-category-files")); getLogger().info("Auto generate category files: " + getConfig().getBoolean("auto-generate-category-files"));
getLogger().info("Sort time: " + getConfig().getString("sort-time")); getLogger().info("Sort time: " + getConfig().getString("sort-time"));
getLogger().info("Allow shortcut: " + getConfig().getString("allow-shortcut"));
getLogger().info("Check for updates: " + getConfig().getString("check-for-updates")); getLogger().info("Check for updates: " + getConfig().getString("check-for-updates"));
getLogger().info("Categories: " + getCategoryList()); getLogger().info("Categories: " + getCategoryList());
} }

View File

@ -63,6 +63,11 @@ auto-generate-category-files: true
# Available options: open, close, both # Available options: open, close, both
sort-time: close sort-time: close
# Instead of automatic sorting, you can also use middle-click
# when using an inventory to have it sorted immediately.
# You can disable this by setting this to false.
allow-shortcut: true
# should we check for updates? # should we check for updates?
# when enabled, a message is printed in the console if a new # when enabled, a message is printed in the console if a new
# version has been found, and OPs will be notified when they join the server # version has been found, and OPs will be notified when they join the server
@ -274,4 +279,4 @@ message-error-invalid-options: "&cError: Unknown option %s. Valid options are %s
######################### #########################
# please do not change the following line manually! # please do not change the following line manually!
config-version: 11 config-version: 12

View File

@ -1,6 +1,6 @@
main: de.jeffclan.JeffChestSort.JeffChestSortPlugin main: de.jeffclan.JeffChestSort.JeffChestSortPlugin
name: ChestSort name: ChestSort
version: 5.1 version: 6.0
api-version: 1.13 api-version: 1.13
description: Allows automatic chest sorting description: Allows automatic chest sorting
author: mfnalex author: mfnalex