diff --git a/src/com/massivecraft/mcore2/cmd/HelpCommand.java b/src/com/massivecraft/mcore2/cmd/HelpCommand.java index 92bf3183..fbe84836 100644 --- a/src/com/massivecraft/mcore2/cmd/HelpCommand.java +++ b/src/com/massivecraft/mcore2/cmd/HelpCommand.java @@ -33,7 +33,7 @@ public class HelpCommand extends MCommand { if (subCommand.visibleTo(sender)) { - lines.add(subCommand.getUseageTemplate(this.commandChain, true)); + lines.add(subCommand.getUseageTemplate(this.commandChain, true, true)); } } diff --git a/src/com/massivecraft/mcore2/cmd/MCommand.java b/src/com/massivecraft/mcore2/cmd/MCommand.java index b78b58d4..94d74e3a 100644 --- a/src/com/massivecraft/mcore2/cmd/MCommand.java +++ b/src/com/massivecraft/mcore2/cmd/MCommand.java @@ -304,16 +304,25 @@ public abstract class MCommand // Help and Usage information // -------------------------------------------- // - public String getUseageTemplate(List commandChain, boolean addDesc) + public String getUseageTemplate(List commandChain, boolean addDesc, boolean onlyFirstAlias) { StringBuilder ret = new StringBuilder(); ret.append(Txt.parse("")); ret.append('/'); + boolean first = true; for (MCommand mc : commandChain) { - ret.append(Txt.implode(mc.aliases, ",")); + if (first && onlyFirstAlias) + { + ret.append(mc.aliases.get(0)); + } + else + { + ret.append(Txt.implode(mc.aliases, ",")); + } ret.append(' '); + first = false; } ret.append(Txt.implode(this.aliases, ",")); @@ -356,6 +365,11 @@ public abstract class MCommand return ret.toString(); } + public String getUseageTemplate(List commandChain, boolean addDesc) + { + return getUseageTemplate(commandChain, addDesc, false); + } + public String getUseageTemplate(boolean addDesc) { return getUseageTemplate(this.commandChain, addDesc); diff --git a/src/com/massivecraft/mcore2/persist/Persist.java b/src/com/massivecraft/mcore2/persist/Persist.java index 7849f7bf..19aa8273 100644 --- a/src/com/massivecraft/mcore2/persist/Persist.java +++ b/src/com/massivecraft/mcore2/persist/Persist.java @@ -133,11 +133,18 @@ public class Persist ArrayList ret = new ArrayList(items.size()); // WHERE - for (T item : items) + if (where == null) { - if (where.apply(item)) + ret.addAll(items); + } + else + { + for (T item : items) { - ret.add(item); + if (where.apply(item)) + { + ret.add(item); + } } } diff --git a/src/com/massivecraft/mcore2/util/IntervalUtil.java b/src/com/massivecraft/mcore2/util/IntervalUtil.java new file mode 100644 index 00000000..d9239e5b --- /dev/null +++ b/src/com/massivecraft/mcore2/util/IntervalUtil.java @@ -0,0 +1,147 @@ +package com.massivecraft.mcore2.util; + +import java.util.AbstractMap.SimpleEntry; +import java.util.Map.Entry; + +import com.massivecraft.mcore2.MCore; + +public class IntervalUtil +{ + // -------------------------------------------- // + // PARSING SIMPLE + // -------------------------------------------- // + public static Double parseDouble(String str, Double def) + { + if (str == null) return def; + try + { + return Double.valueOf(str); + } + catch (Exception e) + { + return def; + } + } + + public static Integer parseInteger(String str, Integer def) + { + if (str == null) return def; + try + { + return Integer.valueOf(str); + } + catch (Exception e) + { + return def; + } + } + + public static boolean isValidInterval(String interval) + { + return interval.matches("^.+to.+$"); + } + + // -------------------------------------------- // + // PARSING ADVANCED + // -------------------------------------------- // + + public static Entry parseDoubleInterval(String interval, Double dmin, Double dmax) + { + if (interval == null) + { + return new SimpleEntry(dmin, dmax); + } + + if (interval.contains("to")) + { + String[] parts = interval.split("to"); + if (parts.length == 2) + { + Double min = parseDouble(parts[0], dmin); + Double max = parseDouble(parts[1], dmax); + return new SimpleEntry(min, max); + } + } + Double single = parseDouble(interval, dmin); + return new SimpleEntry(single, single); + } + + public static Entry parseIntegerInterval(String interval, Integer dmin, Integer dmax) + { + if (interval == null) + { + return new SimpleEntry(dmin, dmax); + } + + if (interval.contains("to")) + { + String[] parts = interval.split("to"); + if (parts.length == 2) + { + Integer min = parseInteger(parts[0], dmin); + Integer max = parseInteger(parts[1], dmax); + return new SimpleEntry(min, max); + } + } + Integer single = parseInteger(interval, dmin); + return new SimpleEntry(single, single); + } + + // -------------------------------------------- // + // RANDOM SIMPLE + // -------------------------------------------- // + + public static int randomIntegerFromInterval(int min, int max) + { + return min+MCore.random.nextInt(max-min+1); + } + + public static int randomIntegerFromInterval(Entry interval) + { + int min = interval.getKey(); + int max = interval.getValue(); + return randomIntegerFromInterval(min, max); + } + + public static double randomDoubleFromInterval(double min, double max) + { + return min+MCore.random.nextDouble()*(max-min); + } + + public static double randomDoubleFromInterval(Entry interval) + { + double min = interval.getKey(); + double max = interval.getValue(); + return randomDoubleFromInterval(min, max); + } + + // -------------------------------------------- // + // RANDOM COMBINED + // -------------------------------------------- // + + public static Double randomDoubleFromInterval(String data, Double def) + { + if (isValidInterval(data)) + { + Entry interval = parseDoubleInterval(data, def, def); + return randomDoubleFromInterval(interval); + } + else + { + return parseDouble(data, def); + } + } + + public static Integer randomIntegerFromInterval(String data, Integer def) + { + if (isValidInterval(data)) + { + Entry interval = parseIntegerInterval(data, def, def); + return randomIntegerFromInterval(interval); + } + else + { + return parseInteger(data, def); + } + } +} diff --git a/src/com/massivecraft/mcore2/util/Txt.java b/src/com/massivecraft/mcore2/util/Txt.java index c9172fd4..14b20660 100644 --- a/src/com/massivecraft/mcore2/util/Txt.java +++ b/src/com/massivecraft/mcore2/util/Txt.java @@ -1,6 +1,7 @@ package com.massivecraft.mcore2.util; import java.util.*; +import java.util.AbstractMap.SimpleEntry; import java.util.Map.Entry; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -269,6 +270,23 @@ public class Txt return ret; } + public static String removeLeadingCommandDust(String string) + { + return string.replaceAll("^[/\\s]+", ""); + } + + public static Entry divideOnFirstSpace(String string) + { + String[] parts = string.split("\\s+", 2); + String first = parts[0]; + String second = null; + if (parts.length > 1) + { + second = parts[1]; + } + return new SimpleEntry(first, second); + } + // -------------------------------------------- // // Material name tools // -------------------------------------------- //