2
0
cerevisiae 14 жил өмнө
parent
commit
343c170d59

+ 259 - 68
vminecraftChat.java

@@ -23,6 +23,175 @@ public class vminecraftChat {
         }
     }
 
+	//=====================================================================
+	//Function:	wordWrap
+	//Input:	String msg: The message to be wrapped
+	//Output:	String[]: The array of substrings 
+	//Use:		Cuts the message apart into whole words short enough to fit
+    //			on one line
+	//=====================================================================
+    public static String[] wordWrap(String msg){
+    	//Split each word apart
+    	String[] array = msg.split(" ");
+    	//Create the output array
+    	String[] out = new String[0];
+    	
+    	//While i is less than the length of the array of words
+    	int i = 0;
+    	while(i < array.length){
+    		int len = 0;
+    		int j = i;
+    		//Loop through the words finding their length and increasing
+    		//j, the end point for the sub string
+    		while(len <= 316 && j < array.length)
+    		{
+    			len += msgLength(array[j]) + 4;
+    			if( len <= 316)
+    				j++;
+
+    		}
+    		String[] temp = new String[j - i];
+
+    		//If it's not the end yet
+    		if(j < array.length)
+    		{
+    			//Copy the words in the selection into a new array
+        		System.arraycopy(array, i, temp, 0, j);
+
+        		//Merge them and add them to the output array
+    			String[] tempOut = new String[out.length + 1];
+        		System.arraycopy(out, 0, tempOut, 0, out.length);
+        		tempOut[tempOut.length - 1] = etc.combineSplit(0, temp, " ");
+        		out = tempOut;
+        		
+    		}
+    		else
+    		{
+    			//Merge the rest and add them to the output array
+    			String[] tempOut = new String[out.length + 1];
+        		System.arraycopy(out, 0, tempOut, 0, out.length);
+        		tempOut[tempOut.length - 1] = etc.combineSplit(i, array, " ");
+        		out = tempOut;
+    		}
+    		//Make the old front equal to the old end
+    		i = j;
+    	}
+    	return out;
+    }
+    
+	//=====================================================================
+	//Function:	wordWrap
+	//Input:	Player player: To get the player name
+    //			String msg: The message to be wrapped
+	//Output:	String[]: The array of substrings 
+	//Use:		Cuts the message apart into whole words short enough to fit
+    //			on one line
+	//=====================================================================
+    public static String[] wordWrap(Player player, String msg){
+    	//Split each word apart
+    	String[] array = msg.split(" ");
+    	//Create the output array
+    	String[] out = new String[0];
+    	
+    	//While i is less than the length of the array of words
+    	int i = 0;
+    	while(i < array.length){
+    		int len = 0;
+    		if(out.length == 0)
+    			len = msgLength("<" + player.getName() + "> ");
+    		int j = i;
+    		//Loop through the words finding their length and increasing
+    		//j, the end point for the sub string
+    		while(len <= 316 && j < array.length)
+    		{
+    			len += msgLength(array[j]) + 4;
+    			if( len <= 316)
+    				j++;
+
+    		}
+    		String[] temp = new String[j - i];
+
+    		//If it's not the end yet
+    		if(j < array.length)
+    		{
+    			//Copy the words in the selection into a new array
+        		System.arraycopy(array, i, temp, 0, j);
+
+        		//Merge them and add them to the output array
+    			String[] tempOut = new String[out.length + 1];
+        		System.arraycopy(out, 0, tempOut, 0, out.length);
+        		tempOut[tempOut.length - 1] = etc.combineSplit(0, temp, " ");
+        		out = tempOut;
+        		
+    		}
+    		else
+    		{
+    			//Merge the rest and add them to the output array
+    			String[] tempOut = new String[out.length + 1];
+        		System.arraycopy(out, 0, tempOut, 0, out.length);
+        		tempOut[tempOut.length - 1] = etc.combineSplit(i, array, " ");
+        		out = tempOut;
+    		}
+    		//Make the old front equal to the old end
+    		i = j;
+    	}
+    	return out;
+    }
+    
+    private static int msgLength(String str){
+		int length = 0;
+		for(int x = 0; x<str.length(); x++)
+		{
+			if("i;,.:|!".indexOf(str.charAt(x)) != -1)
+			{
+				length+=2;
+			}
+			else if("l'".indexOf(str.charAt(x)) != -1)
+			{
+				length+=3;
+			}
+			else if("tI[]".indexOf(str.charAt(x)) != -1)
+			{
+				length+=4;
+			}
+			else if("kf{}<>\"*()".indexOf(str.charAt(x)) != -1)
+			{
+				length+=5;
+			}
+			else if("hequcbrownxjmpsvazydgTHEQUCKBROWNFXJMPSVLAZYDG1234567890#\\/?$%-=_+&".indexOf(str.charAt(x)) != -1)
+			{
+				length+=6;
+			}
+			else if("@~".indexOf(str.charAt(x)) != -1)
+			{
+				length+=7;
+			}
+			else if(str.charAt(x)==' ')
+			{
+				length+=4;
+			}
+		}
+		return length;
+    }
+    
+
+    public static String rainbow(String msg){
+    	String temp = "";
+    	//The array of colors to use
+		String[] rainbow = new String[] {Colors.Red, Colors.Rose,
+				Colors.Yellow, Colors.Green, Colors.Blue,
+				Colors.LightPurple, Colors.Purple};
+		int counter=0;
+		//Loop through the message applying the colors
+		for(int x=0; x<msg.length(); x++)
+		{
+			temp+=rainbow[counter]+msg.charAt(x);
+			
+			if(msg.charAt(x)!=' ') counter++;
+			if(counter==7) counter = 0;
+		}
+		return temp;
+    }
 	//=====================================================================
 	//Function:	nameColor
 	//Input:	Player player: The player to get name as color
