diff --git a/src/main/java/studio/magemonkey/genesis/core/conditions/GenesisConditionType.java b/src/main/java/studio/magemonkey/genesis/core/conditions/GenesisConditionType.java index 9d3dc75..a38e844 100644 --- a/src/main/java/studio/magemonkey/genesis/core/conditions/GenesisConditionType.java +++ b/src/main/java/studio/magemonkey/genesis/core/conditions/GenesisConditionType.java @@ -40,7 +40,8 @@ public abstract class GenesisConditionType { WORLD, WEATHER, PLACEHOLDERNUMBER, - PLACEHOLDERMATCH; + PLACEHOLDERMATCH, + PLACEHOLDERCONTAINS; private static List types; @@ -77,6 +78,7 @@ public static void loadTypes() { WEATHER = registerType(new GenesisConditionTypeWeather()); PLACEHOLDERNUMBER = registerType(new GenesisConditionTypePlaceholderNumber()); PLACEHOLDERMATCH = registerType(new GenesisConditionTypePlaceholderMatch()); + PLACEHOLDERCONTAINS = registerType(new GenesisConditionTypePlaceholderContains()); } public static GenesisConditionType registerType(GenesisConditionType type) { diff --git a/src/main/java/studio/magemonkey/genesis/core/conditions/GenesisConditionTypePlaceholderContains.java b/src/main/java/studio/magemonkey/genesis/core/conditions/GenesisConditionTypePlaceholderContains.java new file mode 100644 index 0000000..7262d0b --- /dev/null +++ b/src/main/java/studio/magemonkey/genesis/core/conditions/GenesisConditionTypePlaceholderContains.java @@ -0,0 +1,81 @@ +package studio.magemonkey.genesis.core.conditions; + +import org.bukkit.ChatColor; +import org.bukkit.entity.Player; +import studio.magemonkey.genesis.core.GenesisBuy; +import studio.magemonkey.genesis.core.GenesisShopHolder; +import studio.magemonkey.genesis.managers.ClassManager; + + +public class GenesisConditionTypePlaceholderContains extends GenesisConditionType { + + + public boolean contains(Player p, String searchTerm, String placeholder) { + placeholder = ClassManager.manager.getStringManager().transform(placeholder, p); + searchTerm = ClassManager.manager.getStringManager().transform(searchTerm, p); + String cleanPlaceholder = ChatColor.stripColor(placeholder).trim().toLowerCase(); + String cleanSearchTerm = ChatColor.stripColor(searchTerm).trim().toLowerCase(); + return cleanPlaceholder.contains(cleanSearchTerm); + } + + @Override + public boolean dependsOnPlayer() { + return true; + } + + @Override + public String[] createNames() { + return new String[]{"placeholdercontains"}; + } + + + @Override + public void enableType() { + } + + + @Override + public boolean meetsCondition(GenesisShopHolder holder, + GenesisBuy shopItem, + Player p, + String conditionType, + String condition) { + String[] parts = condition.split(":", 2); + if (parts.length < 2) { + ClassManager.manager.getBugFinder() + .warn("Unable to read placeholdercontains condition " + conditionType + ":" + condition + + " of shopitem " + shopItem.getName() + + ". It should look like following: '::'."); + return false; + } + if (parts[0].equalsIgnoreCase("contains")) { + return isCorrect(p, true, parts[1], conditionType); + } + if (parts[0].equalsIgnoreCase("notcontains")) { + return isCorrect(p, false, parts[1], conditionType); + } + ClassManager.manager.getBugFinder() + .warn("Unable to read placeholdercontains condition " + conditionType + ":" + condition + + " of shopitem " + shopItem.getName() + + ". It should look like following: '::'."); + return false; + } + + + private boolean isCorrect(Player p, boolean shouldContain, String condition, String placeholder) { + for (String searchTerm : condition.split(",")) { + if (contains(p, searchTerm, placeholder) == shouldContain) { + return true; + } + } + return false; + } + + + @Override + public String[] showStructure() { + return new String[]{"[string]:contains:[string]", "[string]:notcontains:[string]"}; + } + + +}