From c0193ce2e0eabdc7d07d1759d5de209b58fdd1aa Mon Sep 17 00:00:00 2001 From: Fisher2911 Date: Mon, 10 Oct 2022 12:16:53 -0400 Subject: [PATCH 1/4] Fixed being able to place items in the vault inventory --- .../bukkit/ui/selector/SelectorInventory.java | 12 ++++++++--- .../bukkit/ui/selector/SelectorListener.java | 20 +++++++++++++++++++ 2 files changed, 29 insertions(+), 3 deletions(-) diff --git a/bukkit/src/main/java/com/github/dig/endervaults/bukkit/ui/selector/SelectorInventory.java b/bukkit/src/main/java/com/github/dig/endervaults/bukkit/ui/selector/SelectorInventory.java index 00a69c1..6ea0023 100644 --- a/bukkit/src/main/java/com/github/dig/endervaults/bukkit/ui/selector/SelectorInventory.java +++ b/bukkit/src/main/java/com/github/dig/endervaults/bukkit/ui/selector/SelectorInventory.java @@ -17,6 +17,7 @@ import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.entity.Player; import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.InventoryHolder; import org.bukkit.inventory.ItemFlag; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; @@ -28,7 +29,7 @@ import java.util.stream.Collectors; @Log -public class SelectorInventory { +public class SelectorInventory implements InventoryHolder { private final EVBukkitPlugin plugin = (EVBukkitPlugin) VaultPluginProvider.getPlugin(); private final VaultRegistry registry = plugin.getRegistry(); @@ -49,7 +50,7 @@ public SelectorInventory(UUID ownerUUID, int page) { this.page = page; this.mode = SelectorMode.valueOf( configuration.getString("selector.design-mode", SelectorMode.PANE_BY_FILL.toString())); - this.inventory = Bukkit.createInventory(null, size, + this.inventory = Bukkit.createInventory(this, size, plugin.getLanguage().get(Lang.VAULT_SELECTOR_TITLE)); init(); @@ -62,7 +63,7 @@ public SelectorInventory(UUID ownerUUID, int page, String title) { this.ownerUUID = ownerUUID; this.page = page; this.mode = SelectorMode.valueOf(configuration.getString("selector.design-mode", SelectorMode.PANE_BY_FILL.toString())); - this.inventory = Bukkit.createInventory(null, size, title); + this.inventory = Bukkit.createInventory(this, size, title); init(); } @@ -256,4 +257,9 @@ private ItemStack createLockedItem() { public void launchFor(Player player) { player.openInventory(inventory); } + + @Override + public Inventory getInventory() { + return this.inventory; + } } diff --git a/bukkit/src/main/java/com/github/dig/endervaults/bukkit/ui/selector/SelectorListener.java b/bukkit/src/main/java/com/github/dig/endervaults/bukkit/ui/selector/SelectorListener.java index cb9c138..9e0045f 100644 --- a/bukkit/src/main/java/com/github/dig/endervaults/bukkit/ui/selector/SelectorListener.java +++ b/bukkit/src/main/java/com/github/dig/endervaults/bukkit/ui/selector/SelectorListener.java @@ -17,6 +17,8 @@ import org.bukkit.event.Listener; import org.bukkit.event.inventory.ClickType; import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.event.inventory.InventoryDragEvent; +import org.bukkit.event.inventory.InventoryInteractEvent; import org.bukkit.event.inventory.InventoryMoveItemEvent; import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemStack; @@ -38,6 +40,10 @@ public void onClick(InventoryClickEvent event) { ItemStack item = event.getCurrentItem(); ClickType type = event.getClick(); + if (event.getView().getTopInventory().getHolder() instanceof SelectorInventory) { + event.setCancelled(true); + } + if (inventory != null && item != null && item.getType() != Material.AIR) { NBTItem nbtItem = new NBTItem(item); if (nbtItem.hasKey(SelectorConstants.NBT_VAULT_ITEM)) { @@ -93,4 +99,18 @@ public void onMove(InventoryMoveItemEvent event) { } } } + + @EventHandler(priority = EventPriority.HIGH) + public void onDrag(InventoryDragEvent event) { + if (event.getView().getTopInventory().getHolder() instanceof SelectorInventory) { + event.setCancelled(true); + } + } + + @EventHandler(priority = EventPriority.HIGH) + public void onDrag(InventoryInteractEvent event) { + if (event.getView().getTopInventory().getHolder() instanceof SelectorInventory) { + event.setCancelled(true); + } + } } From 5c2efc1ec0424c7cdf55b20819a54847cf1cdcf2 Mon Sep 17 00:00:00 2001 From: BuildTools Date: Mon, 14 Nov 2022 17:13:16 +0100 Subject: [PATCH 2/4] + Added refractored code to add support for multiple SelectorModes + Added selector.select-icon.pane_fill_item this is used to add one or more PaneByFill SelectorIcons + Added SelectIconBuilder.java to centralize the creation of SelectorIcons + Players can now click on the WhiteStainedGlassPane to get the PaneByFill Icon back --- .../bukkit/ui/icon/SelectIconBuilder.java | 36 +++++++++++++++ .../bukkit/ui/icon/SelectIconConstants.java | 2 +- .../bukkit/ui/icon/SelectIconInventory.java | 44 +++++++++---------- .../bukkit/ui/icon/SelectIconListener.java | 14 +++++- bukkit/src/main/resources/config.yml | 4 +- 5 files changed, 74 insertions(+), 26 deletions(-) create mode 100644 bukkit/src/main/java/com/github/dig/endervaults/bukkit/ui/icon/SelectIconBuilder.java diff --git a/bukkit/src/main/java/com/github/dig/endervaults/bukkit/ui/icon/SelectIconBuilder.java b/bukkit/src/main/java/com/github/dig/endervaults/bukkit/ui/icon/SelectIconBuilder.java new file mode 100644 index 0000000..5cffa1c --- /dev/null +++ b/bukkit/src/main/java/com/github/dig/endervaults/bukkit/ui/icon/SelectIconBuilder.java @@ -0,0 +1,36 @@ +package com.github.dig.endervaults.bukkit.ui.icon; + +import com.github.dig.endervaults.api.selector.SelectorMode; +import com.github.dig.endervaults.api.vault.Vault; +import de.tr7zw.changeme.nbtapi.NBTItem; +import org.bukkit.Material; +import org.bukkit.inventory.ItemFlag; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; + +public class SelectIconBuilder { + + + public static NBTItem fromMaterial(Vault vault, Material material) { + return fromMaterial(vault, material, SelectorMode.STATIC); + } + + public static NBTItem fromMaterial(Vault vault, Material material, SelectorMode selectorMode) { + ItemStack item = new ItemStack(material, 1); + ItemMeta meta = item.getItemMeta(); + meta.addItemFlags(ItemFlag.HIDE_ATTRIBUTES, + ItemFlag.HIDE_UNBREAKABLE, + ItemFlag.HIDE_ENCHANTS, + ItemFlag.HIDE_DESTROYS, + ItemFlag.HIDE_POTION_EFFECTS, + ItemFlag.HIDE_PLACED_ON); + item.setItemMeta(meta); + + NBTItem nbtItem = new NBTItem(item); + nbtItem.setBoolean(SelectIconConstants.NBT_ICON_ITEM, true); + nbtItem.setString(SelectIconConstants.NBT_ICON_ID, vault.getId().toString()); + nbtItem.setString(SelectIconConstants.NBT_ICON_OWNER_UUID, vault.getOwner().toString()); + nbtItem.setString(SelectIconConstants.NBT_ICON_SELECTOR_MODE, selectorMode.name()); + return nbtItem; + } +} diff --git a/bukkit/src/main/java/com/github/dig/endervaults/bukkit/ui/icon/SelectIconConstants.java b/bukkit/src/main/java/com/github/dig/endervaults/bukkit/ui/icon/SelectIconConstants.java index bdee35c..ae23ea1 100644 --- a/bukkit/src/main/java/com/github/dig/endervaults/bukkit/ui/icon/SelectIconConstants.java +++ b/bukkit/src/main/java/com/github/dig/endervaults/bukkit/ui/icon/SelectIconConstants.java @@ -5,5 +5,5 @@ public class SelectIconConstants { public final static String NBT_ICON_ITEM = "vaulticonitem"; public final static String NBT_ICON_ID = "vaulticonid"; public final static String NBT_ICON_OWNER_UUID = "vaulticonowneruuid"; - + public final static String NBT_ICON_SELECTOR_MODE = "vaulticonselectormode"; } diff --git a/bukkit/src/main/java/com/github/dig/endervaults/bukkit/ui/icon/SelectIconInventory.java b/bukkit/src/main/java/com/github/dig/endervaults/bukkit/ui/icon/SelectIconInventory.java index cadfb48..dc8ed7e 100644 --- a/bukkit/src/main/java/com/github/dig/endervaults/bukkit/ui/icon/SelectIconInventory.java +++ b/bukkit/src/main/java/com/github/dig/endervaults/bukkit/ui/icon/SelectIconInventory.java @@ -2,6 +2,7 @@ import com.github.dig.endervaults.api.VaultPluginProvider; import com.github.dig.endervaults.api.lang.Lang; +import com.github.dig.endervaults.api.selector.SelectorMode; import com.github.dig.endervaults.api.vault.Vault; import com.github.dig.endervaults.bukkit.EVBukkitPlugin; import de.tr7zw.changeme.nbtapi.NBTItem; @@ -35,36 +36,35 @@ public SelectIconInventory(Vault vault) { } private void init() { + int slot; + Material material; for (String matName : configuration.getStringList("selector.select-icon.items")) { - Material material; try { material = Material.valueOf(matName); } catch (IllegalArgumentException e) { log.log(Level.SEVERE, "[EnderVaults] Unable to find material " + matName + ", skipping...", e); continue; } - - ItemStack item = new ItemStack(material, 1); - ItemMeta meta = item.getItemMeta(); - meta.addItemFlags(ItemFlag.HIDE_ATTRIBUTES, - ItemFlag.HIDE_UNBREAKABLE, - ItemFlag.HIDE_ENCHANTS, - ItemFlag.HIDE_DESTROYS, - ItemFlag.HIDE_POTION_EFFECTS, - ItemFlag.HIDE_PLACED_ON); - item.setItemMeta(meta); - - NBTItem nbtItem = new NBTItem(item); - nbtItem.setBoolean(SelectIconConstants.NBT_ICON_ITEM, true); - nbtItem.setString(SelectIconConstants.NBT_ICON_ID, vault.getId().toString()); - nbtItem.setString(SelectIconConstants.NBT_ICON_OWNER_UUID, vault.getOwner().toString()); - - int slot = inventory.firstEmpty(); - if (slot > -1) { - inventory.setItem(inventory.firstEmpty(), nbtItem.getItem()); - } else { - log.log(Level.INFO, "[EnderVaults] Unable to find available spot to put item in, please reconfigure select icon settings."); + slot = inventory.firstEmpty(); + addItemAt(SelectIconBuilder.fromMaterial(vault, material, SelectorMode.STATIC), slot); + } + for (String matName : configuration.getStringList("selector.select-icon.pane_fill_item")) { + try { + material = Material.valueOf(matName); + } catch (IllegalArgumentException e) { + log.log(Level.SEVERE, "[EnderVaults] Unable to find material " + matName + ", skipping...", e); + continue; } + slot = inventory.firstEmpty(); + addItemAt(SelectIconBuilder.fromMaterial(vault, material, SelectorMode.PANE_BY_FILL), slot); + } + } + + private void addItemAt(NBTItem nbtItem, int slot) { + if (slot > -1) { + inventory.setItem(inventory.firstEmpty(), nbtItem.getItem()); + } else { + log.log(Level.INFO, "[EnderVaults] Unable to find available spot to put item in, please reconfigure select icon settings."); } } diff --git a/bukkit/src/main/java/com/github/dig/endervaults/bukkit/ui/icon/SelectIconListener.java b/bukkit/src/main/java/com/github/dig/endervaults/bukkit/ui/icon/SelectIconListener.java index f8ccb98..e302d81 100644 --- a/bukkit/src/main/java/com/github/dig/endervaults/bukkit/ui/icon/SelectIconListener.java +++ b/bukkit/src/main/java/com/github/dig/endervaults/bukkit/ui/icon/SelectIconListener.java @@ -1,6 +1,8 @@ package com.github.dig.endervaults.bukkit.ui.icon; import com.github.dig.endervaults.api.VaultPluginProvider; +import com.github.dig.endervaults.api.selector.SelectorMode; +import com.github.dig.endervaults.api.vault.Vault; import com.github.dig.endervaults.api.vault.VaultRegistry; import com.github.dig.endervaults.api.vault.metadata.VaultDefaultMetadata; import com.github.dig.endervaults.bukkit.ui.selector.SelectorInventory; @@ -33,8 +35,16 @@ public void onClick(InventoryClickEvent event) { event.setCancelled(true); UUID vaultID = UUID.fromString(nbtItem.getString(SelectIconConstants.NBT_ICON_ID)); UUID vaultOwnerUUID = UUID.fromString(nbtItem.getString(SelectIconConstants.NBT_ICON_OWNER_UUID)); - - registry.get(vaultOwnerUUID, vaultID).ifPresent(vault -> vault.getMetadata().put(VaultDefaultMetadata.ICON.getKey(), item.getType().toString())); + SelectorMode selectorMode = SelectorMode.valueOf(nbtItem.getString(SelectIconConstants.NBT_ICON_SELECTOR_MODE)); + + switch(selectorMode) { + case STATIC: { + registry.get(vaultOwnerUUID, vaultID).ifPresent(vault -> vault.getMetadata().put(VaultDefaultMetadata.ICON.getKey(), item.getType().toString())); + } + case PANE_BY_FILL: { + registry.get(vaultOwnerUUID, vaultID).ifPresent(vault -> vault.getMetadata().remove(VaultDefaultMetadata.ICON.getKey())); + } + } new SelectorInventory(vaultOwnerUUID, 1).launchFor(player); } } diff --git a/bukkit/src/main/resources/config.yml b/bukkit/src/main/resources/config.yml index c4ee883..81f10e6 100644 --- a/bukkit/src/main/resources/config.yml +++ b/bukkit/src/main/resources/config.yml @@ -70,7 +70,9 @@ selector: - ARROW - APPLE - WHEAT - # Item designs, how the items look etc. + # Item designs, how the items look etc. + pane_fill_item: + - WHITE_STAINED_GLASS_PANE template: # Unlocked vault item unlocked: From fcc119af72975ef07ca00737257e7983b55d8e11 Mon Sep 17 00:00:00 2001 From: BuildTools Date: Mon, 14 Nov 2022 19:12:15 +0100 Subject: [PATCH 3/4] + Fixed Player being able to bypass blacklist with number clicks Removed duplicate method SelectorListener#onDrag() --- .../endervaults/bukkit/BukkitListener.java | 31 +++++++++++-------- .../bukkit/ui/selector/SelectorListener.java | 7 ----- 2 files changed, 18 insertions(+), 20 deletions(-) diff --git a/bukkit/src/main/java/com/github/dig/endervaults/bukkit/BukkitListener.java b/bukkit/src/main/java/com/github/dig/endervaults/bukkit/BukkitListener.java index 99961ad..88bba1e 100644 --- a/bukkit/src/main/java/com/github/dig/endervaults/bukkit/BukkitListener.java +++ b/bukkit/src/main/java/com/github/dig/endervaults/bukkit/BukkitListener.java @@ -9,16 +9,13 @@ import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.block.Block; -import org.bukkit.configuration.Configuration; import org.bukkit.configuration.file.FileConfiguration; 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.InventoryDragEvent; -import org.bukkit.event.inventory.InventoryMoveItemEvent; +import org.bukkit.event.inventory.*; import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.event.player.PlayerQuitEvent; @@ -26,10 +23,7 @@ import org.bukkit.inventory.ItemStack; import org.bukkit.scheduler.BukkitTask; -import java.util.HashMap; -import java.util.Map; -import java.util.Set; -import java.util.UUID; +import java.util.*; import java.util.stream.Collectors; public class BukkitListener implements Listener { @@ -65,13 +59,24 @@ public void onClick(InventoryClickEvent event) { Player player = (Player) event.getWhoClicked(); BukkitVaultRegistry registry = (BukkitVaultRegistry) plugin.getRegistry(); - ItemStack item = event.getCurrentItem(); + ArrayList items = new ArrayList<>(); + items.add(event.getCurrentItem()); Inventory inventory = event.getInventory(); - if (inventory != null && item != null && isBlacklistEnabled()) { - if (!permission.canBypassBlacklist(player) && getBlacklisted().contains(item.getType()) && registry.isVault(inventory)) { - player.sendMessage(plugin.getLanguage().get(Lang.BLACKLISTED_ITEM)); - event.setCancelled(true); + if(event.getClick() == ClickType.NUMBER_KEY) { + items.add(player.getInventory().getItem(event.getHotbarButton())); + } + + if (inventory != null && isBlacklistEnabled()) { + if(permission.canBypassBlacklist(player)) return; + if(!registry.isVault(inventory)) return; + + for(ItemStack item : items) { + if (item != null && getBlacklisted().contains(item.getType())) { + player.sendMessage(plugin.getLanguage().get(Lang.BLACKLISTED_ITEM)); + event.setCancelled(true); + return; + } } } } diff --git a/bukkit/src/main/java/com/github/dig/endervaults/bukkit/ui/selector/SelectorListener.java b/bukkit/src/main/java/com/github/dig/endervaults/bukkit/ui/selector/SelectorListener.java index 9e0045f..f750ef4 100644 --- a/bukkit/src/main/java/com/github/dig/endervaults/bukkit/ui/selector/SelectorListener.java +++ b/bukkit/src/main/java/com/github/dig/endervaults/bukkit/ui/selector/SelectorListener.java @@ -106,11 +106,4 @@ public void onDrag(InventoryDragEvent event) { event.setCancelled(true); } } - - @EventHandler(priority = EventPriority.HIGH) - public void onDrag(InventoryInteractEvent event) { - if (event.getView().getTopInventory().getHolder() instanceof SelectorInventory) { - event.setCancelled(true); - } - } } From 1787cf6e38bb3742979a43aaaa3cb0d640dc4741 Mon Sep 17 00:00:00 2001 From: BuildTools Date: Mon, 14 Nov 2022 21:32:35 +0100 Subject: [PATCH 4/4] + added missing break statements because I am dumb --- .../dig/endervaults/bukkit/ui/icon/SelectIconListener.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/bukkit/src/main/java/com/github/dig/endervaults/bukkit/ui/icon/SelectIconListener.java b/bukkit/src/main/java/com/github/dig/endervaults/bukkit/ui/icon/SelectIconListener.java index e302d81..ed2daf3 100644 --- a/bukkit/src/main/java/com/github/dig/endervaults/bukkit/ui/icon/SelectIconListener.java +++ b/bukkit/src/main/java/com/github/dig/endervaults/bukkit/ui/icon/SelectIconListener.java @@ -40,9 +40,11 @@ public void onClick(InventoryClickEvent event) { switch(selectorMode) { case STATIC: { registry.get(vaultOwnerUUID, vaultID).ifPresent(vault -> vault.getMetadata().put(VaultDefaultMetadata.ICON.getKey(), item.getType().toString())); + break; } case PANE_BY_FILL: { registry.get(vaultOwnerUUID, vaultID).ifPresent(vault -> vault.getMetadata().remove(VaultDefaultMetadata.ICON.getKey())); + break; } } new SelectorInventory(vaultOwnerUUID, 1).launchFor(player);