2011-01-05 17:20:42 +01:00
|
|
|
|
import java.util.ArrayList;
|
|
|
|
|
import java.util.logging.Level;
|
|
|
|
|
import java.util.logging.Logger;
|
|
|
|
|
|
|
|
|
|
//=====================================================================
|
|
|
|
|
//Class: vMinecraftChat
|
|
|
|
|
//Use: Encapsulates all chat commands added by this mod
|
|
|
|
|
//Author: nossr50, TrapAlice, cerevisiae
|
|
|
|
|
//=====================================================================
|
|
|
|
|
public class vChat {
|
|
|
|
|
protected static final Logger log = Logger.getLogger("Minecraft");
|
|
|
|
|
protected static final int lineLength = 312;
|
|
|
|
|
//The array of colors to use
|
|
|
|
|
protected static final String[] rainbow = new String[] {
|
|
|
|
|
Colors.Red,
|
|
|
|
|
Colors.Rose,
|
|
|
|
|
Colors.Gold,
|
|
|
|
|
Colors.Yellow,
|
|
|
|
|
Colors.LightGreen,
|
|
|
|
|
Colors.Green,
|
|
|
|
|
Colors.LightBlue,
|
|
|
|
|
Colors.Blue,
|
|
|
|
|
Colors.Navy,
|
|
|
|
|
Colors.DarkPurple,
|
|
|
|
|
Colors.Purple,
|
|
|
|
|
Colors.LightPurple};
|
|
|
|
|
protected static final String[] xmas = new String[] {
|
|
|
|
|
Colors.Red,
|
|
|
|
|
Colors.Red,
|
|
|
|
|
Colors.White,
|
|
|
|
|
Colors.White,
|
|
|
|
|
Colors.Green,
|
|
|
|
|
Colors.Green,
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
//=====================================================================
|
|
|
|
|
//Function: gmsg
|
|
|
|
|
//Input: Player sender: The player sending the message
|
|
|
|
|
// String msg: The message to be broadcast to all players
|
|
|
|
|
//Output: None
|
|
|
|
|
//Use: Outputs a message to everybody
|
|
|
|
|
//=====================================================================
|
|
|
|
|
public static void gmsg(Player sender, String msg){
|
|
|
|
|
if(sender != null && sender.isMuted())
|
|
|
|
|
sender.sendMessage(Colors.Red + "You have been muted.");
|
|
|
|
|
|
|
|
|
|
for (Player receiver : etc.getServer().getPlayerList()) {
|
|
|
|
|
|
|
|
|
|
if (receiver == null) return;
|
|
|
|
|
|
|
|
|
|
if(vUsers.getProfile(receiver) == null) return;
|
|
|
|
|
|
|
|
|
|
//Check if the person has the sender ignored
|
|
|
|
|
if(sender != null)
|
|
|
|
|
if(vUsers.getProfile(receiver).isIgnored(sender))
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
String[] message = applyColors(wordWrap(msg));
|
|
|
|
|
for(String out : message)
|
|
|
|
|
receiver.sendMessage(out);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//=====================================================================
|
|
|
|
|
//Function: gmsg
|
|
|
|
|
//Input: String msg: The message to be broadcast to all players
|
|
|
|
|
//Output: None
|
|
|
|
|
//Use: Outputs a message to everybody
|
|
|
|
|
//=====================================================================
|
|
|
|
|
public static void gmsg(String msg){gmsg(null, msg);}
|
|
|
|
|
|
|
|
|
|
//=====================================================================
|
|
|
|
|
//Function: sendMessage
|
|
|
|
|
//Input: Player sender: The player sending the message
|
|
|
|
|
// Player receiver: The player receiving the message
|
|
|
|
|
// String msg: The message to be broadcast to all players
|
|
|
|
|
//Output: None
|
|
|
|
|
//Use: Outputs a message to everybody
|
|
|
|
|
//=====================================================================
|
|
|
|
|
public static void sendMessage(Player sender, Player receiver, String msg){
|
|
|
|
|
if(sender != null && sender.isMuted())
|
|
|
|
|
sender.sendMessage(Colors.Red + "You have been muted.");
|
|
|
|
|
|
|
|
|
|
//Check if the receiver has the sender ignored
|
|
|
|
|
if(vUsers.getProfile(receiver) == null)
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
if(sender != null)
|
|
|
|
|
if(vUsers.getProfile(receiver).isIgnored(sender))
|
|
|
|
|
{
|
|
|
|
|
sendMessage(sender, sender, Colors.Rose + receiver.getName()
|
|
|
|
|
+ " has you on their ignore list.");
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
String[] message = applyColors(wordWrap(msg));
|
|
|
|
|
for(String out : message)
|
|
|
|
|
receiver.sendMessage(out);
|
|
|
|
|
//Tell them if they are
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//=====================================================================
|
|
|
|
|
//Function: sendMessage
|
|
|
|
|
//Input: Player receiver: The player receiving the message
|
|
|
|
|
// String msg: The message to be broadcast to all players
|
|
|
|
|
//Output: None
|
|
|
|
|
//Use: Outputs a message to everybody
|
|
|
|
|
//=====================================================================
|
|
|
|
|
public static void sendMessage(Player receiver, String msg)
|
|
|
|
|
{
|
|
|
|
|
sendMessage(null, receiver, msg);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//=====================================================================
|
|
|
|
|
//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
|
|
|
|
|
ArrayList<String> split = new ArrayList<String>();
|
|
|
|
|
for(String in : msg.split(" "))
|
|
|
|
|
split.add(in);
|
|
|
|
|
|
|
|
|
|
//Create an arraylist for the output
|
|
|
|
|
ArrayList<String> out = new ArrayList<String>();
|
|
|
|
|
//While i is less than the length of the array of words
|
|
|
|
|
while(!split.isEmpty()){
|
|
|
|
|
int len = 0;
|
|
|
|
|
|
|
|
|
|
//Create an arraylist to hold individual words
|
|
|
|
|
ArrayList<String> words = new ArrayList<String>();
|
|
|
|
|
|
|
|
|
|
//Loop through the words finding their length and increasing
|
|
|
|
|
//j, the end point for the sub string
|
|
|
|
|
while(!split.isEmpty() && split.get(0) != null && len <= lineLength)
|
|
|
|
|
{
|
|
|
|
|
int wordLength = msgLength(split.get(0)) + 4;
|
|
|
|
|
|
|
|
|
|
//If a word is too long for a line
|
|
|
|
|
if(wordLength > lineLength)
|
|
|
|
|
{
|
|
|
|
|
String[] tempArray = wordCut(len, split.remove(0));
|
|
|
|
|
words.add(tempArray[0]);
|
|
|
|
|
split.add(tempArray[1]);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//If the word is not too long to fit
|
|
|
|
|
len += wordLength;
|
|
|
|
|
if( len < lineLength)
|
|
|
|
|
words.add(split.remove(0));
|
|
|
|
|
}
|
|
|
|
|
//Merge them and add them to the output array.
|
|
|
|
|
out.add( etc.combineSplit(0,
|
|
|
|
|
words.toArray(new String[words.size()]), " ") + " " );
|
|
|
|
|
}
|
|
|
|
|
//Convert to an array and return
|
|
|
|
|
return out.toArray(new String[out.size()]);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//=====================================================================
|
|
|
|
|
//Function: msgLength
|
|
|
|
|
//Input: String str: The string to find the length of
|
|
|
|
|
//Output: int: The length on the screen of a string
|
|
|
|
|
//Use: Finds the length on the screen of a string. Ignores colors.
|
|
|
|
|
//=====================================================================
|
|
|
|
|
public static int msgLength(String str){
|
|
|
|
|
int length = 0;
|
|
|
|
|
//Loop through all the characters, skipping any color characters
|
|
|
|
|
//and their following color codes
|
|
|
|
|
for(int x = 0; x<str.length(); x++)
|
|
|
|
|
{
|
2011-01-05 19:51:43 +01:00
|
|
|
|
if((x+1 <= str.length()) && (str.charAt(x) == '^' || str.charAt(x) == Colors.White.charAt(0)))
|
2011-01-05 17:20:42 +01:00
|
|
|
|
{
|
2011-01-05 19:51:43 +01:00
|
|
|
|
if(colorChange(str.charAt(x + 1)) != null)
|
2011-01-05 17:20:42 +01:00
|
|
|
|
{
|
|
|
|
|
x++;
|
2011-01-05 19:51:43 +01:00
|
|
|
|
continue;
|
2011-01-05 17:20:42 +01:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
int len = charLength(str.charAt(x));
|
|
|
|
|
length += len;
|
|
|
|
|
}
|
|
|
|
|
return length;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//=====================================================================
|
|
|
|
|
//Function: wordCut
|
|
|
|
|
//Input: String str: The string to find the length of
|
|
|
|
|
//Output: String[]: The cut up word
|
|
|
|
|
//Use: Cuts apart a word that is too long to fit on one line
|
|
|
|
|
//=====================================================================
|
|
|
|
|
private static String[] wordCut(int lengthBefore, String str){
|
|
|
|
|
int length = lengthBefore;
|
|
|
|
|
//Loop through all the characters, skipping any color characters
|
|
|
|
|
//and their following color codes
|
|
|
|
|
String[] output = new String[2];
|
|
|
|
|
int x = 0;
|
|
|
|
|
while(length < lineLength && x < str.length())
|
|
|
|
|
{
|
|
|
|
|
int len = charLength(str.charAt(x));
|
|
|
|
|
if( len > 0)
|
|
|
|
|
length += len;
|
|
|
|
|
else
|
|
|
|
|
x++;
|
|
|
|
|
x++;
|
|
|
|
|
}
|
|
|
|
|
if(x > str.length())
|
|
|
|
|
x = str.length();
|
|
|
|
|
//Add the substring to the output after cutting it
|
|
|
|
|
output[0] = str.substring(0, x);
|
|
|
|
|
//Add the last of the string to the output.
|
|
|
|
|
output[1] = str.substring(x);
|
|
|
|
|
return output;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//=====================================================================
|
|
|
|
|
//Function: charLength
|
|
|
|
|
//Input: char x: The character to find the length of.
|
|
|
|
|
//Output: int: The length of the character
|
|
|
|
|
//Use: Finds the visual length of the character on the screen.
|
|
|
|
|
//=====================================================================
|
|
|
|
|
private static int charLength(char x)
|
|
|
|
|
{
|
|
|
|
|
if("i.:,;|!".indexOf(x) != -1)
|
|
|
|
|
return 2;
|
|
|
|
|
else if("l'".indexOf(x) != -1)
|
|
|
|
|
return 3;
|
|
|
|
|
else if("tI[]".indexOf(x) != -1)
|
|
|
|
|
return 4;
|
|
|
|
|
else if("fk{}<>\"*()".indexOf(x) != -1)
|
|
|
|
|
return 5;
|
|
|
|
|
else if("abcdeghjmnopqrsuvwxyzABCDEFGHJKLMNOPQRSTUVWXYZ1234567890\\/#?$%-=_+&^".indexOf(x) != -1)
|
|
|
|
|
return 6;
|
|
|
|
|
else if("@~".indexOf(x) != -1)
|
|
|
|
|
return 7;
|
|
|
|
|
else if(x==' ')
|
|
|
|
|
return 4;
|
|
|
|
|
else
|
|
|
|
|
return -1;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//=====================================================================
|
|
|
|
|
//Function: rainbow
|
|
|
|
|
//Input: String msg: The string to colorify
|
|
|
|
|
//Output: String: The rainbowed result
|
|
|
|
|
//Use: Rainbowifies a string;
|
|
|
|
|
//=====================================================================
|
|
|
|
|
public static String rainbow(String msg){
|
|
|
|
|
String temp = "";
|
|
|
|
|
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==rainbow.length) counter = 0;
|
|
|
|
|
}
|
|
|
|
|
return temp;
|
|
|
|
|
}
|
|
|
|
|
//=====================================================================
|
|
|
|
|
//Function: xmas
|
|
|
|
|
//Input: String msg: The string to colorify
|
|
|
|
|
//Output: String: The xmas colored result
|
|
|
|
|
//Use: Makes a string more festive
|
|
|
|
|
//=====================================================================
|
|
|
|
|
public static String xmas(String msg){
|
|
|
|
|
String temp = "";
|
|
|
|
|
int counter=0;
|
|
|
|
|
//Loop through the message applying the colors
|
|
|
|
|
for(int x=0; x<msg.length(); x++)
|
|
|
|
|
{
|
|
|
|
|
temp += xmas[counter]+msg.charAt(x);
|
|
|
|
|
|
|
|
|
|
if(msg.charAt(x)!=' ') counter++;
|
|
|
|
|
if(counter==xmas.length) counter = 0;
|
|
|
|
|
}
|
|
|
|
|
return temp;
|
|
|
|
|
}
|
|
|
|
|
//=====================================================================
|
|
|
|
|
//Function: getName
|
|
|
|
|
//Input: Player player: The player to get name as color
|
|
|
|
|
//Output: String: The name colored
|
|
|
|
|
//Use: Returns the colored name;
|
|
|
|
|
//=====================================================================
|
|
|
|
|
public static String getName(Player player){
|
|
|
|
|
|
|
|
|
|
//Add the nickname or the name if there is none
|
|
|
|
|
String output = vUsers.getProfile(player).getNick();
|
|
|
|
|
|
|
|
|
|
if(output.isEmpty())
|
|
|
|
|
output = player.getName();
|
|
|
|
|
|
|
|
|
|
//Add the color if there is one
|
|
|
|
|
if(player.getColor() != null && player.getColor() != "")
|
|
|
|
|
output = player.getColor().substring(0,2) + output;
|
|
|
|
|
|
|
|
|
|
//Add the tag if there is one
|
|
|
|
|
output = vUsers.getProfile(player).getTag() + output;
|
|
|
|
|
|
|
|
|
|
//Add the suffix if there is one
|
|
|
|
|
output += vUsers.getProfile(player).getSuffix();
|
|
|
|
|
|
|
|
|
|
output = Colors.White + output;
|
|
|
|
|
|
|
|
|
|
/*if(playerPrefix != null && !playerPrefix.isEmpty())
|
|
|
|
|
output = applyColors(playerPrefix.substring(1)) + output;*/
|
|
|
|
|
|
|
|
|
|
//Return the name
|
|
|
|
|
return output;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//=====================================================================
|
|
|
|
|
//Function: colorChange
|
|
|
|
|
//Input: char colour: The color code to find the color for
|
|
|
|
|
//Output: String: The color that the code identified
|
|
|
|
|
//Use: Finds a color giving a color code
|
|
|
|
|
//=====================================================================
|
|
|
|
|
public static String colorChange(char colour)
|
|
|
|
|
{
|
2011-01-05 19:51:43 +01:00
|
|
|
|
String color;
|
2011-01-05 17:20:42 +01:00
|
|
|
|
switch(colour)
|
|
|
|
|
{
|
|
|
|
|
case '0':
|
|
|
|
|
color = Colors.Black;
|
|
|
|
|
break;
|
|
|
|
|
case '1':
|
|
|
|
|
color = Colors.Navy;
|
|
|
|
|
break;
|
|
|
|
|
case '2':
|
|
|
|
|
color = Colors.Green;
|
|
|
|
|
break;
|
|
|
|
|
case '3':
|
|
|
|
|
color = Colors.Blue;
|
|
|
|
|
break;
|
|
|
|
|
case '4':
|
|
|
|
|
color = Colors.Red;
|
|
|
|
|
break;
|
|
|
|
|
case '5':
|
|
|
|
|
color = Colors.Purple;
|
|
|
|
|
break;
|
|
|
|
|
case '6':
|
|
|
|
|
color = Colors.Gold;
|
2011-01-05 19:51:43 +01:00
|
|
|
|
break;
|
2011-01-05 17:20:42 +01:00
|
|
|
|
case '7':
|
|
|
|
|
color = Colors.LightGray;
|
|
|
|
|
break;
|
|
|
|
|
case '8':
|
|
|
|
|
color = Colors.Gray;
|
|
|
|
|
break;
|
|
|
|
|
case '9':
|
|
|
|
|
color = Colors.DarkPurple;
|
|
|
|
|
break;
|
|
|
|
|
case 'a':
|
|
|
|
|
color = Colors.LightGreen;
|
|
|
|
|
break;
|
|
|
|
|
case 'b':
|
|
|
|
|
color = Colors.LightBlue;
|
|
|
|
|
break;
|
|
|
|
|
case 'c':
|
|
|
|
|
color = Colors.Rose;
|
|
|
|
|
break;
|
|
|
|
|
case 'd':
|
|
|
|
|
color = Colors.LightPurple;
|
|
|
|
|
break;
|
|
|
|
|
case 'e':
|
|
|
|
|
color = Colors.Yellow;
|
|
|
|
|
break;
|
|
|
|
|
case 'f':
|
|
|
|
|
color = Colors.White;
|
|
|
|
|
break;
|
|
|
|
|
case 'A':
|
|
|
|
|
color = Colors.LightGreen;
|
|
|
|
|
break;
|
|
|
|
|
case 'B':
|
|
|
|
|
color = Colors.LightBlue;
|
|
|
|
|
break;
|
|
|
|
|
case 'C':
|
|
|
|
|
color = Colors.Rose;
|
|
|
|
|
break;
|
|
|
|
|
case 'D':
|
|
|
|
|
color = Colors.LightPurple;
|
|
|
|
|
break;
|
|
|
|
|
case 'E':
|
|
|
|
|
color = Colors.Yellow;
|
|
|
|
|
break;
|
|
|
|
|
case 'F':
|
|
|
|
|
color = Colors.White;
|
|
|
|
|
break;
|
|
|
|
|
case 'R':
|
|
|
|
|
color = "^r";
|
|
|
|
|
break;
|
|
|
|
|
case 'r':
|
|
|
|
|
color = "^r";
|
|
|
|
|
break;
|
|
|
|
|
case 'x':
|
|
|
|
|
color = "^x";
|
|
|
|
|
break;
|
|
|
|
|
case 'X':
|
|
|
|
|
color = "^x";
|
|
|
|
|
break;
|
2011-01-05 19:51:43 +01:00
|
|
|
|
default:
|
|
|
|
|
color = null;
|
|
|
|
|
break;
|
2011-01-05 17:20:42 +01:00
|
|
|
|
}
|
2011-01-05 19:51:43 +01:00
|
|
|
|
return color;
|
2011-01-05 17:20:42 +01:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//=====================================================================
|
|
|
|
|
//Function: adminChat
|
|
|
|
|
//Input: Player player: The player talking
|
|
|
|
|
// String message: The message to apply the effect to
|
|
|
|
|
//Output: boolean: If this feature is enabled
|
|
|
|
|
//Use: Sends messages only to admins
|
|
|
|
|
//=====================================================================
|
|
|
|
|
public static boolean adminChat(Player player, String message){
|
|
|
|
|
|
|
|
|
|
//Check if the player can use this feature
|
|
|
|
|
if(player.isAdmin() || player.canUseCommand("/adminchat"))
|
|
|
|
|
{
|
|
|
|
|
//Special formatting for adminchat {Username}
|
|
|
|
|
String adminchat = Colors.DarkPurple + "{" + getName(player)
|
|
|
|
|
+ Colors.DarkPurple +"} ";
|
|
|
|
|
|
|
|
|
|
//Cut off the @ prefix
|
|
|
|
|
if(message.startsWith("@"))
|
|
|
|
|
message = message.substring(1, message.length());
|
|
|
|
|
|
|
|
|
|
//Get the player from the playerlist to send the message to.
|
|
|
|
|
for (Player p: etc.getServer().getPlayerList()) {
|
|
|
|
|
|
|
|
|
|
//If p is not null
|
|
|
|
|
if (p != null) {
|
|
|
|
|
|
|
|
|
|
//And if p is an admin or has access to adminchat send message
|
|
|
|
|
if (p.isAdmin() || (p.canUseCommand("/adminchat"))) {
|
|
|
|
|
sendMessage(player, p, adminchat + message);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//So you can read adminchat from the server console
|
|
|
|
|
log.log(Level.INFO, "@" + "<" + player.getName() + "> " + message);
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
public static boolean partyChat(Player player, String message){
|
|
|
|
|
if(vUsers.getProfile(player).inParty()){
|
|
|
|
|
String partychat = Colors.Green + "(" + getName(player) + Colors.Green + ") ";
|
|
|
|
|
for (Player p: etc.getServer().getPlayerList()){
|
|
|
|
|
if (p != null){
|
|
|
|
|
if (vUsers.getProfile(p).inParty() && (vUsers.getProfile(p).getParty().equals(vUsers.getProfile(player).getParty()))){
|
|
|
|
|
sendMessage(player, p, partychat + Colors.Green + message);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//=====================================================================
|
|
|
|
|
//Function: quote
|
|
|
|
|
//Input: Player player: The player talking
|
|
|
|
|
// String message: The message to apply the effect to
|
|
|
|
|
//Output: boolean: If this feature is enabled
|
|
|
|
|
//Use: Displays a message as a quote
|
|
|
|
|
//=====================================================================
|
|
|
|
|
public static boolean quote(Player player, String message)
|
|
|
|
|
{
|
|
|
|
|
//Format the name
|
|
|
|
|
String playerName = Colors.White + "<" + getName(player)
|
|
|
|
|
+ Colors.White + "> ";
|
|
|
|
|
if(vConfig.getInstance().greentext()) {
|
|
|
|
|
//Log the chat
|
|
|
|
|
log.log(Level.INFO, "<"+player.getName()+"> " + message);
|
|
|
|
|
|
|
|
|
|
//Output the message
|
|
|
|
|
gmsg(player, playerName + Colors.LightGreen + message);
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//=====================================================================
|
|
|
|
|
//Function: rage
|
|
|
|
|
//Input: Player player: The player talking
|
|
|
|
|
// String message: The message to apply the effect to
|
|
|
|
|
//Output: boolean: If this feature is enabled
|
|
|
|
|
//Use: Displays a message in red
|
|
|
|
|
//=====================================================================
|
|
|
|
|
public static boolean rage(Player player, String message)
|
|
|
|
|
{
|
|
|
|
|
//Format the name
|
|
|
|
|
String playerName = Colors.White + "<"
|
|
|
|
|
+ getName(player) + Colors.White +"> ";
|
|
|
|
|
if (vConfig.getInstance().FFF()) {
|
|
|
|
|
log.log(Level.INFO, "<"+player.getName()+"> "+message);
|
|
|
|
|
|
|
|
|
|
//Output the message
|
|
|
|
|
gmsg(player, playerName + Colors.Red + message);
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//=====================================================================
|
|
|
|
|
//Function: quakeColors
|
|
|
|
|
//Input: Player player: The player talking
|
|
|
|
|
// String message: The message to apply the effect to
|
|
|
|
|
//Output: boolean: If this feature is enabled
|
|
|
|
|
//Use: Displays a message in red
|
|
|
|
|
//=====================================================================
|
|
|
|
|
public static boolean quakeColors(Player player, String message)
|
|
|
|
|
{
|
|
|
|
|
//Format the name
|
|
|
|
|
String playerName = Colors.White + "<"
|
|
|
|
|
+ getName(player) + Colors.White +"> ";
|
|
|
|
|
if(vConfig.getInstance().quakeColors()) {
|
|
|
|
|
|
|
|
|
|
String color = vUsers.getProfile(player).getColor();
|
|
|
|
|
//Log the chat
|
|
|
|
|
log.log(Level.INFO, "<"+player.getName()+"> " + message);
|
|
|
|
|
|
|
|
|
|
//Output the message
|
|
|
|
|
gmsg(player, playerName + color + message);
|
|
|
|
|
|
|
|
|
|
//Loop through the string finding the color codes and inserting them
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//=====================================================================
|
|
|
|
|
//Function: emote
|
|
|
|
|
//Input: Player player: The player talking
|
|
|
|
|
// String message: The message to apply the effect to
|
|
|
|
|
//Output: boolean: If this feature is enabled
|
|
|
|
|
//Use: /me but with our custom colors applied
|
|
|
|
|
//=====================================================================
|
|
|
|
|
public static boolean emote(Player player, String message)
|
|
|
|
|
{
|
|
|
|
|
gmsg(player, "* " + getName(player) + " " + Colors.White + message);
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//=====================================================================
|
|
|
|
|
//Function: applyColors
|
|
|
|
|
//Input: String[] message: The lines to be colored
|
|
|
|
|
//Output: String[]: The lines, but colorful
|
|
|
|
|
//Use: Colors each line
|
|
|
|
|
//=====================================================================
|
|
|
|
|
public static String[] applyColors(String[] message)
|
|
|
|
|
{
|
|
|
|
|
if(message != null && message[0] != null && !message[0].isEmpty()){
|
|
|
|
|
//The color to start the line with
|
|
|
|
|
String recentColor = Colors.White;
|
|
|
|
|
|
|
|
|
|
//Go through each line
|
|
|
|
|
int counter = 0;
|
|
|
|
|
int i = 0;
|
|
|
|
|
boolean taste = false;
|
|
|
|
|
boolean xmasparty = false;
|
|
|
|
|
|
|
|
|
|
for(String msg: message)
|
|
|
|
|
{
|
|
|
|
|
//Start the line with the most recent color
|
|
|
|
|
String temp = "";
|
|
|
|
|
if(!recentColor.equals("^r") && recentColor != null)
|
|
|
|
|
temp += recentColor;
|
|
|
|
|
|
|
|
|
|
//Loop through looking for a color code
|
|
|
|
|
for(int x = 0; x< msg.length(); x++)
|
|
|
|
|
{
|
|
|
|
|
//If the char is a ^ or <20>
|
|
|
|
|
if(taste || msg.charAt(x) == '^'
|
|
|
|
|
|| msg.charAt(x) == Colors.Red.charAt(0))
|
|
|
|
|
{
|
|
|
|
|
if(x != msg.length() - 1)
|
|
|
|
|
{
|
|
|
|
|
//If the following character is a color code
|
|
|
|
|
if(vChat.colorChange(msg.charAt(x+1)) != null)
|
|
|
|
|
{
|
|
|
|
|
//Set the most recent color to the new color
|
|
|
|
|
recentColor = vChat.colorChange(msg.charAt(x+1));
|
|
|
|
|
|
|
|
|
|
//If the color specified is rainbow
|
|
|
|
|
if(taste || recentColor.equals("^r"))
|
|
|
|
|
{
|
|
|
|
|
//Skip the quake code for rainbow
|
|
|
|
|
if(recentColor.equals("^r"))
|
|
|
|
|
{
|
|
|
|
|
x += 2;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//Taste keeps it going with rainbow if there
|
|
|
|
|
//are more lines
|
|
|
|
|
taste = true;
|
|
|
|
|
//Loop through the message applying the colors
|
|
|
|
|
while(x < msg.length() && msg.charAt(x) != '^'
|
|
|
|
|
&& msg.charAt(x) != Colors.Red.charAt(0))
|
|
|
|
|
{
|
|
|
|
|
temp += rainbow[i] + msg.charAt(x);
|
|
|
|
|
|
|
|
|
|
if(msg.charAt(x) != ' ') i++;
|
|
|
|
|
if(i == rainbow.length) i = 0;
|
|
|
|
|
x++;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//If it reached another color instead of the end
|
|
|
|
|
if(x < msg.length() && msg.charAt(x) == '^'
|
|
|
|
|
|| x < msg.length()
|
|
|
|
|
&& msg.charAt(x) == Colors.Red.charAt(0) )
|
|
|
|
|
{
|
|
|
|
|
taste = false;
|
|
|
|
|
i = 0;
|
|
|
|
|
x--;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if(xmasparty || recentColor.equals("^x"))
|
|
|
|
|
{
|
|
|
|
|
//Skip the quake code for xmas
|
|
|
|
|
if(recentColor.equals("^x"))
|
|
|
|
|
{
|
|
|
|
|
x += 2;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//Taste keeps it going with xmas if there
|
|
|
|
|
//are more lines
|
|
|
|
|
xmasparty = true;
|
|
|
|
|
//Loop through the message applying the colors
|
|
|
|
|
while(x < msg.length() && msg.charAt(x) != '^'
|
|
|
|
|
&& msg.charAt(x) != Colors.Red.charAt(0))
|
|
|
|
|
{
|
|
|
|
|
temp += xmas[i] + msg.charAt(x);
|
|
|
|
|
|
|
|
|
|
if(msg.charAt(x) != ' ') i++;
|
|
|
|
|
if(i == xmas.length) i = 0;
|
|
|
|
|
x++;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//If it reached another color instead of the end
|
|
|
|
|
if(x < msg.length() && msg.charAt(x) == '^'
|
|
|
|
|
|| x < msg.length()
|
|
|
|
|
&& msg.charAt(x) == Colors.Red.charAt(0) )
|
|
|
|
|
{
|
|
|
|
|
xmasparty = false;
|
|
|
|
|
i = 0;
|
|
|
|
|
x--;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
|
|
|
|
|
{
|
|
|
|
|
//Add the color
|
|
|
|
|
temp += recentColor;
|
|
|
|
|
//Skip these chars
|
|
|
|
|
x++;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//Otherwise ignore it.
|
|
|
|
|
} else {
|
|
|
|
|
temp += msg.charAt(x);
|
|
|
|
|
}
|
|
|
|
|
//Insert the character
|
|
|
|
|
} else {
|
|
|
|
|
temp += msg.charAt(x);
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
temp += msg.charAt(x);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//Replace the message with the colorful message
|
|
|
|
|
message[counter] = temp;
|
|
|
|
|
counter++;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return message;
|
|
|
|
|
}
|
|
|
|
|
}
|