Geting rid of persist and prepare ConfServer for SimpleConfig usage.
This commit is contained in:
		@@ -5,8 +5,9 @@ import java.util.*;
 | 
				
			|||||||
import org.bukkit.*;
 | 
					import org.bukkit.*;
 | 
				
			||||||
import org.bukkit.entity.EntityType;
 | 
					import org.bukkit.entity.EntityType;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import com.massivecraft.mcore.SimpleConfig;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
public class ConfServer
 | 
					public class ConfServer extends SimpleConfig
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	// -------------------------------------------- //
 | 
						// -------------------------------------------- //
 | 
				
			||||||
	// INSTANCE & CONSTRUCT
 | 
						// INSTANCE & CONSTRUCT
 | 
				
			||||||
@@ -14,15 +15,7 @@ public class ConfServer
 | 
				
			|||||||
	
 | 
						
 | 
				
			||||||
	private static transient ConfServer i = new ConfServer();
 | 
						private static transient ConfServer i = new ConfServer();
 | 
				
			||||||
	public static ConfServer get() { return i; }
 | 
						public static ConfServer get() { return i; }
 | 
				
			||||||
	
 | 
						public ConfServer() { super(Factions.get()); }
 | 
				
			||||||
	public static void load()
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		Factions.get().persist.loadOrSaveDefault(i, ConfServer.class, "conf");
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	public static void save()
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		Factions.get().persist.save(i);
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	// -------------------------------------------- //
 | 
						// -------------------------------------------- //
 | 
				
			||||||
	// FIELDS
 | 
						// FIELDS
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -30,6 +30,7 @@ import com.massivecraft.factions.zcore.MPlugin;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import org.bukkit.command.Command;
 | 
					import org.bukkit.command.Command;
 | 
				
			||||||
import org.bukkit.command.CommandSender;
 | 
					import org.bukkit.command.CommandSender;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import com.massivecraft.mcore.xlib.gson.GsonBuilder;
 | 
					import com.massivecraft.mcore.xlib.gson.GsonBuilder;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -75,10 +76,13 @@ public class Factions extends MPlugin
 | 
				
			|||||||
	public void onEnable()
 | 
						public void onEnable()
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		if ( ! preEnable()) return;
 | 
							if ( ! preEnable()) return;
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
							// Load Server Config
 | 
				
			||||||
 | 
							ConfServer.get().load();
 | 
				
			||||||
 | 
							
 | 
				
			||||||
		this.loadSuccessful = false;
 | 
							this.loadSuccessful = false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		// Load Conf from disk
 | 
							// Load Conf from disk
 | 
				
			||||||
		ConfServer.load();
 | 
					 | 
				
			||||||
		FPlayerColl.i.loadFromDisc();
 | 
							FPlayerColl.i.loadFromDisc();
 | 
				
			||||||
		FactionColl.i.loadFromDisc();
 | 
							FactionColl.i.loadFromDisc();
 | 
				
			||||||
		Board.load();
 | 
							Board.load();
 | 
				
			||||||
@@ -151,7 +155,6 @@ public class Factions extends MPlugin
 | 
				
			|||||||
		if (this.loadSuccessful)
 | 
							if (this.loadSuccessful)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			Board.save();
 | 
								Board.save();
 | 
				
			||||||
			ConfServer.save();
 | 
					 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		EssentialsFeatures.unhookChat();
 | 
							EssentialsFeatures.unhookChat();
 | 
				
			||||||
		if (AutoLeaveTask != null)
 | 
							if (AutoLeaveTask != null)
 | 
				
			||||||
@@ -201,7 +204,6 @@ public class Factions extends MPlugin
 | 
				
			|||||||
	public void postAutoSave()
 | 
						public void postAutoSave()
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		Board.save();
 | 
							Board.save();
 | 
				
			||||||
		ConfServer.save();
 | 
					 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	@Override
 | 
						@Override
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,400 +0,0 @@
 | 
				
			|||||||
package com.massivecraft.factions.cmd;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import java.lang.reflect.Field;
 | 
					 | 
				
			||||||
import java.lang.reflect.ParameterizedType;
 | 
					 | 
				
			||||||
import java.lang.reflect.Type;
 | 
					 | 
				
			||||||
import java.util.Set;
 | 
					 | 
				
			||||||
import java.util.HashMap;
 | 
					 | 
				
			||||||
import java.util.HashSet;
 | 
					 | 
				
			||||||
import java.util.Map;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import org.bukkit.ChatColor;
 | 
					 | 
				
			||||||
import org.bukkit.Material;
 | 
					 | 
				
			||||||
import org.bukkit.entity.Player;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import com.massivecraft.factions.ConfServer;
 | 
					 | 
				
			||||||
import com.massivecraft.factions.FFlag;
 | 
					 | 
				
			||||||
import com.massivecraft.factions.FPerm;
 | 
					 | 
				
			||||||
