diff --git a/com/nidefawl/Stats/Permissions/NijiPermissionsResolver.java b/com/nidefawl/Stats/Permissions/NijiPermissionsResolver.java index 00f3e2e..33e7145 100755 --- a/com/nidefawl/Stats/Permissions/NijiPermissionsResolver.java +++ b/com/nidefawl/Stats/Permissions/NijiPermissionsResolver.java @@ -40,38 +40,19 @@ public class NijiPermissionsResolver implements PermissionsResolver { } @Override - public String getGroup(String player) { + public String getGroup(Player player) { if (!load()) return ""; - return perms.getHandler().getGroup(player); + return perms.getHandler().getGroup(player.getWorld().getName(), player.getName()); } - @Override - public String getGroupPrefix(String player) { - if (!load()) - return ""; - return perms.getHandler().getGroupPrefix(player); - } - @Override - public String getGroupSuffix(String player) { - if (!load()) - return ""; - return perms.getHandler().getGroupSuffix(player); - } - - @Override - public boolean canGroupBuild(String group) { - if (!load()) - return false; - return perms.getHandler().canGroupBuild(group); - } @Override public boolean inGroup(Player player, String group) { if (!load()) return false; - return perms.getHandler().inGroup(player.getName(), group); + return perms.getHandler().inGroup(player.getWorld().getName(), player.getName(), group); } @Override diff --git a/com/nidefawl/Stats/Permissions/PermissionsResolver.java b/com/nidefawl/Stats/Permissions/PermissionsResolver.java index 3017676..07eb2f8 100755 --- a/com/nidefawl/Stats/Permissions/PermissionsResolver.java +++ b/com/nidefawl/Stats/Permissions/PermissionsResolver.java @@ -9,16 +9,10 @@ public interface PermissionsResolver { public abstract boolean permission(CommandSender player, String permCmd); - public abstract String getGroup(String player); + public abstract String getGroup(Player player); public abstract boolean inGroup(Player player, String group); - public abstract String getGroupPrefix(String player); - - public abstract String getGroupSuffix(String player); - - public abstract boolean canGroupBuild(String group); - public abstract void reloadPerms(); } \ No newline at end of file diff --git a/com/nidefawl/Stats/Permissions/defaultResolver.java b/com/nidefawl/Stats/Permissions/defaultResolver.java index 7011f10..257620f 100755 --- a/com/nidefawl/Stats/Permissions/defaultResolver.java +++ b/com/nidefawl/Stats/Permissions/defaultResolver.java @@ -18,7 +18,7 @@ public class defaultResolver implements PermissionsResolver { } @Override - public String getGroup(String player) { + public String getGroup(Player player) { return ""; } @@ -27,21 +27,6 @@ public class defaultResolver implements PermissionsResolver { return false; } - @Override - public String getGroupPrefix(String player) { - return ""; - } - - @Override - public String getGroupSuffix(String player) { - return ""; - } - - @Override - public boolean canGroupBuild(String group) { - return false; - } - @Override public boolean load() { return true; diff --git a/com/nidefawl/Stats/Stats.java b/com/nidefawl/Stats/Stats.java index ea73506..eaea16f 100755 --- a/com/nidefawl/Stats/Stats.java +++ b/com/nidefawl/Stats/Stats.java @@ -4,20 +4,14 @@ import java.io.File; import java.io.FilenameFilter; import java.sql.Connection; import java.sql.DatabaseMetaData; -import java.sql.Date; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; -import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.HashMap; -import java.util.List; -import java.util.Set; import java.util.logging.Level; import java.util.logging.Logger; - import org.bukkit.ChatColor; -import org.bukkit.Location; import org.bukkit.block.Block; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; @@ -45,28 +39,22 @@ 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.972; + public final static double version = 0.985; 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 = 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 - * - * TODO: Remove when Bukkit has an updater that is working - */ - private Updater updater; + private HashMap stats = new HashMap(); + private itemResolver items = null; + private PermissionsResolver perms = null; + private StatsPlayerListener playerListener = null; + private StatsVehicleListener vehicleListener = null; + private StatsBlockListener blockListener = null; + private StatsEntityListener entityListener = null; + private StatsServerListener serverListener = null; + private Updater updater = null; /** * @return the Updater instance @@ -138,11 +126,44 @@ public class Stats extends JavaPlugin { } return result; } - - //check if new items already added - //if not then write them to file and update stat-keys in database - private void update2() { - + private void updateTimedStats(PlayerStat stat) { + if (playerListener.distWalked.containsKey(stat.getName())) { + int distance = (int) Math.floor(playerListener.distWalked.get(stat.getName())); + if (distance >= 1) { + Category cat = stat.categories.get("stats"); + if (cat == null) + cat = stat.newCategory("stats"); + cat.add("move", distance); + playerListener.distWalked.put(stat.getName(), 0.0f); + stat.setLastActivity(); + } + } + if (vehicleListener.distBoat.containsKey(stat.getName())) { + int distance = (int) Math.floor(vehicleListener.distBoat.get(stat.getName())); + if (distance >= 1) { + Category cat = stat.categories.get("boat"); + if (cat == null) + cat = stat.newCategory("boat"); + cat.add("move", distance); + vehicleListener.distBoat.put(stat.getName(), 0.0f); + stat.setLastActivity(); + } + } + if (vehicleListener.distCart.containsKey(stat.getName())) { + int distance = (int) Math.floor(vehicleListener.distCart.get(stat.getName())); + if (distance >= 1) { + Category cat = stat.categories.get("minecart"); + if (cat == null) + cat = stat.newCategory("minecart"); + cat.add("move", distance); + vehicleListener.distCart.put(stat.getName(), 0.0f); + stat.setLastActivity(); + } + } + if (StatsSettings.afkTimer > 0 && !stat.isAfk()) { + updateStat(stat.getName(), defaultCategory, "playedfor", (int) (System.currentTimeMillis() - stat.lastUpdate) / 1000, false); + } + stat.lastUpdate = System.currentTimeMillis(); } public void setSavedStats(CommandSender sender, String player, String category, String key, String value) { ArrayList tounload = new ArrayList(); @@ -247,7 +268,7 @@ public class Stats extends JavaPlugin { Messaging.send(player, StatsSettings.premessage + "No Playedtime yet!"); return true; } - Messaging.send(player, StatsSettings.premessage + "You played for "+ChatColor.WHITE + GetTimeString(playedFor)); + Messaging.send(player, StatsSettings.premessage + "You played for "+ChatColor.WHITE + StatsView.GetTimeString(playedFor)); return true; } } @@ -297,138 +318,13 @@ public class Stats extends JavaPlugin { 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) { - if(!Perms().permission(sender, "stats.view.others")) { - sender.sendMessage(ChatColor.RED + "You don't have permission to view others stats!"); - return true; - } - offs++; - } else { - if ((sender instanceof ConsoleCommandSender)) { - sender.sendMessage(ChatColor.RED + "Player '"+args[0]+"' is not online!"); - return false; - } else { - 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"); - int totalDestroy = get(who.getName(), "stats", "totalblockdestroy"); - int tkills = get(who.getName(), "kills", "total"); - int tdeaths = get(who.getName(), "deaths", "total"); - int pdeaths = get(who.getName(), "deaths", "player"); - int pkills = get(who.getName(), "kills", "player"); - int totalDamage = get(who.getName(), "damagetaken", "total"); - int totalDamageDealt = get(who.getName(), "damagedealt", "total"); - try { - 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 += 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 += 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 StatsView.onCommand(this, sender, args); } return false; } - 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 += ChatColor.WHITE + title1 + "/" + title2; - else - s1 += ChatColor.WHITE + title1; - while (MinecraftFontWidthCalculator.getStringWidth(sender,s1) < 240) - s1 += " "; - if (title2 != null) - s1 += value1 + "/" + value2; - else - s1 += value1; - sender.sendMessage(s1); - } - - 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")) { - statString = GetTimeString((int) statVal); - } - if (stat.equalsIgnoreCase("lastlogout") || stat.equalsIgnoreCase("lastlogin")) { - Date logDate = new Date(statVal * 1000); - SimpleDateFormat format = new SimpleDateFormat("dd-MMM-yy hh:mm"); - statString = format.format(logDate); - } - - sendTo.sendMessage(StatsSettings.premessage + cat + "/" + stat + ": " + ChatColor.WHITE + statString); - } - - public String GetTimeString(int Seconds) { - int days = (int) Math.ceil(Seconds / (24 * 3600)); - int hours = (int) Math.ceil((Seconds - (24 * 3600 * days)) / 3600); - int minutes = (int) Math.ceil((Seconds - (24 * 3600 * days + 3600 * hours)) / 60); - String timeString = ""; - timeString += days + "d " + hours + "h " + minutes + "m"; - return timeString; - } + public void CreatePermissionResolver() { @@ -569,7 +465,6 @@ public class Stats extends JavaPlugin { Update1.execute(this); Update2.execute(this); items = new hModItemResolver(new File(getDataFolder(),"items.txt")); - update2(); stats = new HashMap(); CreatePermissionResolver(); enabled = true; @@ -586,13 +481,7 @@ public class Stats extends JavaPlugin { getServer().getScheduler().scheduleSyncRepeatingTask(this, new SaveTask(this), StatsSettings.delay * 20, StatsSettings.delay * 20); } - public Player playerMatch(String name) { - List list = getServer().matchPlayer(name); - for (Player p : list) - if (p != null && p.getName().equalsIgnoreCase(name)) - return p; - return null; - } + public static class SaveTask implements Runnable { private Stats statsInstance; @@ -629,26 +518,42 @@ public class Stats extends JavaPlugin { } public void initialize() { + getServer().getPluginManager().registerEvent(Event.Type.PLUGIN_DISABLE, serverListener, Priority.Normal, this); + getServer().getPluginManager().registerEvent(Event.Type.PLUGIN_ENABLE, serverListener, Priority.Normal, this); getServer().getPluginManager().registerEvent(Event.Type.PLAYER_JOIN, playerListener, Priority.Highest, this); getServer().getPluginManager().registerEvent(Event.Type.PLAYER_COMMAND_PREPROCESS, playerListener, Priority.Normal, this); getServer().getPluginManager().registerEvent(Event.Type.PLAYER_QUIT, playerListener, Priority.Normal, this); getServer().getPluginManager().registerEvent(Event.Type.PLAYER_CHAT, playerListener, Priority.Monitor, this); - 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_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_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_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); + if(StatsSettings.logPlayerAnimations) { + getServer().getPluginManager().registerEvent(Event.Type.PLAYER_ANIMATION, playerListener, Priority.Monitor, this); + } + if(StatsSettings.logMove) { + getServer().getPluginManager().registerEvent(Event.Type.PLAYER_MOVE, playerListener, Priority.Monitor, this); + } + if(StatsSettings.logBlockCreate) { + getServer().getPluginManager().registerEvent(Event.Type.BLOCK_PLACE, blockListener, Priority.Monitor, this); + } + if(StatsSettings.logBlockDestroy) { + getServer().getPluginManager().registerEvent(Event.Type.BLOCK_BREAK, blockListener, Priority.Monitor, this); + } + if(StatsSettings.logItemUse) { + getServer().getPluginManager().registerEvent(Event.Type.PLAYER_INTERACT, playerListener, Priority.Monitor, this); + } + if(StatsSettings.logBlockIgnite){ + getServer().getPluginManager().registerEvent(Event.Type.BLOCK_IGNITE, blockListener, Priority.Monitor, this); + } + if(StatsSettings.logDamage) { + getServer().getPluginManager().registerEvent(Event.Type.ENTITY_DEATH, entityListener, Priority.Highest, this); + getServer().getPluginManager().registerEvent(Event.Type.ENTITY_DAMAGE, entityListener, Priority.Highest, this); + } + if(StatsSettings.logVehicle) { + getServer().getPluginManager().registerEvent(Event.Type.VEHICLE_ENTER, vehicleListener, Priority.Monitor, this); + getServer().getPluginManager().registerEvent(Event.Type.VEHICLE_MOVE, vehicleListener, Priority.Monitor, this); + } } public void updateStat(Player player, String statType, boolean resetAfkTimer) { @@ -690,7 +595,7 @@ public class Stats extends JavaPlugin { cat = ps.newCategory(category); cat.add(key, val); if (resetAfkTimer) - ps.setLastUpdate(); + ps.setLastActivity(); if (StatsSettings.debugOutput) log.info(logprefix + " [DEBUG]: adding " + val + " to " + category + "/" + key + " of " + player); } @@ -702,118 +607,6 @@ public class Stats extends JavaPlugin { ps.put(category, key, val); } - public boolean isCat(String player, String category) { - PlayerStat ps = stats.get(player); - if (ps == null) - return false; - Category cat = ps.get(category); - if (cat == null) - return false; - return true; - } - - String viewStats(String player, String stat) { - return stat; - - } - - public void updateMove(String player, Location from, Location to) { - if (!enabled) - return; - if (player == null || player.length() < 1) { - LogError("updateMove got empty player for " + player); - return; - } - PlayerStat ps = stats.get(player); - if (ps == null) - return; - ps.UpdateMove(from.toVector().distance(to.toVector())); - - } - - public void updateVehicleMove(String player, Vehicle vhc, Location from, Location to) { - if (!enabled) - return; - if (player == null || player.length() < 1) { - LogError("updateVehicleMove got empty player for " + player); - return; - } - PlayerStat ps = stats.get(player); - if (ps == null) - return; - double Distance = from.toVector().distance(to.toVector()); - if (vhc instanceof org.bukkit.entity.Boat) { - ps.UpdateBoatMove(Distance); - } else if (vhc instanceof org.bukkit.entity.Minecart) { - ps.UpdateMinecartMove(Distance); - } - } - - public String getCatEntries(String player, String category) { - PlayerStat ps = stats.get(player); - if (ps == null) - return "player not found"; - Set cats = ps.getCats(); - if (cats.size() == 0) - return "no categories founnd"; - - Category cat = ps.get(category); - if (cat == null) - return "category not found"; - Set entris = cat.getEntries(); - int length = (entris.size() - 1); - - int on = 0; - String list = ""; - for (String currentName : entris) { - if (currentName == null) { - ++on; - continue; - } - - list += (on >= length) ? currentName : currentName + ", "; - ++on; - } - list += " "; - return list; - } - - public String getCats(String player) { - PlayerStat ps = stats.get(player); - if (ps == null) - return "no categories found"; - Set cats = ps.getCats(); - if (cats.size() == 0) - return "no categories found"; - int length = (cats.size() - 1); - - int on = 0; - String list = ""; - for (String currentName : cats) { - if (currentName == null) { - ++on; - continue; - } - - list += (on >= length) ? currentName : currentName + ", "; - ++on; - } - list += " "; - return list; - } - - public boolean isStat(String player, String stat) { - PlayerStat ps = stats.get(player); - if (ps == null) - return false; - Category cat = ps.get("stats"); - if (cat == null) - return false; - if (cat.get(stat) == 0) - return false; - return true; - } - public int get(String player, String category, String key) { PlayerStat ps = stats.get(player); if (ps == null) @@ -840,7 +633,6 @@ public class Stats extends JavaPlugin { } PlayerStat ps = new PlayerStatSQL(player.getName(), this); ps.load(); - ps.skipTeleports = 2; stats.put(player.getName(), ps); if (StatsSettings.debugOutput) LogInfo("player " + player.getName() + " has been loaded."); @@ -850,6 +642,7 @@ public class Stats extends JavaPlugin { entityListener.UnloadPlayer(player); if (stats.containsKey(player)) { PlayerStat ps = stats.get(player); + updateTimedStats(ps); ps.save(); stats.remove(player); return; @@ -874,15 +667,11 @@ public class Stats extends JavaPlugin { e.printStackTrace(); } for (PlayerStat stat : stats.values()) { - if (stat == null || playerMatch(stat.getName()) == null) { + if (stat == null || getServer().getPlayer(stat.getName()) == null) { stat.unload = true; continue; } - if (StatsSettings.afkTimer > 0 && !stat.isAfk()) { - updateStat(stat.getName(), defaultCategory, "playedfor", (int) StatsSettings.delay, false); - } else if (StatsSettings.debugOutput) { - log.info("Stats debug: not updating playedfor for afk player " + stat.getName()); - } + updateTimedStats(stat); stat.save(false); } StatsSQLConnectionManager.closeConnection(StatsSettings.useMySQL); @@ -943,14 +732,20 @@ public class Stats extends JavaPlugin { } } - public void onLoad() { - - } - /** - * @param perms the perms to set - */ - public static void setPerms(PermissionsResolver perms) { - Stats.perms = perms; - } + public void setStats(HashMap stats) { + this.stats = stats; + } + + public HashMap getStats() { + return stats; + } + + public PermissionsResolver getPerms() { + return perms; + } + + public void setPerms(PermissionsResolver perms) { + this.perms = perms; + } } \ No newline at end of file diff --git a/com/nidefawl/Stats/StatsEntityListener.java b/com/nidefawl/Stats/StatsEntityListener.java index 663c6de..28d222a 100755 --- a/com/nidefawl/Stats/StatsEntityListener.java +++ b/com/nidefawl/Stats/StatsEntityListener.java @@ -281,7 +281,6 @@ public class StatsEntityListener extends EntityListener { PlayerStat ps = plugin.getPlayerStat(p.getName()); if (ps == null) return; - ps.skipTeleports = 1; plugin.updateStat(p, "deaths", "total", 1,false); String otherReason = otherDeathCauses.get(p); otherReason = otherReason != null ? otherReason : "unknown"; diff --git a/com/nidefawl/Stats/StatsPlayerListener.java b/com/nidefawl/Stats/StatsPlayerListener.java index 400960a..31bb900 100755 --- a/com/nidefawl/Stats/StatsPlayerListener.java +++ b/com/nidefawl/Stats/StatsPlayerListener.java @@ -1,13 +1,14 @@ package com.nidefawl.Stats; +import java.util.HashMap; 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; - public class StatsPlayerListener extends PlayerListener { + + public HashMap distWalked = new HashMap(); protected Stats plugin; public StatsPlayerListener(Stats plugin) { @@ -64,8 +65,12 @@ public class StatsPlayerListener extends PlayerListener { public void onPlayerMove(PlayerMoveEvent event) { if (event.isCancelled()) return; - plugin.updateMove(event.getPlayer().getName(), event.getFrom(), event.getTo()); - + if (distWalked.containsKey(event.getPlayer().getName())) { + float newDistance = distWalked.get(event.getPlayer().getName()) + (float) (event.getFrom().toVector().distance(event.getTo().toVector())); + distWalked.put(event.getPlayer().getName(), newDistance); + } else { + distWalked.put(event.getPlayer().getName(), (float) (event.getFrom().toVector().distance(event.getTo().toVector()))); + } } /** @@ -78,16 +83,8 @@ public class StatsPlayerListener extends PlayerListener { public void onPlayerTeleport(PlayerTeleportEvent event) { if (event.isCancelled()) return; - if (event.getTo().equals(event.getPlayer().getWorld().getSpawnLocation())) - return; - PlayerStat ps = plugin.getPlayerStat(event.getPlayer().getName()); - if (ps == null) - return; - if (ps.skipTeleports > 0) { - ps.skipTeleports--; - return; - } - plugin.updateStat(event.getPlayer(), "teleport", false); + if(event.getFrom().toVector().distance(event.getTo().toVector())>5) + plugin.updateStat(event.getPlayer(), "teleport", true); } /** diff --git a/com/nidefawl/Stats/StatsSettings.java b/com/nidefawl/Stats/StatsSettings.java index c3ce51e..399616e 100755 --- a/com/nidefawl/Stats/StatsSettings.java +++ b/com/nidefawl/Stats/StatsSettings.java @@ -20,6 +20,14 @@ public class StatsSettings { public static boolean useMySQL; public static String libPath; public static String premessage = ChatColor.YELLOW + "[Stats]" + ChatColor.WHITE; + public static boolean logMove; + public static boolean logVehicle; + public static boolean logBlockCreate; + public static boolean logBlockDestroy; + public static boolean logDamage; + public static boolean logItemUse; + public static boolean logBlockIgnite; + public static boolean logPlayerAnimations; public static void load(Stats plugin) { @@ -41,7 +49,15 @@ public class StatsSettings { premessage = properties.getString("stats-message-prefix", "&e[Stats]&f", ""); debugOutput = properties.getBoolean("stats-debug", false, ""); deathNotifying = properties.getBoolean("stats-deathnotify", true, ""); - autoUpdate = properties.getBoolean("stats-autoUpdate", true, ""); + autoUpdate = properties.getBoolean("stats-autoUpdate", false, ""); + logMove = properties.getBoolean("stats-log-move", true, "disable/enable logging player move events"); + logVehicle = properties.getBoolean("stats-log-vehicle", true, "disable/enable logging of vehicle events"); + logBlockCreate = properties.getBoolean("stats-log-blockcreate", true, "disable/enable logging blockcreate"); + logBlockDestroy = properties.getBoolean("stats-log-blockdestroy", true, "disable/enable logging blockdestroy"); + logDamage = properties.getBoolean("stats-log-damage-events", true, "disable/enable logging of damage AND death events"); + logItemUse = properties.getBoolean("stats-log-itemuse", true, "disable/enable logging of item use events"); + logBlockIgnite = properties.getBoolean("stats-log-block-ignite", true, "disable/enable logging of block ignite events"); + logPlayerAnimations = properties.getBoolean("stats-log-player-animations", true, "disable/enable logging of player-animations (armswing)"); if (premessage.length() > 0) if (premessage.charAt(premessage.length() - 1) != ' ') premessage += " "; diff --git a/com/nidefawl/Stats/StatsVehicleListener.java b/com/nidefawl/Stats/StatsVehicleListener.java index 59008dd..32ef9a1 100755 --- a/com/nidefawl/Stats/StatsVehicleListener.java +++ b/com/nidefawl/Stats/StatsVehicleListener.java @@ -1,5 +1,8 @@ package com.nidefawl.Stats; +import java.util.HashMap; +import org.bukkit.entity.Boat; +import org.bukkit.entity.Minecart; import org.bukkit.entity.Player; import org.bukkit.event.vehicle.*; @@ -10,7 +13,8 @@ import org.bukkit.event.vehicle.*; */ public class StatsVehicleListener extends VehicleListener { private Stats plugin; - + public HashMap distBoat = new HashMap(); + public HashMap distCart = new HashMap(); public StatsVehicleListener(Stats plugin) { this.plugin = plugin; } @@ -84,6 +88,21 @@ public class StatsVehicleListener extends VehicleListener { return; if (!(event.getVehicle().getPassenger() instanceof Player)) return; - plugin.updateVehicleMove(((Player) event.getVehicle().getPassenger()).getName(), event.getVehicle(), event.getFrom(), event.getTo()); + Player p = (Player) event.getVehicle().getPassenger(); + if(event.getVehicle() instanceof Boat) { + if(distBoat.containsKey(p.getName())) { + float newDistance = distBoat.get(p.getName()) + (float) (event.getFrom().toVector().distance(event.getTo().toVector())); + distBoat.put(p.getName(), newDistance); + } else { + distBoat.put(p.getName(), (float) (event.getFrom().toVector().distance(event.getTo().toVector()))); + } + } else if (event.getVehicle() instanceof Minecart) { + if(distBoat.containsKey(p.getName())) { + float newDistance = distBoat.get(p.getName()) + (float) (event.getFrom().toVector().distance(event.getTo().toVector())); + distBoat.put(p.getName(), newDistance); + } else { + distBoat.put(p.getName(), (float) (event.getFrom().toVector().distance(event.getTo().toVector()))); + } + } } } \ No newline at end of file diff --git a/com/nidefawl/Stats/datasource/PlayerStat.java b/com/nidefawl/Stats/datasource/PlayerStat.java index 8a580f5..a1f5708 100755 --- a/com/nidefawl/Stats/datasource/PlayerStat.java +++ b/com/nidefawl/Stats/datasource/PlayerStat.java @@ -3,23 +3,17 @@ package com.nidefawl.Stats.datasource; 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; public abstract class PlayerStat { + private String name; public HashMap categories; - static final Logger log = Logger.getLogger("Minecraft"); - private double moveDistance = 0; - private double minecartDistance = 0; - private double boatDistance = 0; private int lastBoatEnter = 0; private int lastMinecartEnter = 0; - private long lastUpdate = System.currentTimeMillis(); - public int skipTeleports = 0; - Block lastFace = null; + public long lastUpdate = System.currentTimeMillis(); public boolean unload = false; + private long lastActivity = System.currentTimeMillis(); public PlayerStat(String name) { this.name = name; @@ -48,7 +42,6 @@ public abstract class PlayerStat { cat = newCategory(category); else cat = categories.get(category); - cat.put(key, val); } @@ -61,7 +54,6 @@ public abstract class PlayerStat { PlayerStat psold = new PlayerStatFile(name, directory); psold.load(); copy(psold); - String location = directory + "/" + name + ".txt"; File fold = new File(location); File fnew = new File(location + ".bak"); @@ -74,42 +66,6 @@ public abstract class PlayerStat { public abstract void load(); - public void UpdateMove(double distance) { - moveDistance += distance; - if (moveDistance > 10.0F) { - Category cat = categories.get("stats"); - if (cat == null) - cat = newCategory("stats"); - cat.add("move", 10); - moveDistance = 0; - setLastUpdate(); - } - } - - public void UpdateMinecartMove(double distance) { - minecartDistance += distance; - if (minecartDistance >= 10.0F) { - Category cat = categories.get("minecart"); - if (cat == null) - cat = newCategory("minecart"); - cat.add("move", 10); - minecartDistance = 0; - setLastUpdate(); - } - } - - public void UpdateBoatMove(double distance) { - boatDistance += distance; - if (boatDistance >= 10.0F) { - Category cat = categories.get("boat"); - if (cat == null) - cat = newCategory("boat"); - cat.add("move", 10); - boatDistance = 0; - setLastUpdate(); - } - } - public void setLastMinecartEnter(int lastMinecartEnter) { this.lastMinecartEnter = lastMinecartEnter; } @@ -145,15 +101,14 @@ public abstract class PlayerStat { * @param lastUpdate * the lastUpdate to set */ - public void setLastUpdate() { - this.lastUpdate = System.currentTimeMillis(); - + public void setLastActivity() { + this.lastActivity = System.currentTimeMillis(); } /** * @return the lastUpdate */ public boolean isAfk() { - return System.currentTimeMillis() - lastUpdate > StatsSettings.afkTimer * 1000; + return System.currentTimeMillis() - lastActivity > StatsSettings.afkTimer * 1000; } } \ No newline at end of file diff --git a/com/nidefawl/Stats/datasource/PlayerStatSQL.java b/com/nidefawl/Stats/datasource/PlayerStatSQL.java index 758cb78..a480de2 100755 --- a/com/nidefawl/Stats/datasource/PlayerStatSQL.java +++ b/com/nidefawl/Stats/datasource/PlayerStatSQL.java @@ -1,14 +1,11 @@ package com.nidefawl.Stats.datasource; -import java.util.logging.Logger; import java.sql.*; import com.nidefawl.Stats.Stats; import com.nidefawl.Stats.StatsSettings; public class PlayerStatSQL extends PlayerStat { - static final Logger log = Logger.getLogger("Minecraft"); - public final String logprefix = "[Stats-" + Stats.version + "]"; Stats plugin = null; public PlayerStatSQL(String name, Stats plugin) { diff --git a/plugin.yml b/plugin.yml index ece6d68..6ffe305 100755 --- a/plugin.yml +++ b/plugin.yml @@ -1,6 +1,6 @@ name: Stats main: com.nidefawl.Stats.Stats -version: 0.972 +version: 0.985 author: nidefawl commands: stats: