mirror of
https://github.com/mcMMO-Dev/mcMMO.git
synced 2024-11-22 13:16:45 +01:00
vMinecraft chat functionality ported to vChat
This commit is contained in:
parent
5b44f81fca
commit
9dcfa49b45
41
com/bukkit/nossr50/vChat/vChat.java
Normal file
41
com/bukkit/nossr50/vChat/vChat.java
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
package com.bukkit.nossr50.vChat;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.Server;
|
||||||
|
import org.bukkit.event.Event.Priority;
|
||||||
|
import org.bukkit.event.Event;
|
||||||
|
import org.bukkit.plugin.PluginDescriptionFile;
|
||||||
|
import org.bukkit.plugin.PluginLoader;
|
||||||
|
import org.bukkit.plugin.java.JavaPlugin;
|
||||||
|
import org.bukkit.plugin.PluginManager;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* vChat for Bukkit
|
||||||
|
*
|
||||||
|
* @author nossr50
|
||||||
|
* @author cerevisae
|
||||||
|
*/
|
||||||
|
public class vChat extends JavaPlugin {
|
||||||
|
private final vPlayerListener playerListener = new vPlayerListener(this);
|
||||||
|
private final HashMap<Player, Boolean> debugees = new HashMap<Player, Boolean>();
|
||||||
|
|
||||||
|
public vChat(PluginLoader pluginLoader, Server instance, PluginDescriptionFile desc, File folder, File plugin, ClassLoader cLoader) {
|
||||||
|
super(pluginLoader, instance, desc, folder, plugin, cLoader);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public void onEnable() {
|
||||||
|
PluginManager pm = getServer().getPluginManager();
|
||||||
|
pm.registerEvent(Event.Type.PLAYER_CHAT, playerListener, Priority.Normal, this);
|
||||||
|
PluginDescriptionFile pdfFile = this.getDescription();
|
||||||
|
System.out.println( pdfFile.getName() + " version " + pdfFile.getVersion() + " is enabled!" );
|
||||||
|
}
|
||||||
|
public void onDisable() {
|
||||||
|
System.out.println("vChat Disabled!");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
538
com/bukkit/nossr50/vChat/vPlayerListener.java
Normal file
538
com/bukkit/nossr50/vChat/vPlayerListener.java
Normal file
@ -0,0 +1,538 @@
|
|||||||
|
package com.bukkit.nossr50.vChat;
|
||||||
|
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.event.player.PlayerChatEvent;
|
||||||
|
import org.bukkit.event.player.PlayerEvent;
|
||||||
|
import org.bukkit.event.player.PlayerListener;
|
||||||
|
import org.bukkit.ChatColor;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.logging.Level;
|
||||||
|
import java.util.logging.Logger;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handle events for all Player related events
|
||||||
|
* @author nossr50
|
||||||
|
*/
|
||||||
|
public class vPlayerListener extends PlayerListener {
|
||||||
|
private final vChat plugin;
|
||||||
|
protected static final Logger log = Logger.getLogger("Minecraft");
|
||||||
|
//The length of a text box line in pixels
|
||||||
|
protected static final int lineLength = 312;
|
||||||
|
//Characters we will split the line at
|
||||||
|
protected static final String lineSplit = "/- ";
|
||||||
|
|
||||||
|
public vPlayerListener(vChat instance) {
|
||||||
|
plugin = instance;
|
||||||
|
}
|
||||||
|
//Special Color Codes
|
||||||
|
protected static final String[] rainbow = new String[] {
|
||||||
|
ChatColor.DARK_RED.toString(),
|
||||||
|
ChatColor.RED.toString(),
|
||||||
|
ChatColor.GOLD.toString(),
|
||||||
|
ChatColor.YELLOW.toString(),
|
||||||
|
ChatColor.GREEN.toString(),
|
||||||
|
ChatColor.DARK_GREEN.toString(),
|
||||||
|
ChatColor.BLUE.toString(),
|
||||||
|
ChatColor.DARK_BLUE.toString(),
|
||||||
|
ChatColor.AQUA.toString(),
|
||||||
|
ChatColor.DARK_AQUA.toString(),
|
||||||
|
ChatColor.DARK_PURPLE.toString(),
|
||||||
|
ChatColor.LIGHT_PURPLE.toString()
|
||||||
|
};
|
||||||
|
protected static final String[] xmas = new String[] {
|
||||||
|
ChatColor.DARK_RED.toString(),
|
||||||
|
ChatColor.DARK_RED.toString(),
|
||||||
|
ChatColor.WHITE.toString(),
|
||||||
|
ChatColor.WHITE.toString(),
|
||||||
|
ChatColor.DARK_GREEN.toString(),
|
||||||
|
ChatColor.DARK_GREEN.toString(),
|
||||||
|
};
|
||||||
|
|
||||||
|
public void onPlayerChat(PlayerChatEvent event) {
|
||||||
|
Player player = event.getPlayer();
|
||||||
|
String message = event.getMessage();
|
||||||
|
String split[] = event.getMessage().split(" ");
|
||||||
|
event.setCancelled(true);
|
||||||
|
Player[] players = plugin.getServer().getOnlinePlayers();
|
||||||
|
//Quotes
|
||||||
|
if(split[0].startsWith(">"))
|
||||||
|
quote(player, message);
|
||||||
|
else{
|
||||||
|
quakeColors(player, message, players);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//=====================================================================
|
||||||
|
//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 void quakeColors(Player player, String message, Player[] players)
|
||||||
|
{
|
||||||
|
//Format the name
|
||||||
|
String playerName = "<"
|
||||||
|
+ player.getName() + "> ";
|
||||||
|
|
||||||
|
//String color = vUsers.getProfile(player).getColor();
|
||||||
|
//Log the chat
|
||||||
|
log.log(Level.INFO, "<"+player.getName()+"> " + message);
|
||||||
|
|
||||||
|
//Output the message
|
||||||
|
gmsg(player, playerName + message, players);
|
||||||
|
|
||||||
|
//Loop through the string finding the color codes and inserting them
|
||||||
|
}
|
||||||
|
//=====================================================================
|
||||||
|
//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, Player[] players){
|
||||||
|
/* Disabled for now
|
||||||
|
if(sender != null && sender.isMuted())
|
||||||
|
sender.sendMessage(ChatColor.DARK_RED + "You have been muted.");
|
||||||
|
*/
|
||||||
|
|
||||||
|
for (Player receiver : players) {
|
||||||
|
|
||||||
|
if (receiver == null) return;
|
||||||
|
|
||||||
|
//if(vUsers.getProfile(receiver) == null) return;
|
||||||
|
|
||||||
|
//Check if the person has the sender ignored
|
||||||
|
/* Disabled for now
|
||||||
|
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, null);}
|
||||||
|
public static void gmsg(Player player, String msg){gmsg(player, msg, null);}
|
||||||
|
//=====================================================================
|
||||||
|
//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){
|
||||||
|
|
||||||
|
//Create an arraylist for the output
|
||||||
|
ArrayList<String> out = new ArrayList<String>();
|
||||||
|
//Constructs the line that will be added to the output
|
||||||
|
StringBuffer line = new StringBuffer();
|
||||||
|
//The current length of the line
|
||||||
|
int curLength = 0;
|
||||||
|
//The most recent color in a line
|
||||||
|
String color = ChatColor.WHITE.toString();
|
||||||
|
//The number of words on this line
|
||||||
|
int wordLength = 0;
|
||||||
|
|
||||||
|
for(int i = 0; i < msg.length(); i++)
|
||||||
|
{
|
||||||
|
|
||||||
|
//If the next char would be a color, don't count it as length
|
||||||
|
//but add it to the output line
|
||||||
|
if(msg.charAt(i) == ChatColor.DARK_RED.toString().charAt(0))
|
||||||
|
{
|
||||||
|
line.append(msg.charAt(i));
|
||||||
|
line.append(msg.charAt(i+1));
|
||||||
|
|
||||||
|
//Increment skipping these chars
|
||||||
|
i+=2;
|
||||||
|
}
|
||||||
|
|
||||||
|
//Add the length of the current character
|
||||||
|
curLength += charLength(msg.charAt(i));
|
||||||
|
|
||||||
|
//If it would be a space, increment the wordLength
|
||||||
|
if(msg.charAt(i) == ' ')
|
||||||
|
wordLength++;
|
||||||
|
|
||||||
|
//If the character would make the line too long
|
||||||
|
if(curLength > lineLength)
|
||||||
|
{
|
||||||
|
//Go back one to avoid making it too long
|
||||||
|
i--;
|
||||||
|
|
||||||
|
//Go back to the place we would split the line
|
||||||
|
//If there is more than one word
|
||||||
|
if(wordLength > 0)
|
||||||
|
while(lineSplit.indexOf(msg.charAt(i)) == -1)
|
||||||
|
{
|
||||||
|
i--;
|
||||||
|
line.deleteCharAt(line.length() - 1);
|
||||||
|
}
|
||||||
|
//Add the line to the output
|
||||||
|
out.add(line.toString());
|
||||||
|
|
||||||
|
//Make sure you have the most recent color
|
||||||
|
for(int j = i; j > 0; j--)
|
||||||
|
{
|
||||||
|
if(msg.charAt(j) == ChatColor.DARK_RED.toString().charAt(0))
|
||||||
|
{
|
||||||
|
color = msg.substring(j, j+1);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//Create a new line
|
||||||
|
line = new StringBuffer();
|
||||||
|
curLength = 0;
|
||||||
|
}
|
||||||
|
//If the line isn't long enough yet
|
||||||
|
else
|
||||||
|
{
|
||||||
|
//Add the character to the line
|
||||||
|
line.append(msg.charAt(i));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//Add the final line
|
||||||
|
out.add(line.toString());
|
||||||
|
|
||||||
|
//Return the output as an array
|
||||||
|
return out.toArray(new String[out.size()]);
|
||||||
|
}
|
||||||
|
//=====================================================================
|
||||||
|
//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)
|
||||||
|
{
|
||||||
|
String color;
|
||||||
|
switch(colour)
|
||||||
|
{
|
||||||
|
case '0':
|
||||||
|
color = ChatColor.BLACK.toString();
|
||||||
|
break;
|
||||||
|
case '1':
|
||||||
|
color = ChatColor.DARK_BLUE.toString();
|
||||||
|
break;
|
||||||
|
case '2':
|
||||||
|
color = ChatColor.DARK_GREEN.toString();
|
||||||
|
break;
|
||||||
|
case '3':
|
||||||
|
color = ChatColor.DARK_AQUA.toString();
|
||||||
|
break;
|
||||||
|
case '4':
|
||||||
|
color = ChatColor.DARK_RED.toString();
|
||||||
|
break;
|
||||||
|
case '5':
|
||||||
|
color = ChatColor.DARK_PURPLE.toString();
|
||||||
|
break;
|
||||||
|
case '6':
|
||||||
|
color = ChatColor.GOLD.toString();
|
||||||
|
break;
|
||||||
|
case '7':
|
||||||
|
color = ChatColor.GRAY.toString();
|
||||||
|
break;
|
||||||
|
case '8':
|
||||||
|
color = ChatColor.DARK_GRAY.toString();
|
||||||
|
break;
|
||||||
|
case '9':
|
||||||
|
color = ChatColor.BLUE.toString();
|
||||||
|
break;
|
||||||
|
case 'a':
|
||||||
|
color = ChatColor.GREEN.toString();
|
||||||
|
break;
|
||||||
|
case 'b':
|
||||||
|
color = ChatColor.AQUA.toString();
|
||||||
|
break;
|
||||||
|
case 'c':
|
||||||
|
color = ChatColor.RED.toString();
|
||||||
|
break;
|
||||||
|
case 'd':
|
||||||
|
color = ChatColor.LIGHT_PURPLE.toString();
|
||||||
|
break;
|
||||||
|
case 'e':
|
||||||
|
color = ChatColor.YELLOW.toString();
|
||||||
|
break;
|
||||||
|
case 'f':
|
||||||
|
color = ChatColor.WHITE.toString();
|
||||||
|
break;
|
||||||
|
case 'A':
|
||||||
|
color = ChatColor.GREEN.toString();
|
||||||
|
break;
|
||||||
|
case 'B':
|
||||||
|
color = ChatColor.AQUA.toString();
|
||||||
|
break;
|
||||||
|
case 'C':
|
||||||
|
color = ChatColor.RED.toString();
|
||||||
|
break;
|
||||||
|
case 'D':
|
||||||
|
color = ChatColor.LIGHT_PURPLE.toString();
|
||||||
|
break;
|
||||||
|
case 'E':
|
||||||
|
color = ChatColor.YELLOW.toString();
|
||||||
|
break;
|
||||||
|
case 'F':
|
||||||
|
color = ChatColor.WHITE.toString();
|
||||||
|
break;
|
||||||
|
case 'R':
|
||||||
|
color = "^r";
|
||||||
|
break;
|
||||||
|
case 'r':
|
||||||
|
color = "^r";
|
||||||
|
break;
|
||||||
|
case 'x':
|
||||||
|
color = "^x";
|
||||||
|
break;
|
||||||
|
case 'X':
|
||||||
|
color = "^x";
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
color = null;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return color;
|
||||||
|
}
|
||||||
|
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
|
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: 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 void quote(Player player, String message)
|
||||||
|
{
|
||||||
|
//Format the name
|
||||||
|
String playerName = ChatColor.WHITE + "<" + player.getName() + "> ";
|
||||||
|
//Log the chat
|
||||||
|
log.log(Level.INFO, "<"+player.getName()+"> " + message);
|
||||||
|
//Output the message
|
||||||
|
gmsg(player, playerName + ChatColor.GREEN + message);
|
||||||
|
}
|
||||||
|
|
||||||
|
//=====================================================================
|
||||||
|
//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 = ChatColor.WHITE.toString();
|
||||||
|
|
||||||
|
//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
|
||||||
|
if(taste || msg.charAt(x) == '^'
|
||||||
|
|| msg.charAt(x) == ChatColor.DARK_RED.toString().charAt(0))
|
||||||
|
{
|
||||||
|
if(x != msg.length() - 1)
|
||||||
|
{
|
||||||
|
//If the following character is a color code
|
||||||
|
if(colorChange(msg.charAt(x+1)) != null)
|
||||||
|
{
|
||||||
|
//Set the most recent color to the new color
|
||||||
|
recentColor = 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) != ChatColor.DARK_RED.toString().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) == ChatColor.DARK_RED.toString().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) != ChatColor.DARK_RED.toString().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) == ChatColor.DARK_RED.toString().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;
|
||||||
|
}
|
||||||
|
}
|
41
vChat/com/bukkit/nossr50/vChat/vChat.java
Normal file
41
vChat/com/bukkit/nossr50/vChat/vChat.java
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
package com.bukkit.nossr50.vChat;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.Server;
|
||||||
|
import org.bukkit.event.Event.Priority;
|
||||||
|
import org.bukkit.event.Event;
|
||||||
|
import org.bukkit.plugin.PluginDescriptionFile;
|
||||||
|
import org.bukkit.plugin.PluginLoader;
|
||||||
|
import org.bukkit.plugin.java.JavaPlugin;
|
||||||
|
import org.bukkit.plugin.PluginManager;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* vChat for Bukkit
|
||||||
|
*
|
||||||
|
* @author nossr50
|
||||||
|
* @author cerevisae
|
||||||
|
*/
|
||||||
|
public class vChat extends JavaPlugin {
|
||||||
|
private final vPlayerListener playerListener = new vPlayerListener(this);
|
||||||
|
private final HashMap<Player, Boolean> debugees = new HashMap<Player, Boolean>();
|
||||||
|
|
||||||
|
public vChat(PluginLoader pluginLoader, Server instance, PluginDescriptionFile desc, File folder, File plugin, ClassLoader cLoader) {
|
||||||
|
super(pluginLoader, instance, desc, folder, plugin, cLoader);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public void onEnable() {
|
||||||
|
PluginManager pm = getServer().getPluginManager();
|
||||||
|
pm.registerEvent(Event.Type.PLAYER_CHAT, playerListener, Priority.Normal, this);
|
||||||
|
PluginDescriptionFile pdfFile = this.getDescription();
|
||||||
|
System.out.println( pdfFile.getName() + " version " + pdfFile.getVersion() + " is enabled!" );
|
||||||
|
}
|
||||||
|
public void onDisable() {
|
||||||
|
System.out.println("vChat Disabled!");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
538
vChat/com/bukkit/nossr50/vChat/vPlayerListener.java
Normal file
538
vChat/com/bukkit/nossr50/vChat/vPlayerListener.java
Normal file
@ -0,0 +1,538 @@
|
|||||||
|
package com.bukkit.nossr50.vChat;
|
||||||
|
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.event.player.PlayerChatEvent;
|
||||||
|
import org.bukkit.event.player.PlayerEvent;
|
||||||
|
import org.bukkit.event.player.PlayerListener;
|
||||||
|
import org.bukkit.ChatColor;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.logging.Level;
|
||||||
|
import java.util.logging.Logger;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handle events for all Player related events
|
||||||
|
* @author nossr50
|
||||||
|
*/
|
||||||
|
public class vPlayerListener extends PlayerListener {
|
||||||
|
private final vChat plugin;
|
||||||
|
protected static final Logger log = Logger.getLogger("Minecraft");
|
||||||
|
//The length of a text box line in pixels
|
||||||
|
protected static final int lineLength = 312;
|
||||||
|
//Characters we will split the line at
|
||||||
|
protected static final String lineSplit = "/- ";
|
||||||
|
|
||||||
|
public vPlayerListener(vChat instance) {
|
||||||
|
plugin = instance;
|
||||||
|
}
|
||||||
|
//Special Color Codes
|
||||||
|
protected static final String[] rainbow = new String[] {
|
||||||
|
ChatColor.DARK_RED.toString(),
|
||||||
|
ChatColor.RED.toString(),
|
||||||
|
ChatColor.GOLD.toString(),
|
||||||
|
ChatColor.YELLOW.toString(),
|
||||||
|
ChatColor.GREEN.toString(),
|
||||||
|
ChatColor.DARK_GREEN.toString(),
|
||||||
|
ChatColor.BLUE.toString(),
|
||||||
|
ChatColor.DARK_BLUE.toString(),
|
||||||
|
ChatColor.AQUA.toString(),
|
||||||
|
ChatColor.DARK_AQUA.toString(),
|
||||||
|
ChatColor.DARK_PURPLE.toString(),
|
||||||
|
ChatColor.LIGHT_PURPLE.toString()
|
||||||
|
};
|
||||||
|
protected static final String[] xmas = new String[] {
|
||||||
|
ChatColor.DARK_RED.toString(),
|
||||||
|
ChatColor.DARK_RED.toString(),
|
||||||
|
ChatColor.WHITE.toString(),
|
||||||
|
ChatColor.WHITE.toString(),
|
||||||
|
ChatColor.DARK_GREEN.toString(),
|
||||||
|
ChatColor.DARK_GREEN.toString(),
|
||||||
|
};
|
||||||
|
|
||||||
|
public void onPlayerChat(PlayerChatEvent event) {
|
||||||
|
Player player = event.getPlayer();
|
||||||
|
String message = event.getMessage();
|
||||||
|
String split[] = event.getMessage().split(" ");
|
||||||
|
event.setCancelled(true);
|
||||||
|
Player[] players = plugin.getServer().getOnlinePlayers();
|
||||||
|
//Quotes
|
||||||
|
if(split[0].startsWith(">"))
|
||||||
|
quote(player, message);
|
||||||
|
else{
|
||||||
|
quakeColors(player, message, players);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//=====================================================================
|
||||||
|
//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 void quakeColors(Player player, String message, Player[] players)
|
||||||
|
{
|
||||||
|
//Format the name
|
||||||
|
String playerName = "<"
|
||||||
|
+ player.getName() + "> ";
|
||||||
|
|
||||||
|
//String color = vUsers.getProfile(player).getColor();
|
||||||
|
//Log the chat
|
||||||
|
log.log(Level.INFO, "<"+player.getName()+"> " + message);
|
||||||
|
|
||||||
|
//Output the message
|
||||||
|
gmsg(player, playerName + message, players);
|
||||||
|
|
||||||
|
//Loop through the string finding the color codes and inserting them
|
||||||
|
}
|
||||||
|
//=====================================================================
|
||||||
|
//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, Player[] players){
|
||||||
|
/* Disabled for now
|
||||||
|
if(sender != null && sender.isMuted())
|
||||||
|
sender.sendMessage(ChatColor.DARK_RED + "You have been muted.");
|
||||||
|
*/
|
||||||
|
|
||||||
|
for (Player receiver : players) {
|
||||||
|
|
||||||
|
if (receiver == null) return;
|
||||||
|
|
||||||
|
//if(vUsers.getProfile(receiver) == null) return;
|
||||||
|
|
||||||
|
//Check if the person has the sender ignored
|
||||||
|
/* Disabled for now
|
||||||
|
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, null);}
|
||||||
|
public static void gmsg(Player player, String msg){gmsg(player, msg, null);}
|
||||||
|
//=====================================================================
|
||||||
|
//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){
|
||||||
|
|
||||||
|
//Create an arraylist for the output
|
||||||
|
ArrayList<String> out = new ArrayList<String>();
|
||||||
|
//Constructs the line that will be added to the output
|
||||||
|
StringBuffer line = new StringBuffer();
|
||||||
|
//The current length of the line
|
||||||
|
int curLength = 0;
|
||||||
|
//The most recent color in a line
|
||||||
|
String color = ChatColor.WHITE.toString();
|
||||||
|
//The number of words on this line
|
||||||
|
int wordLength = 0;
|
||||||
|
|
||||||
|
for(int i = 0; i < msg.length(); i++)
|
||||||
|
{
|
||||||
|
|
||||||
|
//If the next char would be a color, don't count it as length
|
||||||
|
//but add it to the output line
|
||||||
|
if(msg.charAt(i) == ChatColor.DARK_RED.toString().charAt(0))
|
||||||
|
{
|
||||||
|
line.append(msg.charAt(i));
|
||||||
|
line.append(msg.charAt(i+1));
|
||||||
|
|
||||||
|
//Increment skipping these chars
|
||||||
|
i+=2;
|
||||||
|
}
|
||||||
|
|
||||||
|
//Add the length of the current character
|
||||||
|
curLength += charLength(msg.charAt(i));
|
||||||
|
|
||||||
|
//If it would be a space, increment the wordLength
|
||||||
|
if(msg.charAt(i) == ' ')
|
||||||
|
wordLength++;
|
||||||
|
|
||||||
|
//If the character would make the line too long
|
||||||
|
if(curLength > lineLength)
|
||||||
|
{
|
||||||
|
//Go back one to avoid making it too long
|
||||||
|
i--;
|
||||||
|
|
||||||
|
//Go back to the place we would split the line
|
||||||
|
//If there is more than one word
|
||||||
|
if(wordLength > 0)
|
||||||
|
while(lineSplit.indexOf(msg.charAt(i)) == -1)
|
||||||
|
{
|
||||||
|
i--;
|
||||||
|
line.deleteCharAt(line.length() - 1);
|
||||||
|
}
|
||||||
|
//Add the line to the output
|
||||||
|
out.add(line.toString());
|
||||||
|
|
||||||
|
//Make sure you have the most recent color
|
||||||
|
for(int j = i; j > 0; j--)
|
||||||
|
{
|
||||||
|
if(msg.charAt(j) == ChatColor.DARK_RED.toString().charAt(0))
|
||||||
|
{
|
||||||
|
color = msg.substring(j, j+1);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//Create a new line
|
||||||
|
line = new StringBuffer();
|
||||||
|
curLength = 0;
|
||||||
|
}
|
||||||
|
//If the line isn't long enough yet
|
||||||
|
else
|
||||||
|
{
|
||||||
|
//Add the character to the line
|
||||||
|
line.append(msg.charAt(i));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//Add the final line
|
||||||
|
out.add(line.toString());
|
||||||
|
|
||||||
|
//Return the output as an array
|
||||||
|
return out.toArray(new String[out.size()]);
|
||||||
|
}
|
||||||
|
//=====================================================================
|
||||||
|
//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)
|
||||||
|
{
|
||||||
|
String color;
|
||||||
|
switch(colour)
|
||||||
|
{
|
||||||
|
case '0':
|
||||||
|
color = ChatColor.BLACK.toString();
|
||||||
|
break;
|
||||||
|
case '1':
|
||||||
|
color = ChatColor.DARK_BLUE.toString();
|
||||||
|
break;
|
||||||
|
case '2':
|
||||||
|
color = ChatColor.DARK_GREEN.toString();
|
||||||
|
break;
|
||||||
|
case '3':
|
||||||
|
color = ChatColor.DARK_AQUA.toString();
|
||||||
|
break;
|
||||||
|
case '4':
|
||||||
|
color = ChatColor.DARK_RED.toString();
|
||||||
|
break;
|
||||||
|
case '5':
|
||||||
|
color = ChatColor.DARK_PURPLE.toString();
|
||||||
|
break;
|
||||||
|
case '6':
|
||||||
|
color = ChatColor.GOLD.toString();
|
||||||
|
break;
|
||||||
|
case '7':
|
||||||
|
color = ChatColor.GRAY.toString();
|
||||||
|
break;
|
||||||
|
case '8':
|
||||||
|
color = ChatColor.DARK_GRAY.toString();
|
||||||
|
break;
|
||||||
|
case '9':
|
||||||
|
color = ChatColor.BLUE.toString();
|
||||||
|
break;
|
||||||
|
case 'a':
|
||||||
|
color = ChatColor.GREEN.toString();
|
||||||
|
break;
|
||||||
|
case 'b':
|
||||||
|
color = ChatColor.AQUA.toString();
|
||||||
|
break;
|
||||||
|
case 'c':
|
||||||
|
color = ChatColor.RED.toString();
|
||||||
|
break;
|
||||||
|
case 'd':
|
||||||
|
color = ChatColor.LIGHT_PURPLE.toString();
|
||||||
|
break;
|
||||||
|
case 'e':
|
||||||
|
color = ChatColor.YELLOW.toString();
|
||||||
|
break;
|
||||||
|
case 'f':
|
||||||
|
color = ChatColor.WHITE.toString();
|
||||||
|
break;
|
||||||
|
case 'A':
|
||||||
|
color = ChatColor.GREEN.toString();
|
||||||
|
break;
|
||||||
|
case 'B':
|
||||||
|
color = ChatColor.AQUA.toString();
|
||||||
|
break;
|
||||||
|
case 'C':
|
||||||
|
color = ChatColor.RED.toString();
|
||||||
|
break;
|
||||||
|
case 'D':
|
||||||
|
color = ChatColor.LIGHT_PURPLE.toString();
|
||||||
|
break;
|
||||||
|
case 'E':
|
||||||
|
color = ChatColor.YELLOW.toString();
|
||||||
|
break;
|
||||||
|
case 'F':
|
||||||
|
color = ChatColor.WHITE.toString();
|
||||||
|
break;
|
||||||
|
case 'R':
|
||||||
|
color = "^r";
|
||||||
|
break;
|
||||||
|
case 'r':
|
||||||
|
color = "^r";
|
||||||
|
break;
|
||||||
|
case 'x':
|
||||||
|
color = "^x";
|
||||||
|
break;
|
||||||
|
case 'X':
|
||||||
|
color = "^x";
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
color = null;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return color;
|
||||||
|
}
|
||||||
|
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
|
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: 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 void quote(Player player, String message)
|
||||||
|
{
|
||||||
|
//Format the name
|
||||||
|
String playerName = ChatColor.WHITE + "<" + player.getName() + "> ";
|
||||||
|
//Log the chat
|
||||||
|
log.log(Level.INFO, "<"+player.getName()+"> " + message);
|
||||||
|
//Output the message
|
||||||
|
gmsg(player, playerName + ChatColor.GREEN + message);
|
||||||
|
}
|
||||||
|
|
||||||
|
//=====================================================================
|
||||||
|
//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 = ChatColor.WHITE.toString();
|
||||||
|
|
||||||
|
//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
|
||||||
|
if(taste || msg.charAt(x) == '^'
|
||||||
|
|| msg.charAt(x) == ChatColor.DARK_RED.toString().charAt(0))
|
||||||
|
{
|
||||||
|
if(x != msg.length() - 1)
|
||||||
|
{
|
||||||
|
//If the following character is a color code
|
||||||
|
if(colorChange(msg.charAt(x+1)) != null)
|
||||||
|
{
|
||||||
|
//Set the most recent color to the new color
|
||||||
|
recentColor = 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) != ChatColor.DARK_RED.toString().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) == ChatColor.DARK_RED.toString().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) != ChatColor.DARK_RED.toString().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) == ChatColor.DARK_RED.toString().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;
|
||||||
|
}
|
||||||
|
}
|
3
vChat/plugin.yml
Normal file
3
vChat/plugin.yml
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
name: vChat
|
||||||
|
main: com.bukkit.nossr50.vChat.vChat
|
||||||
|
version: 1.0
|
Loading…
Reference in New Issue
Block a user