diff --git a/com/nidefawl/Stats/ItemResolver/hModItemResolver.java b/com/nidefawl/Stats/ItemResolver/hModItemResolver.java index 0c3dbee..c28f63d 100755 --- a/com/nidefawl/Stats/ItemResolver/hModItemResolver.java +++ b/com/nidefawl/Stats/ItemResolver/hModItemResolver.java @@ -6,25 +6,23 @@ import java.io.IOException; import java.util.HashMap; import java.util.Map; import java.util.Scanner; -import java.util.logging.Level; import java.util.logging.Logger; +import com.nidefawl.Stats.Stats; + public class hModItemResolver implements itemResolver { static final Logger log = Logger.getLogger("Minecraft"); protected Map items; - String location = "items.txt"; + String location = null; + - public hModItemResolver(String itemsTxtLocation) { - loadItems(); + public hModItemResolver(File itemsFile) { + location = itemsFile.getPath(); + loadItems(itemsFile); } - /* - * (non-Javadoc) - * - * @see com.bukkit.nidefawl.Stats.itemResolver#loadItems() - */ - public void loadItems() { - if (!(new File(location).exists())) { + public void loadItems(File itemsFile) { + if (!itemsFile.exists()) { FileWriter writer = null; try { writer = new FileWriter(location); @@ -67,6 +65,7 @@ public class hModItemResolver implements itemResolver { writer.write("sandstone:24\r\n"); writer.write("musicblock:25\r\n"); writer.write("noteblock:25\r\n"); + writer.write("bedblock:26\r\n"); writer.write("wool:35\r\n"); writer.write("cloth:35\r\n"); writer.write("flower:37\r\n"); @@ -140,6 +139,8 @@ public class hModItemResolver implements itemResolver { writer.write("jackolantern:91\r\n"); writer.write("jacko:91\r\n"); writer.write("cakeblock:92\r\n"); + writer.write("repeateron:93\r\n"); + writer.write("repeateroff:94\r\n"); writer.write("ironshovel:256\r\n"); writer.write("ironspade:256\r\n"); writer.write("ironpickaxe:257\r\n"); @@ -257,23 +258,27 @@ public class hModItemResolver implements itemResolver { writer.write("bone:352\r\n"); writer.write("sugar:353\r\n"); writer.write("cake:354\r\n"); + writer.write("bed:355\r\n"); + writer.write("repeater:356\r\n"); writer.write("goldrecord:2256\r\n"); writer.write("greenrecord:2257\r\n"); } catch (Exception e) { - log.log(Level.SEVERE, "Exception while creating " + location, e); + Stats.LogError("Exception while creating " + location + " " + e); + e.printStackTrace(); } finally { if (writer != null) { try { writer.close(); } catch (IOException e) { - log.log(Level.SEVERE, "Exception while closing writer for " + location, e); + Stats.LogError("Exception while closing writer for " + location + " " + e); + e.printStackTrace(); } } } } items = new HashMap(); try { - Scanner scanner = new Scanner(new File(location)); + Scanner scanner = new Scanner(itemsFile); while (scanner.hasNextLine()) { String line = scanner.nextLine(); if (line.startsWith("#")) { @@ -289,28 +294,30 @@ public class hModItemResolver implements itemResolver { } scanner.close(); } catch (Exception e) { - log.log(Level.SEVERE, "Exception while reading " + location + " (Are you sure you formatted it correctly?)", e); + Stats.LogError("Exception while reading " + location + " (Are you sure you formatted it correctly?)"+ e); + e.printStackTrace(); } } - /* - * (non-Javadoc) - * - * @see com.bukkit.nidefawl.Stats.itemResolver#getItem(java.lang.String) - */ + @Override public int getItem(String name) { if (items.containsKey(name)) { return items.get(name); } + try { + int i = Integer.valueOf(name); + if(i>0 && i < 3000) { + if(!getItem(i).equals(name)) { + return i; + } + } + } catch (Exception e) { + } return 0; } - /* - * (non-Javadoc) - * - * @see com.bukkit.nidefawl.Stats.itemResolver#getItem(int) - */ + @Override public String getItem(int id) { for (String name : items.keySet()) { diff --git a/com/nidefawl/Stats/MinecraftFontWidthCalculator.java b/com/nidefawl/Stats/MinecraftFontWidthCalculator.java index 6a32bb8..c55299c 100755 --- a/com/nidefawl/Stats/MinecraftFontWidthCalculator.java +++ b/com/nidefawl/Stats/MinecraftFontWidthCalculator.java @@ -1,16 +1,23 @@ package com.nidefawl.Stats; +import org.bukkit.command.CommandSender; +import org.bukkit.command.ConsoleCommandSender; + public class MinecraftFontWidthCalculator { private static String charWidthIndexIndex = " !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_'abcdefghijklmnopqrstuvwxyz{|}~‚åÇ√á√º√©√¢√§√†√•√ß√™√´√®√Ø√Æ√¨√Ñ√Ö√â√¶√Ü√¥√∂√≤√ª√π√ø√ñ√ú√�¬£√ò√ó∆í√°√≠√≥√∫√±√묙¬∫¬ø¬Æ¬¨¬Ω¬º¬°¬´¬ª"; private static int[] charWidths = { 4, 2, 5, 6, 6, 6, 6, 3, 5, 5, 5, 6, 2, 6, 2, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 2, 2, 5, 6, 5, 6, 7, 6, 6, 6, 6, 6, 6, 6, 6, 4, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 4, 6, 4, 6, 6, 3, 6, 6, 6, 6, 6, 5, 6, 6, 2, 6, 5, 3, 6, 6, 6, 6, 6, 6, 6, 4, 6, 6, 6, 6, 6, 6, 5, 2, 5, 7, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 4, 6, 3, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 4, 6, 6, 3, 6, 6, 6, 6, 6, 6, 6, 7, 6, 6, 6, 2, 6, 6, 8, 9, 9, 6, 6, 6, 8, 8, 6, 8, 8, 8, 8, 8, 6, 6, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 6, 9, 9, 9, 5, 9, 9, 8, 7, 7, 8, 7, 8, 8, 8, 7, 8, 8, 7, 9, 9, 6, 7, 7, 7, 7, 7, 9, 6, 7, 8, 7, 6, 6, 9, 7, 6, 7, 1 }; - public static int getStringWidth(String s) { + public static int getStringWidth(CommandSender sender, String s) { int i = 0; - if (s != null) + if (s != null) { + if(sender instanceof ConsoleCommandSender) { + return s.length()*5; + } for (int j = 0; j < s.length(); j++) i += getCharWidth(s.charAt(j)); + } return i; } diff --git a/com/nidefawl/Stats/Permissions/GroupUserResolver.java b/com/nidefawl/Stats/Permissions/GroupUserResolver.java deleted file mode 100755 index ac38b95..0000000 --- a/com/nidefawl/Stats/Permissions/GroupUserResolver.java +++ /dev/null @@ -1,72 +0,0 @@ -package com.nidefawl.Stats.Permissions; - -import java.util.logging.Logger; -import org.bukkit.entity.Player; -import org.bukkit.plugin.Plugin; -import org.bukkit.plugin.java.JavaPlugin; - -import com.bukkit.authorblues.GroupUsers.GroupUsers; - -public class GroupUserResolver implements PermissionsResolver { - public static final Logger log = Logger.getLogger("Minecraft"); - JavaPlugin plugin = null; - private GroupUsers perms = null; - - public GroupUserResolver(JavaPlugin plugin) { - this.plugin = plugin; - check(); - } - - @Override - public boolean check() { - if (perms == null) { - Plugin checkPlugin = plugin.getServer().getPluginManager().getPlugin("GroupUsers"); - if (checkPlugin != null) { - perms = (GroupUsers) checkPlugin; - } else - return false; - } - if (perms.isEnabled() == false) - return false; - return true; - } - - @Override - public boolean permission(Player player, String permCmd) { - if (!check()) - return false; - return perms.playerCanUseCommand(player, permCmd); - } - - @Override - public String getGroup(String player) { - return ""; - } - - @Override - public String getGroupPrefix(String player) { - return ""; - } - - @Override - public String getGroupSuffix(String player) { - return ""; - } - - @Override - public boolean canGroupBuild(String group) { - return true; - } - - @Override - public boolean inGroup(Player player, String group) { - if (!check()) - return false; - return perms.isInGroup(player, group); - } - - @Override - public void reloadPerms() { - } - -} diff --git a/com/nidefawl/Stats/Permissions/NijiPermissionsResolver.java b/com/nidefawl/Stats/Permissions/NijiPermissionsResolver.java index f154c51..00f3e2e 100755 --- a/com/nidefawl/Stats/Permissions/NijiPermissionsResolver.java +++ b/com/nidefawl/Stats/Permissions/NijiPermissionsResolver.java @@ -1,28 +1,27 @@ package com.nidefawl.Stats.Permissions; import java.util.logging.Logger; + +import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import org.bukkit.plugin.Plugin; -import org.bukkit.plugin.java.JavaPlugin; import com.nijikokun.bukkit.Permissions.Permissions; public class NijiPermissionsResolver implements PermissionsResolver { public static final Logger log = Logger.getLogger("Minecraft"); - JavaPlugin plugin = null; + Plugin plugin = null; private Permissions perms = null; - public NijiPermissionsResolver(JavaPlugin plugin) { + public NijiPermissionsResolver(Plugin plugin) { this.plugin = plugin; - check(); + load(); } @Override - public boolean check() { + public boolean load() { if (perms == null) { Plugin checkPlugin = plugin.getServer().getPluginManager().getPlugin("Permissions"); - if (checkPlugin != null) { - if (!((Permissions) checkPlugin).isEnabled()) - return false; + if (checkPlugin != null && checkPlugin.isEnabled() && checkPlugin instanceof Permissions) { perms = (Permissions) checkPlugin; } else { return false; @@ -32,51 +31,52 @@ public class NijiPermissionsResolver implements PermissionsResolver { } @Override - public boolean permission(Player player, String permCmd) { - - if (!check()) + public boolean permission(CommandSender sender, String permCmd) { + if(sender.isOp()) return true; + if(!(sender instanceof Player)) return false; + if (!load()) return false; - return perms.getHandler().permission(player, permCmd); + return perms.getHandler().permission((Player)sender, permCmd); } @Override public String getGroup(String player) { - if (!check()) + if (!load()) return ""; return perms.getHandler().getGroup(player); } @Override public String getGroupPrefix(String player) { - if (!check()) + if (!load()) return ""; return perms.getHandler().getGroupPrefix(player); } @Override public String getGroupSuffix(String player) { - if (!check()) + if (!load()) return ""; return perms.getHandler().getGroupSuffix(player); } @Override public boolean canGroupBuild(String group) { - if (!check()) + if (!load()) return false; return perms.getHandler().canGroupBuild(group); } @Override public boolean inGroup(Player player, String group) { - if (!check()) + if (!load()) return false; return perms.getHandler().inGroup(player.getName(), group); } @Override public void reloadPerms() { - if (!check()) + if (!load()) return; perms.setupPermissions(); } diff --git a/com/nidefawl/Stats/Permissions/PermissionsResolver.java b/com/nidefawl/Stats/Permissions/PermissionsResolver.java index 606b49b..3017676 100755 --- a/com/nidefawl/Stats/Permissions/PermissionsResolver.java +++ b/com/nidefawl/Stats/Permissions/PermissionsResolver.java @@ -1,12 +1,13 @@ package com.nidefawl.Stats.Permissions; +import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; public interface PermissionsResolver { - public abstract boolean check(); + public abstract boolean load(); - public abstract boolean permission(Player player, String permCmd); + public abstract boolean permission(CommandSender player, String permCmd); public abstract String getGroup(String player); diff --git a/com/nidefawl/Stats/Permissions/defaultResolver.java b/com/nidefawl/Stats/Permissions/defaultResolver.java index 4e09f55..7011f10 100755 --- a/com/nidefawl/Stats/Permissions/defaultResolver.java +++ b/com/nidefawl/Stats/Permissions/defaultResolver.java @@ -1,18 +1,18 @@ package com.nidefawl.Stats.Permissions; +import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; public class defaultResolver implements PermissionsResolver { @Override - public boolean permission(Player player, String permCmd) { - if (player.isOp()) + public boolean permission(CommandSender sender, String permCmd) { + if (sender.isOp()) return true; - if (permCmd.equals("/achievements") || permCmd.equals("/ach")) + if(!(sender instanceof Player)) return false; + if (permCmd.startsWith("achievements.view") || permCmd.equals("achievements.check")) return true; - if (permCmd.equals("/listach") || permCmd.equals("/listachievements")) - return true; - if (permCmd.equals("/stats")) + if (permCmd.startsWith("stats.view")||permCmd.equals("stats.log")) return true; return false; } @@ -43,7 +43,7 @@ public class defaultResolver implements PermissionsResolver { } @Override - public boolean check() { + public boolean load() { return true; } diff --git a/com/nidefawl/Stats/Stats.java b/com/nidefawl/Stats/Stats.java index 4456e82..4de9ec0 100755 --- a/com/nidefawl/Stats/Stats.java +++ b/com/nidefawl/Stats/Stats.java @@ -21,6 +21,7 @@ import org.bukkit.Location; import org.bukkit.block.Block; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; +import org.bukkit.command.ConsoleCommandSender; import org.bukkit.entity.Player; import org.bukkit.entity.Vehicle; import org.bukkit.event.Event.Priority; @@ -28,9 +29,10 @@ import org.bukkit.event.Event; import org.bukkit.plugin.Plugin; import org.bukkit.plugin.java.JavaPlugin; +import com.nidefawl.Achievements.Achievements; import com.nidefawl.Stats.ItemResolver.hModItemResolver; import com.nidefawl.Stats.ItemResolver.itemResolver; -import com.nidefawl.Stats.Permissions.GroupUserResolver; +import com.nidefawl.Stats.Permissions.GroupManagerResolver; import com.nidefawl.Stats.Permissions.NijiPermissionsResolver; import com.nidefawl.Stats.Permissions.PermissionsResolver; import com.nidefawl.Stats.Permissions.defaultResolver; @@ -38,23 +40,26 @@ import com.nidefawl.Stats.datasource.Category; import com.nidefawl.Stats.datasource.PlayerStat; import com.nidefawl.Stats.datasource.PlayerStatSQL; import com.nidefawl.Stats.datasource.StatsSQLConnectionManager; +import com.nidefawl.Stats.udpates.Update1; +import com.nidefawl.Stats.udpates.Update2; import com.nidefawl.Stats.util.Updater; public class Stats extends JavaPlugin { public final static Logger log = Logger.getLogger("Minecraft"); - public final static double version = 0.8; + public final static double version = 0.9D; public final static String logprefix = "[Stats-" + version + "]"; public final static String defaultCategory = "stats"; public boolean enabled = false; public boolean updated = false; protected HashMap stats = new HashMap(); protected HashMap lastPlayerActivity = new HashMap(); - protected itemResolver items = new hModItemResolver("items.txt"); + protected itemResolver items = null; private static PermissionsResolver perms = null; private static StatsPlayerListener playerListener; private static StatsVehicleListener vehicleListener; private static StatsBlockListener blockListener; private static StatsEntityListener entityListener; + private static StatsServerListener serverListener; long lastDebugWrite = System.currentTimeMillis(); /** * LWC updater @@ -69,13 +74,15 @@ public class Stats extends JavaPlugin { public Updater getUpdater() { return updater; } - + public PlayerStat getPlayerStat(String name) { + return stats.get(name); + } public PermissionsResolver Perms() { if (perms == null) { - log.info(logprefix + " Recreating Nijis Permissions for permissions"); + LogInfo("Recreating PermissionsResolver"); CreatePermissionResolver(); if (perms == null) - log.log(Level.SEVERE, logprefix + " Couldn't link to Nijis Permissions plugin!!!"); + LogError("Couldn't link PermissionsResolver!"); } return perms; } @@ -83,7 +90,6 @@ public class Stats extends JavaPlugin { public void ReloadPerms() { if (perms != null) { perms.reloadPerms(); - } } @@ -102,18 +108,19 @@ public class Stats extends JavaPlugin { ResultSet rs = null; boolean result = false; try { - conn = StatsSQLConnectionManager.getConnection(); + conn = StatsSQLConnectionManager.getConnection(StatsSettings.useMySQL); dbm = conn.getMetaData(); rs = dbm.getTables(null, null, StatsSettings.dbTable, null); if (!rs.next()) { ps = conn.prepareStatement("CREATE TABLE `" + StatsSettings.dbTable + "` (" + "`player` varchar(32) NOT NULL DEFAULT '-'," + "`category` varchar(32) NOT NULL DEFAULT 'stats'," + "`stat` varchar(32) NOT NULL DEFAULT '-'," + "`value` int(11) NOT NULL DEFAULT '0'," + "PRIMARY KEY (`player`,`category`,`stat`));"); ps.executeUpdate(); - log.info(logprefix + " " + this.getClass().getName() + " created table '" + StatsSettings.dbTable + "'."); + LogInfo("created table '" + StatsSettings.dbTable + "'"); } result = true; } catch (SQLException ex) { - log.log(Level.SEVERE, logprefix + " " + this.getClass().getName() + " SQL exception", ex); + LogError("SQL exception" + ex); + ex.printStackTrace(); result = false; } finally { try { @@ -124,14 +131,20 @@ public class Stats extends JavaPlugin { if (conn != null) conn.close(); } catch (SQLException ex) { - log.log(Level.SEVERE, logprefix + " " + this.getClass().getName() + " SQL exception on close", ex); + LogError("SQL exception (on close)" + ex); + ex.printStackTrace(); result = false; } } return result; } - public void setSavedStats(Player admin, String player, String category, String key, String value) { + //check if new items already added + //if not then write them to file and update stat-keys in database + private void update2() { + + } + public void setSavedStats(CommandSender sender, String player, String category, String key, String value) { ArrayList tounload = new ArrayList(); tounload.addAll(stats.keySet()); for (String name : tounload) { @@ -144,7 +157,7 @@ public class Stats extends JavaPlugin { PreparedStatement ps = null; ResultSet rs = null; try { - conn = StatsSQLConnectionManager.getConnection(); + conn = StatsSQLConnectionManager.getConnection(StatsSettings.useMySQL); StringBuilder statement = new StringBuilder(); int conditions = 0; statement.append("UPDATE " + StatsSettings.dbTable + " set value = ?"); @@ -166,8 +179,9 @@ public class Stats extends JavaPlugin { ps.setString(conditions--, player); result = ps.executeUpdate(); } catch (SQLException ex) { - log.log(Level.SEVERE, logprefix + " " + this.getClass().getName() + " SQL exception", ex); - Messaging.send(admin, StatsSettings.premessage + ex.getMessage()); + LogError("SQL exception" + ex); + ex.printStackTrace(); + sender.sendMessage(StatsSettings.premessage + ex.getMessage()); } finally { try { if (rs != null) @@ -177,11 +191,12 @@ public class Stats extends JavaPlugin { if (conn != null) conn.close(); } catch (SQLException ex) { - log.log(Level.SEVERE, logprefix + " " + this.getClass().getName() + " SQL exception on close", ex); - Messaging.send(admin, StatsSettings.premessage + ex.getMessage()); + LogError("SQL exception (on close)" + ex); + ex.printStackTrace(); + sender.sendMessage(StatsSettings.premessage + ex.getMessage()); } } - Messaging.send(admin, StatsSettings.premessage + "Updated " + result + " stats."); + sender.sendMessage(StatsSettings.premessage + "Updated " + result + " stats."); for (Player p : getServer().getOnlinePlayers()) { load(p); } @@ -224,112 +239,118 @@ public class Stats extends JavaPlugin { } public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) { - if (!(sender instanceof Player)) - return false; - Player player = (Player) sender; - if (commandLabel.equals("played") && Perms().permission(player, "/stats")) { - int playedFor = get(player.getName(), "stats", "playedfor"); - if (playedFor == 0) { - Messaging.send(player, StatsSettings.premessage + "No Playedtime yet!"); + if (sender instanceof Player) { + Player player = (Player) sender; + if (commandLabel.equals("played") && Perms().permission(player, "stats.view.playtime")) { + int playedFor = get(player.getName(), "stats", "playedfor"); + if (playedFor == 0) { + Messaging.send(player, StatsSettings.premessage + "No Playedtime yet!"); + return true; + } + Messaging.send(player, StatsSettings.premessage + "You played for "+ChatColor.WHITE + GetTimeString(playedFor)); return true; - } - Messaging.send(player, StatsSettings.premessage + "You played for &f" + GetTimeString(playedFor)); - return true; + } } - if (commandLabel.equals("stats") && Perms().permission(player, "/stats")) { - if (args.length == 1 && args[0].equalsIgnoreCase("help")) { - Messaging.send(player, StatsSettings.premessage + ChatColor.WHITE + "/stats - Shows your stats summary"); - Messaging.send(player, StatsSettings.premessage + ChatColor.WHITE + "/stats - Shows players stats summary"); - if (Perms().permission(player, "/statsadmin")) { - Messaging.send(player, StatsSettings.premessage + ChatColor.WHITE + "/stats list - Shows loaded players"); - Messaging.send(player, StatsSettings.premessage + ChatColor.WHITE + "/stats set - Set stats manually"); - Messaging.send(player, StatsSettings.premessage + ChatColor.WHITE + "/stats debug - Prints stat-update messages to console."); - Messaging.send(player, StatsSettings.premessage + "Usage: " + ChatColor.WHITE + "/stats [category|debug|statname|list|helpset]"); - Messaging.send(player, StatsSettings.premessage + "or /stats [player] [category|statname]"); + if (commandLabel.equals("stats")) { + if (args.length == 1 && args[0].equalsIgnoreCase("help") || ((sender instanceof ConsoleCommandSender) && args.length == 0)) { + if ((sender instanceof Player) && Perms().permission(sender, "stats.view.playtime")) { + sender.sendMessage(StatsSettings.premessage + ChatColor.WHITE + "/played - Shows your play-time"); + } + if ((sender instanceof Player) && Perms().permission(sender, "stats.view.own")) { + sender.sendMessage(StatsSettings.premessage + ChatColor.WHITE + "/stats - Shows your stats summary"); + } + if(Perms().permission(sender, "stats.view.others")) { + sender.sendMessage(StatsSettings.premessage + ChatColor.WHITE + "/stats - Shows players stats summary"); + } + if (Perms().permission(sender, "stats.admin")) { + sender.sendMessage(StatsSettings.premessage + ChatColor.WHITE + "/stats list - Shows loaded players"); + sender.sendMessage(StatsSettings.premessage + ChatColor.WHITE + "/stats set - Set stats manually"); + sender.sendMessage(StatsSettings.premessage + ChatColor.WHITE + "/stats debug - Prints stat-update messages to console."); + sender.sendMessage(StatsSettings.premessage + "Usage: " + ChatColor.WHITE + "/stats [category|debug|statname|list|helpset]"); + sender.sendMessage(StatsSettings.premessage + "or /stats [player] [category|statname]"); } else { - Messaging.send(player, StatsSettings.premessage + "Usage: " + ChatColor.WHITE + "/stats [category|statname|help] or /stats [player] [category|statname]"); + sender.sendMessage(StatsSettings.premessage + "Usage: " + ChatColor.WHITE + "/stats [category|statname|help] or /stats [player] [category|statname]"); } return true; } - if (Perms().permission(player, "/statsadmin")) { - if (args.length == 1 && args[0].equalsIgnoreCase("list") && Perms().permission(player, "/statsadmin")) { - Messaging.send(player, StatsSettings.premessage + ChatColor.WHITE + "Loaded playerstats (" + stats.size() + "): " + StatsPlayerList()); - return true; - } - if (args.length == 1 && args[0].equalsIgnoreCase("entlist")) { - entityListener.sendEntList(player); - return true; - } - if (args.length > 0 && args[0].equalsIgnoreCase("set")) { - if (args.length < 5) { - Messaging.send(player, StatsSettings.premessage + ChatColor.RED + "Need more arguments (use * to select all)"); - Messaging.send(player, StatsSettings.premessage + ChatColor.WHITE + "/stats set [player] [category] [key] [value]- Set stats manually"); - return true; - } - try { - Integer.valueOf(args[4]); - } catch (Exception e) { - Messaging.send(player, StatsSettings.premessage + ChatColor.WHITE + "[value] should be a number (" + args[4] + " is not)!"); - return true; - } - setSavedStats(player, args[1], args[2], args[3], args[4]); - return true; - } - if (args.length == 1 && args[0].equalsIgnoreCase("debug")) { - StatsSettings.debugOutput = !StatsSettings.debugOutput; - Messaging.send(player, StatsSettings.premessage + ChatColor.WHITE + "Debugging " + (StatsSettings.debugOutput ? "enabled. Check server log." : "disabled.")); - return true; - - } - if (args.length == 1 && args[0].equalsIgnoreCase("disable")) { - enabled = false; - Messaging.send(player, StatsSettings.premessage + ChatColor.WHITE + "Debugging: Stats is now disabled."); - return true; - - } - if (args.length == 1 && args[0].equalsIgnoreCase("enable")) { - enabled = true; - Messaging.send(player, StatsSettings.premessage + ChatColor.WHITE + "Debugging: Stats is now enabled."); - return true; - - } + else if (args.length == 1 && args[0].equalsIgnoreCase("list") && Perms().permission(sender, "stats.admin")) { + sender.sendMessage(StatsSettings.premessage + ChatColor.WHITE + "Loaded playerstats (" + stats.size() + "): " + StatsPlayerList()); + return true; } - Player who = player; - if (args.length > 0) { - int offs = 1; + else if (args.length > 0 && args[0].equalsIgnoreCase("set") && Perms().permission(sender, "stats.admin")) { + if (args.length < 5) { + sender.sendMessage(StatsSettings.premessage + ChatColor.RED + "Need more arguments (use * to select all)"); + sender.sendMessage(StatsSettings.premessage + ChatColor.WHITE + "/stats set [player] [category] [key] [value]- Set stats manually"); + return true; + } + try { + Integer.valueOf(args[4]); + } catch (Exception e) { + sender.sendMessage(StatsSettings.premessage + ChatColor.WHITE + "[value] should be a number (" + args[4] + " is not)!"); + return true; + } + setSavedStats(sender, args[1], args[2], args[3], args[4]); + return true; + } + else if (args.length == 1 && args[0].equalsIgnoreCase("debug") && Perms().permission(sender, "stats.admin")) { + StatsSettings.debugOutput = !StatsSettings.debugOutput; + sender.sendMessage(StatsSettings.premessage + ChatColor.WHITE + "Debugging " + (StatsSettings.debugOutput ? "enabled. Check server log." : "disabled.")); + return true; + } + if(!Perms().permission(sender, "stats.view.own")) { + sender.sendMessage(ChatColor.RED + "You don't have permission to view your stats!"); + return true; + } + Player who = null; + if(sender instanceof Player) { + who = (Player)sender; + } + int offs = 0; + if(args.length>0) { who = playerMatch(args[0]); - if (who == null) { - who = player; - offs--; - } - if (args.length == offs + 1) { - if (isStat(player.getName(), args[offs])) { - printStat(player, who, "stats", args[offs]); - return true; - } else if (getItems().getItem(args[offs]) != 0 && !(args[offs].equals("boat") || args[offs].equals("minecart"))) { - printStat(player, who, "blockcreate", args[offs]); - printStat(player, who, "blockdestroy", args[offs]); - return true; - } else if (isCat(player.getName(), args[offs])) { - Messaging.send(player, StatsSettings.premessage + "Please choose: (/stats " + args[offs] + " )"); - Messaging.send(player, StatsSettings.premessage + ChatColor.WHITE + getCatEntries(who.getName(), args[offs])); - return true; - } else { - Messaging.send(player, StatsSettings.premessage + ChatColor.RED + "stat/category '" + args[offs] + "' not found. Possible values:"); - Messaging.send(player, StatsSettings.premessage + ChatColor.WHITE + getCats(who.getName())); + if(who!=null) { + if(!Perms().permission(sender, "stats.view.others")) { + sender.sendMessage(ChatColor.RED + "You don't have permission to view others stats!"); return true; } - } else if (args.length == offs + 2) { - if (isCat(player.getName(), args[offs])) { - printStat(player, who, args[offs], args[offs + 1]); - return true; + offs++; + } else { + if ((sender instanceof ConsoleCommandSender)) { + sender.sendMessage(ChatColor.RED + "Player '"+args[0]+"' is not online!"); + return false; } else { - Messaging.send(player, StatsSettings.premessage + ChatColor.RED + "stat/category '" + args[offs] + "' not found. Possible values:"); - Messaging.send(player, StatsSettings.premessage + ChatColor.WHITE + getCats(who.getName())); - return true; + who = (Player)sender; } } } + if (args.length == offs + 1) { + if (isStat(who.getName(), args[offs])) { + printStat(sender, who, "stats", args[offs]); + return true; + } else if (getItems().getItem(args[offs]) != 0 && !(args[offs].equals("boat") || args[offs].equals("minecart"))) { + printStat(sender, who, "blockcreate", args[offs]); + printStat(sender, who, "blockdestroy", args[offs]); + return true; + } else if (isCat(who.getName(), args[offs])) { + sender.sendMessage(StatsSettings.premessage + "Please choose: (/stats " + args[offs] + " )"); + sender.sendMessage(StatsSettings.premessage + ChatColor.WHITE + getCatEntries(who.getName(), args[offs])); + return true; + } else { + sender.sendMessage(StatsSettings.premessage + ChatColor.RED + "stat/category '" + args[offs] + "' not found. Possible values:"); + sender.sendMessage(StatsSettings.premessage + ChatColor.WHITE + getCats(who.getName())); + return true; + } + } else if (args.length == offs + 2) { + if (isCat(who.getName(), args[offs])) { + printStat(sender, who, args[offs], args[offs + 1]); + return true; + } else { + sender.sendMessage(StatsSettings.premessage + ChatColor.RED + "stat/category '" + args[offs] + "' not found. Possible values:"); + sender.sendMessage(StatsSettings.premessage + ChatColor.WHITE + getCats(who.getName())); + return true; + } + } + int playedTime = get(who.getName(), "stats", "playedfor"); int movedBlocks = get(who.getName(), "stats", "move"); int totalCreate = get(who.getName(), "stats", "totalblockcreate"); @@ -341,52 +362,51 @@ public class Stats extends JavaPlugin { int totalDamage = get(who.getName(), "damagetaken", "total"); int totalDamageDealt = get(who.getName(), "damagedealt", "total"); try { - Messaging.send(player, "------------------------------------------------"); - Messaging.send(player, "&e stats for &f" + who.getName() + "&e: (&f/stats help for more&e)"); - Messaging.send(player, "------------------------------------------------"); - String s1 = "&6 [&ePlayedtime&6]"; - while (MinecraftFontWidthCalculator.getStringWidth(s1) < 110) + sender.sendMessage("------------------------------------------------"); + sender.sendMessage(ChatColor.GOLD + " stats for " + ChatColor.WHITE + who.getName() + ChatColor.GOLD + ": (" + ChatColor.WHITE + "/stats help for more" + ChatColor.GOLD + ")"); + sender.sendMessage("------------------------------------------------"); + String s1 = ChatColor.GOLD + "[" + ChatColor.YELLOW + "Playedtime" + ChatColor.GOLD + "]" + ChatColor.YELLOW; + while (MinecraftFontWidthCalculator.getStringWidth(sender,s1) < 120) s1 += " "; - s1 += "&f" + GetTimeString(playedTime); - Messaging.send(player, s1); - s1 = "&6 [&eMoved&6]"; - while (MinecraftFontWidthCalculator.getStringWidth(s1) < 110) + s1 += ChatColor.WHITE + GetTimeString(playedTime); + sender.sendMessage(s1); + s1 = ChatColor.GOLD + "[" + ChatColor.YELLOW + "Moved" + ChatColor.GOLD + "]" + ChatColor.YELLOW; + while (MinecraftFontWidthCalculator.getStringWidth(sender,s1) < 120) s1 += " "; - s1 += "&f" + movedBlocks + " blocks"; - Messaging.send(player, s1); - printStatFormated(player, "Blocks", "created", totalCreate, "destroyed", totalDestroy); - printStatFormated(player, "Deaths", "total", tdeaths, "player", pdeaths); - printStatFormated(player, "Kills", "total", tkills, "player", pkills); - printStatFormated(player, "Damage", "dealt", totalDamageDealt, "taken", totalDamage); - Messaging.send(player, "------------------------------------------------"); + s1 += ChatColor.WHITE + String.valueOf(movedBlocks) + " blocks"; + sender.sendMessage(s1); + printStatFormatted(sender, "Blocks", "created", totalCreate, "destroyed", totalDestroy); + printStatFormatted(sender, "Deaths", "total", tdeaths, "player", pdeaths); + printStatFormatted(sender, "Kills", "total", tkills, "player", pkills); + printStatFormatted(sender, "Damage", "dealt", totalDamageDealt, "taken", totalDamage); + sender.sendMessage("------------------------------------------------"); } catch (Exception e) { // TODO: handle exception } return true; - } return false; } - private void printStatFormated(Player p, String name, String title1, int value1, String title2, int value2) { - String s1 = "&6 [&e" + name + "&6]&e"; - while (MinecraftFontWidthCalculator.getStringWidth(s1) < 120) + private void printStatFormatted(CommandSender sender, String name, String title1, int value1, String title2, int value2) { + String s1 = ChatColor.GOLD + "[" + ChatColor.YELLOW + name + ChatColor.GOLD + "]" + ChatColor.YELLOW; + while (MinecraftFontWidthCalculator.getStringWidth(sender,s1) < 120) s1 += " "; if (title2 != null) - s1 += "&f" + title1 + "/" + title2; + s1 += ChatColor.WHITE + title1 + "/" + title2; else - s1 += "&f" + title1; - while (MinecraftFontWidthCalculator.getStringWidth(s1) < 240) + s1 += ChatColor.WHITE + title1; + while (MinecraftFontWidthCalculator.getStringWidth(sender,s1) < 240) s1 += " "; if (title2 != null) s1 += value1 + "/" + value2; else s1 += value1; - Messaging.send(p, s1); + sender.sendMessage(s1); } - public void printStat(Player sendTo, Player statPlayer, String cat, String stat) { + public void printStat(CommandSender sendTo, Player statPlayer, String cat, String stat) { long statVal = get(statPlayer.getName(), cat, stat); String statString = "" + statVal; if (stat.equalsIgnoreCase("playedfor")) { @@ -398,7 +418,7 @@ public class Stats extends JavaPlugin { statString = format.format(logDate); } - Messaging.send(sendTo, StatsSettings.premessage + cat + "/" + stat + ": &f" + statString); + sendTo.sendMessage(StatsSettings.premessage + cat + "/" + stat + ": " + ChatColor.WHITE + statString); } public String GetTimeString(int Seconds) { @@ -411,19 +431,21 @@ public class Stats extends JavaPlugin { } public void CreatePermissionResolver() { - Plugin permPlugin = this.getServer().getPluginManager().getPlugin("Permissions"); + + Plugin permPlugin = this.getServer().getPluginManager().getPlugin("GroupManager"); + if (permPlugin != null) { + log.info(logprefix + " Using GroupManager for permissions"); + perms = new GroupManagerResolver(this); + return; + } + permPlugin = this.getServer().getPluginManager().getPlugin("Permissions"); if (permPlugin != null) { log.info(logprefix + " Using Nijis Permissions for permissions"); perms = new NijiPermissionsResolver(this); return; } - permPlugin = this.getServer().getPluginManager().getPlugin("GroupUsers"); - if (permPlugin != null) { - log.info(logprefix + " Using GroupUsers for permissions"); - perms = new GroupUserResolver(this); - return; - } - log.info(logprefix + " Using bukkit's isOp() for permissions"); + + log.info(logprefix + " Using bukkit's isOp() for permissions (until other plugin is enabled)"); perms = new defaultResolver(); return; } @@ -447,19 +469,19 @@ public class Stats extends JavaPlugin { list += " "; return list; } + protected final FilenameFilter filter = new FilenameFilter() { + public boolean accept(File dir, String name) { + if(name.equals("items.txt")) return false; + return name.endsWith(".txt"); + } + }; + protected final FilenameFilter filterOld = new FilenameFilter() { + public boolean accept(File dir, String name) { + return name.endsWith(".txt.old"); + } + }; public void convertFlatFiles() { - FilenameFilter filter = new FilenameFilter() { - public boolean accept(File dir, String name) { - return name.endsWith(".txt"); - } - }; - - FilenameFilter filterOld = new FilenameFilter() { - public boolean accept(File dir, String name) { - return name.endsWith(".txt.old"); - } - }; String[] files = getDataFolder().list(filterOld); if (files != null && files.length > 0) { for (int i = 0; i < files.length; i++) { @@ -486,7 +508,9 @@ public class Stats extends JavaPlugin { ps.save(); count++; } - Stats.LogInfo("Converted " + count + " stat files to " + (StatsSettings.useMySQL ? "MySQL" : "SQLite")); + if(count > 0) { + Stats.LogInfo("Converted " + count + " stat files to " + (StatsSettings.useMySQL ? "MySQL" : "SQLite")); + } } public Stats() { @@ -512,25 +536,16 @@ public class Stats extends JavaPlugin { } StatsSettings.load(this); updater = new Updater(this); - System.setProperty("org.sqlite.lib.path", updater.getOSSpecificFolder()); try { - if (StatsSettings.autoUpdate) { - - updated = updater.checkDist(); - updated |= updater.checkAchDist(); - if (updated) { - LogInfo("UPDATE INSTALLED. PLEASE RESTART...."); - return; - } - - } else { - updater.check(); + updated = updater.updateDist(StatsSettings.autoUpdate); + if (updated) { + LogInfo("UPDATE INSTALLED. PLEASE RESTART...."); + return; } - updater.update(); } catch (Exception e) { e.printStackTrace(); } - Connection conn = StatsSQLConnectionManager.getConnection(); + Connection conn = StatsSQLConnectionManager.getConnection(StatsSettings.useMySQL); try { if (conn == null || conn.isClosed()) { LogError("Could not establish SQL connection. Disabling Stats"); @@ -551,6 +566,10 @@ public class Stats extends JavaPlugin { convertFlatFiles(); if (updated) return; + Update1.execute(this); + Update2.execute(this); + items = new hModItemResolver(new File(getDataFolder(),"items.txt")); + update2(); stats = new HashMap(); CreatePermissionResolver(); enabled = true; @@ -558,12 +577,12 @@ public class Stats extends JavaPlugin { blockListener = new StatsBlockListener(this); entityListener = new StatsEntityListener(this); vehicleListener = new StatsVehicleListener(this); + serverListener = new StatsServerListener(this); initialize(); LogInfo("Plugin Enabled"); for (Player p : getServer().getOnlinePlayers()) { load(p); } - getServer().getScheduler().scheduleSyncRepeatingTask(this, new SaveTask(this), StatsSettings.delay * 20, StatsSettings.delay * 20); } @@ -575,10 +594,10 @@ public class Stats extends JavaPlugin { return null; } - private static class SaveTask implements Runnable { + public static class SaveTask implements Runnable { private Stats statsInstance; - SaveTask(Stats plugin) { + public SaveTask(Stats plugin) { statsInstance = plugin; } @@ -593,13 +612,20 @@ public class Stats extends JavaPlugin { public void onDisable() { if (enabled) { saveAll(); + Plugin achPlugin = getServer().getPluginManager().getPlugin("Achievements"); + if (achPlugin != null && achPlugin.isEnabled()) { + if (((Achievements) achPlugin).enabled) { + ((Achievements) achPlugin).checkAchievements(); + ((Achievements) achPlugin).Disable(); + } + } enabled = false; getServer().getScheduler().cancelTasks(this); stats = null; updater.saveInternal(); - StatsSQLConnectionManager.closeConnection(); + StatsSQLConnectionManager.closeConnection(StatsSettings.useMySQL); } - log.info(logprefix + " " + version + " Plugin Disabled"); + LogInfo("Plugin Disabled"); } public void initialize() { @@ -610,19 +636,19 @@ public class Stats extends JavaPlugin { getServer().getPluginManager().registerEvent(Event.Type.PLAYER_MOVE, playerListener, Priority.Monitor, this); getServer().getPluginManager().registerEvent(Event.Type.PLAYER_ANIMATION, playerListener, Priority.Monitor, this); getServer().getPluginManager().registerEvent(Event.Type.PLAYER_TELEPORT, playerListener, Priority.Monitor, this); - getServer().getPluginManager().registerEvent(Event.Type.PLAYER_ITEM, playerListener, Priority.Monitor, this); + getServer().getPluginManager().registerEvent(Event.Type.PLAYER_INTERACT, playerListener, Priority.Monitor, this); getServer().getPluginManager().registerEvent(Event.Type.PLAYER_DROP_ITEM, playerListener, Priority.Monitor, this); getServer().getPluginManager().registerEvent(Event.Type.PLAYER_PICKUP_ITEM, playerListener, Priority.Monitor, this); getServer().getPluginManager().registerEvent(Event.Type.PLAYER_RESPAWN, playerListener, Priority.Monitor, this); - getServer().getPluginManager().registerEvent(Event.Type.BLOCK_PLACED, blockListener, Priority.Monitor, this); - getServer().getPluginManager().registerEvent(Event.Type.BLOCK_RIGHTCLICKED, blockListener, Priority.Monitor, this); - getServer().getPluginManager().registerEvent(Event.Type.BLOCK_INTERACT, blockListener, Priority.Monitor, this); + getServer().getPluginManager().registerEvent(Event.Type.BLOCK_PLACE, blockListener, Priority.Monitor, this); getServer().getPluginManager().registerEvent(Event.Type.BLOCK_IGNITE, blockListener, Priority.Monitor, this); getServer().getPluginManager().registerEvent(Event.Type.BLOCK_BREAK, blockListener, Priority.Monitor, this); getServer().getPluginManager().registerEvent(Event.Type.ENTITY_DEATH, entityListener, Priority.Lowest, this); - getServer().getPluginManager().registerEvent(Event.Type.ENTITY_DAMAGED, entityListener, Priority.Monitor, this); + getServer().getPluginManager().registerEvent(Event.Type.ENTITY_DAMAGE, entityListener, Priority.Highest, this); getServer().getPluginManager().registerEvent(Event.Type.VEHICLE_ENTER, vehicleListener, Priority.Monitor, this); getServer().getPluginManager().registerEvent(Event.Type.VEHICLE_MOVE, vehicleListener, Priority.Monitor, this); + getServer().getPluginManager().registerEvent(Event.Type.PLUGIN_DISABLE, serverListener, Priority.Normal, this); + getServer().getPluginManager().registerEvent(Event.Type.PLUGIN_ENABLE, serverListener, Priority.Normal, this); } public void updateStat(Player player, String statType, boolean resetAfkTimer) { @@ -652,7 +678,7 @@ public class Stats extends JavaPlugin { if (!enabled) return; if (player == null || player.length() < 1) { - log.log(Level.SEVERE, logprefix + " updateStat got empty player for [" + category + "] [" + key + "] [" + val + "]"); + LogError("updateStat got empty player for [" + category + "] [" + key + "] [" + val + "]"); return; } @@ -691,11 +717,11 @@ public class Stats extends JavaPlugin { } - protected void updateMove(String player, Location from, Location to) { + public void updateMove(String player, Location from, Location to) { if (!enabled) return; if (player == null || player.length() < 1) { - log.log(Level.SEVERE, logprefix + " updateMove got empty player for " + player); + LogError("updateMove got empty player for " + player); return; } PlayerStat ps = stats.get(player); @@ -705,11 +731,11 @@ public class Stats extends JavaPlugin { } - protected void updateVehicleMove(String player, Vehicle vhc, Location from, Location to) { + public void updateVehicleMove(String player, Vehicle vhc, Location from, Location to) { if (!enabled) return; if (player == null || player.length() < 1) { - log.log(Level.SEVERE, logprefix + " updateVehicleMove got empty player for " + player); + LogError("updateVehicleMove got empty player for " + player); return; } PlayerStat ps = stats.get(player); @@ -802,14 +828,14 @@ public class Stats extends JavaPlugin { return cat.get(key); } - protected void load(Player player) { - if (!Perms().permission(player, "/stats")) { + public void load(Player player) { + if (!Perms().permission(player, "stats.log")) { if (StatsSettings.debugOutput) - log.info(logprefix + " player " + player.getName() + " has no /stats permission. Not loading/logging actions"); + LogInfo("player " + player.getName() + " has no stats.log permission. Not loading/logging actions"); return; } if (stats.containsKey(player.getName())) { - log.log(Level.SEVERE, logprefix + " attempting to load already loaded player: " + player.getName()); + LogError("attempting to load already loaded player: " + player.getName()); return; } PlayerStat ps = new PlayerStatSQL(player.getName(), this); @@ -817,10 +843,10 @@ public class Stats extends JavaPlugin { ps.skipTeleports = 2; stats.put(player.getName(), ps); if (StatsSettings.debugOutput) - log.info(logprefix + " player " + player.getName() + " has been loaded."); + LogInfo("player " + player.getName() + " has been loaded."); } - protected void unload(String player) { + public void unload(String player) { entityListener.UnloadPlayer(player); if (stats.containsKey(player)) { PlayerStat ps = stats.get(player); @@ -836,11 +862,11 @@ public class Stats extends JavaPlugin { return stats.get(p.getName()).isAfk(); } - private synchronized void saveAll() { + public void saveAll() { if (StatsSettings.debugOutput) log.info("Stats debug: saving " + stats.size() + " players stats"); try { - Connection conn = StatsSQLConnectionManager.getConnection(); + Connection conn = StatsSQLConnectionManager.getConnection(StatsSettings.useMySQL); if (conn == null) return; conn.setAutoCommit(false); @@ -859,11 +885,11 @@ public class Stats extends JavaPlugin { } stat.save(false); } - StatsSQLConnectionManager.closeConnection(); + StatsSQLConnectionManager.closeConnection(StatsSettings.useMySQL); for (PlayerStat stat : stats.values()) { if (!stat.unload) continue; - log.log(Level.SEVERE, logprefix + " " + " onDisconnect did not happen, logging out+ unloading " + stat.getName() + " now"); + LogError("onPlayerQuit did not happen, unloading " + stat.getName() + " now"); logout(stat.getName()); unload(stat.getName()); } @@ -874,9 +900,6 @@ public class Stats extends JavaPlugin { } public itemResolver getItems() { - if (items == null) { - setItems(new hModItemResolver("items.txt")); - } return items; } @@ -898,7 +921,7 @@ public class Stats extends JavaPlugin { if (!enabled) return; if (player == null || player.length() < 1) { - log.log(Level.SEVERE, logprefix + " updateVehicleEnter got empty player for " + player); + LogError("updateVehicleEnter got empty player for " + player); return; } PlayerStat ps = stats.get(player); @@ -921,8 +944,13 @@ public class Stats extends JavaPlugin { } public void onLoad() { - // TODO Auto-generated method stub } + /** + * @param perms the perms to set + */ + public static void setPerms(PermissionsResolver perms) { + Stats.perms = perms; + } } \ No newline at end of file diff --git a/com/nidefawl/Stats/StatsBlockListener.java b/com/nidefawl/Stats/StatsBlockListener.java index deaf1f3..77739b4 100755 --- a/com/nidefawl/Stats/StatsBlockListener.java +++ b/com/nidefawl/Stats/StatsBlockListener.java @@ -1,19 +1,15 @@ package com.nidefawl.Stats; -import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.event.block.BlockBreakEvent; import org.bukkit.event.block.BlockBurnEvent; import org.bukkit.event.block.BlockCanBuildEvent; import org.bukkit.event.block.BlockDamageEvent; -import org.bukkit.event.block.BlockFromToEvent; import org.bukkit.event.block.BlockIgniteEvent; -import org.bukkit.event.block.BlockInteractEvent; import org.bukkit.event.block.BlockListener; import org.bukkit.event.block.BlockPhysicsEvent; import org.bukkit.event.block.BlockPlaceEvent; import org.bukkit.event.block.BlockRedstoneEvent; -import org.bukkit.event.block.BlockRightClickEvent; import org.bukkit.event.block.LeavesDecayEvent; import org.bukkit.event.block.SignChangeEvent; @@ -77,15 +73,6 @@ public class StatsBlockListener extends BlockListener { public void onBlockCanBuild(BlockCanBuildEvent event) { } - /** - * Called when a block flows (water/lava) - * - * @param event - * Relevant event details - */ - @Override - public void onBlockFlow(BlockFromToEvent event) { - } /** * Called when a block gets ignited @@ -129,33 +116,8 @@ public class StatsBlockListener extends BlockListener { plugin.updateStat(event.getPlayer(), "totalblockcreate", true); } - /** - * Called when a block is interacted with - * - * @param event - * Relevant event details - */ - @Override - public void onBlockInteract(BlockInteractEvent event) { - if (event.isCancelled()) - return; - if (!event.isPlayer()) - return; - if (event.getBlock().getType() == Material.CHEST) { - plugin.updateStat((Player) event.getEntity(), "openchest", true); - } - } - /** - * Called when a player right clicks a block - * - * @param event - * Relevant event details - */ - @Override - public void onBlockRightClick(BlockRightClickEvent event) { - } /** * Called when redstone changes From: the source of the redstone change To: diff --git a/com/nidefawl/Stats/StatsEntityListener.java b/com/nidefawl/Stats/StatsEntityListener.java index d21af65..e2acf34 100755 --- a/com/nidefawl/Stats/StatsEntityListener.java +++ b/com/nidefawl/Stats/StatsEntityListener.java @@ -3,7 +3,6 @@ package com.nidefawl.Stats; import java.util.ArrayList; import java.util.HashMap; -import org.bukkit.ChatColor; import org.bukkit.craftbukkit.entity.CraftItem; import org.bukkit.entity.*; import org.bukkit.event.entity.*; @@ -28,7 +27,7 @@ public class StatsEntityListener extends EntityListener { ArrayList removeThat = new ArrayList(); for (Entity ee : entsKilledByEnt.keySet()) { // cycle through Ents that // dealt damage - + if (ee == null) continue; @@ -46,7 +45,7 @@ public class StatsEntityListener extends EntityListener { break; } } - if (res != null) { + if(res!=null) { if (setNull) { entsKilledByEnt.get(res).remove(entity); if (entsKilledByEnt.get(res).size() == 0) @@ -118,27 +117,25 @@ public class StatsEntityListener extends EntityListener { entsKilledByEnt.put(damager, ents); } } - public String getNiceDamageString(String cause) { - if (cause.equals("fire")) + if(cause.equals("fire")) return "burned to death"; - if (cause.equals("fall")) + if(cause.equals("fall")) return "died by falling down a cliff"; - if (cause.equals("drowning")) + if(cause.equals("drowning")) return "died by drowning"; - if (cause.equals("entityexplosion") || cause.equals("explosion")) + if(cause.equals("entityexplosion")||cause.equals("explosion")) return "was hit by an explosion"; - if (cause.equals("lava")) + if(cause.equals("lava")) return "had a bath in lava"; - if (cause.equals("suffocation")) + if(cause.equals("suffocation")) return "suffocated"; - if (cause.equals("entityattack")) + if(cause.equals("entityattack")) return "was hunt down by some creature"; - if (cause.equals("unknown")) + if(cause.equals("unknown")) return "was killed by Herobrine"; - return "was killed by " + cause.toLowerCase(); + return "was killed by "+cause.toLowerCase(); } - private void checkOtherDamage(EntityDamageEvent event) { if (event.getEntity() instanceof Player) { String cause = "unknown"; @@ -178,21 +175,20 @@ public class StatsEntityListener extends EntityListener { default: cause = "unknown"; } - plugin.updateStat((Player) event.getEntity(), "damagetaken", cause, event.getDamage(), false); - plugin.updateStat((Player) event.getEntity(), "damagetaken", "total", event.getDamage(), false); - if (event.getDamage() >= ((Player) event.getEntity()).getHealth() && plugin.stats.keySet().contains(((Player) event.getEntity()).getName())) { + plugin.updateStat((Player) event.getEntity(), "damagetaken", cause, event.getDamage(),false); + plugin.updateStat((Player) event.getEntity(), "damagetaken", "total", event.getDamage(),false); + if (event.getDamage() >= ((Player) event.getEntity()).getHealth() && plugin.getPlayerStat(((Player) event.getEntity()).getName())!=null) { otherDeathCauses.put((Player) event.getEntity(), cause); } } } - - public void sendEntList(Player player) { + /*public void sendEntList(CommandSender sender) { int LoadedEnts = 0; int nullEnts = 0; for (Entity e : entsKilledByEnt.keySet()) { - if (e == null) { // WONDER IF THIS HAPPENS + if (e == null) { nullEnts++; continue; } @@ -206,36 +202,35 @@ public class StatsEntityListener extends EntityListener { if (ee instanceof Player) entsList += ((Player) ee).getName() + ", "; else - entsList += StatsEntityListener.EntToString(ee) + " (" + ee.getEntityId() + "," + ((LivingEntity) ee).getHealth() + "), "; + entsList += StatsEntityListener.EntToString(ee) + " (" + ee.getEntityId() + ","+((LivingEntity)ee).getHealth()+"), "; } if (entsList.length() > 2) entsList.substring(0, entsList.length() - 2); - Messaging.send(player, "killed entitys for: " + entName + "(" + e.getEntityId() + "): " + entsList); + sender.sendMessage("killed entitys for: " + entName + "(" + e.getEntityId() + "): " + entsList); LoadedEnts++; LoadedEnts += entsKilledByEnt.get(e).size(); } - Messaging.send(player, StatsSettings.premessage + ChatColor.WHITE + "Total chached ents: " + LoadedEnts + ", Nulls: " + nullEnts); + sender.sendMessage(StatsSettings.premessage + ChatColor.WHITE + "Total chached ents: " + LoadedEnts + ", Nulls: " + nullEnts); - } + }*/ private boolean checkEntDamage(Entity entity, Entity damager, int amount) { - if (!(damager instanceof Player) && !(entity instanceof Player)) { return true; } String typeName = null; if ((damager instanceof Player) && (entity instanceof Player)) { typeName = "Player"; - if (((LivingEntity) entity).getHealth() > 0) { - StatsPlayerDamagedPlayerEvent damageevent = new StatsPlayerDamagedPlayerEvent((Player) damager, (Player) entity, amount); + if(((LivingEntity) entity).getHealth()>0 ) { + StatsPlayerDamagedPlayerEvent damageevent = new StatsPlayerDamagedPlayerEvent((Player)damager,(Player)entity,amount); plugin.getServer().getPluginManager().callEvent(damageevent); - if (damageevent.isCancelled()) { + if(damageevent.isCancelled()) { return false; } - plugin.updateStat((Player) damager, "damagedealt", typeName, amount, false); - plugin.updateStat((Player) entity, "damagetaken", typeName, amount, false); - if (amount >= ((LivingEntity) entity).getHealth() && plugin.stats.keySet().contains(((Player) damager).getName())) { + plugin.updateStat((Player) damager, "damagedealt", typeName, amount,false); + plugin.updateStat((Player) entity, "damagetaken", typeName, amount,false); + if (amount >= ((LivingEntity) entity).getHealth() && plugin.getPlayerStat(((Player) damager).getName())!=null) { if (getEntFromEnt(entity, false) == null) saveEntToEnt(damager, entity); } @@ -245,27 +240,26 @@ public class StatsEntityListener extends EntityListener { if (damager instanceof Player) { typeName = EntToString(entity); if (!(entity instanceof LivingEntity)) { - plugin.updateStat((Player) damager, "damagedealt", typeName, amount, false); - plugin.updateStat((Player) damager, "damagedealt", "total", amount, false); + plugin.updateStat((Player) damager, "damagedealt", typeName, amount,false); + plugin.updateStat((Player) damager, "damagedealt", "total", amount,false); return true; } else { if (((LivingEntity) entity).getHealth() > 0) { - plugin.updateStat((Player) damager, "damagedealt", typeName, amount, false); - plugin.updateStat((Player) damager, "damagedealt", "total", amount, false); - if (amount >= ((LivingEntity) entity).getHealth() && plugin.stats.keySet().contains(((Player) damager).getName())) { + plugin.updateStat((Player) damager, "damagedealt", typeName, amount,false); + plugin.updateStat((Player) damager, "damagedealt", "total", amount,false); + if (amount >= ((LivingEntity) entity).getHealth() && plugin.getPlayerStat(((Player) damager).getName())!=null) { if (getEntFromEnt(entity, false) == null) saveEntToEnt(damager, entity); } } } - } if (entity instanceof Player) { typeName = EntToString(damager); if (((LivingEntity) entity).getHealth() > 0) { - plugin.updateStat((Player) entity, "damagetaken", typeName, amount, false); - plugin.updateStat((Player) entity, "damagetaken", "total", amount, false); - if (amount >= ((Player) entity).getHealth() && plugin.stats.keySet().contains(((Player) entity).getName())) { + plugin.updateStat((Player) entity, "damagetaken", typeName, amount,false); + plugin.updateStat((Player) entity, "damagetaken", "total", amount,false); + if (amount >= ((Player) entity).getHealth() && plugin.getPlayerStat(((Player) entity).getName())!=null) { if (getEntFromEnt(entity, false) == null) saveEntToEnt(damager, entity); } @@ -278,56 +272,57 @@ public class StatsEntityListener extends EntityListener { this.plugin = plugin; } - @Override + @Override public void onEntityDeath(EntityDeathEvent event) { Entity e = getEntFromEnt(event.getEntity(), true); if (event.getEntity() instanceof Player) { Player p = (Player) event.getEntity(); - PlayerStat ps = plugin.stats.get(p.getName()); + PlayerStat ps = plugin.getPlayerStat(p.getName()); if (ps == null) return; ps.skipTeleports = 1; - plugin.updateStat(p, "deaths", "total", 1, false); + plugin.updateStat(p, "deaths", "total", 1,false); String otherReason = otherDeathCauses.get(p); otherReason = otherReason != null ? otherReason : "unknown"; if (StatsSettings.deathNotifying) { String name = p.getDisplayName(); String message = name + " &4died"; if (e instanceof Player) { - plugin.updateStat(((Player) e), "kills", "total", 1, false); - plugin.updateStat(((Player) e), "kills", "player", 1, false); - message = name + " &4was killed by &8" + ((Player) e).getDisplayName(); + plugin.updateStat(((Player) e), "kills", "total", 1,false); + plugin.updateStat(((Player) e), "kills", "player", 1,false); + String name2 = ((Player) e).getName(); + message = name + " &4was killed by &8" + name2; } else if (e instanceof LivingEntity) { message = name + " &4was killed by &8" + EntToString(e); } else if (otherReason != null) { - message = name + " &4" + getNiceDamageString(otherReason); + message = name + " &4"+getNiceDamageString(otherReason); } else { message = name + " &4died"; } - Messaging.worldbroadcast(event.getEntity().getWorld(), message); + Messaging.worldbroadcast(event.getEntity().getWorld(), message); } if (e instanceof LivingEntity) { - plugin.updateStat(p, "deaths", EntToString(e), 1, false); - if (e instanceof Player) { - StatsPlayerDeathByPlayerEvent ev = new StatsPlayerDeathByPlayerEvent(event, (Player) event.getEntity(), (Player) e); + plugin.updateStat(p, "deaths", EntToString(e), 1,false); + if(e instanceof Player) { + StatsPlayerDeathByPlayerEvent ev = new StatsPlayerDeathByPlayerEvent(event,(Player)event.getEntity(),(Player)e); plugin.getServer().getPluginManager().callEvent(ev); - } else { - StatsPlayerDeathByEntityEvent ev = new StatsPlayerDeathByEntityEvent(event, (Player) event.getEntity(), e); + } else { + StatsPlayerDeathByEntityEvent ev = new StatsPlayerDeathByEntityEvent(event,(Player)event.getEntity(),e); plugin.getServer().getPluginManager().callEvent(ev); } } else if (otherReason != null) { - plugin.updateStat(p, "deaths", otherReason, 1, false); - StatsPlayerDeathByOtherEvent ev = new StatsPlayerDeathByOtherEvent(event, (Player) event.getEntity(), otherReason); + plugin.updateStat(p, "deaths", otherReason, 1,false); + StatsPlayerDeathByOtherEvent ev = new StatsPlayerDeathByOtherEvent(event,(Player)event.getEntity(),otherReason); plugin.getServer().getPluginManager().callEvent(ev); } otherDeathCauses.remove(p); } else if (event.getEntity() instanceof LivingEntity) { if (e instanceof Player) { - plugin.updateStat((Player) e, "kills", "total", 1, false); - plugin.updateStat((Player) e, "kills", EntToString(event.getEntity()), 1, false); - StatsMobDeathByPlayerEvent ev = new StatsMobDeathByPlayerEvent(event, (Player) e, event.getEntity()); + plugin.updateStat((Player) e, "kills", "total", 1,false); + plugin.updateStat((Player) e, "kills", EntToString(event.getEntity()), 1,false); + StatsMobDeathByPlayerEvent ev = new StatsMobDeathByPlayerEvent(event, (Player)e,event.getEntity()); plugin.getServer().getPluginManager().callEvent(ev); } entsKilledByEnt.remove(e); @@ -335,31 +330,33 @@ public class StatsEntityListener extends EntityListener { entsKilledByEnt.remove(event.getEntity()); } - @Override + + + @Override public void onEntityCombust(EntityCombustEvent event) { } - @Override + @Override public void onEntityDamage(EntityDamageEvent event) { if (event.isCancelled()) return; - if (event instanceof EntityDamageByProjectileEvent) { - if (!checkEntDamage(event.getEntity(), ((EntityDamageByProjectileEvent) event).getDamager(), event.getDamage())) { + if(event instanceof EntityDamageByProjectileEvent) { + if(!checkEntDamage(event.getEntity(), ((EntityDamageByProjectileEvent)event).getDamager(), event.getDamage())) { + event.setCancelled(true); + } + } else if(event instanceof EntityDamageByEntityEvent) { + if(!checkEntDamage(((EntityDamageByEntityEvent)event).getEntity(), ((EntityDamageByEntityEvent)event).getDamager(), event.getDamage())) { event.setCancelled(true); } - } else if (event instanceof EntityDamageByEntityEvent) { - if (!checkEntDamage(((EntityDamageByEntityEvent) event).getEntity(), ((EntityDamageByEntityEvent) event).getDamager(), event.getDamage())) { - event.setCancelled(true); - } - } else if (event instanceof EntityDamageByBlockEvent) { - checkOtherDamage((EntityDamageByBlockEvent) event); + } else if(event instanceof EntityDamageByBlockEvent) { + checkOtherDamage((EntityDamageByBlockEvent)event); } else { checkOtherDamage(event); } } - @Override + @Override public void onEntityExplode(EntityExplodeEvent event) { } diff --git a/com/nidefawl/Stats/StatsPlayerListener.java b/com/nidefawl/Stats/StatsPlayerListener.java index 9bdcc43..400960a 100755 --- a/com/nidefawl/Stats/StatsPlayerListener.java +++ b/com/nidefawl/Stats/StatsPlayerListener.java @@ -2,6 +2,7 @@ package com.nidefawl.Stats; import org.bukkit.Material; import org.bukkit.craftbukkit.entity.CraftItem; +import org.bukkit.event.block.Action; import org.bukkit.event.player.*; import com.nidefawl.Stats.datasource.PlayerStat; @@ -20,7 +21,7 @@ public class StatsPlayerListener extends PlayerListener { * Relevant event details */ @Override - public void onPlayerQuit(PlayerEvent event) { + public void onPlayerQuit(PlayerQuitEvent event) { plugin.logout(event.getPlayer().getName()); plugin.unload(event.getPlayer().getName()); @@ -36,8 +37,8 @@ public class StatsPlayerListener extends PlayerListener { public void onPlayerChat(PlayerChatEvent event) { if (event.isCancelled()) return; - plugin.updateStat(event.getPlayer(), "chat", true); - plugin.updateStat(event.getPlayer(), "chatletters", event.getMessage().length(), true); + plugin.updateStat(event.getPlayer(), "chat", false); + plugin.updateStat(event.getPlayer(), "chatletters", event.getMessage().length(), false); } /** @@ -47,10 +48,10 @@ public class StatsPlayerListener extends PlayerListener { * Relevant event details */ @Override - public void onPlayerCommandPreprocess(PlayerChatEvent event) { + public void onPlayerCommandPreprocess(PlayerCommandPreprocessEvent event) { if (event.isCancelled()) return; - plugin.updateStat(event.getPlayer(), "command", true); + plugin.updateStat(event.getPlayer(), "command", false); } /** @@ -74,12 +75,12 @@ public class StatsPlayerListener extends PlayerListener { * Relevant event details */ @Override - public void onPlayerTeleport(PlayerMoveEvent event) { + public void onPlayerTeleport(PlayerTeleportEvent event) { if (event.isCancelled()) return; if (event.getTo().equals(event.getPlayer().getWorld().getSpawnLocation())) return; - PlayerStat ps = plugin.stats.get(event.getPlayer().getName()); + PlayerStat ps = plugin.getPlayerStat(event.getPlayer().getName()); if (ps == null) return; if (ps.skipTeleports > 0) { @@ -96,9 +97,14 @@ public class StatsPlayerListener extends PlayerListener { * Relevant event details */ @Override - public void onPlayerItem(PlayerItemEvent event) { + public void onPlayerInteract(PlayerInteractEvent event) { if (event.isCancelled() || event.getBlockFace() == null) return; + if(event.getAction() == Action.RIGHT_CLICK_BLOCK) { + if (event.getClickedBlock().getType() == Material.CHEST) { + plugin.updateStat(event.getPlayer(), "openchest", true); + } + } else switch (event.getMaterial()) { case LAVA_BUCKET: case WATER_BUCKET: @@ -122,7 +128,7 @@ public class StatsPlayerListener extends PlayerListener { * Relevant event details */ @Override - public void onPlayerJoin(PlayerEvent event) { + public void onPlayerJoin(PlayerJoinEvent event) { plugin.load(event.getPlayer()); plugin.login(event.getPlayer()); } @@ -161,8 +167,6 @@ public class StatsPlayerListener extends PlayerListener { public void onPlayerDropItem(PlayerDropItemEvent event) { if (event.isCancelled()) return; - if (event.getItemDrop() == null) - return; if (event.getItemDrop() instanceof CraftItem) { if (((CraftItem) event.getItemDrop()).getItemStack() == null) return; @@ -215,8 +219,6 @@ public class StatsPlayerListener extends PlayerListener { public void onPlayerPickupItem(PlayerPickupItemEvent event) { if (event.isCancelled()) return; - if (event.getItem() == null) - return; if (event.getItem() instanceof CraftItem) { if (((CraftItem) event.getItem()).getItemStack() == null) return; diff --git a/com/nidefawl/Stats/StatsSettings.java b/com/nidefawl/Stats/StatsSettings.java index 659de20..c3ce51e 100755 --- a/com/nidefawl/Stats/StatsSettings.java +++ b/com/nidefawl/Stats/StatsSettings.java @@ -31,7 +31,7 @@ public class StatsSettings { boolean useSQL = properties.getBoolean("stats-use-sql"); properties.remove("stats-use-sql"); - String dataSource = properties.getString("stats-datasource", useSQL ? "mysql" : "sqlite", "dropped flatfile support"); + String dataSource = properties.getString("stats-datasource", useSQL ? "mysql" : "sqlite", "sqlite or mysql"); if (dataSource.toLowerCase().equals("mysql")) { useMySQL = true; } else { @@ -45,6 +45,7 @@ public class StatsSettings { if (premessage.length() > 0) if (premessage.charAt(premessage.length() - 1) != ' ') premessage += " "; + premessage = premessage.replaceAll("(&([a-f0-9]))", "\u00A7$2"); dbUrl = properties.getString("sql-db", "jdbc:mysql://localhost:3306/minecraft", ""); dbUsername = properties.getString("sql-user", "root", ""); dbPassword = properties.getString("sql-pass", "root", ""); diff --git a/com/nidefawl/Stats/datasource/Category.java b/com/nidefawl/Stats/datasource/Category.java index ffce6d1..2a1c139 100755 --- a/com/nidefawl/Stats/datasource/Category.java +++ b/com/nidefawl/Stats/datasource/Category.java @@ -7,10 +7,10 @@ import java.util.logging.Logger; public class Category { public boolean modified = false; - protected HashMap stats; + public HashMap stats; static final Logger log = Logger.getLogger("Minecraft"); - Category() { + public Category() { stats = new HashMap(); modified = false; } diff --git a/com/nidefawl/Stats/datasource/PlayerStat.java b/com/nidefawl/Stats/datasource/PlayerStat.java index cbc5547..8a580f5 100755 --- a/com/nidefawl/Stats/datasource/PlayerStat.java +++ b/com/nidefawl/Stats/datasource/PlayerStat.java @@ -4,7 +4,6 @@ import java.io.File; import java.util.HashMap; import java.util.Set; import java.util.logging.Logger; - import org.bukkit.block.Block; import com.nidefawl.Stats.StatsSettings; @@ -22,7 +21,7 @@ public abstract class PlayerStat { Block lastFace = null; public boolean unload = false; - PlayerStat(String name) { + public PlayerStat(String name) { this.name = name; this.categories = new HashMap(); int now = (int) (System.currentTimeMillis() / 1000L); diff --git a/com/nidefawl/Stats/datasource/PlayerStatFile.java b/com/nidefawl/Stats/datasource/PlayerStatFile.java index c0b0545..698bc0d 100755 --- a/com/nidefawl/Stats/datasource/PlayerStatFile.java +++ b/com/nidefawl/Stats/datasource/PlayerStatFile.java @@ -2,17 +2,11 @@ package com.nidefawl.Stats.datasource; import java.io.File; import java.util.Scanner; -import java.util.logging.Logger; -import java.util.logging.Level; - -import org.bukkit.ChatColor; import com.nidefawl.Stats.Stats; public class PlayerStatFile extends PlayerStat { private String directory; - static final Logger log = Logger.getLogger("Minecraft"); - public final String logprefix = ChatColor.YELLOW + "[Stats-" + Stats.version + "] " + ChatColor.WHITE; PlayerStatFile(String name, String directory) { super(name); @@ -39,7 +33,7 @@ public class PlayerStatFile extends PlayerStat { continue; String[] split = line.split(":"); if (split.length != 3) { - log.log(Level.SEVERE, logprefix + " Malformed line (" + line + ") in " + location); + Stats.LogInfo("Malformed line (" + line + ") in " + location); continue; } String category = split[0]; @@ -49,7 +43,7 @@ public class PlayerStatFile extends PlayerStat { put(category, key, val); } } catch (Exception ex) { - log.log(Level.SEVERE, logprefix + " Exception while reading " + location, ex); + Stats.LogInfo("Exception while reading " + location + " " + ex); return; } } diff --git a/com/nidefawl/Stats/datasource/PlayerStatSQL.java b/com/nidefawl/Stats/datasource/PlayerStatSQL.java index 9c7d1d2..758cb78 100755 --- a/com/nidefawl/Stats/datasource/PlayerStatSQL.java +++ b/com/nidefawl/Stats/datasource/PlayerStatSQL.java @@ -22,7 +22,7 @@ public class PlayerStatSQL extends PlayerStat { PreparedStatement ps = null; try { - conn = StatsSQLConnectionManager.getConnection(); + conn = StatsSQLConnectionManager.getConnection(StatsSettings.useMySQL); if (close) { conn.setAutoCommit(false); } @@ -31,7 +31,7 @@ public class PlayerStatSQL extends PlayerStat { if (!cat.modified) { continue; } - for (String statName : cat.stats.keySet()) { + for (String statName : cat.getEntries()) { int value = cat.get(statName); ps = conn.prepareStatement(StatsSQLConnectionManager.getPreparedPlayerStatUpdateStatement()); @@ -40,7 +40,6 @@ public class PlayerStatSQL extends PlayerStat { ps.setString(3, catName); ps.setString(4, statName); if (ps.executeUpdate() == 0) { - Stats.LogInfo("new stat!!!!"); ps = conn.prepareStatement(StatsSQLConnectionManager.getPreparedPlayerStatInsertStatement()); ps.setString(1, getName()); ps.setString(2, catName); @@ -80,7 +79,7 @@ public class PlayerStatSQL extends PlayerStat { ResultSet rs = null; try { - conn = StatsSQLConnectionManager.getConnection(); + conn = StatsSQLConnectionManager.getConnection(StatsSettings.useMySQL); ps = conn.prepareStatement("SELECT * from " + StatsSettings.dbTable + " where player = ?"); ps.setString(1, getName()); rs = ps.executeQuery(); diff --git a/com/nidefawl/Stats/datasource/StatsSQLConnectionManager.java b/com/nidefawl/Stats/datasource/StatsSQLConnectionManager.java index 0a8b199..c382287 100755 --- a/com/nidefawl/Stats/datasource/StatsSQLConnectionManager.java +++ b/com/nidefawl/Stats/datasource/StatsSQLConnectionManager.java @@ -7,7 +7,8 @@ import com.nidefawl.Stats.Stats; import com.nidefawl.Stats.StatsSettings; public class StatsSQLConnectionManager { - static Connection conn = null; + static Connection connMySQL = null; + static Connection connSQLite = null; public final static String getPreparedPlayerStatUpdateStatement() { return "UPDATE " + StatsSettings.dbTable + " set value=? where player = ? and category = ? and stat = ?;"; @@ -17,16 +18,20 @@ public class StatsSQLConnectionManager { return "INSERT INTO " + StatsSettings.dbTable + " (player,category,stat,value) VALUES(?,?,?,?);"; } - public static Connection getConnection() { + public static Connection getConnection(boolean MySQL) { try { - if (conn == null || conn.isClosed()) { - if (StatsSettings.useMySQL) { + if (MySQL) { + if (connMySQL == null || connMySQL.isClosed()) { Class.forName("com.mysql.jdbc.Driver"); - conn = DriverManager.getConnection(StatsSettings.dbUrl, StatsSettings.dbUsername, StatsSettings.dbPassword); - } else { - Class.forName("org.sqlite.JDBC"); - conn = DriverManager.getConnection(StatsSettings.liteDb); + connMySQL = DriverManager.getConnection(StatsSettings.dbUrl, StatsSettings.dbUsername, StatsSettings.dbPassword); } + return connMySQL; + } else { + if (connSQLite == null || connSQLite.isClosed()) { + Class.forName("org.sqlite.JDBC"); + connSQLite = DriverManager.getConnection(StatsSettings.liteDb); + } + return connSQLite; } } catch (SQLException e) { Stats.LogError("Error getting SQL-connection: " + e.getMessage()); @@ -37,13 +42,18 @@ public class StatsSQLConnectionManager { e.printStackTrace(); return null; } - return conn; } - public static void closeConnection() { + public static void closeConnection(boolean MySQL) { try { - if (conn != null && !conn.isClosed()) { - conn.close(); + if (MySQL) { + if (connMySQL != null && !connMySQL.isClosed()) { + connMySQL.close(); + } + } else { + if (connSQLite != null && !connSQLite.isClosed()) { + connSQLite.close(); + } } } catch (SQLException e) { Stats.LogError("Error closing SQL-connection: " + e.getMessage()); diff --git a/com/nidefawl/Stats/util/Updater.java b/com/nidefawl/Stats/util/Updater.java index a2b3fd7..b348dc8 100755 --- a/com/nidefawl/Stats/util/Updater.java +++ b/com/nidefawl/Stats/util/Updater.java @@ -20,18 +20,12 @@ package com.nidefawl.Stats.util; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; -import java.io.FileOutputStream; import java.io.FileReader; import java.io.FileWriter; -import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; -import java.io.OutputStream; import java.net.URL; -import java.util.ArrayList; import java.util.HashMap; -import java.util.Iterator; -import java.util.List; import com.nidefawl.Achievements.Achievements; import com.nidefawl.Stats.Stats; @@ -46,21 +40,7 @@ public class Updater { /** * File used to obtain the latest version */ - private final static String VERSION_FILE = "VERSION"; - - /** - * File used for the distribution - */ - private final static String DIST_FILE = "Stats.jar"; - /** - * File used for the distribution - */ - private final static String ACHDIST_FILE = "Achievements.jar"; - - /** - * List of files to download - */ - private List needsUpdating = new ArrayList(); + private final static String VERSION_FILE = "VERSIONS"; /** * Internal config @@ -71,188 +51,22 @@ public class Updater { public Updater(Stats plugin) { this.plugin = plugin; - // enableSSL(); - - /* - * Default config values - */ config.put("sqlite", "1.00"); - - /* - * Parse the internal config - */ + config.put("mysql", "1.00"); parseInternalConfig(); } - - /** - * Check for dependencies - * - * @return true if Stats should be reloaded - */ - public void check() { - String[] paths = new String[] { "lib/sqlite.jar", getFullNativeLibraryPath(), "lib/mysql.jar" }; - - paths = new String[] { "lib/sqlite.jar", getFullNativeLibraryPath(), "lib/mysql.jar" }; - for (String path : paths) { - File file = new File(path); - - if (file != null && !file.exists() && !file.isDirectory()) { - UpdaterFile updaterFile = new UpdaterFile(UPDATE_SITE + path); - updaterFile.setLocalLocation(path); - - needsUpdating.add(updaterFile); - } - } - - double latestVersion = getLatestPluginVersion(); - - if (latestVersion > Stats.version) { - Stats.LogInfo("Update detected for Stats"); - Stats.LogInfo("Latest version: " + latestVersion); - } - if (new File("plugins/Achievements.jar").exists()) { - try { - latestVersion = getLatestAchievemntsPluginVersion(); - if (latestVersion > Double.parseDouble(Achievements.version)) { - Stats.LogInfo("Update detected for Achievements"); - Stats.LogInfo("Latest version: " + latestVersion); - } - } catch (Exception e) { - Stats.LogError("Exception while updating Achievements plugin: " + e); - e.printStackTrace(); - } - } - } - - /** - * Force update of binaries - */ - private void requireBinaryUpdate() { - String[] paths = new String[] { "lib/sqlite.jar", getFullNativeLibraryPath(), "lib/mysql.jar" }; - - for (String path : paths) { - UpdaterFile updaterFile = new UpdaterFile(UPDATE_SITE + path); - updaterFile.setLocalLocation(path); - - needsUpdating.add(updaterFile); - } - } - - /** - * Check to see if the distribution is outdated - * - * @return - */ - public boolean checkDist() { - - double latestVersion = getLatestPluginVersion(); - - if (latestVersion > Stats.version) { - UpdaterFile updaterFile = new UpdaterFile(UPDATE_SITE + DIST_FILE); - updaterFile.setLocalLocation("plugins/Stats.jar"); - - needsUpdating.add(updaterFile); - - try { - update(); - Stats.LogInfo("Updated successful"); - return true; - } catch (Exception e) { - Stats.LogInfo("Update failed: " + e.getMessage()); - e.printStackTrace(); - } - } else { - Stats.LogInfo("Stats plugin is up to date"); - } - - return false; - } - - public boolean checkAchDist() { - - if (new File("plugins/Achievements.jar").exists()) { - try { - double latestVersion = getLatestAchievemntsPluginVersion(); - if (latestVersion > Double.parseDouble(Achievements.version)) { - UpdaterFile updaterFile = new UpdaterFile(UPDATE_SITE + ACHDIST_FILE); - updaterFile.setLocalLocation("plugins/Achievments.jar"); - needsUpdating.add(updaterFile); - try { - update(); - Stats.LogInfo("Updated successful"); - return true; - } catch (Exception e) { - Stats.LogInfo("Update failed: " + e.getMessage()); - e.printStackTrace(); - } - } else { - Stats.LogInfo("Achievements plugin is up to date (" + (Achievements.version) + ")"); - } - } catch (Exception e) { - Stats.LogError("Exception while updating Achievements plugin: " + e); - e.printStackTrace(); - } - } - return false; - } - - /** - * Get the latest Achievemnts version - * - * @return - */ - public double getLatestAchievemntsPluginVersion() { - try { - URL url = new URL(UPDATE_SITE + VERSION_FILE); - - InputStream inputStream = url.openStream(); - BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream)); - - bufferedReader.readLine(); - bufferedReader.readLine(); - double version = Double.parseDouble(bufferedReader.readLine()); - - bufferedReader.close(); - - return version; - } catch (Exception e) { - e.printStackTrace(); - } - - return 0.00; - } - - /** - * Get the latest version - * - * @return - */ - public double getLatestPluginVersion() { - try { - URL url = new URL(UPDATE_SITE + VERSION_FILE); - - InputStream inputStream = url.openStream(); - BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream)); - - double version = Double.parseDouble(bufferedReader.readLine()); - - bufferedReader.close(); - - return version; - } catch (Exception e) { - e.printStackTrace(); - } - - return 0.00; - } - /** * @return the current sqlite version */ public double getCurrentSQLiteVersion() { return Double.parseDouble(config.get("sqlite")); } - + /** + * @return the current sqlite version + */ + public double getCurrentMySQLVersion() { + return Double.parseDouble(config.get("mysql")); + } public String combineSplit(int startIndex, String[] string, String seperator) { if (string.length == 0) return ""; @@ -384,114 +198,29 @@ public class Updater { } } - /** - * @return the full path to the native library for sqlite - */ - public String getFullNativeLibraryPath() { - return getOSSpecificFolder() + getOSSpecificFileName(); - } - /** - * @return the os/arch specific file name for sqlite's native library - */ - public String getOSSpecificFileName() { - String osname = System.getProperty("os.name").toLowerCase(); - - if (osname.contains("windows")) { - return "sqlitejdbc.dll"; - } else if (osname.contains("mac")) { - return "libsqlitejdbc.jnilib"; - } else { /* We assume linux/unix */ - return "libsqlitejdbc.so"; + public boolean updateDist(boolean autoUpdate) throws Exception { + URL url = new URL(UPDATE_SITE + VERSION_FILE); + InputStream inputStream = url.openStream(); + BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream)); + double SQLiteVersion = Double.parseDouble(bufferedReader.readLine()); + double MySQLVersion = Double.parseDouble(bufferedReader.readLine()); + double StatsVersion = Double.parseDouble(bufferedReader.readLine()); + double AchievementsVersion = Double.parseDouble(bufferedReader.readLine()); + bufferedReader.close(); + inputStream.close(); + String plugPath = plugin.getDataFolder().getPath()+File.separator; + boolean updated = false; + updated |= (new UpdaterFile(UPDATE_SITE + "lib/mysql.jar",plugPath+"lib/mysql.jar",getCurrentMySQLVersion(),MySQLVersion)).update(true); + config.put("mysql", String.valueOf(MySQLVersion)); + updated |= (new UpdaterFile(UPDATE_SITE + "lib/sqlite.jar",plugPath+"lib/sqlite.jar",getCurrentSQLiteVersion(),SQLiteVersion)).update(true); + config.put("sqlite", String.valueOf(SQLiteVersion)); + if (new File("plugins/Achievements.jar").exists()) { + updated |= (new UpdaterFile(UPDATE_SITE + "Achievements.jar","plugins/Achievements.jar",Achievements.version,AchievementsVersion)).update(autoUpdate); } - } - - /** - * @return the os/arch specific folder location for SQLite's native library - */ - public String getOSSpecificFolder() { - String osname = System.getProperty("os.name").toLowerCase(); - String arch = System.getProperty("os.arch").toLowerCase(); - - if (osname.contains("windows")) { - return "lib/native/Windows/" + arch + "/"; - } else if (osname.contains("mac")) { - return "lib/native/Mac/" + arch + "/"; - } else { /* We assume linux/unix */ - return "lib/native/Linux/" + arch + "/"; - } - } - - /** - * Ensure we have all of the required files (if not, download them) - */ - public void update() throws Exception { - /* - * Check internal versions - */ - double latestVersion = getLatestSQLiteVersion(); - if (latestVersion > getCurrentSQLiteVersion()) { - requireBinaryUpdate(); - Stats.LogInfo("Binary update required"); - config.put("sqlite", latestVersion + ""); - } - - if (needsUpdating.size() == 0) { - return; - } - - /* - * Make the native folder hierarchy if needed - */ - File folder = new File(plugin.getDataFolder(), getOSSpecificFolder()); - folder.mkdirs(); - - Stats.LogInfo("Need to download " + needsUpdating.size() + " file(s)"); - - Iterator iterator = needsUpdating.iterator(); - - while (iterator.hasNext()) { - UpdaterFile item = iterator.next(); - - Stats.LogInfo(" - Downloading file : " + item.getRemoteLocation()); - - URL url = new URL(item.getRemoteLocation()); - File file = new File(plugin.getDataFolder(), item.getLocalLocation()); - if (file.exists()) { - file.delete(); - } - - InputStream inputStream = url.openStream(); - OutputStream outputStream = new FileOutputStream(file); - - saveTo(inputStream, outputStream); - - inputStream.close(); - outputStream.close(); - - Stats.LogInfo(" + Download complete"); - iterator.remove(); - } - - /* - * In the event we updated binaries, we should force an ini save! - */ + updated |= (new UpdaterFile(UPDATE_SITE + "Stats.jar","plugins/Stats.jar",Stats.version,StatsVersion)).update(autoUpdate); saveInternal(); - } - - /** - * Write an input stream to an output stream - * - * @param inputStream - * @param outputStream - */ - private void saveTo(InputStream inputStream, OutputStream outputStream) throws IOException { - byte[] buffer = new byte[1024]; - int len = 0; - - while ((len = inputStream.read(buffer)) > 0) { - outputStream.write(buffer, 0, len); - } + return updated; } } \ No newline at end of file diff --git a/com/nidefawl/Stats/util/UpdaterFile.java b/com/nidefawl/Stats/util/UpdaterFile.java index 6ecc45c..00ac0dd 100755 --- a/com/nidefawl/Stats/util/UpdaterFile.java +++ b/com/nidefawl/Stats/util/UpdaterFile.java @@ -17,6 +17,15 @@ package com.nidefawl.Stats.util; +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.net.URL; + +import com.nidefawl.Stats.Stats; + public class UpdaterFile { /** @@ -28,10 +37,14 @@ public class UpdaterFile { * The local url location */ private String localLocation; + private double localVersion; + private double remoteVersion; - public UpdaterFile(String location) { - remoteLocation = location; - localLocation = location; + public UpdaterFile(String remoteLocation, String localLocation, double localVersion, double remoteVersion) { + this.remoteLocation = remoteLocation; + this.localLocation = localLocation; + this.localVersion = localVersion; + this.remoteVersion = remoteVersion; } /** @@ -66,4 +79,44 @@ public class UpdaterFile { this.remoteLocation = remoteLocation; } + private void saveTo(InputStream inputStream, OutputStream outputStream) throws IOException { + byte[] buffer = new byte[1024]; + int len = 0; + + while ((len = inputStream.read(buffer)) > 0) { + outputStream.write(buffer, 0, len); + } + } + + public boolean update(boolean autoUpdate) throws Exception { + if (remoteVersion > localVersion) { + if (autoUpdate) { + try { + Stats.LogInfo("Newer version found - Downloading file : " + remoteLocation); + URL url = new URL(remoteLocation); + File file = new File(localLocation); + file.mkdirs(); + if (file.exists()) { + file.delete(); + } + InputStream inputStream = url.openStream(); + OutputStream outputStream = new FileOutputStream(file); + saveTo(inputStream, outputStream); + inputStream.close(); + outputStream.close(); + Stats.LogInfo(" + Download complete"); + return true; + } catch (Exception e) { + Stats.LogInfo("Download failed: " + e.getMessage()); + e.printStackTrace(); + return false; + } + } else { + Stats.LogInfo("There is an update for " + localLocation); + return false; + } + } + return false; + } + } diff --git a/plugin.yml b/plugin.yml index f09bcdd..84a9255 100755 --- a/plugin.yml +++ b/plugin.yml @@ -1,6 +1,7 @@ name: Stats main: com.nidefawl.Stats.Stats -version: 0.7 +version: 0.9 +author: nidefawl commands: stats: description: Stats command