vPlayersOnline: Customizable messages.

Text strings are read from a .properties file and parsed for color codes. Config file is created if it doesn't exist.
This commit is contained in:
Mark Tolley 2011-03-14 21:13:05 +00:00
parent c83ef55714
commit c868e8b2ee
3 changed files with 159 additions and 30 deletions

View File

@ -0,0 +1,78 @@
package com.gmail.nossr50.vPlayersOnline;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Properties;
/**
*
* @author Mark Tolley
*/
class Config
{
public static String name;
private static final String CONFIG_FILE = "plugins/vPlayersOnline/vplayersonline.properties";
public static Properties loadConfig() {
Properties config = defaultConfig();
try {
config.load(new FileReader(CONFIG_FILE));
}
catch (FileNotFoundException e) {
System.out.println(name + ": Creating configuration file...");
config = defaultConfig();
writeConfig();
}
catch (IOException e) {
System.out.println(name + "s: An error occured reading configuration, using defaults.");
config = defaultConfig();
}
return config;
}
private static void writeConfig() {
File f = new File(CONFIG_FILE);
if (f.getParentFile().mkdirs()) {
try {
FileWriter fw = new FileWriter(f);
fw.write("# vPlayersOnline configuration file\r\n");
fw.write("# \r\n");
fw.write("# Color codes:\r\n");
fw.write("# &0 black\r\n");
fw.write("# &1 dark blue &9 blue\r\n");
fw.write("# &2 dark green &a green\r\n");
fw.write("# &3 dark aqua &b aqua\r\n");
fw.write("# &4 dark red &c red\r\n");
fw.write("# &5 dark pink &d pink\r\n");
fw.write("# &6 dark yellow &e yellow\r\n");
fw.write("# &7 light grey &f white\r\n");
fw.write("# &8 dark grey\r\n");
fw.write("\r\n");
fw.write("PlayersOnline = &aThere are %d players online\r\n");
fw.write("PlayerList = &cPlayer List &f(%s)\r\n");
fw.write("TotalPlayers = &cTotal Players: &a%d\r\n");
fw.write("#1POnline = &aThere is 1 player online.\r\n");
fw.write("1POnline = &cNo one else is online.\r\n");
fw.close();
}
catch (IOException e) {
e.printStackTrace();
}
}
}
private static Properties defaultConfig() {
Properties config = new Properties();
config.setProperty("PlayersOnline", "&aThere are %d players online");
config.setProperty("PlayerList", "&cPlayer List &f(%s)");
config.setProperty("TotalPlayers", "&cTotal Players: &a%d");
config.setProperty("1POnline", "&cNo one else is online.");
return config;
}
}

View File

