From 6f2a39d613d68d1745651c8353e142abd21a2c57 Mon Sep 17 00:00:00 2001 From: rockyhawk64 Date: Thu, 11 Jul 2024 10:30:51 +1000 Subject: [PATCH] 3.21.3.2 --- resource/plugin.yml | 2 +- .../commandpanels/CommandPanels.java | 6 +- .../classresources/HasSections.java | 104 ++++++++---------- .../classresources/ItemCreation.java | 18 +-- 4 files changed, 63 insertions(+), 67 deletions(-) diff --git a/resource/plugin.yml b/resource/plugin.yml index c8478c4..b91d094 100644 --- a/resource/plugin.yml +++ b/resource/plugin.yml @@ -1,4 +1,4 @@ -version: 3.21.3.1 +version: 3.21.3.2 main: me.rockyhawk.commandpanels.CommandPanels name: CommandPanels author: RockyHawk diff --git a/src/me/rockyhawk/commandpanels/CommandPanels.java b/src/me/rockyhawk/commandpanels/CommandPanels.java index cd56ba1..fa531c9 100644 --- a/src/me/rockyhawk/commandpanels/CommandPanels.java +++ b/src/me/rockyhawk/commandpanels/CommandPanels.java @@ -335,8 +335,8 @@ public class CommandPanels extends JavaPlugin{ assert renamedMeta != null; //hiding attributes will add an NBT tag if(hideAttributes) { - renamedMeta.addItemFlags(ItemFlag.HIDE_ATTRIBUTES); renamedMeta.addItemFlags(ItemFlag.HIDE_ENCHANTS); + renamedMeta.addItemFlags(ItemFlag.HIDE_ATTRIBUTES); //HIDE_ADDITIONAL_TOOLTIP was added into 1.20.5 api if(legacy.MAJOR_VERSION.greaterThanOrEqualTo(MinecraftVersions.v1_21) || (legacy.MAJOR_VERSION.greaterThanOrEqualTo(MinecraftVersions.v1_20) && legacy.MINOR_VERSION >= 5)){ @@ -355,6 +355,10 @@ public class CommandPanels extends JavaPlugin{ if(legacy.MAJOR_VERSION.greaterThanOrEqualTo(MinecraftVersions.v1_17)){ renamedMeta.addItemFlags(ItemFlag.HIDE_DYE); } + //setAttributeModifiers was added into 1.14 api + if(legacy.MAJOR_VERSION.greaterThanOrEqualTo(MinecraftVersions.v1_14)){ + renamedMeta.setAttributeModifiers(null); + } } if (customName != null) { renamedMeta.setDisplayName(customName); diff --git a/src/me/rockyhawk/commandpanels/classresources/HasSections.java b/src/me/rockyhawk/commandpanels/classresources/HasSections.java index 06dcdfb..8bd7317 100644 --- a/src/me/rockyhawk/commandpanels/classresources/HasSections.java +++ b/src/me/rockyhawk/commandpanels/classresources/HasSections.java @@ -19,74 +19,66 @@ public class HasSections { plugin = pl; } - public String hasSection(Panel panel, PanelPosition position, ConfigurationSection cf, Player p){ - for (int count = 0; cf.getKeys(false).size() > count; count++) { - String setName; - if(cf.isSet("has" + count)) { - setName = "has" + count; - }else{ - continue; - } + public String hasSection(Panel panel, PanelPosition position, ConfigurationSection cf, Player p) { + for (String setName : cf.getKeys(false)) { + if (!cf.isConfigurationSection(setName)) continue; - boolean endProcess = true; - //loop through possible values and compares for hypothetical and operators - for (int a = 0; cf.getConfigurationSection(setName).getKeys(false).size() > a; a++) { - if(cf.isSet(setName + ".value" + a) && cf.isSet(setName + ".compare" + a)){ - //ensure the endProcess variable has been reset for another operation - endProcess = true; - //get the values of this statement - String value; - String compare; - try { - value = ChatColor.stripColor(plugin.tex.placeholders(panel, position, p, cf.getString(setName + ".value" + a))); - compare = ChatColor.stripColor(plugin.tex.placeholders(panel, position, p, cf.getString(setName + ".compare" + a))); - }catch (Exception e) { - //if errors getting text return - plugin.debug(e,p); - return ""; - } + ConfigurationSection currentSection = cf.getConfigurationSection(setName); + int numberOfConditions = currentSection.getKeys(false).size(); - String operator = "AND"; - if(compare.endsWith(" OR")){ - compare = compare.substring(0, compare.length()-3); - operator = "OR"; - }else if(compare.endsWith(" AND")){ - compare = compare.substring(0, compare.length()-4); - } + Boolean currentBlockResult = null; // This will store the result of the current block (a set of conditions combined by AND or OR). + String previousOperator = "AND"; // Default logical operator to start with. - //list of values with the or operator - HashSet values = doOperators(new HashSet<>(Collections.singletonList(value))); - //go through all values with the or operator - for(String val : values){ - if (hasProcess(setName, val, compare, p)) { - endProcess = false; - //if it is true and it is OR, there is no need to check the next value in the line - if(operator.equals("OR")){ - a++; - } - } - } - if(endProcess){ - //check if the operator link between the next value/compare is OR - if(operator.equals("OR")){ - //I can just continue because the algorithm already assumes the last sequence was true - endProcess = false; - continue; - } + for (int a = 0; a < numberOfConditions; a++) { + if (!currentSection.isSet("value" + a) || !currentSection.isSet("compare" + a)) { + continue; + } + + String value = ChatColor.stripColor(plugin.tex.placeholders(panel, position, p, currentSection.getString("value" + a))); + String compare = ChatColor.stripColor(plugin.tex.placeholders(panel, position, p, currentSection.getString("compare" + a))); + + String operator = "AND"; // Default operator for the current condition. + if (compare.endsWith(" OR")) { + compare = compare.substring(0, compare.length() - 3); + operator = "OR"; + } else if (compare.endsWith(" AND")) { + compare = compare.substring(0, compare.length() - 4); + } + + HashSet values = doOperators(new HashSet<>(Collections.singletonList(value))); + boolean localResult = false; // This tracks the result of the current condition. + for (String val : values) { + if (hasProcess(setName, val, compare, p)) { + localResult = true; break; } } + + if (currentBlockResult == null) { + // Initialize the result of the block with the result of the first condition. + currentBlockResult = localResult; + } else { + // Combine the result of the current condition with the block result based on the previous operator. + if (previousOperator.equals("AND")) { + currentBlockResult = currentBlockResult && localResult; + } else if (previousOperator.equals("OR")) { + currentBlockResult = currentBlockResult || localResult; + } + } + + previousOperator = operator; // Update the operator for the next condition. } - //if the has section is false move to the next has section - if(endProcess){ - continue; + + if (currentBlockResult != null && currentBlockResult) { + // If the result of this section is true, check nested sections. + return "." + setName + hasSection(panel, position, currentSection, p); } - //proceed if none of the values were false - return "." + setName + hasSection(panel, position, cf.getConfigurationSection(setName), p); + // If the result is false, continue to the next 'has' section. } return ""; } + private HashSet doOperators(HashSet value){ for(String val : value){ if(val.contains(" OR ")){ diff --git a/src/me/rockyhawk/commandpanels/classresources/ItemCreation.java b/src/me/rockyhawk/commandpanels/classresources/ItemCreation.java index 24ed7a2..dba9a7a 100644 --- a/src/me/rockyhawk/commandpanels/classresources/ItemCreation.java +++ b/src/me/rockyhawk/commandpanels/classresources/ItemCreation.java @@ -315,15 +315,15 @@ public class ItemCreation { ItemMeta unbreak = s.getItemMeta(); unbreak.setUnbreakable(true); s.setItemMeta(unbreak); - } - - try { - Damageable itemDamage = (Damageable) s.getItemMeta(); - itemDamage.setDamage(Integer.parseInt(Objects.requireNonNull(plugin.tex.placeholders(panel,position,p, itemSection.getString("damage"))))); - s.setItemMeta((ItemMeta) itemDamage); - } catch (Exception e) { - plugin.debug(e, p); - p.sendMessage(plugin.tex.colour(plugin.tag + plugin.config.getString("config.format.error") + " damage: " + itemSection.getString("damage"))); + }else { + try { + Damageable itemDamage = (Damageable) s.getItemMeta(); + itemDamage.setDamage(Integer.parseInt(Objects.requireNonNull(plugin.tex.placeholders(panel, position, p, itemSection.getString("damage"))))); + s.setItemMeta((ItemMeta) itemDamage); + } catch (Exception e) { + plugin.debug(e, p); + p.sendMessage(plugin.tex.colour(plugin.tag + plugin.config.getString("config.format.error") + " damage: " + itemSection.getString("damage"))); + } } } }