From 519b27713fd29267ab5bfcd7b220dbc5071305c1 Mon Sep 17 00:00:00 2001 From: GeorgH93 Date: Sat, 15 Feb 2020 03:08:42 +0100 Subject: [PATCH] Add lore filter --- resources/config.yml | 2 ++ .../Minepacks/Bukkit/Database/Config.java | 8 ++++++++ .../Minepacks/Bukkit/Listener/ItemFilter.java | 15 ++++++++++++++- 3 files changed, 24 insertions(+), 1 deletion(-) diff --git a/resources/config.yml b/resources/config.yml index 8cb9f27..8b6fbb7 100644 --- a/resources/config.yml +++ b/resources/config.yml @@ -137,6 +137,8 @@ ItemFilter: Materials: [] # List of names that should be filtered. Must match the display name of the item exactly. & color codes will be converted automatically. Names: [] + # List of lore that should be filtered. Can be a single line or all lines of the lore. + Lore: [] # This settings allow control over how the plugin behave in different worlds WorldSettings: diff --git a/src/at/pcgamingfreaks/Minepacks/Bukkit/Database/Config.java b/src/at/pcgamingfreaks/Minepacks/Bukkit/Database/Config.java index a553309..8f8ff22 100644 --- a/src/at/pcgamingfreaks/Minepacks/Bukkit/Database/Config.java +++ b/src/at/pcgamingfreaks/Minepacks/Bukkit/Database/Config.java @@ -312,6 +312,14 @@ public Set getItemFilterNames() return names; } + public Set getItemFilterLore() + { + if(!isItemFilterEnabledNoShulker()) return new HashSet<>(); + Set loreSet = new HashSet<>(); + getConfigE().getStringList("ItemFilter.Lore", new LinkedList<>()).forEach(lore -> loreSet.add(ChatColor.translateAlternateColorCodes('&', lore))); + return loreSet; + } + public boolean isItemFilterModeWhitelist() { return getConfigE().getString("ItemFilter.Mode", "blacklist").toLowerCase(Locale.ENGLISH).equals("whitelist") && isItemFilterEnabledNoShulker(); diff --git a/src/at/pcgamingfreaks/Minepacks/Bukkit/Listener/ItemFilter.java b/src/at/pcgamingfreaks/Minepacks/Bukkit/Listener/ItemFilter.java index 90cf19e..b1dc003 100644 --- a/src/at/pcgamingfreaks/Minepacks/Bukkit/Listener/ItemFilter.java +++ b/src/at/pcgamingfreaks/Minepacks/Bukkit/Listener/ItemFilter.java @@ -45,7 +45,7 @@ public class ItemFilter extends MinepacksListener implements at.pcgamingfreaks.M public final ItemNameResolver itemNameResolver; private final boolean whitelistMode; private final Collection filteredMaterials = new HashSet<>(); - private final Set filteredNames; + private final Set filteredNames, filteredLore; public ItemFilter(final Minepacks plugin) { @@ -61,6 +61,7 @@ public ItemFilter(final Minepacks plugin) } filteredMaterials.addAll(plugin.getConfiguration().getItemFilterMaterials()); filteredNames = plugin.getConfiguration().getItemFilterNames(); + filteredLore = plugin.getConfiguration().getItemFilterLore(); messageNotAllowedInBackpack = plugin.getLanguage().getMessage("Ingame.NotAllowedInBackpack").replaceAll("\\{ItemName}", "%s"); @@ -95,6 +96,18 @@ public boolean isItemBlocked(final @Nullable ItemStack item) ItemMeta meta = item.getItemMeta(); assert meta != null; //TODO remove after testing if(meta.hasDisplayName() && filteredNames.contains(meta.getDisplayName())) return !whitelistMode; + if(meta.hasLore() && !filteredLore.isEmpty()) + { + StringBuilder loreBuilder = new StringBuilder(); + //noinspection ConstantConditions + for(String loreLine : meta.getLore()) + { + if(filteredLore.contains(loreLine)) return !whitelistMode; + if(loreBuilder.length() > 0) loreBuilder.append("\n"); + loreBuilder.append(loreLine); + } + if(filteredLore.contains(loreBuilder.toString())) return !whitelistMode; + } } return whitelistMode; }