import com.massivecraft.factions.Factions;
 | 
					 | 
				
			||||||
import com.massivecraft.factions.Perm;
 | 
					 | 
				
			||||||
import com.massivecraft.factions.Rel;
 | 
					 | 
				
			||||||
import com.massivecraft.factions.integration.SpoutFeatures;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
public class CmdConfig extends FCommand
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	private static HashMap<String, String> properFieldNames = new HashMap<String, String>();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	public CmdConfig()
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		super();
 | 
					 | 
				
			||||||
		this.aliases.add("config");
 | 
					 | 
				
			||||||
		
 | 
					 | 
				
			||||||
		this.requiredArgs.add("setting");
 | 
					 | 
				
			||||||
		this.requiredArgs.add("value");
 | 
					 | 
				
			||||||
		this.errorOnToManyArgs = false;
 | 
					 | 
				
			||||||
		
 | 
					 | 
				
			||||||
		this.permission = Perm.CONFIG.node;
 | 
					 | 
				
			||||||
		this.disableOnLock = true;
 | 
					 | 
				
			||||||
		
 | 
					 | 
				
			||||||
		senderMustBePlayer = false;
 | 
					 | 
				
			||||||
		senderMustBeMember = false;
 | 
					 | 
				
			||||||
		senderMustBeOfficer = false;
 | 
					 | 
				
			||||||
		senderMustBeLeader = false;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	@Override
 | 
					 | 
				
			||||||
	public void perform()
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		// store a lookup map of lowercase field names paired with proper capitalization field names
 | 
					 | 
				
			||||||
		// that way, if the person using this command messes up the capitalization, we can fix that
 | 
					 | 
				
			||||||
		if (properFieldNames.isEmpty())
 | 
					 | 
				
			||||||
		{
 | 
					 | 
				
			||||||
			Field[] fields = ConfServer.class.getDeclaredFields();
 | 
					 | 
				
			||||||
			for(int i = 0; i < fields.length; i++)
 | 
					 | 
				
			||||||
			{
 | 
					 | 
				
			||||||
				properFieldNames.put(fields[i].getName().toLowerCase(), fields[i].getName());
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		String field = this.argAsString(0).toLowerCase();
 | 
					 | 
				
			||||||
		if (field.startsWith("\"") && field.endsWith("\""))
 | 
					 | 
				
			||||||
		{
 | 
					 | 
				
			||||||
			field = field.substring(1, field.length() - 1);
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		String fieldName = properFieldNames.get(field);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		if (fieldName == null || fieldName.isEmpty())
 | 
					 | 
				
			||||||
		{
 | 
					 | 
				
			||||||
			msg("<b>No configuration setting \"<h>%s<b>\" exists.", field);
 | 
					 | 
				
			||||||
			return;
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		String success = "";
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		String value = args.get(1);
 | 
					 | 
				
			||||||
		for(int i = 2; i < args.size(); i++)
 | 
					 | 
				
			||||||
		{
 | 
					 | 
				
			||||||
			value += ' ' + args.get(i);
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		try
 | 
					 | 
				
			||||||
		{
 | 
					 | 
				
			||||||
			Field target = ConfServer.class.getField(fieldName);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
			// boolean
 | 
					 | 
				
			||||||
			if (target.getType() == boolean.class)
 | 
					 | 
				
			||||||
			{
 | 
					 | 
				
			||||||
				boolean targetValue = this.strAsBool(value);
 | 
					 | 
				
			||||||
				target.setBoolean(null, targetValue);
 | 
					 | 
				
			||||||
				
 | 
					 | 
				
			||||||
				if (targetValue)
 | 
					 | 
				
			||||||
				{
 | 
					 | 
				
			||||||
					success = "\""+fieldName+"\" option set to true (enabled).";
 | 
					 | 
				
			||||||
				}
 | 
					 | 
				
			||||||
				else
 | 
					 | 
				
			||||||
				{
 | 
					 | 
				
			||||||
					success = "\""+fieldName+"\" option set to false (disabled).";
 | 
					 | 
				
			||||||
				}
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
			// int 
 | 
					 | 
				
			||||||
			else if (target.getType() == int.class)
 | 
					 | 
				
			||||||
			{
 | 
					 | 
				
			||||||
				try
 | 
					 | 
				
			||||||
				{
 | 
					 | 
				
			||||||
					int intVal = Integer.parseInt(value);
 | 
					 | 
				
			||||||
					target.setInt(null, intVal);
 | 
					 | 
				
			||||||
					success = "\""+fieldName+"\" option set to "+intVal+".";
 | 
					 | 
				
			||||||
				}
 | 
					 | 
				
			||||||
				catch(NumberFormatException ex)
 | 
					 | 
				
			||||||
				{
 | 
					 | 
				
			||||||
					sendMessage("Cannot set \""+fieldName+"\": integer (whole number) value required.");
 | 
					 | 
				
			||||||
					return;
 | 
					 | 
				
			||||||
				}
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
			// double
 | 
					 | 
				
			||||||
			else if (target.getType() == double.class)
 | 
					 | 
				
			||||||
			{
 | 
					 | 
				
			||||||
				try
 | 
					 | 
				
			||||||
				{
 | 
					 | 
				
			||||||
					double doubleVal = Double.parseDouble(value);
 | 
					 | 
				
			||||||
					target.setDouble(null, doubleVal);
 | 
					 | 
				
			||||||
					success = "\""+fieldName+"\" option set to "+doubleVal+".";
 | 
					 | 
				
			||||||
				}
 | 
					 | 
				
			||||||
				catch(NumberFormatException ex)
 | 
					 | 
				
			||||||
				{
 | 
					 | 
				
			||||||
					sendMessage("Cannot set \""+fieldName+"\": double (numeric) value required.");
 | 
					 | 
				
			||||||
					return;
 | 
					 | 
				
			||||||
				}
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
			// float
 | 
					 | 
				
			||||||
			else if (target.getType() == float.class)
 | 
					 | 
				
			||||||
			{
 | 
					 | 
				
			||||||
				try
 | 
					 | 
				
			||||||
				{
 | 
					 | 
				
			||||||
					float floatVal = Float.parseFloat(value);
 | 
					 | 
				
			||||||
					target.setFloat(null, floatVal);
 | 
					 | 
				
			||||||
					success = "\""+fieldName+"\" option set to "+floatVal+".";
 | 
					 | 
				
			||||||
				}
 | 
					 | 
				
			||||||
				catch(NumberFormatException ex)
 | 
					 | 
				
			||||||
				{
 | 
					 | 
				
			||||||
					sendMessage("Cannot set \""+fieldName+"\": float (numeric) value required.");
 | 
					 | 
				
			||||||
					return;
 | 
					 | 
				
			||||||
				}
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
			// String
 | 
					 | 
				
			||||||
			else if (target.getType() == String.class)
 | 
					 | 
				
			||||||
			{
 | 
					 | 
				
			||||||
				target.set(null, value);
 | 
					 | 
				
			||||||
				success = "\""+fieldName+"\" option set to \""+value+"\".";
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
			// ChatColor
 | 
					 | 
				
			||||||
			else if (target.getType() == ChatColor.class)
 | 
					 | 
				
			||||||
			{
 | 
					 | 
				
			||||||
				ChatColor newColor = null;
 | 
					 | 
				
			||||||
				try
 | 
					 | 
				
			||||||
				{
 | 
					 | 
				
			||||||
					newColor = ChatColor.valueOf(value.toUpperCase());
 | 
					 | 
				
			||||||
				}
 | 
					 | 
				
			||||||
				catch (IllegalArgumentException ex)
 | 
					 | 
				
			||||||
				{
 | 
					 | 
				
			||||||
					
 | 
					 | 
				
			||||||
				}
 | 
					 | 
				
			||||||
				if (newColor == null)
 | 
					 | 
				
			||||||
				{
 | 
					 | 
				
			||||||
					sendMessage("Cannot set \""+fieldName+"\": \""+value.toUpperCase()+"\" is not a valid color.");
 | 
					 | 
				
			||||||
					return;
 | 
					 | 
				
			||||||
				}
 | 
					 | 
				
			||||||
				target.set(null, newColor);
 | 
					 | 
				
			||||||
				success = "\""+fieldName+"\" color option set to \""+value.toUpperCase()+"\".";
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
			// Set<?> or other parameterized collection
 | 
					 | 
				
			||||||
			else if (target.getGenericType() instanceof ParameterizedType)
 | 
					 | 
				
			||||||
			{
 | 
					 | 
				
			||||||
				ParameterizedType targSet = (ParameterizedType)target.getGenericType();
 | 
					 | 
				
			||||||
				Type innerType = targSet.getActualTypeArguments()[0];
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
				// Set<?>
 | 
					 | 
				
			||||||
				if (targSet.getRawType() == Set.class)
 | 
					 | 
				
			||||||
				{
 | 
					 | 
				
			||||||
					// Set<Material>
 | 
					 | 
				
			||||||
					if (innerType == Material.class)
 | 
					 | 
				
			||||||
					{
 | 
					 | 
				
			||||||
						Material newMat = null;
 | 
					 | 
				
			||||||
						try
 | 
					 | 
				
			||||||
						{
 | 
					 | 
				
			||||||
							newMat = Material.valueOf(value.toUpperCase());
 | 
					 | 
				
			||||||
						}
 | 
					 | 
				
			||||||
						catch (IllegalArgumentException ex)
 | 
					 | 
				
			||||||
						{
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
						}
 | 
					 | 
				
			||||||
						if (newMat == null)
 | 
					 | 
				
			||||||
						{
 | 
					 | 
				
			||||||
							sendMessage("Cannot change \""+fieldName+"\" set: \""+value.toUpperCase()+"\" is not a valid material.");
 | 
					 | 
				
			||||||
							return;
 | 
					 | 
				
			||||||
						}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
						@SuppressWarnings("unchecked")
 | 
					 | 
				
			||||||
						Set<Material> matSet = (Set<Material>)target.get(null);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
						// Material already present, so remove it
 | 
					 | 
				
			||||||
						if (matSet.contains(newMat))
 | 
					 | 
				
			||||||
						{
 | 
					 | 
				
			||||||
							matSet.remove(newMat);
 | 
					 | 
				
			||||||
							target.set(null, matSet);
 | 
					 | 
				
			||||||
							success = "\""+fieldName+"\" set: Material \""+value.toUpperCase()+"\" removed.";
 | 
					 | 
				
			||||||
						}
 | 
					 | 
				
			||||||
						// Material not present yet, add it
 | 
					 | 
				
			||||||
						else
 | 
					 | 
				
			||||||
						{
 | 
					 | 
				
			||||||
							matSet.add(newMat);
 | 
					 | 
				
			||||||
							target.set(null, matSet);
 | 
					 | 
				
			||||||
							success = "\""+fieldName+"\" set: Material \""+value.toUpperCase()+"\" added.";
 | 
					 | 
				
			||||||
						}
 | 
					 | 
				
			||||||
					}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
					// Set<String>
 | 
					 | 
				
			||||||
					else if (innerType == String.class)
 | 
					 | 
				
			||||||
					{
 | 
					 | 
				
			||||||
						@SuppressWarnings("unchecked")
 | 
					 | 
				
			||||||
						Set<String> stringSet = (Set<String>)target.get(null);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
						// String already present, so remove it
 | 
					 | 
				
			||||||
						if (stringSet.contains(value))
 | 
					 | 
				
			||||||
						{
 | 
					 | 
				
			||||||
							stringSet.remove(value);
 | 
					 | 
				
			||||||
							success = "\""+fieldName+"\" set: \""+value+"\" removed.";
 | 
					 | 
				
			||||||
						}
 | 
					 | 
				
			||||||
						// String not present yet, add it
 | 
					 | 
				
			||||||
						else 
 | 
					 | 
				
			||||||
						{
 | 
					 | 
				
			||||||
							stringSet.add(value);
 | 
					 | 
				
			||||||
							success = "\""+fieldName+"\" set: \""+value+"\" added.";
 | 
					 | 
				
			||||||
						}
 | 
					 | 
				
			||||||
						target.set(null, stringSet);
 | 
					 | 
				
			||||||
					}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
					// Set of unknown type
 | 
					 | 
				
			||||||
					else
 | 
					 | 
				
			||||||
					{
 | 
					 | 
				
			||||||
						sendMessage("\""+fieldName+"\" is not a data type set which can be modified with this command.");
 | 
					 | 
				
			||||||
						return;
 | 
					 | 
				
			||||||
					}
 | 
					 | 
				
			||||||
				}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
				// Map<?, ?>
 | 
					 | 
				
			||||||
				else if (targSet.getRawType() == Map.class)
 | 
					 | 
				
			||||||
				{
 | 
					 | 
				
			||||||
					if (args.size() < 3)
 | 
					 | 
				
			||||||
					{
 | 
					 | 
				
			||||||
						sendMessage("Cannot change \""+fieldName+"\" map: not enough arguments passed.");
 | 
					 | 
				
			||||||
						return;
 | 
					 | 
				
			||||||
					}
 | 
					 | 
				
			||||||
					Type innerType2 = targSet.getActualTypeArguments()[1];
 | 
					 | 
				
			||||||
					String value1 = args.get(1);
 | 
					 | 
				
			||||||
					String value2 = value.substring(value1.length() + 1);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
					// Map<FFlag, Boolean>
 | 
					 | 
				
			||||||
					if (innerType == FFlag.class && innerType2 == Boolean.class)
 | 
					 | 
				
			||||||
					{
 | 
					 | 
				
			||||||
						value1 = value1.toUpperCase();
 | 
					 | 
				
			||||||
						FFlag newFlag = null;
 | 
					 | 
				
			||||||
						try
 | 
					 | 
				
			||||||
						{
 | 
					 | 
				
			||||||
							newFlag = FFlag.valueOf(value1);
 | 
					 | 
				
			||||||
						}
 | 
					 | 
				
			||||||
						catch (IllegalArgumentException ex) {}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
						if (newFlag == null)
 | 
					 | 
				
			||||||
						{
 | 
					 | 
				
			||||||
							sendMessage("Cannot change \""+fieldName+"\" map: \""+value1+"\" is not a valid FFlag.");
 | 
					 | 
				
			||||||
							return;
 | 
					 | 
				
			||||||
						}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
						@SuppressWarnings("unchecked")
 | 
					 | 
				
			||||||
						Map<FFlag, Boolean> map = (Map<FFlag, Boolean>)target.get(null);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
						Boolean targetValue = this.strAsBool(value2);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
						map.put(newFlag, targetValue);
 | 
					 | 
				
			||||||
						target.set(null, map);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
						if (targetValue)
 | 
					 | 
				
			||||||
							success = "\""+fieldName+"\" flag \""+value1+"\" set to true (enabled).";
 | 
					 | 
				
			||||||
						else
 | 
					 | 
				
			||||||
							success = "\""+fieldName+"\" flag \""+value1+"\" set to false (disabled).";
 | 
					 | 
				
			||||||
					}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
					// Map<FPerm, Set<Rel>>
 | 
					 | 
				
			||||||
					else if (innerType == FPerm.class && innerType2 instanceof ParameterizedType)
 | 
					 | 
				
			||||||
					{
 | 
					 | 
				
			||||||
						if (((ParameterizedType)innerType2).getRawType() != Set.class)
 | 
					 | 
				
			||||||
						{
 | 
					 | 
				
			||||||
							sendMessage("\""+fieldName+"\" is not a data type map which can be modified with this command, due to the inner collection type.");
 | 
					 | 
				
			||||||
							return;
 | 
					 | 
				
			||||||
						}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
						value1 = value1.toUpperCase();
 | 
					 | 
				
			||||||
						value2 = value2.toUpperCase();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
						FPerm newPerm = null;
 | 
					 | 
				
			||||||
						Rel newRel = null;
 | 
					 | 
				
			||||||
						try
 | 
					 | 
				
			||||||
						{
 | 
					 | 
				
			||||||
							newPerm = FPerm.valueOf(value1);
 | 
					 | 
				
			||||||
							newRel = Rel.valueOf(value2);
 | 
					 | 
				
			||||||
						}
 | 
					 | 
				
			||||||
						catch (IllegalArgumentException ex) {}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
						if (newPerm == null)
 | 
					 | 
				
			||||||
						{
 | 
					 | 
				
			||||||
							sendMessage("Cannot change \""+fieldName+"\" map: \""+value1+"\" is not a valid FPerm.");
 | 
					 | 
				
			||||||
							return;
 | 
					 | 
				
			||||||
						}
 | 
					 | 
				
			||||||
						if (newRel == null)
 | 
					 | 
				
			||||||
						{
 | 
					 | 
				
			||||||
							sendMessage("Cannot change \""+fieldName+"\" map: \""+value2+"\" is not a valid Rel.");
 | 
					 | 
				
			||||||
							return;
 | 
					 | 
				
			||||||
						}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
						@SuppressWarnings("unchecked")
 | 
					 | 
				
			||||||
						Map<FPerm, Set<Rel>> map = (Map<FPerm, Set<Rel>>)target.get(null);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
						Set<Rel> relSet = map.get(newPerm);
 | 
					 | 
				
			||||||
						if (relSet == null)
 | 
					 | 
				
			||||||
							relSet = new HashSet<Rel>();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
						// Rel already present, so remove it
 | 
					 | 
				
			||||||
						if (relSet.contains(newRel))
 | 
					 | 
				
			||||||
						{
 | 
					 | 
				
			||||||
							relSet.remove(newRel);
 | 
					 | 
				
			||||||
							success = "\""+fieldName+"\" permission \""+value1+"\": relation \""+value2+"\" removed.";
 | 
					 | 
				
			||||||
						}
 | 
					 | 
				
			||||||
						// Rel not present yet, add it
 | 
					 | 
				
			||||||
						else 
 | 
					 | 
				
			||||||
						{
 | 
					 | 
				
			||||||
							relSet.add(newRel);
 | 
					 | 
				
			||||||
							success = "\""+fieldName+"\" permission \""+value1+"\": relation \""+value2+"\" added.";
 | 
					 | 
				
			||||||
						}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
						map.put(newPerm, relSet);
 | 
					 | 
				
			||||||
						target.set(null, map);
 | 
					 | 
				
			||||||
					}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
					// Map of unknown type
 | 
					 | 
				
			||||||
					else
 | 
					 | 
				
			||||||
					{
 | 
					 | 
				
			||||||
						sendMessage("\""+fieldName+"\" is not a data type map which can be modified with this command.");
 | 
					 | 
				
			||||||
						return;
 | 
					 | 
				
			||||||
					}
 | 
					 | 
				
			||||||
				}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
				// not a Set or Map?
 | 
					 | 
				
			||||||
				else
 | 
					 | 
				
			||||||
				{
 | 
					 | 
				
			||||||
					sendMessage("\""+fieldName+"\" is not a data collection type which can be modified with this command.");
 | 
					 | 
				
			||||||
					return;
 | 
					 | 
				
			||||||
				}
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
			// unknown type
 | 
					 | 
				
			||||||
			else
 | 
					 | 
				
			||||||
			{
 | 
					 | 
				
			||||||
				sendMessage("\""+fieldName+"\" is not a data type which can be modified with this command.");
 | 
					 | 
				
			||||||
				return;
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		catch (NoSuchFieldException ex)
 | 
					 | 
				
			||||||
		{
 | 
					 | 
				
			||||||
			sendMessage("Configuration setting \""+fieldName+"\" couldn't be matched, though it should be... please report this error.");
 | 
					 | 
				
			||||||
			return;
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		catch (IllegalAccessException ex)
 | 
					 | 
				
			||||||
		{
 | 
					 | 
				
			||||||
			sendMessage("Error setting configuration setting \""+fieldName+"\" to \""+value+"\".");
 | 
					 | 
				
			||||||
			return;
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		if (!success.isEmpty())
 | 
					 | 
				
			||||||
		{
 | 
					 | 
				
			||||||
			sendMessage(success);
 | 
					 | 
				
			||||||
			if (sender instanceof Player)
 | 
					 | 
				
			||||||
			{
 | 
					 | 
				
			||||||
				Factions.get().log(success + " Command was run by "+fme.getName()+".");
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		// save change to disk
 | 
					 | 
				
			||||||
		ConfServer.save();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		// in case some Spout related setting was changed
 | 
					 | 
				
			||||||
		SpoutFeatures.updateTitle(null, null);
 | 
					 | 
				
			||||||
		//SpoutFeatures.updateCape(null);
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@@ -17,7 +17,7 @@ import com.massivecraft.factions.Faction;
 | 
				
			|||||||
import com.massivecraft.factions.Perm;
 | 
					import com.massivecraft.factions.Perm;
 | 
				
			||||||
import com.massivecraft.factions.Rel;
 | 
					import com.massivecraft.factions.Rel;
 | 
				
			||||||
import com.massivecraft.factions.integration.EssentialsFeatures;
 | 
					import com.massivecraft.factions.integration.EssentialsFeatures;
 | 
				
			||||||
import com.massivecraft.factions.zcore.util.SmokeUtil;
 | 
					import com.massivecraft.mcore.util.SmokeUtil;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
public class CmdHome extends FCommand
 | 
					public class CmdHome extends FCommand
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,7 +1,6 @@
 | 
				
			|||||||
package com.massivecraft.factions.cmd;
 | 
					package com.massivecraft.factions.cmd;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import com.massivecraft.factions.Board;
 | 
					import com.massivecraft.factions.Board;
 | 
				
			||||||
import com.massivecraft.factions.ConfServer;
 | 
					 | 
				
			||||||
import com.massivecraft.factions.FPlayerColl;
 | 
					import com.massivecraft.factions.FPlayerColl;
 | 
				
			||||||
import com.massivecraft.factions.FactionColl;
 | 
					import com.massivecraft.factions.FactionColl;
 | 
				
			||||||
import com.massivecraft.factions.Factions;
 | 
					import com.massivecraft.factions.Factions;
 | 
				
			||||||
@@ -35,12 +34,7 @@ public class CmdReload extends FCommand
 | 
				
			|||||||
		
 | 
							
 | 
				
			||||||
		String fileName;
 | 
							String fileName;
 | 
				
			||||||
		
 | 
							
 | 
				
			||||||
		if (file.startsWith("c"))
 | 
							if (file.startsWith("b"))
 | 
				
			||||||
		{
 | 
					 | 
				
			||||||
			ConfServer.load();
 | 
					 | 
				
			||||||
			fileName = "conf.json";
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		else if (file.startsWith("b"))
 | 
					 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			Board.load();
 | 
								Board.load();
 | 
				
			||||||
			fileName = "board.json";
 | 
								fileName = "board.json";
 | 
				
			||||||
@@ -58,7 +52,6 @@ public class CmdReload extends FCommand
 | 
				
			|||||||
		else if (file.startsWith("a"))
 | 
							else if (file.startsWith("a"))
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			fileName = "all";
 | 
								fileName = "all";
 | 
				
			||||||
			ConfServer.load();
 | 
					 | 
				
			||||||
			FPlayerColl.i.loadFromDisc();
 | 
								FPlayerColl.i.loadFromDisc();
 | 
				
			||||||
			FactionColl.i.loadFromDisc();
 | 
								FactionColl.i.loadFromDisc();
 | 
				
			||||||
			Board.load();
 | 
								Board.load();
 | 
				
			||||||
@@ -66,7 +59,7 @@ public class CmdReload extends FCommand
 | 
				
			|||||||
		else
 | 
							else
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			Factions.get().log("RELOAD CANCELLED - SPECIFIED FILE INVALID");
 | 
								Factions.get().log("RELOAD CANCELLED - SPECIFIED FILE INVALID");
 | 
				
			||||||
			msg("<b>Invalid file specified. <i>Valid files: all, conf, board, factions, players");
 | 
								msg("<b>Invalid file specified. <i>Valid files: all, board, factions, players");
 | 
				
			||||||
			return;
 | 
								return;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		
 | 
							
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,7 +1,6 @@
 | 
				
			|||||||
package com.massivecraft.factions.cmd;
 | 
					package com.massivecraft.factions.cmd;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import com.massivecraft.factions.Board;
 | 
					import com.massivecraft.factions.Board;
 | 
				
			||||||
import com.massivecraft.factions.ConfServer;
 | 
					 | 
				
			||||||
import com.massivecraft.factions.FPlayerColl;
 | 
					import com.massivecraft.factions.FPlayerColl;
 | 
				
			||||||
import com.massivecraft.factions.FactionColl;
 | 
					import com.massivecraft.factions.FactionColl;
 | 
				
			||||||
import com.massivecraft.factions.Perm;
 | 
					import com.massivecraft.factions.Perm;
 | 
				
			||||||
@@ -33,7 +32,6 @@ public class CmdSaveAll extends FCommand
 | 
				
			|||||||
		FPlayerColl.i.saveToDisc();
 | 
							FPlayerColl.i.saveToDisc();
 | 
				
			||||||
		FactionColl.i.saveToDisc();
 | 
							FactionColl.i.saveToDisc();
 | 
				
			||||||
		Board.save();
 | 
							Board.save();
 | 
				
			||||||
		ConfServer.save();
 | 
					 | 
				
			||||||
		msg("<i>Factions saved to disk!");
 | 
							msg("<i>Factions saved to disk!");
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -14,7 +14,6 @@ public class FCmdRoot extends FCommand
 | 
				
			|||||||
	public CmdAdmin cmdBypass = new CmdAdmin();
 | 
						public CmdAdmin cmdBypass = new CmdAdmin();
 | 
				
			||||||
	public CmdCape cmdCape = new CmdCape();
 | 
						public CmdCape cmdCape = new CmdCape();
 | 
				
			||||||
	public CmdClaim cmdClaim = new CmdClaim();
 | 
						public CmdClaim cmdClaim = new CmdClaim();
 | 
				
			||||||
	public CmdConfig cmdConfig = new CmdConfig();
 | 
					 | 
				
			||||||
	public CmdCreate cmdCreate = new CmdCreate();
 | 
						public CmdCreate cmdCreate = new CmdCreate();
 | 
				
			||||||
	public CmdDeinvite cmdDeinvite = new CmdDeinvite();
 | 
						public CmdDeinvite cmdDeinvite = new CmdDeinvite();
 | 
				
			||||||
	public CmdDemote cmdDemote = new CmdDemote();
 | 
						public CmdDemote cmdDemote = new CmdDemote();
 | 
				
			||||||
@@ -110,7 +109,6 @@ public class FCmdRoot extends FCommand
 | 
				
			|||||||
		this.addSubCommand(this.cmdPromote);
 | 
							this.addSubCommand(this.cmdPromote);
 | 
				
			||||||
		this.addSubCommand(this.cmdLock);
 | 
							this.addSubCommand(this.cmdLock);
 | 
				
			||||||
		this.addSubCommand(this.cmdReload);
 | 
							this.addSubCommand(this.cmdReload);
 | 
				
			||||||
		this.addSubCommand(this.cmdConfig);
 | 
					 | 
				
			||||||
		this.addSubCommand(this.cmdSaveAll);
 | 
							this.addSubCommand(this.cmdSaveAll);
 | 
				
			||||||
		this.addSubCommand(this.cmdVersion);
 | 
							this.addSubCommand(this.cmdVersion);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -8,17 +8,13 @@ import org.bukkit.plugin.java.JavaPlugin;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import com.massivecraft.factions.zcore.persist.EM;
 | 
					import com.massivecraft.factions.zcore.persist.EM;
 | 
				
			||||||
import com.massivecraft.factions.zcore.persist.SaveTask;
 | 
					import com.massivecraft.factions.zcore.persist.SaveTask;
 | 
				
			||||||
import com.massivecraft.factions.zcore.util.Persist;
 | 
					 | 
				
			||||||
import com.massivecraft.mcore.util.Txt;
 | 
					import com.massivecraft.mcore.util.Txt;
 | 
				
			||||||
import com.massivecraft.mcore.xlib.gson.Gson;
 | 
					import com.massivecraft.mcore.xlib.gson.Gson;
 | 
				
			||||||
import com.massivecraft.mcore.xlib.gson.GsonBuilder;
 | 
					import com.massivecraft.mcore.xlib.gson.GsonBuilder;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
public abstract class MPlugin extends JavaPlugin
 | 
					public abstract class MPlugin extends JavaPlugin
 | 
				
			||||||
{
 | 
					{	
 | 
				
			||||||
	// Some utils
 | 
					 | 
				
			||||||
	public Persist persist;
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	// Persist related
 | 
						// Persist related
 | 
				
			||||||
	public Gson gson;	
 | 
						public Gson gson;	
 | 
				
			||||||
	private Integer saveTask = null;
 | 
						private Integer saveTask = null;
 | 
				
			||||||
@@ -41,9 +37,6 @@ public abstract class MPlugin extends JavaPlugin
 | 
				
			|||||||
		
 | 
							
 | 
				
			||||||
		// Ensure basefolder exists!
 | 
							// Ensure basefolder exists!
 | 
				
			||||||
		this.getDataFolder().mkdirs();
 | 
							this.getDataFolder().mkdirs();
 | 
				
			||||||
		
 | 
					 | 
				
			||||||
		// Create Utility Instances
 | 
					 | 
				
			||||||
		this.persist = new Persist(this);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
		// GSON 2.1 is now embedded in CraftBukkit, used by the auto-updater: https://github.com/Bukkit/CraftBukkit/commit/0ed1d1fdbb1e0bc09a70bc7bfdf40c1de8411665
 | 
							// GSON 2.1 is now embedded in CraftBukkit, used by the auto-updater: https://github.com/Bukkit/CraftBukkit/commit/0ed1d1fdbb1e0bc09a70bc7bfdf40c1de8411665
 | 
				
			||||||
//		if ( ! lib.require("gson.jar", "http://search.maven.org/remotecontent?filepath=com/google/code/gson/gson/2.1/gson-2.1.jar")) return false;
 | 
					//		if ( ! lib.require("gson.jar", "http://search.maven.org/remotecontent?filepath=com/google/code/gson/gson/2.1/gson-2.1.jar")) return false;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,91 +0,0 @@
 | 
				
			|||||||
package com.massivecraft.factions.zcore.util;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import java.util.Collection;
 | 
					 | 
				
			||||||
import java.util.Random;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import org.bukkit.Effect;
 | 
					 | 
				
			||||||
import org.bukkit.Location;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// http://mc.kev009.com/Protocol
 | 
					 | 
				
			||||||
// -----------------------------
 | 
					 | 
				
			||||||
// Smoke Directions 
 | 
					 | 
				
			||||||
// -----------------------------
 | 
					 | 
				
			||||||
// Direction ID    Direction
 | 
					 | 
				
			||||||
//            0    South - East
 | 
					 | 
				
			||||||
//            1    South
 | 
					 | 
				
			||||||
//            2    South - West
 | 
					 | 
				
			||||||
//            3    East
 | 
					 | 
				
			||||||
//            4    (Up or middle ?)
 | 
					 | 
				
			||||||
//            5    West
 | 
					 | 
				
			||||||
//            6    North - East
 | 
					 | 
				
			||||||
//            7    North
 | 
					 | 
				
			||||||
//            8    North - West
 | 
					 | 
				
			||||||
//-----------------------------
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
public class SmokeUtil
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	public static Random random = new Random();
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	// -------------------------------------------- //
 | 
					 | 
				
			||||||
	// Spawn once
 | 
					 | 
				
			||||||
	// -------------------------------------------- //
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	// Single ========
 | 
					 | 
				
			||||||
	public static void spawnSingle(Location location, int direction)
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		if (location == null) return;
 | 
					 | 
				
			||||||
		location.getWorld().playEffect(location.clone(), Effect.SMOKE, direction);
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	public static void spawnSingle(Location location)
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		spawnSingle(location, 4);
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	public static void spawnSingleRandom(Location location)
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		spawnSingle(location, random.nextInt(9));
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	// Simple Cloud ========
 | 
					 | 
				
			||||||
	public static void spawnCloudSimple(Location location)
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		for (int i = 0; i <= 8; i++)
 | 
					 | 
				
			||||||
		{
 | 
					 | 
				
			||||||
			spawnSingle(location, i);
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	public static void spawnCloudSimple(Collection<Location> locations)
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		for (Location location : locations)
 | 
					 | 
				
			||||||
		{
 | 
					 | 
				
			||||||
			spawnCloudSimple(location);
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	// Random Cloud ========
 | 
					 | 
				
			||||||
	public static void spawnCloudRandom(Location location, float thickness)
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		int singles = (int) Math.floor(thickness*9);
 | 
					 | 
				
			||||||
		for (int i = 0; i < singles; i++)
 | 
					 | 
				
			||||||
		{
 | 
					 | 
				
			||||||
			spawnSingleRandom(location.clone());
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	public static void spawnCloudRandom(Collection<Location> locations, float thickness)
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		for (Location location : locations)
 | 
					 | 
				
			||||||
		{
 | 
					 | 
				
			||||||
			spawnCloudRandom(location, thickness);
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	// -------------------------------------------- //
 | 
					 | 
				
			||||||
	// Attach continuous effects to or locations
 | 
					 | 
				
			||||||
	// -------------------------------------------- //
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	// TODO
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
		Reference in New Issue
	
	Block a user