From 97385490f48ee7c7da26b2b8a3ee999dacafc77d Mon Sep 17 00:00:00 2001 From: nossr50 Date: Fri, 8 Oct 2010 18:20:41 -0700 Subject: [PATCH] New: Rules= in vminecraft.properties Changed: Comments to be better, Rules now uses vminecraft.properties, global messages on commands should no longer go off when the command doesn't do anything, Removed:onKick, onIpBan, onBan they weren't even used. --- TODO | 11 +++--- settings.java | 37 +++++++++++++------ vminecraft.java | 94 +++++++++++++++++++------------------------------ 3 files changed, 68 insertions(+), 74 deletions(-) diff --git a/TODO b/TODO index 0cb1d801c..380331e09 100644 --- a/TODO +++ b/TODO @@ -1,12 +1,11 @@ TODO: -Improve logging Fix existing bugs in /promote and /demote Add toggles to all features -If vminecraft.properties doesn't exist make it be written -Makes /rules use a txt file -Refine messages when admins use commands -/whois doesn't update when someone's group is changed -Improve my comments on vminecraft.java +If vminecraft.properties doesn't exist make it be written and include default settings +Refine messages when admins use commands --Ready for testing +Change loading to happen when the plugin loads instead of having to wait for a player to speak +Change everything else in settings to be a string like rules instead of booleans Ideas: Mass teleport command +A personal muting system for players \ No newline at end of file diff --git a/settings.java b/settings.java index d3c008a95..a53054714 100644 --- a/settings.java +++ b/settings.java @@ -1,10 +1,9 @@ -//This doesn't do anything yet, eventually you will be able to toggle features by writing true or false in vminecraft-config.txt -//This is high up on my priority list import java.io.*; import java.util.*; import java.util.logging.Level; import java.util.logging.Logger; import net.minecraft.server.MinecraftServer; + public class settings { private final static Object syncLock = new Object(); protected static final Logger log = Logger.getLogger("Minecraft"); @@ -20,15 +19,27 @@ public class settings { private boolean cmdWhoIs = false; private PropertiesFile properties; String file = "vminecraft.properties"; - //Unfinished was interrupted in the middle of making this shit, where we can triggle toggles in a text file for commands - //example return true for greentext=true in vminecraft.properties file would disable that code - + public String rules[] = null; +public void rules() { + try{ + rules = properties.getString("rules", "Rules@#1: No griefing").split("@"); + } + catch (Exception e) { + log.log(Level.SEVERE, "Vminecraft: "+ e.getMessage() ); + rules = new String[]{"Rules@#1: No griefing"}; + } +} public void loadSettings() - { + //Will create a file if it doesn't exist + { + if (properties == null) { + properties = new PropertiesFile("vminecraft.properties"); + } else { + properties.load(); + } try{ - - Scanner scanner = new Scanner(new File(file)); + Scanner scanner = new Scanner(new File(file)); while (scanner.hasNextLine()) { String line = scanner.nextLine(); if( line.startsWith("#") || line.equals("")) @@ -103,7 +114,9 @@ public class settings { } scanner.close(); } - catch (Exception e) {log.log(Level.SEVERE, "Oh shi-: "+ e.getMessage() );} + catch (Exception e) { + log.log(Level.SEVERE, "Vminecraft: "+ e.getMessage() ); + } } @@ -123,5 +136,9 @@ public class settings { return instance; } - + //Will return the rules + public String[] getRules() { + return rules; + } + } \ No newline at end of file diff --git a/vminecraft.java b/vminecraft.java index 503d0f36a..22f058e54 100644 --- a/vminecraft.java +++ b/vminecraft.java @@ -3,16 +3,13 @@ import java.util.Locale; import java.util.logging.Logger; import java.util.logging.Level; public class vminecraft extends Plugin { - //settings Settings; @Override public void disable() { - //throw new UnsupportedOperationException("Not supported yet."); //I have to include this to compile, not sure why. } @Override public void enable() { - //throw new UnsupportedOperationException("Not supported yet."); //I have to include this to compile, not sure why. } static final Logger log = Logger.getLogger("Minecraft"); @@ -20,15 +17,15 @@ public class vminecraft extends Plugin { @Override public void onLogin(Player player) { + settings.getInstance().rules(); settings.getInstance().loadSettings(); } - + private String rules[]; public boolean onChat(Player player, String message){ - //Settings.loadSettings(); - settings.getInstance().loadSettings(); - String playerb = player.getName(); //Used to get names from players, can't remember why I can't just use 'player' - String temp2 = "<" + player.getColor() + player.getName() + Colors.White +"> "; //Inserts a name before the message - String adminchat = Colors.DarkPurple + "{" + player.getColor() + player.getName() + Colors.DarkPurple +"}" + Colors.White + " "; //Inserts names admin chat style before the message + settings.getInstance().rules(); + settings.getInstance().loadSettings(); //So you can disable/enable things in the txt files without having to reload the server + String temp2 = "<" + player.getColor() + player.getName() + Colors.White +"> "; //Copies the formatting of id.java + String adminchat = Colors.DarkPurple + "{" + player.getColor() + player.getName() + Colors.DarkPurple +"}" + Colors.White + " "; //Special formatting for adminchat String message2 = ""; //Used for greentext and FFF String check = temp2+message; //Calculates how long your message will be including your name in the equation, this prevents minecraft clients from crashing when a color code is inserted after a linebreak if (settings.getInstance().adminchat()&&message.startsWith("@") && (player.isInGroup("mods") || player.isInGroup("admins") || player.isInGroup("superadmins"))) { @@ -44,11 +41,10 @@ public class vminecraft extends Plugin { p.sendMessage(adminchat+blaa); } } - //where logs used to be } } } - log.log(Level.INFO, "@"+adminchat+message); + log.log(Level.INFO, "@"+temp2+message); //So you can read adminchat from the server console return true; } //Greentext @@ -96,7 +92,7 @@ public class vminecraft extends Plugin { if(!player.canUseCommand(split[0])) { return false; } - //Replace id's /tp with my own so you can't tele to higher ranked players + //Replacement for /tp if(split[0].equalsIgnoreCase("/tp")) { { if (split.length < 2) { @@ -126,7 +122,7 @@ public class vminecraft extends Plugin { } } } - //Same thing as my changes to /tp + //Replacement for /tphere if ((split[0].equalsIgnoreCase("/tphere") || split[0].equalsIgnoreCase("/s"))) { if (split.length < 2) { player.sendMessage(Colors.Rose + "Correct usage is: /tphere [player]"); @@ -151,23 +147,23 @@ public class vminecraft extends Plugin { player.sendMessage(Colors.Rose + "Can't find user " + split[1] + "."); } } - //Temporary fix, this will still go off if you enter anything for split[1] I need to make it so split[1] is the same name as a real player + //Global messages that should only parse when a command can be successful if(split[0].equalsIgnoreCase("/kick")) { - if (split[1] != null){ - other.gmsg(player.getColor()+player.getName()+Colors.Blue+" used kick."); - other.gmsg(Colors.Red+split[1]+" was the target."); + Player playerTarget = etc.getServer().matchPlayer(split[1]); + if (playerTarget != null && !playerTarget.hasControlOver(player)) { + other.gmsg(player.getColor()+player.getName()+Colors.Blue+" has kicked "+Colors.Red+playerTarget.getColor()+playerTarget.getName()); } } if(split[0].equalsIgnoreCase("/ban")) { - if (split[1] != null){ - other.gmsg(player.getColor()+player.getName()+Colors.Blue+" used ban."); - other.gmsg(Colors.Red+split[1]+" was the target."); + Player playerTarget = etc.getServer().matchPlayer(split[1]); + if (playerTarget != null && !playerTarget.hasControlOver(player)) { + other.gmsg(player.getColor()+player.getName()+Colors.Blue+" has banned "+Colors.Red+playerTarget.getColor()+playerTarget.getName()); } } if(split[0].equalsIgnoreCase("/ipban")) { - if (split[1] != null){ - other.gmsg(player.getColor()+player.getName()+Colors.Blue+" used IP ban."); - other.gmsg(Colors.Red+split[1]+" was the target."); + Player playerTarget = etc.getServer().matchPlayer(split[1]); + if (playerTarget != null && !playerTarget.hasControlOver(player)) { + other.gmsg(player.getColor()+player.getName()+Colors.Blue+" has IP banned "+Colors.Red+playerTarget.getColor()+playerTarget.getName()); } } if(split[0].equalsIgnoreCase("/time")) { @@ -176,16 +172,11 @@ public class vminecraft extends Plugin { return false; } } - //Rules if(split[0].equalsIgnoreCase("/rules")) { - etc.getInstance().addCommand("/rules", "Displays the rules"); - player.sendMessage(Colors.Blue + "Rules"); - player.sendMessage(Colors.Blue+"#1:No griefing"); - player.sendMessage(Colors.Blue+"#2:Don't spam night/day changes"); - player.sendMessage(Colors.Blue+"#3:Don't beg for items that you could easily gather"); - player.sendMessage(Colors.Blue+"#4:Don't steal from another players chest"); - player.sendMessage(Colors.Blue+"#5:The admins word is final"); + for (String str : settings.getInstance().getRules()) { + player.sendMessage(Colors.Blue+str); + } return true; } //Fabulous @@ -193,7 +184,6 @@ public class vminecraft extends Plugin { if (split.length == 1) {return false;} String temp = ""; String str = ""; - //str = paramString.substring(paramString.indexOf(" ")).trim(); str = etc.combineSplit(1, split, " "); String temp2 = "<" + player.getName() + "> "+str; String[] rainbow = new String[] {Colors.Red, Colors.Rose, Colors.Yellow, Colors.Green, Colors.Blue, Colors.LightPurple, Colors.Purple}; @@ -321,11 +311,10 @@ public class vminecraft extends Plugin { log.log(Level.INFO, "Command used by " + player + " " + split[0] +" "+split[1]+" "); return true; } - //Whois will display info about a player + //Whois will display info about a player if (settings.getInstance().cmdWhoIs()&&split[0].equalsIgnoreCase("/whois")) { - if (split.length < 2) { + if (split.length < 2) { player.sendMessage(Colors.Rose + "Usage is /whois [player]"); - //This part of the code might not be working right now } String admin =""; String group =""; @@ -363,46 +352,35 @@ public class vminecraft extends Plugin { }else{ group = "Default"; } - //Main + //Displaying the information player.sendMessage(Colors.Blue + "Whois results for "+split[1]+"."); - //Info for group + //Group player.sendMessage(Colors.Blue + "Group: "+group); - //info for admin + //Admin player.sendMessage(Colors.Blue+"Admin: "+admin); - //Info for IP + //IP player.sendMessage(Colors.Blue+"IP: "+IP); - //Info on restrictions + //Restrictions player.sendMessage(Colors.Blue+"Can ignore restrictions: "+ignore); return true; } else { player.sendMessage(Colors.Rose+"Player not found."); } - - } if (split[0].equalsIgnoreCase("/say")) { + } + //Say + if (split[0].equalsIgnoreCase("/say")) { String sayan; sayan = etc.combineSplit(1, split, " "); other.gmsg(Colors.Yellow+sayan); - //Should make a global message to all players } - else { + //Should this be included? + else { return false; - } + } + //Needs to be included return true; } - public void onKick(Player player, String reason) - { - //other.gmsg(Colors.Red+player.getColor()+player.getName()+Colors.Red+" was kicked."); - } - public void onIpBan(Player player, String reason) - { - //other.gmsg(Colors.Red+player.getColor()+player.getName()+Colors.Red+" was IP banned."); - } - public void onBan(Player player, String reason) - { - //other.gmsg(Colors.Red+player.getColor()+player.getName()+Colors.Red+" was banned."); - } - //Calculates how long the specified String is to prevent linebreaks when using scripts that insert color codes, designed to be used with playername included private boolean lengthCheck(String str) {