@@ -116,53 +285,6 @@ public class vminecraftChat {
 		}
 		return color;
 	}
-
-	//=====================================================================
-	//Function:	lengthCheck
-	//Input:	String str: The message to make sure isn't too long
-	//Output:	boolean: If the message is too long
-	//Use:		Check if a message is too long
-	//=====================================================================
-	public static boolean lengthCheck(String str)
-	{
-		int length = 0;
-		for(int x = 0; x<str.length(); x++)
-		{
-			if("i;,.:|!".indexOf(str.charAt(x)) != -1)
-			{
-				length+=2;
-			}
-			else if("l'".indexOf(str.charAt(x)) != -1)
-			{
-				length+=3;
-			}
-			else if("tI[]".indexOf(str.charAt(x)) != -1)
-			{
-				length+=4;
-			}
-			else if("kf{}<>\"*()".indexOf(str.charAt(x)) != -1)
-			{
-				length+=5;
-			}
-			else if("hequcbrownxjmpsvazydgTHEQUCKBROWNFXJMPSVLAZYDG1234567890#\\/?$%-=_+&".indexOf(str.charAt(x)) != -1)
-			{
-				length+=6;
-			}
-			else if("@~".indexOf(str.charAt(x)) != -1)
-			{
-				length+=7;
-			}
-			else if(str.charAt(x)==' ')
-			{
-				length+=4;
-			}
-		}
-		if(length<=316)
-		{
-			return true;
-		} else { return false; }
-
-	}
 	
 	//=====================================================================
 	//Function:	adminChat
