diff --git a/src/com/massivecraft/massivecore/predicate/PredicateStringStartsWith.java b/src/com/massivecraft/massivecore/predicate/PredicateStringStartsWith.java new file mode 100644 index 00000000..dc5310e8 --- /dev/null +++ b/src/com/massivecraft/massivecore/predicate/PredicateStringStartsWith.java @@ -0,0 +1,33 @@ +package com.massivecraft.massivecore.predicate; + +public class PredicateStringStartsWith implements Predicate +{ + // -------------------------------------------- // + // FIELDS + // -------------------------------------------- // + + private final String prefix; + + // -------------------------------------------- // + // CONSTRUCT + // -------------------------------------------- // + + public static PredicateStringStartsWith get(String prefix) { return new PredicateStringStartsWith(prefix); } + public PredicateStringStartsWith(String prefix) + { + if (prefix == null) throw new NullPointerException("prefix"); + this.prefix = prefix; + } + + // -------------------------------------------- // + // OVERRIDE + // -------------------------------------------- // + + @Override + public boolean apply(String str) + { + if (str == null) return false; + return str.startsWith(prefix); + } + +} diff --git a/src/com/massivecraft/massivecore/util/InventoryUtil.java b/src/com/massivecraft/massivecore/util/InventoryUtil.java index 28c39260..3c37bdb3 100644 --- a/src/com/massivecraft/massivecore/util/InventoryUtil.java +++ b/src/com/massivecraft/massivecore/util/InventoryUtil.java @@ -6,6 +6,7 @@ import java.util.Collection; import java.util.Collections; import java.util.Comparator; import java.util.HashMap; +import java.util.Iterator; import java.util.List; import java.util.Map.Entry; @@ -32,6 +33,8 @@ import com.massivecraft.massivecore.comparator.ComparatorComparable; import com.massivecraft.massivecore.comparator.ComparatorEntryValue; import com.massivecraft.massivecore.event.EventMassiveCoreLorePriority; import com.massivecraft.massivecore.mixin.MixinInventory; +import com.massivecraft.massivecore.predicate.Predicate; +import com.massivecraft.massivecore.predicate.PredicateStringStartsWith; public class InventoryUtil { @@ -1252,4 +1255,52 @@ public class InventoryUtil } } + // -------------------------------------------- // + // LORE PREFIX + // -------------------------------------------- // + + public static void removeLoreMatching(ItemStack item, Predicate predicate) + { + if (predicate == null) throw new NullPointerException("prefix"); + + List lore = getLore(item); + if (lore == null) return; + + for (Iterator it = lore.iterator(); it.hasNext();) + { + String line = it.next(); + if (!predicate.apply(line)) continue; + it.remove(); + } + + setLore(item, lore); + } + + public static void removeLoreWithPrefix(ItemStack item, String prefix) + { + removeLoreMatching(item, PredicateStringStartsWith.get(prefix)); + } + + public static List getLoreMatching(ItemStack item, Predicate predicate) + { + if (predicate == null) throw new NullPointerException("prefix"); + + List lore = getLore(item); + if (lore == null) return null; + + for (Iterator it = lore.iterator(); it.hasNext();) + { + String line = it.next(); + if (predicate.apply(line)) continue; + it.remove(); + } + + return lore; + } + + public static List getLoreWithPrefix(ItemStack item, String prefix) + { + return getLoreMatching(item, PredicateStringStartsWith.get(prefix)); + } + } diff --git a/src/com/massivecraft/massivecore/util/Txt.java b/src/com/massivecraft/massivecore/util/Txt.java index ac01cf66..dc2f0ace 100644 --- a/src/com/massivecraft/massivecore/util/Txt.java +++ b/src/com/massivecraft/massivecore/util/Txt.java @@ -1,5 +1,7 @@ package com.massivecraft.massivecore.util; +import static com.massivecraft.massivecore.mson.Mson.mson; + import java.util.AbstractMap.SimpleEntry; import java.util.ArrayList; import java.util.Arrays; @@ -27,8 +29,6 @@ import com.massivecraft.massivecore.mson.MsonEvent; import com.massivecraft.massivecore.predicate.Predicate; import com.massivecraft.massivecore.predicate.PredicateStartsWithIgnoreCase; -import static com.massivecraft.massivecore.mson.Mson.mson; - public class Txt { // -------------------------------------------- // @@ -43,8 +43,9 @@ public class Txt public static final Pattern PATTERN_WHITESPACE = Pattern.compile("\\s+"); public static final Pattern PATTERN_NEWLINE = Pattern.compile("\\r?\\n"); + public static final Pattern PATTERN_NUMBER = Pattern.compile("[0-9]+"); private static final Pattern PATTERN_UPPERCASE_ZEROWIDTH = Pattern.compile("(?=[A-Z])"); // NOTE: Use camelsplit instead for Java 6/7 compatibility. - + public static final long millisPerSecond = 1000; public static final long millisPerMinute = 60 * millisPerSecond; public static final long millisPerHour = 60 * millisPerMinute;