@ -1,12 +1,11 @@
package com.gmail.nossr50.vPlayersOnline; package com.gmail.nossr50.vPlayersOnline;
import java.util.Properties;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.event.player.PlayerChatEvent; import org.bukkit.event.player.PlayerChatEvent;
import org.bukkit.event.player.PlayerEvent; import org.bukkit.event.player.PlayerEvent;
import org.bukkit.event.player.PlayerListener; import org.bukkit.event.player.PlayerListener;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
import java.util.logging.Level;
import java.util.logging.Logger;
/** /**
* Handle events for all Player related events * Handle events for all Player related events
@ -14,49 +13,90 @@ import java.util.logging.Logger;
*/ */
public class vPlayerListener extends PlayerListener { public class vPlayerListener extends PlayerListener {
private final vPlayersOnline plugin; private final vPlayersOnline plugin;
protected static final Logger log = Logger.getLogger("Minecraft"); private final String PlayersOnline;
private final String PlayerList;
private final String TotalPlayers;
private final String _1POnline;
public vPlayerListener(vPlayersOnline instance) { public vPlayerListener(vPlayersOnline instance, Properties config) {
plugin = instance; plugin = instance;
PlayersOnline = parseColors(config.getProperty("PlayersOnline"));
PlayerList = parseColors(config.getProperty("PlayerList"));
TotalPlayers = parseColors(config.getProperty("TotalPlayers"));
_1POnline = parseColors(config.getProperty("1POnline"));
} }
//Function to count the players //Function to count the players
public int playerCount(){ private int playerCount(){
Player players[] = plugin.getServer().getOnlinePlayers(); Player players[] = plugin.getServer().getOnlinePlayers();
int x = 0; return players.length;
for(Player hurrdurr: players){
x++;
} }
return x;
private static String parseColors(String str) {
final StringBuilder sb = new StringBuilder();
for (int i = 0; i < str.length(); ++i) {
char c = str.charAt(i);
if (c == '&') {
char next = str.charAt(i+1);
if (next == '&') {
// literal &
++i;
} else {
try {
int color = Integer.parseInt(String.valueOf(next), 16);
sb.append(ChatColor.getByCode(color));
++i;
continue;
} catch (NumberFormatException e) {}
}
}
sb.append(c);
}
return sb.toString();
} }
//Message to be sent when a player joins //Message to be sent when a player joins
@Override
public void onPlayerJoin(PlayerEvent event) { public void onPlayerJoin(PlayerEvent event) {
Player player = event.getPlayer(); Player player = event.getPlayer();
//English Version int count = playerCount();
player.sendMessage(ChatColor.GREEN + "There are " + playerCount() + " players online.");
if (count == 1) {
player.sendMessage(_1POnline);
} else {
player.sendMessage(String.format(PlayersOnline, count));
} }
}
//Message to be sent when a player uses /list //Message to be sent when a player uses /list
public void onPlayerCommand(PlayerChatEvent event) { @Override
public void onPlayerCommandPreprocess(PlayerChatEvent event) {
String[] split = event.getMessage().split(" "); String[] split = event.getMessage().split(" ");
Player player = event.getPlayer(); Player player = event.getPlayer();
if(split[0].equalsIgnoreCase("/list") || split[0].equalsIgnoreCase("/who")){ if(split[0].equalsIgnoreCase("/list") || split[0].equalsIgnoreCase("/who")){
event.setCancelled(true); event.setCancelled(true);
int count = playerCount();
String tempList = ""; String tempList = "";
int x = 0; int x = 0;
for(Player p : plugin.getServer().getOnlinePlayers()) for(Player p : plugin.getServer().getOnlinePlayers())
{ {
if(p != null && x+1 >= playerCount()){ if(p != null && x+1 >= count){
tempList+= p.getName(); tempList+= p.getName();
x++; x++;
} }
if(p != null && x < playerCount()){ if(p != null && x < count){
tempList+= p.getName() +", "; tempList+= p.getName() +", ";
x++; x++;
} }
} }
//Output the player list //Output the player list
player.sendMessage(ChatColor.RED + "Player List"+ChatColor.WHITE+" ("+ChatColor.WHITE + tempList+")"); player.sendMessage(String.format(PlayerList, tempList));
player.sendMessage(ChatColor.RED + "Total Players: " + ChatColor.GREEN + playerCount()); player.sendMessage(String.format(TotalPlayers, count));
} }
} }

View File

@ -1,16 +1,16 @@
package com.gmail.nossr50.vPlayersOnline; package com.gmail.nossr50.vPlayersOnline;
import java.io.File; import java.io.File;
import java.util.HashMap; import java.io.FileNotFoundException;
import org.bukkit.event.player.*; import java.io.FileReader;
import org.bukkit.Server; import java.io.FileWriter;
import java.io.IOException;
import java.util.Properties;
import org.bukkit.event.Event.Priority; import org.bukkit.event.Event.Priority;
import org.bukkit.event.Event; import org.bukkit.event.Event;
import org.bukkit.plugin.PluginDescriptionFile; import org.bukkit.plugin.PluginDescriptionFile;
import org.bukkit.plugin.PluginLoader;
import org.bukkit.plugin.java.JavaPlugin; import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.plugin.PluginManager; import org.bukkit.plugin.PluginManager;
import org.bukkit.entity.Player;
/** /**
* vPlayersOnline for Bukkit * vPlayersOnline for Bukkit
@ -18,20 +18,31 @@ import org.bukkit.entity.Player;
* @author nossr50 * @author nossr50
*/ */
public class vPlayersOnline extends JavaPlugin { public class vPlayersOnline extends JavaPlugin {
private final vPlayerListener playerListener = new vPlayerListener(this); private PluginDescriptionFile pdfFile;
private final String name = "vPlayersOnline";
private vPlayerListener playerListener;
public void onLoad() {
}
public void onEnable() { public void onEnable() {
pdfFile = this.getDescription();
Config.name = pdfFile.getName();
Properties config = Config.loadConfig();
playerListener = new vPlayerListener(this, config);
PluginManager pm = getServer().getPluginManager(); PluginManager pm = getServer().getPluginManager();
pm.registerEvent(Event.Type.PLAYER_JOIN, playerListener, Priority.Normal, this); pm.registerEvent(Event.Type.PLAYER_JOIN, playerListener, Priority.Normal, this);
pm.registerEvent(Event.Type.PLAYER_DROP_ITEM, playerListener, Priority.Normal, this); pm.registerEvent(Event.Type.PLAYER_DROP_ITEM, playerListener, Priority.Normal, this);
pm.registerEvent(Event.Type.PLAYER_QUIT, playerListener, Priority.Normal, this); pm.registerEvent(Event.Type.PLAYER_QUIT, playerListener, Priority.Normal, this);
pm.registerEvent(Event.Type.PLAYER_COMMAND, playerListener, Priority.Normal, this); pm.registerEvent(Event.Type.PLAYER_COMMAND_PREPROCESS, playerListener, Priority.Normal, this);
//Displays a message when plugin is loaded //Displays a message when plugin is loaded
PluginDescriptionFile pdfFile = this.getDescription(); System.out.println(Config.name + " version " + pdfFile.getVersion() + " is enabled!");
System.out.println( pdfFile.getName() + " version " + pdfFile.getVersion() + " is enabled!" );
} }
public void onDisable() { public void onDisable() {
System.out.println("vPlayersOnline disabled."); System.out.println(Config.name + " disabled.");
} }
} }