@@ -177,8 +299,10 @@ public class vminecraftChat {
 		if(player.isAdmin() || player.canUseCommand("/adminchat"))
 		{
 			//Special formatting for adminchat {Username}
-	        String adminchat = Colors.DarkPurple + "{" + player.getColor()
-	        	+ player.getName()  +  Colors.DarkPurple +"}" + Colors.White + " ";
+	        String adminchat = Colors.DarkPurple + "{" + nameColor(player)
+	        +  Colors.DarkPurple +"}" + Colors.White + " ";
+	        
+	        String[] msg = wordWrap(player, message.substring(1, message.length()));
 	        
 	        //Get the player from the playerlist to send the message to.
 			for (Player p: etc.getServer().getPlayerList()) {
@@ -188,10 +312,15 @@ public class vminecraftChat {
 					
 					//And if p is an admin or has access to adminchat
 					if (p.isAdmin() || (p.canUseCommand("/adminchat"))) {
+
+						//Output the first line
+						p.sendMessage(adminchat + msg[0]);
 						
-						//Send them the message
-						p.sendMessage(adminchat
-							+ message.substring(1, message.length()));
+						//Get the rest of the lines and display them.
+						String[] tempOut = new String[msg.length - 1];
+						System.arraycopy(msg, 1, tempOut, 0, tempOut.length);
+						for(String str: tempOut)
+							p.sendMessage(str);
 					}
 				}
 			}
@@ -218,8 +347,19 @@ public class vminecraftChat {
 		if(vminecraftSettings.getInstance().greentext()) {
 			//Log the chat
 			log.log(Level.INFO, "<"+player.getName()+"> "+message);
-			//Output the message
-			gmsg(playerName + Colors.LightGreen + message);
+	        
+			//Get the multi line array
+	        String[] msg = wordWrap(player, message);
+
+			//Output the first line
+			gmsg( playerName + Colors.LightGreen + msg[0]);
+			
+			//Get the rest of the lines and display them.
+			String[] tempOut = new String[msg.length - 1];
+			System.arraycopy(msg, 1, tempOut, 0, tempOut.length);
+			for(String str: tempOut)
+				gmsg(Colors.LightGreen + str);
+			return true;
 		}
 		return false;
 	}
@@ -237,7 +377,18 @@ public class vminecraftChat {
 		String playerName = "<" + nameColor(player) + Colors.White +"> ";
 		if (vminecraftSettings.getInstance().FFF()) {
 			log.log(Level.INFO, "<"+player.getName()+"> "+message);
-			gmsg(playerName + Colors.Red + message);
+	        
+			//Get the multi line array
+	        String[] msg = wordWrap(player, message);
+
+			//Output the first line
+			gmsg( playerName + Colors.Red + msg[0]);
+			
+			//Get the rest of the lines and display them.
+			String[] tempOut = new String[msg.length - 1];
+			System.arraycopy(msg, 1, tempOut, 0, tempOut.length);
+			for(String str: tempOut)
+				gmsg(Colors.Red + str);
 			return true;
 		}
 		return false;
@@ -254,28 +405,68 @@ public class vminecraftChat {
 	{
 		//Format the name
 		String playerName = "<" + nameColor(player) + Colors.White +"> ";
-		if(vminecraftSettings.getInstance().quakeColors()&&message.length()>2 && vminecraftChat.lengthCheck(playerName + message)) {
+		if(vminecraftSettings.getInstance().quakeColors() && message.length()>2) {
+
+			//Log the chat
+			log.log(Level.INFO, "<"+player.getName()+"> "+message);
+			
+			//Get the multi line array
+	        String[] msg = wordWrap(player, message);
+	        //Apply colors to the lines
+			applyColors(msg);
+
+			//Output the first line
+			gmsg( playerName + msg[0]);
+			//Get the rest of the lines and display them.
+			String[] tempOut = new String[msg.length - 1];
+			System.arraycopy(msg, 1, tempOut, 0, tempOut.length);
+			for(String str: tempOut)
+				gmsg(str);
 
 			//Loop through the string finding the color codes and inserting them
-			String temp = "";
-			for(int x = 0; x< message.length(); x++)
+			return true;
+		}
+		return false;
+	}
+
+    
+    //=====================================================================
+	//Function:	applyColors
+	//Input:	String[] message: The lines to be colored
+	//Output:	String[]: The lines, but colorful
+	//Use:		Colors each line
+	//=====================================================================
+	private static String[] applyColors(String[] message)
+	{
+
+		//The color to start the line with
+		String recentColor = Colors.White;
+		
+		//Go through each line
+		int counter = 0;
+		for(String msg: message)
+		{	
+			//Start the line with the most recent color
+			String temp = recentColor;
+			
+			//Loop through looking for a color code
+			for(int x = 0; x< msg.length(); x++)
 			{
-				if(message.charAt(x)=='^' && x != message.length() - 1)
+				if(msg.charAt(x)=='^' && x != msg.length() - 1)
 				{
-					temp += vminecraftChat.colorChange(message.charAt(x+1));
+					//Set the most recent color to the new color
+					recentColor = vminecraftChat.colorChange(msg.charAt(x+1));
+					temp += recentColor;
 					x++;
 				}
 				else{
-					temp+=message.charAt(x);
+					temp += msg.charAt(x);
 				}
 			}
-			//Log the chat
-			log.log(Level.INFO, "<"+player.getName()+"> "+message);
-			
-			//Broadcast the message
-			gmsg(playerName + temp + " ");
-			return true;
+			//Replace the message with the colorful message
+			message[counter] = temp;
+			counter++;
 		}
-		return false;
+		return message;
 	}
 }

+ 79 - 85
vminecraftCommands.java

@@ -61,9 +61,13 @@ public class vminecraftCommands{
 
 				//Find the player by name
 				Player playerTarget = etc.getServer().matchPlayer(args[0]);
-
+				
+				//Target player isn't found
+				if(playerTarget == null)
+					player.sendMessage(Colors.Rose + "Can't find user "
+							+ args[0] + ".");
 				//If it's you, return witty message
-				if (player.getName().equalsIgnoreCase(args[0]))
+				else if (player.getName().equalsIgnoreCase(args[0]))
 					player.sendMessage(Colors.Rose + "You're already here!");
 					
 				//If the player is higher rank than you, inform the user
@@ -72,15 +76,12 @@ public class vminecraftCommands{
 							"That player has higher permissions than you.");
 				
 				//If the player exists transport the user to the player
-				else if (playerTarget != null) {
+				else {
 					log.log(Level.INFO, player.getName() + " teleported to " +
 							playerTarget.getName());
 					player.teleportTo(playerTarget);
 					
 				//Otherwise inform the user that the player doesn't exist
-				} else {
-					player.sendMessage(Colors.Rose + "Can't find user "
-							+ args[0] + ".");
 				}
 			}
 			return true;
@@ -133,19 +134,20 @@ public class vminecraftCommands{
 			} else {
 				//Get the player by name
 				Player playerTarget = etc.getServer().matchPlayer(args[0]);
+				
+				//If the target doesn't exist
+				if(playerTarget == null)
+					player.sendMessage(Colors.Rose + "Can't find user " + args[0] + ".");
 				//If the player has a higher rank than the user, return error
-				if (!player.hasControlOver(playerTarget)) {
+				else if (!player.hasControlOver(playerTarget)) 
 					player.sendMessage(Colors.Red + "That player has higher permissions than you.");
 				//If the user teleports themselves, mock them
-				}else if (player.getName().equalsIgnoreCase(args[0])) {
+				else if (player.getName().equalsIgnoreCase(args[0])) 
 					player.sendMessage(Colors.Rose + "Wow look at that! You teleported yourself to yourself!");
 				//If the target exists, teleport them to the user
-				}else if (playerTarget != null) {
+				 else {
 					log.log(Level.INFO, player.getName() + " teleported " + player.getName() + " to their self.");
 					playerTarget.teleportTo(player);
-				//Otherwise inform the user that the target doens't exist.
-				} else {
-					player.sendMessage(Colors.Rose + "Can't find user " + args[0] + ".");
 				}
 			}
 			return true;
@@ -186,7 +188,8 @@ public class vminecraftCommands{
 		if(vminecraftSettings.getInstance().cmdRules()) {
 			//Display them
 			for (String str : vminecraftSettings.getInstance().getRules()) {
-				player.sendMessage(Colors.Blue+str);
+				if(str != null)
+					player.sendMessage(Colors.Blue+str);
 			}
 			return true;
 		}
@@ -207,40 +210,24 @@ public class vminecraftCommands{
 		if(vminecraftSettings.getInstance().cmdFabulous()) {
 			//Make sure a message has been specified
 			if (args.length < 1) {return false;}
-			String str  = "",
-				   temp = "";
+			String str  = "";
 			//Merge the message again
-			str = etc.combineSplit(0, args, " ");
-			String playerName = "<" + player.getName()  + "> ";
-			String temp2 = playerName + str;
-			//The array of colors to use
-			String[] rainbow = new String[] {Colors.Red, Colors.Rose,
-					Colors.Yellow, Colors.Green, Colors.Blue,
-					Colors.LightPurple, Colors.Purple};
-			int counter=0;
-			//If the message isn't too long
-			if(vminecraftChat.lengthCheck(temp2))
-			{
-				//Output for server
-				log.log(Level.INFO, player.getName()+" fabulously said \""+ str+"\"");
-				
-				//Loop through the message applying the colors
-				for(int x=0; x<str.length(); x++)
-				{
-					temp+=rainbow[counter]+str.charAt(x);
-					
-					if(str.charAt(x)!=' ') counter++;
-					if(counter==7) counter = 0;
-				}
-				//Prepend the player name
-				String message = playerName + temp;
-				//Output the message
-				vminecraftChat.gmsg(message);
-				
-			//Otherwise the message is too long, output error to user
-			} else {
-				player.sendMessage(Colors.Rose + "Message is too long");
-			}
+			str = etc.combineSplit(0, args, " ");	
+			//Output for server
+			log.log(Level.INFO, player.getName()+" fabulously said \""+ str+"\"");
+			//Prepend the player name
+			String[] message = vminecraftChat.wordWrap(player, str);
+
+			//Output the first line
+			vminecraftChat.gmsg( "<" + vminecraftChat.nameColor(player) + "> "
+					+ vminecraftChat.rainbow(message[0]));
+			
+			//Get the rest of the lines and display them.
+			String[] tempOut = new String[message.length - 1];
+			System.arraycopy(message, 1, tempOut, 0, tempOut.length);
+			for(String msg: tempOut)
+				vminecraftChat.gmsg(vminecraftChat.rainbow(msg));
+
 			return true;
 		}
 		return false;
@@ -259,39 +246,40 @@ public class vminecraftCommands{
 		//If the command is enabled
 		if (vminecraftSettings.getInstance().cmdWhoIs()) {
 			//If a player is specified
-			if (args.length < 1) {
+			if (args.length < 1) 
 				player.sendMessage(Colors.Rose + "Usage is /whois [player]");
-			}
-			//Get the player by name
-			Player playerTarget = null;
-			for( Player p : etc.getServer().getPlayerList())
-			{
-				if (p.getName().equalsIgnoreCase(args[0]))
+			else {
+				//Get the player by name
+				Player playerTarget = null;
+				for( Player p : etc.getServer().getPlayerList())
 				{
-					playerTarget = p;
+					if (p.getName().equalsIgnoreCase(args[0]))
+					{
+						playerTarget = p;
+					}
+				}
+				//If the player exists
+				if (playerTarget != null){
+
+					//Displaying the information
+					player.sendMessage(Colors.Blue + "Whois results for " +
+							vminecraftChat.nameColor(playerTarget));
+					//Group
+					player.sendMessage(Colors.Blue + "Groups: " +
+								playerTarget.getGroups());
+					//Admin
+					player.sendMessage(Colors.Blue+"Admin: " +
+							String.valueOf(playerTarget.canIgnoreRestrictions()));
+					//IP
+					player.sendMessage(Colors.Blue+"IP: " + playerTarget.getIP());
+					//Restrictions
+					player.sendMessage(Colors.Blue+"Can ignore restrictions: " +
+							String.valueOf(playerTarget.canIgnoreRestrictions()));
+
+				//Give the user an error if the player doesn't exist
+				} else {
+					player.sendMessage(Colors.Rose+"Player not found.");
 				}
-			}
-			//If the player exists
-			if (playerTarget != null){
-
-				//Displaying the information
-				player.sendMessage(Colors.Blue + "Whois results for " +
-						vminecraftChat.nameColor(playerTarget) + ".");
-				//Group
-				player.sendMessage(Colors.Blue + "Groups: " +
-							playerTarget.getGroups());
-				//Admin
-				player.sendMessage(Colors.Blue+"Admin: " +
-						String.valueOf(playerTarget.canIgnoreRestrictions()));
-				//IP
-				player.sendMessage(Colors.Blue+"IP: " + playerTarget.getIP());
-				//Restrictions
-				player.sendMessage(Colors.Blue+"Can ignore restrictions: " +
-						String.valueOf(playerTarget.canIgnoreRestrictions()));
-
-			//Give the user an error if the player doesn't exist
-			} else {
-				player.sendMessage(Colors.Rose+"Player not found.");
 			}
 			return true;
 		}
@@ -315,11 +303,13 @@ public class vminecraftCommands{
 			String tempList = "";
 			for( Player p : etc.getServer().getPlayerList())
 			{
-				if(count == 0)
-					tempList += vminecraftChat.nameColor(p);
-				else
-					tempList += ", " + vminecraftChat.nameColor(p);
-				count++;
+				if(p != null){
+					if(count == 0)
+						tempList += vminecraftChat.nameColor(p);
+					else
+						tempList += ", " + vminecraftChat.nameColor(p);
+					count++;
+				}
 			}
 			//Get the max players from the config
 			PropertiesFile server = new PropertiesFile("server.properties");
@@ -329,10 +319,11 @@ public class vminecraftCommands{
 				e.printStackTrace();
 			}
 			int maxPlayers = server.getInt("max-players");
-			
 			//Output the player list
-			vminecraftChat.gmsg( Color.red + "Player List (" + count + "/" + maxPlayers +
-					"): " + tempList);
+			String[] tempOut = vminecraftChat.wordWrap(Colors.Rose + "Player List ("
+					+ count + "/" + maxPlayers +"): " + tempList);
+			for(String msg: tempOut)
+				player.sendMessage( msg );
 			
 			return true;
 		}
@@ -376,8 +367,11 @@ public class vminecraftCommands{
 		if(vminecraftSettings.getInstance().cmdEzModo()) {
 			//Get the player by name
 			Player playerTarget = etc.getServer().matchPlayer(args[0]);
+			//If the player doesn't exist don't run
+			if(playerTarget == null)
+				return false;
 			//If the player isn't invulnerable kill them
-			if (!vminecraftSettings.getInstance().isEzModo(player.getName())) {
+			if (!vminecraftSettings.getInstance().isEzModo(playerTarget.getName())) {
 				playerTarget.setHealth(0);
 				vminecraftChat.gmsg(player.getColor() + player.getName() + Colors.LightBlue + " has slain " + playerTarget.getColor() + playerTarget.getName());
 			//Otherwise output error to the user

+ 7 - 6
vminecraftListener.java

@@ -29,18 +29,19 @@ public class vminecraftListener extends PluginListener {
     public boolean onChat(Player player, String message){
 
     	//Quote (Greentext)
-    	if (message.startsWith(">"))
-    		vminecraftChat.quote(player, message);
+    	if (message.startsWith("@"))
+    		return vminecraftChat.adminChat(player, message);
+    	
+    	else if (message.startsWith(">"))
+    		return vminecraftChat.quote(player, message);
         	
         //Rage (FFF)
         else if (message.startsWith("FFF"))
-        	vminecraftChat.rage(player, message);
+        	return vminecraftChat.rage(player, message);
     	
     	//Send through quakeColors otherwise
         else
-        	vminecraftChat.quakeColors(player, message);
-
-    	return false;
+        	return vminecraftChat.quakeColors(player, message);
     }
     
 	//=====================================================================

+ 1 - 1
vminecraftSettings.java

@@ -105,7 +105,7 @@ public class vminecraftSettings {
 			cmdPromote = properties.getBoolean("cmdPromote",true);
 			cmdDemote = properties.getBoolean("cmdDemote",true);
 			cmdWhoIs = properties.getBoolean("cmdWhoIs",true);
-			cmdWhoIs = properties.getBoolean("cmdWho",true);
+			cmdWho = properties.getBoolean("cmdWho",true);
 			cmdRules = properties.getBoolean("cmdRules",true);
 			cmdTp = properties.getBoolean("cmdTp",true);
 			cmdMasstp = properties.getBoolean("cmdMasstp",true);