From ee907f1d6ade88a864991521d17ea1538164bf32 Mon Sep 17 00:00:00 2001 From: BuildTools Date: Mon, 22 Feb 2016 15:31:58 +0100 Subject: [PATCH] Use Mson as visuals --- .../massivecore/MassiveException.java | 33 ++- .../command/DeprecatedCommand.java | 4 - .../massivecore/command/VersionCommand.java | 1 - .../command/editor/CommandEditAbstract.java | 59 ++++-- .../editor/CommandEditContainerAbstract.java | 13 +- .../massivecore/command/editor/Property.java | 25 ++- .../massivecore/command/type/Type.java | 19 +- .../command/type/TypeAbstract.java | 53 +++-- .../command/type/TypeAbstractChoice.java | 25 +-- .../command/type/TypeTransformer.java | 74 ++++--- .../command/type/container/TypeContainer.java | 40 +++- .../mixin/ActionbarMixinDefault.java | 3 +- .../massivecraft/massivecore/mson/Mson.java | 190 ++++++++++++++++-- .../massivecraft/massivecore/store/Coll.java | 2 - 14 files changed, 390 insertions(+), 151 deletions(-) diff --git a/src/com/massivecraft/massivecore/MassiveException.java b/src/com/massivecraft/massivecore/MassiveException.java index e3e57663..afc88820 100644 --- a/src/com/massivecraft/massivecore/MassiveException.java +++ b/src/com/massivecraft/massivecore/MassiveException.java @@ -2,10 +2,8 @@ package com.massivecraft.massivecore; import java.util.Arrays; import java.util.Collection; -import java.util.List; -import com.massivecraft.massivecore.collections.MassiveList; -import com.massivecraft.massivecore.util.Txt; +import com.massivecraft.massivecore.mson.Mson; public class MassiveException extends Exception @@ -20,32 +18,31 @@ public class MassiveException extends Exception // MESSAGES // -------------------------------------------- // - protected List messages = new MassiveList(); + protected Mson messages = Mson.mson(); public boolean hasMessages() { return ! this.messages.isEmpty(); } - public List getMessages() { return this.messages; } + public Mson getMessages() { return this.messages; } @Override public String getMessage() { - return Txt.implode(this.getMessages(), "\n"); + return this.messages.toPlain(true); } - public MassiveException setMessage(String message) { this.messages = new MassiveList(message); return this; } - public MassiveException setMsg(String msg) { return this.setMessage(Txt.parse(msg)); } - public MassiveException setMsg(String msg, Object... args) { return this.setMessage(Txt.parse(msg, args)); } + // Set single + public MassiveException setMessage(Object part) { this.messages = Mson.mson(part); return this; } + public MassiveException setMsg(String msg) { this.messages = Mson.parse(msg); return this; } + public MassiveException setMsg(String msg, Object... objects) { this.messages = Mson.parse(msg, objects); return this; } - public MassiveException addMessage(String message) { this.getMessages().add(message); return this; } - public MassiveException addMsg(String msg) { return this.addMessage(Txt.parse(msg)); } - public MassiveException addMsg(String msg, Object... args) { return this.addMessage(Txt.parse(msg, args)); } + // Add single + public MassiveException addMessage(Object part) { this.messages = this.messages.add(Mson.mson("\n", part)); return this; } + public MassiveException addMsg(String msg) { return this.addMessage(Mson.parse(msg)); } + public MassiveException addMsg(String msg, Object... args) { return this.addMessage(Mson.parse(msg, args)); } - public MassiveException setMessages(Collection messages) { this.messages = new MassiveList(messages); return this; } - public MassiveException setMessages(String... messages) { return this.setMessages(Arrays.asList(messages)); } - public MassiveException setMsgs(Collection msgs) { return this.setMessages(Txt.parse(msgs)); } + // Set several + public MassiveException setMsgs(Collection msgs) { this.messages = Mson.parse(msgs); return this; } public MassiveException setMsgs(String... msgs) { return this.setMsgs(Arrays.asList(msgs)); } - public MassiveException addMessages(Collection messages) { this.getMessages().addAll(messages); return this; } - public MassiveException addMessages(String... messages) { return this.addMessages(Arrays.asList(messages)); } - public MassiveException addMsgs(Collection messages) { this.getMessages().addAll(messages); return this; } + public MassiveException addMsgs(Collection msgs) { return this.addMessage(Mson.parse(msgs)); } public MassiveException addMsgs(String... msgs) { return this.addMsgs(Arrays.asList(msgs)); } } diff --git a/src/com/massivecraft/massivecore/command/DeprecatedCommand.java b/src/com/massivecraft/massivecore/command/DeprecatedCommand.java index b713ce7a..723a28a7 100644 --- a/src/com/massivecraft/massivecore/command/DeprecatedCommand.java +++ b/src/com/massivecraft/massivecore/command/DeprecatedCommand.java @@ -1,9 +1,5 @@ package com.massivecraft.massivecore.command; -import com.massivecraft.massivecore.command.MassiveCommand; -import com.massivecraft.massivecore.command.Visibility; - - public class DeprecatedCommand extends MassiveCommand { // -------------------------------------------- // diff --git a/src/com/massivecraft/massivecore/command/VersionCommand.java b/src/com/massivecraft/massivecore/command/VersionCommand.java index 3f07a9f6..6140c3d2 100644 --- a/src/com/massivecraft/massivecore/command/VersionCommand.java +++ b/src/com/massivecraft/massivecore/command/VersionCommand.java @@ -7,7 +7,6 @@ import java.util.List; import org.bukkit.plugin.Plugin; import org.bukkit.plugin.PluginDescriptionFile; -import com.massivecraft.massivecore.command.MassiveCommand; import com.massivecraft.massivecore.command.requirement.RequirementHasPerm; import com.massivecraft.massivecore.util.Txt; diff --git a/src/com/massivecraft/massivecore/command/editor/CommandEditAbstract.java b/src/com/massivecraft/massivecore/command/editor/CommandEditAbstract.java index 740a1871..78914aba 100644 --- a/src/com/massivecraft/massivecore/command/editor/CommandEditAbstract.java +++ b/src/com/massivecraft/massivecore/command/editor/CommandEditAbstract.java @@ -3,6 +3,7 @@ package com.massivecraft.massivecore.command.editor; import java.util.List; import java.util.Map.Entry; +import org.bukkit.ChatColor; import org.bukkit.command.CommandSender; import org.bukkit.permissions.Permission; @@ -13,8 +14,8 @@ import com.massivecraft.massivecore.command.requirement.RequirementEditorUse; import com.massivecraft.massivecore.command.requirement.RequirementHasPerm; import com.massivecraft.massivecore.command.type.Type; import com.massivecraft.massivecore.event.EventMassiveCoreEditorEdit; +import com.massivecraft.massivecore.mson.Mson; import com.massivecraft.massivecore.util.PermUtil; -import com.massivecraft.massivecore.util.Txt; public class CommandEditAbstract extends MassiveCommand { @@ -128,24 +129,32 @@ public class CommandEditAbstract extends MassiveCommand this.attemptSetPerform(after); } - protected String attemptSetNochangeMessage() + protected Mson attemptSetNochangeMessage() { - - return Txt.parse("%s for %s already: %s", this.getProperty().getDisplayName(), this.getObjectVisual(), this.getInheritedVisual()); + return mson( + this.getProperty().getDisplayNameMson(), + " for ", + this.getObjectVisual(), + " already: ", + this.getInheritedVisual() + ).color(ChatColor.GRAY); } protected void attemptSetPerform(V after) { String descProperty = this.getProperty().getDisplayName(); - String descObject = this.getObjectVisual(); - String descValue = this.getInheritedVisual(); + Mson descObject = this.getObjectVisual(); + Mson descValue = this.getInheritedVisual(); // Create messages - List messages = new MassiveList<>(); + List messages = new MassiveList<>(); // Before // We inform what the value was before. - messages.add(Txt.parse("Before: %s", descValue)); + messages.add(mson( + mson("Before: ").color(ChatColor.AQUA), + descValue + )); // Apply // We set the new property value. @@ -154,13 +163,21 @@ public class CommandEditAbstract extends MassiveCommand // After // We inform what the value is after. descValue = this.getInheritedVisual(); - messages.add(Txt.parse("After: %s", descValue)); + messages.add(mson( + mson("After: ").color(ChatColor.AQUA), + descValue + )); // Startup // We inform what property and object the edit is taking place on. // The visual might change after modification, so this should be added after we have made the change. descObject = this.getObjectVisual(); - messages.add(0, Txt.parse("%s for %s edited:", descProperty, descObject)); + messages.add(0, mson( + descProperty, + " for ", + descObject, + " edited:" + ).color(ChatColor.GRAY)); message(messages); } @@ -194,9 +211,9 @@ public class CommandEditAbstract extends MassiveCommand return this.getSettings().getUsedPermission(); } - public String getObjectVisual() + public Mson getObjectVisual() { - return this.getObjectType().getVisual(this.getObject(), sender); + return this.getObjectType().getVisualMson(this.getObject(), sender); } // -------------------------------------------- // @@ -246,12 +263,12 @@ public class CommandEditAbstract extends MassiveCommand return this.getProperty().getInheritedValue(this.getObject()); } - public String getInheritedVisual(O source, V value) + public Mson getInheritedVisual(O source, V value) { return this.getProperty().getInheritedVisual(this.getObject(), source, value, sender); } - public String getInheritedVisual() + public Mson getInheritedVisual() { return this.getProperty().getInheritedVisual(this.getObject(), sender); } @@ -282,10 +299,16 @@ public class CommandEditAbstract extends MassiveCommand public void show(CommandSender sender) { - String descProperty = this.getProperty().getDisplayName(); - String descObject = this.getObjectVisual(); - String descValue = this.getInheritedVisual(); - msg("%s for %s: %s", descProperty, descObject, descValue); + Mson descProperty = this.getProperty().getDisplayNameMson(); + Mson descObject = this.getObjectVisual(); + Mson descValue = this.getInheritedVisual(); + message(mson( + descProperty, + " for ", + descObject, + ": ", + descValue + ).color(ChatColor.GRAY)); } public void requireNullable() throws MassiveException diff --git a/src/com/massivecraft/massivecore/command/editor/CommandEditContainerAbstract.java b/src/com/massivecraft/massivecore/command/editor/CommandEditContainerAbstract.java index c0a23ba7..47e2402c 100644 --- a/src/com/massivecraft/massivecore/command/editor/CommandEditContainerAbstract.java +++ b/src/com/massivecraft/massivecore/command/editor/CommandEditContainerAbstract.java @@ -1,6 +1,9 @@ package com.massivecraft.massivecore.command.editor; import java.util.AbstractMap.SimpleImmutableEntry; + +import org.bukkit.ChatColor; + import java.util.Collection; import java.util.List; @@ -9,6 +12,7 @@ import com.massivecraft.massivecore.collections.MassiveList; import com.massivecraft.massivecore.command.requirement.RequirementEditorPropertyCreated; import com.massivecraft.massivecore.command.type.Type; import com.massivecraft.massivecore.command.type.TypeNullable; +import com.massivecraft.massivecore.mson.Mson; import com.massivecraft.massivecore.util.ContainerUtil; import com.massivecraft.massivecore.util.Txt; @@ -85,9 +89,14 @@ public abstract class CommandEditContainerAbstract extends CommandEditAbst // -------------------------------------------- // @Override - public String attemptSetNochangeMessage() + public Mson attemptSetNochangeMessage() { - return Txt.parse("%s for %s was not changed.", this.getProperty().getDisplayName(), this.getObjectVisual()); + return mson( + this.getProperty().getDisplayNameMson(), + " for ", + this.getObjectVisual(), + " not changed." + ).color(ChatColor.GRAY); } @SuppressWarnings("unchecked") diff --git a/src/com/massivecraft/massivecore/command/editor/Property.java b/src/com/massivecraft/massivecore/command/editor/Property.java index 9ae90976..0f25e579 100644 --- a/src/com/massivecraft/massivecore/command/editor/Property.java +++ b/src/com/massivecraft/massivecore/command/editor/Property.java @@ -1,18 +1,18 @@ package com.massivecraft.massivecore.command.editor; +import java.util.AbstractMap.SimpleEntry; +import java.util.Arrays; +import java.util.Collection; import java.util.List; import java.util.Map.Entry; import org.bukkit.ChatColor; import org.bukkit.command.CommandSender; -import java.util.AbstractMap.SimpleEntry; -import java.util.Arrays; -import java.util.Collection; - import com.massivecraft.massivecore.Named; import com.massivecraft.massivecore.collections.MassiveList; import com.massivecraft.massivecore.command.type.Type; +import com.massivecraft.massivecore.mson.Mson; import com.massivecraft.massivecore.store.Entity; import com.massivecraft.massivecore.util.MUtil; import com.massivecraft.massivecore.util.Txt; @@ -150,9 +150,9 @@ public abstract class Property implements Named return this.getValueType().createEditCommand(settings, this); } - public String getInheritedVisual(O object, O source, V value, CommandSender sender) + public Mson getInheritedVisual(O object, O source, V value, CommandSender sender) { - String string = this.getValueType().getVisual(value, sender); + Mson mson = this.getValueType().getVisualMson(value, sender); /*if (string == null) { System.out.println("value type " + this.getValueType()); @@ -163,16 +163,16 @@ public abstract class Property implements Named System.out.println("sender " + sender); }*/ - String suffix = null; + Mson suffix = null; if (source != null && ! source.equals(object)) { - suffix = Txt.parse("[%s]", this.getObjectType().getVisual(source)); + suffix = Mson.parse("[%s]").replaceAll("%s", this.getObjectType().getVisualMson(source)); } - return Txt.prepondfix(null, string, suffix); + return Mson.prepondfix(null, mson, suffix); } - public String getInheritedVisual(O object, CommandSender sender) + public Mson getInheritedVisual(O object, CommandSender sender) { Entry inherited = this.getInheritedEntry(object); O source = inherited.getKey(); @@ -184,6 +184,11 @@ public abstract class Property implements Named // VISUAL // -------------------------------------------- // + public Mson getDisplayNameMson() + { + return Mson.mson(this.getName()).color(ChatColor.AQUA); + } + public String getDisplayName() { return ChatColor.AQUA.toString() + this.getName(); diff --git a/src/com/massivecraft/massivecore/command/type/Type.java b/src/com/massivecraft/massivecore/command/type/Type.java index dff137c3..cb71bca2 100644 --- a/src/com/massivecraft/massivecore/command/type/Type.java +++ b/src/com/massivecraft/massivecore/command/type/Type.java @@ -4,6 +4,7 @@ import java.util.Collection; import java.util.Comparator; import java.util.List; import java.util.Set; + import org.bukkit.ChatColor; import org.bukkit.command.CommandSender; @@ -11,6 +12,7 @@ import com.massivecraft.massivecore.MassiveException; import com.massivecraft.massivecore.command.editor.CommandEditAbstract; import com.massivecraft.massivecore.command.editor.EditSettings; import com.massivecraft.massivecore.command.editor.Property; +import com.massivecraft.massivecore.mson.Mson; public interface Type { @@ -41,6 +43,16 @@ public interface Type public ChatColor getVisualColor(T value); public void setVisualColor(ChatColor color); + // -------------------------------------------- // + // WRITE VISUAL MSON + // -------------------------------------------- // + // A visual mson. + + public Mson getVisualMsonInner(T value, CommandSender sender); + public Mson getVisualMsonInner(T value); + public Mson getVisualMson(T value, CommandSender sender); + public Mson getVisualMson(T value); + // -------------------------------------------- // // WRITE VISUAL // -------------------------------------------- // @@ -50,12 +62,7 @@ public interface Type public String getVisualInner(T value); public String getVisual(T value, CommandSender sender); public String getVisual(T value); - - public Set getVisualsInner(T value, CommandSender sender); - public Set getVisualsInner(T value); - public Set getVisuals(T value, CommandSender sender); - public Set getVisuals(T value); - + // -------------------------------------------- // // WRITE NAME // -------------------------------------------- // diff --git a/src/com/massivecraft/massivecore/command/type/TypeAbstract.java b/src/com/massivecraft/massivecore/command/type/TypeAbstract.java index 4615e60e..5528ed66 100644 --- a/src/com/massivecraft/massivecore/command/type/TypeAbstract.java +++ b/src/com/massivecraft/massivecore/command/type/TypeAbstract.java @@ -9,6 +9,7 @@ import java.util.LinkedHashSet; import java.util.List; import java.util.ListIterator; import java.util.Set; + import org.bukkit.ChatColor; import org.bukkit.command.CommandSender; @@ -20,6 +21,7 @@ import com.massivecraft.massivecore.command.editor.CommandEditSimple; import com.massivecraft.massivecore.command.editor.EditSettings; import com.massivecraft.massivecore.command.editor.Property; import com.massivecraft.massivecore.comparator.ComparatorHashCode; +import com.massivecraft.massivecore.mson.Mson; import com.massivecraft.massivecore.store.Entity; import com.massivecraft.massivecore.store.SenderEntity; import com.massivecraft.massivecore.util.ContainerUtil; @@ -35,6 +37,10 @@ public abstract class TypeAbstract implements Type public static final String EMPTY = Txt.parse("EMPTY"); public static final String UNKNOWN = Txt.parse("???"); + public static final Mson MSON_NULL = Mson.fromParsedMessage(NULL); + public static final Mson MSON_EMPTY = Mson.fromParsedMessage(EMPTY); + public static final Mson MSON_UNKNOWN = Mson.fromParsedMessage(UNKNOWN); + public static final ChatColor COLOR_DEFAULT = ChatColor.YELLOW; public static final ChatColor COLOR_NUMBER = ChatColor.LIGHT_PURPLE; @@ -93,6 +99,32 @@ public abstract class TypeAbstract implements Type return this.getVisualColor(value, null); } + // -------------------------------------------- // + // WRITE VISUAL MSON + // -------------------------------------------- // + // A visual mson. + + public Mson getVisualMsonInner(T value, CommandSender sender) + { + return Mson.fromParsedMessage(this.getVisualInner(value, sender)).tooltip("LUL, TEST"); + } + + public Mson getVisualMsonInner(T value) + { + return this.getVisualMson(value, null); + } + + public Mson getVisualMson(T value, CommandSender sender) + { + if (value == null) return MSON_NULL; + return this.getVisualMsonInner(value, sender); + } + public Mson getVisualMson(T value) + { + if (value == null) return MSON_NULL; + return this.getVisualMsonInner(value); + } + // -------------------------------------------- // // WRITE VISUAL // -------------------------------------------- // @@ -122,26 +154,7 @@ public abstract class TypeAbstract implements Type { return this.getVisual(value, null); } - - public Set getVisualsInner(T value, CommandSender sender) - { - return Collections.singleton(this.getVisualInner(value, sender)); - } - public Set getVisualsInner(T value) - { - return this.getVisualsInner(value, null); - } - - public Set getVisuals(T value, CommandSender sender) - { - if (value == null) return Collections.singleton(NULL); - return this.getVisualsInner(value, sender); - } - public Set getVisuals(T value) - { - return this.getVisuals(value, null); - } - + // -------------------------------------------- // // WRITE NAME // -------------------------------------------- // diff --git a/src/com/massivecraft/massivecore/command/type/TypeAbstractChoice.java b/src/com/massivecraft/massivecore/command/type/TypeAbstractChoice.java index 2355afce..35cec8ca 100644 --- a/src/com/massivecraft/massivecore/command/type/TypeAbstractChoice.java +++ b/src/com/massivecraft/massivecore/command/type/TypeAbstractChoice.java @@ -6,8 +6,8 @@ import java.util.Collections; import java.util.List; import java.util.Map; import java.util.Map.Entry; -import java.util.regex.Pattern; import java.util.Set; +import java.util.regex.Pattern; import org.apache.commons.lang.StringUtils; import org.bukkit.command.CommandSender; @@ -19,6 +19,7 @@ import com.massivecraft.massivecore.collections.MassiveSet; import com.massivecraft.massivecore.collections.MassiveTreeSet; import com.massivecraft.massivecore.command.type.container.AllAble; import com.massivecraft.massivecore.comparator.ComparatorCaseInsensitive; +import com.massivecraft.massivecore.mson.Mson; import com.massivecraft.massivecore.util.ReflectionUtil; import com.massivecraft.massivecore.util.Txt; @@ -28,10 +29,10 @@ public abstract class TypeAbstractChoice extends TypeAbstract implements A // CONSTANTS // -------------------------------------------- // - public final static String SUGGEST_FORMAT = Txt.parse("%s"); - public final static String SUGGEST_COMMMA = Txt.parse(" | "); - public final static String SUGGEST_AND = Txt.parse(" | "); - public final static String SUGGEST_DOT = Txt.parse(""); + public final static Mson SUGGEST_FORMAT = Mson.parse("%s"); + public final static Mson SUGGEST_COMMMA = Mson.parse(" | "); + public final static Mson SUGGEST_AND = Mson.parse(" | "); + public final static Mson SUGGEST_DOT = Mson.parse(""); // -------------------------------------------- // // FIELDS @@ -174,10 +175,10 @@ public abstract class TypeAbstractChoice extends TypeAbstract implements A else { Collection suggestions = null; - String format = SUGGEST_FORMAT; - String comma = SUGGEST_COMMMA; - String and = SUGGEST_AND; - String dot = SUGGEST_DOT; + Mson format = SUGGEST_FORMAT; + Mson comma = SUGGEST_COMMMA; + Mson and = SUGGEST_AND; + Mson dot = SUGGEST_DOT; if (suggestAmbiguous) { @@ -206,12 +207,12 @@ public abstract class TypeAbstractChoice extends TypeAbstract implements A } else { - List visuals = new MassiveList(); + List visuals = new MassiveList<>(); for (T value : suggestions) { - visuals.add(this.getVisual(value, sender)); + visuals.add(this.getVisualMson(value, sender)); } - exception.addMessage(message + Txt.implodeCommaAndDot(visuals, format, comma, and, dot)); + exception.addMessage(Mson.mson(message, Mson.implodeCommaAndDot(visuals, format, comma, and, dot))); } } diff --git a/src/com/massivecraft/massivecore/command/type/TypeTransformer.java b/src/com/massivecraft/massivecore/command/type/TypeTransformer.java index 8a480b44..e68b85c1 100644 --- a/src/com/massivecraft/massivecore/command/type/TypeTransformer.java +++ b/src/com/massivecraft/massivecore/command/type/TypeTransformer.java @@ -12,6 +12,7 @@ import com.massivecraft.massivecore.collections.MassiveSet; import com.massivecraft.massivecore.command.editor.CommandEditAbstract; import com.massivecraft.massivecore.command.editor.EditSettings; import com.massivecraft.massivecore.command.editor.Property; +import com.massivecraft.massivecore.mson.Mson; // The "inner" controls all ways the type behaves and "seems". // The "outer" type is how the type interfaces in source code. For example what is read. @@ -22,11 +23,16 @@ public abstract class TypeTransformer extends TypeAbstract // -------------------------------------------- // public static final String PREFIX = UNKNOWN + " "; + public static final String MSON_PREFIX = UNKNOWN + " "; public static String prefix(String string) { return PREFIX + string; } + public static Mson prefix(Mson mson) + { + return Mson.mson(MSON_PREFIX, mson); + } public static Set prefix(Set strings) { @@ -105,6 +111,42 @@ public abstract class TypeTransformer extends TypeAbstract INNER.setVisualColor(color); } + // -------------------------------------------- // + // WRITE VISUAL MSON + // -------------------------------------------- // + + @Override + public Mson getVisualMsonInner(O outer, CommandSender sender) + { + I inner = outerToInner(outer); + if (outer != null && inner == null) return prefix(OUTER.getVisualMsonInner(outer, sender)); + return INNER.getVisualMsonInner(inner, sender); + } + + @Override + public Mson getVisualMsonInner(O outer) + { + I inner = outerToInner(outer); + if (outer != null && inner == null) return prefix(OUTER.getVisualMsonInner(outer)); + return INNER.getVisualMsonInner(inner); + } + + @Override + public Mson getVisualMson(O outer, CommandSender sender) + { + I inner = outerToInner(outer); + if (outer != null && inner == null) return prefix(OUTER.getVisualMson(outer, sender)); + return INNER.getVisualMson(inner, sender); + } + + @Override + public Mson getVisualMson(O outer) + { + I inner = outerToInner(outer); + if (outer != null && inner == null) return prefix(OUTER.getVisualMson(outer)); + return INNER.getVisualMson(inner); + } + // -------------------------------------------- // // WRITE VISUAL // -------------------------------------------- // @@ -141,38 +183,6 @@ public abstract class TypeTransformer extends TypeAbstract return INNER.getVisual(inner); } - @Override - public Set getVisualsInner(O outer, CommandSender sender) - { - I inner = outerToInner(outer); - if (outer != null && inner == null) return prefix(OUTER.getVisualsInner(outer, sender)); - return INNER.getVisualsInner(inner, sender); - } - - @Override - public Set getVisualsInner(O outer) - { - I inner = outerToInner(outer); - if (outer != null && inner == null) return prefix(OUTER.getVisualsInner(outer)); - return INNER.getVisualsInner(inner); - } - - @Override - public Set getVisuals(O outer, CommandSender sender) - { - I inner = outerToInner(outer); - if (outer != null && inner == null) return prefix(OUTER.getVisuals(outer, sender)); - return INNER.getVisuals(inner, sender); - } - - @Override - public Set getVisuals(O outer) - { - I inner = outerToInner(outer); - if (outer != null && inner == null) return prefix(OUTER.getVisuals(outer)); - return INNER.getVisuals(inner); - } - // -------------------------------------------- // // WRITE NAME // -------------------------------------------- // diff --git a/src/com/massivecraft/massivecore/command/type/container/TypeContainer.java b/src/com/massivecraft/massivecore/command/type/container/TypeContainer.java index bab2722a..02754259 100644 --- a/src/com/massivecraft/massivecore/command/type/container/TypeContainer.java +++ b/src/com/massivecraft/massivecore/command/type/container/TypeContainer.java @@ -4,6 +4,7 @@ import java.util.Arrays; import java.util.Collection; import java.util.List; +import org.bukkit.ChatColor; import org.bukkit.command.CommandSender; import com.massivecraft.massivecore.MassiveException; @@ -14,6 +15,7 @@ import com.massivecraft.massivecore.command.editor.EditSettings; import com.massivecraft.massivecore.command.editor.Property; import com.massivecraft.massivecore.command.type.Type; import com.massivecraft.massivecore.command.type.TypeAbstract; +import com.massivecraft.massivecore.mson.Mson; import com.massivecraft.massivecore.util.ContainerUtil; import com.massivecraft.massivecore.util.Txt; @@ -47,6 +49,38 @@ public abstract class TypeContainer extends TypeAbstract // WRITE VISUAL // -------------------------------------------- // + @Override + public Mson getVisualMsonInner(C container, CommandSender sender) + { + // Empty + if (ContainerUtil.isEmpty(container)) return MSON_EMPTY; + + // Create + List parts = new MassiveList<>(); + + // Fill + List elements = this.getContainerElementsOrdered(container); + Type innerType = this.getInnerType(); + int index = -1; + for (E element : elements) + { + index++; + Mson part = Mson.mson( + Mson.mson(String.valueOf(index)).color(ChatColor.WHITE), + " ", + innerType.getVisualMsonInner(element, sender) + ); + parts.add(part); + } + + // Return + return Mson.implode(parts, Mson.mson("\n")); + } + + // -------------------------------------------- // + // WRITE VISUAL + // -------------------------------------------- // + @Override public String getVisualInner(C container, CommandSender sender) { @@ -54,7 +88,7 @@ public abstract class TypeContainer extends TypeAbstract if (ContainerUtil.isEmpty(container)) return EMPTY; // Create - List parts = new MassiveList(); + List parts = new MassiveList<>(); // Fill List elements = this.getContainerElementsOrdered(container); @@ -82,7 +116,7 @@ public abstract class TypeContainer extends TypeAbstract if (ContainerUtil.isEmpty(container)) return ""; // Create - List parts = new MassiveList(); + List parts = new MassiveList<>(); // Fill List elements = this.getContainerElementsOrdered(container); @@ -108,7 +142,7 @@ public abstract class TypeContainer extends TypeAbstract if (ContainerUtil.isEmpty(container)) return ""; // Create - List parts = new MassiveList(); + List parts = new MassiveList<>(); // Fill Type innerType = this.getInnerType(); diff --git a/src/com/massivecraft/massivecore/mixin/ActionbarMixinDefault.java b/src/com/massivecraft/massivecore/mixin/ActionbarMixinDefault.java index f933158f..d0b32168 100644 --- a/src/com/massivecraft/massivecore/mixin/ActionbarMixinDefault.java +++ b/src/com/massivecraft/massivecore/mixin/ActionbarMixinDefault.java @@ -1,9 +1,10 @@ package com.massivecraft.massivecore.mixin; +import org.bukkit.entity.Player; + import com.massivecraft.massivecore.mson.Mson; import com.massivecraft.massivecore.nms.NmsPacket; import com.massivecraft.massivecore.util.IdUtil; -import org.bukkit.entity.Player; public class ActionbarMixinDefault extends ActionbarMixinAbstract { diff --git a/src/com/massivecraft/massivecore/mson/Mson.java b/src/com/massivecraft/massivecore/mson/Mson.java index d4888094..98951682 100644 --- a/src/com/massivecraft/massivecore/mson/Mson.java +++ b/src/com/massivecraft/massivecore/mson/Mson.java @@ -4,12 +4,14 @@ import java.io.Serializable; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; +import java.util.Collections; import java.util.List; import java.util.ListIterator; import java.util.Objects; import java.util.regex.Matcher; import java.util.regex.Pattern; +import org.apache.commons.lang.mutable.MutableInt; import org.bukkit.ChatColor; import org.bukkit.command.CommandSender; import org.bukkit.inventory.ItemStack; @@ -521,7 +523,7 @@ public class Mson implements Serializable { if (parts == null) throw new NullPointerException("parts"); - List msons = new MassiveList(); + List msons = new MassiveList<>(); for (Object part : parts) { @@ -534,7 +536,17 @@ public class Mson implements Serializable // -------------------------------------------- // // PARSE & FORMAT // -------------------------------------------- // - + + public static Mson fromParsedMessages(Collection messages) + { + List extra = new MassiveList<>(messages.size()); + for (String message : messages) + { + extra.add(fromParsedMessage(message)); + } + return mson(extra); + } + public static Mson fromParsedMessage(String message) { if (message == null) throw new NullPointerException("message"); @@ -551,7 +563,7 @@ public class Mson implements Serializable // We don't want that empty element. parts = Arrays.copyOfRange(parts, 1, parts.length); - List msons = new ArrayList(); + List msons = new MassiveList<>(); ChatColor latestColor = null; Boolean bold = null; @@ -603,6 +615,7 @@ public class Mson implements Serializable // Parse redirects, convert to Mson directly public static Mson parse(String string) { return Mson.fromParsedMessage(Txt.parse(string)); } + public static Mson parse(Collection strings) { return Mson.fromParsedMessages(Txt.parse(strings)); } public static Mson parse(String format, Object... args) { return Mson.fromParsedMessage(Txt.parse(format, args)); } public static Mson format(String format, Object... args) @@ -754,29 +767,15 @@ public class Mson implements Serializable if (regex == null) throw new NullPointerException("regex"); if (replacement == null) throw new NullPointerException("replacement"); - return replaceAll(Pattern.compile(regex), replacement); + return replaceAll(regex, mson(replacement)); } public Mson replaceAll(Pattern pattern, String replacement) { if (pattern == null) throw new NullPointerException("pattern"); if (replacement == null) throw new NullPointerException("replacement"); - - Mson ret = this.text(pattern.matcher(this.getText()).replaceAll(replacement)); - - if (this.hasExtra()) - { - Mson[] extra = new Mson[this.getExtra().size()]; - int i = 0; - for (Mson part : this.getExtra()) - { - extra[i] = part.replaceAll(pattern, replacement); - i++; - } - ret = ret.extra(extra); - } - return ret; + return replaceAll(pattern, mson(replacement)); } // Special replace all @@ -785,21 +784,39 @@ public class Mson implements Serializable { if (regex == null) throw new NullPointerException("regex"); if (replacement == null) throw new NullPointerException("replacement"); - return this.replaceAll(Pattern.compile(regex), replacement); + return this.replaceAll(regex, new Mson[]{replacement}); } public Mson replaceAll(Pattern pattern, final Mson replacement) { if (pattern == null) throw new NullPointerException("pattern"); if (replacement == null) throw new NullPointerException("replacement"); + + return this.replaceAll(pattern, new Mson[]{replacement}); + } + + public Mson replaceAll(String regex, Mson... replacements) + { + if (regex == null) throw new NullPointerException("regex"); + if (replacements == null) throw new NullPointerException("replacements"); + return this.replaceAll(Pattern.compile(regex), replacements); + } + + public Mson replaceAll(Pattern pattern, final Mson... replacements) + { + if (pattern == null) throw new NullPointerException("pattern"); + if (replacements == null) throw new NullPointerException("replacements"); + + final MutableInt i = new MutableInt(0); MsonReplacement replacer = new MsonReplacement() { @Override public Mson getReplacement(String match, Mson parent) { - return replacement; + int idx = i.intValue(); + i.setValue(idx+1); + return replacements[idx % replacements.length]; } - }; return this.replaceAll(pattern, replacer); } @@ -892,7 +909,136 @@ public class Mson implements Serializable return ret; } + + // -------------------------------------------- // + // IMPLODE + // -------------------------------------------- // + + // Implode simple + public static Mson implode(final Object[] list, final Mson glue, final Mson format) + { + List parts = new MassiveList<>(); + for (int i = 0; i < list.length; i++) + { + Object item = list[i]; + Mson part = (item == null ? mson("NULL") : Mson.mson(item)); + + if (i != 0) + { + parts.add(glue); + } + if (format != null) + { + part = format.replaceAll("%s", part); + } + parts.add(part); + } + return Mson.mson(parts); + } + public static Mson implode(final Object[] list, final Mson glue) + { + return implode(list, glue, null); + } + public static Mson implode(final Collection coll, final Mson glue, final Mson format) + { + return implode(coll.toArray(new Object[0]), glue, format); + } + public static Mson implode(final Collection coll, final Mson glue) + { + return implode(coll, glue, null); + } + + // Implode comma and dot + public static Mson implodeCommaAndDot(Collection objects, Mson format, Mson comma, Mson and, Mson dot) + { + if (objects.size() == 0) return mson(); + if (objects.size() == 1) + { + return implode(objects, comma, format); + } + + List ourObjects = new MassiveList<>(objects); + + Mson ultimateItem = mson(ourObjects.remove(ourObjects.size()-1)); + Mson penultimateItem = mson(ourObjects.remove(ourObjects.size()-1)); + if (format != null) + { + ultimateItem = format.replaceAll("%s", ultimateItem); + penultimateItem = format.replaceAll("%s", penultimateItem); + } + Mson merge = mson(penultimateItem, and, ultimateItem); + ourObjects.add(merge); + + return implode(ourObjects, comma, format).add(mson(dot)); + } + + public static Mson implodeCommaAndDot(final Collection objects, Mson comma, Mson and, Mson dot) + { + return implodeCommaAndDot(objects, null, comma, and, dot); + } + public static Mson implodeCommaAnd(final Collection objects, Mson comma, Mson and) + { + return implodeCommaAndDot(objects, comma, and, mson()); + } + public static Mson implodeCommaAndDot(final Collection objects, ChatColor color) + { + return implodeCommaAndDot(objects, mson(", ").color(color), mson(" and ").color(color), mson(".").color(color)); + } + public static Mson implodeCommaAnd(final Collection objects, ChatColor color) + { + return implodeCommaAndDot(objects, mson(", ").color(color), mson(" and ").color(color), mson()); + } + public static Mson implodeCommaAndDot(final Collection objects) + { + return implodeCommaAndDot(objects, null); + } + public static Mson implodeCommaAnd(final Collection objects) + { + return implodeCommaAnd(objects, null); + } + + // -------------------------------------------- // + // PREPONDFIX + // -------------------------------------------- // + // This weird algorithm takes: + // - A prefix + // - A centerpiece single string or a list of strings. + // - A suffix + // If the centerpiece is a single String it just concatenates prefix + centerpiece + suffix. + // If the centerpiece is multiple Strings it concatenates prefix + suffix and then appends the centerpice at the end. + // This algorithm is used in the editor system. + + public static List prepondfix(Mson prefix, List msons, Mson suffix) + { + // Create + List ret = new MassiveList<>(); + + // Fill + List parts = new MassiveList<>(); + if (prefix != null) parts.add(prefix); + if (msons.size() == 1) parts.add(msons.get(0)); + if (suffix != null) parts.add(suffix); + + ret.add(implode(parts, SPACE)); + + if (msons.size() != 1) + { + ret.addAll(msons); + } + + // Return + return ret; + } + + public static Mson prepondfix(Mson prefix, Mson mson, Mson suffix) + { + // HELP! How do I do this? + //List strings = Arrays.asList(PATTERN_NEWLINE.split(string)); + List ret = prepondfix(prefix, Collections.singletonList(mson), suffix); + return implode(ret, mson("\n")); + } + // -------------------------------------------- // // MESSAGE // -------------------------------------------- // diff --git a/src/com/massivecraft/massivecore/store/Coll.java b/src/com/massivecraft/massivecore/store/Coll.java index 57630a31..43c7e5f2 100644 --- a/src/com/massivecraft/massivecore/store/Coll.java +++ b/src/com/massivecraft/massivecore/store/Coll.java @@ -11,8 +11,6 @@ import java.util.TreeMap; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentSkipListMap; -import org.bukkit.plugin.Plugin; - import com.massivecraft.massivecore.MassiveCore; import com.massivecraft.massivecore.MassiveCoreMConf; import com.massivecraft.massivecore.MassivePlugin;