mirror of
https://github.com/mcMMO-Dev/mcMMO.git
synced 2026-02-19 02:12:58 +01:00
Fixed some bugs
This commit is contained in:
@@ -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) {
|
||||
|
||||
//Loop through the string finding the color codes and inserting them
|
||||
String temp = "";
|
||||
for(int x = 0; x< message.length(); x++)
|
||||
{
|
||||
if(message.charAt(x)=='^' && x != message.length() - 1)
|
||||
{
|
||||
temp += vminecraftChat.colorChange(message.charAt(x+1));
|
||||
x++;
|
||||
}
|
||||
else{
|
||||
temp+=message.charAt(x);
|
||||
}
|
||||
}
|
||||
//Log the chat
|
||||
log.log(Level.INFO, "<"+player.getName()+"> "+message);
|
||||
|
||||
//Broadcast the message
|
||||
gmsg(playerName + temp + " ");
|
||||
//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
|
||||
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(msg.charAt(x)=='^' && x != msg.length() - 1)
|
||||
{
|
||||
//Set the most recent color to the new color
|
||||
recentColor = vminecraftChat.colorChange(msg.charAt(x+1));
|
||||
temp += recentColor;
|
||||
x++;
|
||||
}
|
||||
else{
|
||||
temp += msg.charAt(x);
|
||||
}
|
||||
}
|
||||
//Replace the message with the colorful message
|
||||
message[counter] = temp;
|
||||
counter++;
|
||||
}
|
||||
return message;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user