Use Mson as visuals
This commit is contained in:
		
							parent
							
								
									8668b9b744
								
							
						
					
					
						commit
						ee907f1d6a
					
				| @ -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<String> messages = new MassiveList<String>(); | ||||
| 	protected Mson messages = Mson.mson(); | ||||
| 	public boolean hasMessages() { return ! this.messages.isEmpty(); } | ||||
| 	public List<String> 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<String>(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<String> messages) { this.messages = new MassiveList<String>(messages); return this; } | ||||
| 	public MassiveException setMessages(String... messages) { return this.setMessages(Arrays.asList(messages)); } | ||||
| 	public MassiveException setMsgs(Collection<String> msgs) { return this.setMessages(Txt.parse(msgs)); } | ||||
| 	// Set several | ||||
| 	public MassiveException setMsgs(Collection<String> msgs) { this.messages = Mson.parse(msgs); return this; } | ||||
| 	public MassiveException setMsgs(String... msgs) { return this.setMsgs(Arrays.asList(msgs)); } | ||||
| 	 | ||||
| 	public MassiveException addMessages(Collection<String> messages) { this.getMessages().addAll(messages); return this; } | ||||
| 	public MassiveException addMessages(String... messages) { return this.addMessages(Arrays.asList(messages)); } | ||||
| 	public MassiveException addMsgs(Collection<String> messages) { this.getMessages().addAll(messages); return this; } | ||||
| 	public MassiveException addMsgs(Collection<String> msgs) { return this.addMessage(Mson.parse(msgs)); } | ||||
| 	public MassiveException addMsgs(String... msgs) { return this.addMsgs(Arrays.asList(msgs)); } | ||||
| 	 | ||||
| } | ||||
|  | ||||
| @ -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 | ||||
| { | ||||
| 	// -------------------------------------------- // | ||||
|  | ||||
| @ -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; | ||||
| 
 | ||||
|  | ||||
| @ -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<O, V> extends MassiveCommand | ||||
| { | ||||
| @ -128,24 +129,32 @@ public class CommandEditAbstract<O, V> extends MassiveCommand | ||||
| 		this.attemptSetPerform(after); | ||||
| 	} | ||||
| 	 | ||||
| 	protected String attemptSetNochangeMessage() | ||||
| 	protected Mson attemptSetNochangeMessage() | ||||
| 	{ | ||||
| 		 | ||||
| 		return Txt.parse("%s<silver> for %s<silver> 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<String> messages = new MassiveList<>(); | ||||
| 		List<Mson> messages = new MassiveList<>(); | ||||
| 
 | ||||
| 		// Before | ||||
| 		// We inform what the value was before. | ||||
| 		messages.add(Txt.parse("<k>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<O, V> extends MassiveCommand | ||||
| 		// After | ||||
| 		// We inform what the value is after. | ||||
| 		descValue = this.getInheritedVisual(); | ||||
| 		messages.add(Txt.parse("<k>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<silver> for %s<silver> edited:", descProperty, descObject)); | ||||
| 		messages.add(0, mson( | ||||
| 			descProperty, | ||||
| 			" for ", | ||||
| 			descObject, | ||||
| 			" edited:" | ||||
| 			).color(ChatColor.GRAY)); | ||||
| 		 | ||||
| 		message(messages); | ||||
| 	} | ||||
| @ -194,9 +211,9 @@ public class CommandEditAbstract<O, V> 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<O, V> 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<O, V> extends MassiveCommand | ||||
| 	 | ||||
| 	public void show(CommandSender sender) | ||||
| 	{ | ||||
| 		String descProperty = this.getProperty().getDisplayName(); | ||||
| 		String descObject = this.getObjectVisual(); | ||||
| 		String descValue = this.getInheritedVisual(); | ||||
| 		msg("%s<silver> for %s<silver>: %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 | ||||
|  | ||||
| @ -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<O, V> extends CommandEditAbst | ||||
| 	// -------------------------------------------- // | ||||
| 	 | ||||
| 	@Override | ||||
| 	public String attemptSetNochangeMessage() | ||||
| 	public Mson attemptSetNochangeMessage() | ||||
| 	{ | ||||
| 		return Txt.parse("%s<silver> for %s<silver> was not changed.", this.getProperty().getDisplayName(), this.getObjectVisual()); | ||||
| 		return mson( | ||||
| 			this.getProperty().getDisplayNameMson(), | ||||
| 			" for ", | ||||
| 			this.getObjectVisual(), | ||||
| 			" not changed."	 | ||||
| 			).color(ChatColor.GRAY); | ||||
| 	} | ||||
| 	 | ||||
| 	@SuppressWarnings("unchecked") | ||||
|  | ||||
| @ -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<O, V> 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<O, V> implements Named | ||||
| 			System.out.println("sender " + sender); | ||||
| 		}*/ | ||||
| 		 | ||||
| 		String suffix = null; | ||||
| 		Mson suffix = null; | ||||
| 		if (source != null && ! source.equals(object)) | ||||
| 		{ | ||||
| 			suffix = Txt.parse("<silver>[%s<silver>]", this.getObjectType().getVisual(source)); | ||||
| 			suffix = Mson.parse("<silver>[%s<silver>]").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<O, V> inherited = this.getInheritedEntry(object); | ||||
| 		O source = inherited.getKey(); | ||||
| @ -184,6 +184,11 @@ public abstract class Property<O, V> implements Named | ||||
| 	// VISUAL | ||||
| 	// -------------------------------------------- // | ||||
| 	 | ||||
| 	public Mson getDisplayNameMson() | ||||
| 	{ | ||||
| 		return Mson.mson(this.getName()).color(ChatColor.AQUA); | ||||
| 	} | ||||
| 	 | ||||
| 	public String getDisplayName() | ||||
| 	{ | ||||
| 		return ChatColor.AQUA.toString() + this.getName(); | ||||
|  | ||||
| @ -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<T> | ||||
| { | ||||
| @ -41,6 +43,16 @@ public interface Type<T> | ||||
| 	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<T> | ||||
| 	public String getVisualInner(T value); | ||||
| 	public String getVisual(T value, CommandSender sender); | ||||
| 	public String getVisual(T value); | ||||
| 	 | ||||
| 	public Set<String> getVisualsInner(T value, CommandSender sender); | ||||
| 	public Set<String> getVisualsInner(T value); | ||||
| 	public Set<String> getVisuals(T value, CommandSender sender); | ||||
| 	public Set<String> getVisuals(T value); | ||||
| 	 | ||||
| 
 | ||||
| 	// -------------------------------------------- // | ||||
| 	// WRITE NAME | ||||
| 	// -------------------------------------------- // | ||||
|  | ||||
| @ -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<T> implements Type<T> | ||||
| 	public static final String EMPTY = Txt.parse("<silver><em>EMPTY"); | ||||
| 	public static final String UNKNOWN = Txt.parse("<b>???"); | ||||
| 	 | ||||
| 	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<T> implements Type<T> | ||||
| 		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<T> implements Type<T> | ||||
| 	{ | ||||
| 		return this.getVisual(value, null); | ||||
| 	} | ||||
| 	 | ||||
| 	public Set<String> getVisualsInner(T value, CommandSender sender) | ||||
| 	{ | ||||
| 		return Collections.singleton(this.getVisualInner(value, sender)); | ||||
| 	} | ||||
| 	public Set<String> getVisualsInner(T value) | ||||
| 	{ | ||||
| 		return this.getVisualsInner(value, null); | ||||
| 	} | ||||
| 	 | ||||
| 	public Set<String> getVisuals(T value, CommandSender sender) | ||||
| 	{ | ||||
| 		if (value == null) return Collections.singleton(NULL); | ||||
| 		return this.getVisualsInner(value, sender); | ||||
| 	} | ||||
| 	public Set<String> getVisuals(T value) | ||||
| 	{ | ||||
| 		return this.getVisuals(value, null); | ||||
| 	} | ||||
| 	 | ||||
| 
 | ||||
| 	// -------------------------------------------- // | ||||
| 	// WRITE NAME | ||||
| 	// -------------------------------------------- // | ||||
|  | ||||
| @ -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<T> extends TypeAbstract<T> implements A | ||||
| 	// CONSTANTS | ||||
| 	// -------------------------------------------- // | ||||
| 	 | ||||
| 	public final static String SUGGEST_FORMAT = Txt.parse("<h>%s"); | ||||
| 	public final static String SUGGEST_COMMMA = Txt.parse(" <silver>| "); | ||||
| 	public final static String SUGGEST_AND = Txt.parse(" <silver>| "); | ||||
| 	public final static String SUGGEST_DOT = Txt.parse(""); | ||||
| 	public final static Mson SUGGEST_FORMAT = Mson.parse("<h>%s"); | ||||
| 	public final static Mson SUGGEST_COMMMA = Mson.parse(" <silver>| "); | ||||
| 	public final static Mson SUGGEST_AND = Mson.parse(" <silver>| "); | ||||
| 	public final static Mson SUGGEST_DOT = Mson.parse(""); | ||||
| 	 | ||||
| 	// -------------------------------------------- // | ||||
| 	// FIELDS | ||||
| @ -174,10 +175,10 @@ public abstract class TypeAbstractChoice<T> extends TypeAbstract<T> implements A | ||||
| 		else | ||||
| 		{ | ||||
| 			Collection<T> 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<T> extends TypeAbstract<T> implements A | ||||
| 			} | ||||
| 			else | ||||
| 			{ | ||||
| 				List<String> visuals = new MassiveList<String>(); | ||||
| 				List<Mson> 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))); | ||||
| 			} | ||||
| 		} | ||||
| 		 | ||||
|  | ||||
| @ -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<I, O> extends TypeAbstract<O> | ||||
| 	// -------------------------------------------- // | ||||
| 	 | ||||
| 	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<String> prefix(Set<String> strings) | ||||
| 	{ | ||||
| @ -105,6 +111,42 @@ public abstract class TypeTransformer<I, O> extends TypeAbstract<O> | ||||
| 		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<I, O> extends TypeAbstract<O> | ||||
| 		return INNER.getVisual(inner); | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Set<String> 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<String> getVisualsInner(O outer) | ||||
| 	{ | ||||
| 		I inner = outerToInner(outer); | ||||
| 		if (outer != null && inner == null) return prefix(OUTER.getVisualsInner(outer)); | ||||
| 		return INNER.getVisualsInner(inner); | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Set<String> 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<String> getVisuals(O outer) | ||||
| 	{ | ||||
| 		I inner = outerToInner(outer); | ||||
| 		if (outer != null && inner == null) return prefix(OUTER.getVisuals(outer)); | ||||
| 		return INNER.getVisuals(inner); | ||||
| 	} | ||||
| 	 | ||||
| 	// -------------------------------------------- // | ||||
| 	// WRITE NAME | ||||
| 	// -------------------------------------------- // | ||||
|  | ||||
| @ -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<C extends Object, E> extends TypeAbstract<C> | ||||
| 	// WRITE VISUAL | ||||
| 	// -------------------------------------------- // | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Mson getVisualMsonInner(C container, CommandSender sender) | ||||
| 	{ | ||||
| 		// Empty | ||||
| 		if (ContainerUtil.isEmpty(container)) return MSON_EMPTY; | ||||
| 		 | ||||
| 		// Create | ||||
| 		List<Mson> parts = new MassiveList<>(); | ||||
| 		 | ||||
| 		// Fill | ||||
| 		List<E> elements = this.getContainerElementsOrdered(container); | ||||
| 		Type<E> 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<C extends Object, E> extends TypeAbstract<C> | ||||
| 		if (ContainerUtil.isEmpty(container)) return EMPTY; | ||||
| 		 | ||||
| 		// Create | ||||
| 		List<String> parts = new MassiveList<String>(); | ||||
| 		List<String> parts = new MassiveList<>(); | ||||
| 		 | ||||
| 		// Fill | ||||
| 		List<E> elements = this.getContainerElementsOrdered(container); | ||||
| @ -82,7 +116,7 @@ public abstract class TypeContainer<C extends Object, E> extends TypeAbstract<C> | ||||
| 		if (ContainerUtil.isEmpty(container)) return ""; | ||||
| 		 | ||||
| 		// Create | ||||
| 		List<String> parts = new MassiveList<String>(); | ||||
| 		List<String> parts = new MassiveList<>(); | ||||
| 		 | ||||
| 		// Fill | ||||
| 		List<E> elements = this.getContainerElementsOrdered(container); | ||||
| @ -108,7 +142,7 @@ public abstract class TypeContainer<C extends Object, E> extends TypeAbstract<C> | ||||
| 		if (ContainerUtil.isEmpty(container)) return ""; | ||||
| 		 | ||||
| 		// Create | ||||
| 		List<String> parts = new MassiveList<String>(); | ||||
| 		List<String> parts = new MassiveList<>(); | ||||
| 		 | ||||
| 		// Fill | ||||
| 		Type<E> innerType = this.getInnerType(); | ||||
|  | ||||
| @ -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 | ||||
| { | ||||
|  | ||||
| @ -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<Mson> msons = new MassiveList<Mson>(); | ||||
| 		List<Mson> msons = new MassiveList<>(); | ||||
| 
 | ||||
| 		for (Object part : parts) | ||||
| 		{ | ||||
| @ -534,7 +536,17 @@ public class Mson implements Serializable | ||||
| 	// -------------------------------------------- // | ||||
| 	// PARSE & FORMAT | ||||
| 	// -------------------------------------------- // | ||||
| 
 | ||||
| 	 | ||||
| 	public static Mson fromParsedMessages(Collection<String> messages) | ||||
| 	{ | ||||
| 		List<Mson> 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<Mson> msons = new ArrayList<Mson>(); | ||||
| 		List<Mson> 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<String> 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<Mson> 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<? extends Object> coll, final Mson glue, final Mson format) | ||||
| 	{ | ||||
| 		return implode(coll.toArray(new Object[0]), glue, format); | ||||
| 	} | ||||
| 	public static Mson implode(final Collection<? extends Object> coll, final Mson glue) | ||||
| 	{ | ||||
| 		return implode(coll, glue, null); | ||||
| 	} | ||||
| 	 | ||||
| 	// Implode comma and dot | ||||
| 	public static Mson implodeCommaAndDot(Collection<? extends Object> 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<Object> 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<? extends Object> objects, Mson comma, Mson and, Mson dot) | ||||
| 	{ | ||||
| 		return implodeCommaAndDot(objects, null, comma, and, dot); | ||||
| 	} | ||||
| 	public static Mson implodeCommaAnd(final Collection<? extends Object> objects, Mson comma, Mson and) | ||||
| 	{ | ||||
| 		return implodeCommaAndDot(objects, comma, and, mson()); | ||||
| 	} | ||||
| 	public static Mson implodeCommaAndDot(final Collection<? extends Object> objects, ChatColor color) | ||||
| 	{ | ||||
| 		return implodeCommaAndDot(objects, mson(", ").color(color), mson(" and ").color(color), mson(".").color(color)); | ||||
| 	} | ||||
| 	public static Mson implodeCommaAnd(final Collection<? extends Object> objects, ChatColor color) | ||||
| 	{ | ||||
| 		return implodeCommaAndDot(objects, mson(", ").color(color), mson(" and ").color(color), mson()); | ||||
| 	} | ||||
| 	public static Mson implodeCommaAndDot(final Collection<? extends Object> objects) | ||||
| 	{ | ||||
| 		return implodeCommaAndDot(objects, null); | ||||
| 	} | ||||
| 	public static Mson implodeCommaAnd(final Collection<? extends Object> 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<Mson> prepondfix(Mson prefix, List<Mson> msons, Mson suffix) | ||||
| 	{ | ||||
| 		// Create | ||||
| 		List<Mson> ret = new MassiveList<>(); | ||||
| 		 | ||||
| 		// Fill | ||||
| 		List<Mson> 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<Mson> strings = Arrays.asList(PATTERN_NEWLINE.split(string)); | ||||
| 		List<Mson> ret = prepondfix(prefix, Collections.singletonList(mson), suffix); | ||||
| 		return implode(ret, mson("\n")); | ||||
| 	} | ||||
| 	 | ||||
| 	// -------------------------------------------- // | ||||
| 	// MESSAGE | ||||
| 	// -------------------------------------------- // | ||||
|  | ||||
| @ -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; | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user