This commit is contained in:
Your Name
2011-03-19 19:21:41 +01:00
parent 1feb62f90b
commit 4a82c6f6ea
24 changed files with 514 additions and 455 deletions

View File

@@ -1,24 +0,0 @@
package com.nidefawl.Stats.ItemResolver;
import org.bukkit.plugin.Plugin;
import com.nidefawl.MyGeneral.MyGeneral;
public class myGeneralItemResolver implements itemResolver {
public MyGeneral plugin;
public myGeneralItemResolver(Plugin plugin) {
this.plugin = (MyGeneral) plugin;
}
@Override
public int getItem(String name) {
return plugin.getDataSource().getItem(name);
}
@Override
public String getItem(int id) {
return plugin.getDataSource().getItem(id);
}
}

View File

@@ -1,6 +1,7 @@
package com.nidefawl.Stats; package com.nidefawl.Stats;
import org.bukkit.Server; import org.bukkit.Server;
import org.bukkit.World;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
/** /**
@@ -181,4 +182,17 @@ public class Messaging {
p.sendMessage(parse(message)); p.sendMessage(parse(message));
} }
} }
/**
* Brodcast a message to every player in given world.
*
* @param message
* - The message to be sent.
*/
public static void worldbroadcast(World world, String message) {
for (Player p : world.getPlayers()) {
p.sendMessage(parse(message));
}
}
} }

View File

@@ -17,6 +17,7 @@ public class GroupUserResolver implements PermissionsResolver {
check(); check();
} }
@Override
public boolean check() { public boolean check() {
if (perms == null) { if (perms == null) {
Plugin checkPlugin = plugin.getServer().getPluginManager().getPlugin("GroupUsers"); Plugin checkPlugin = plugin.getServer().getPluginManager().getPlugin("GroupUsers");
@@ -30,28 +31,34 @@ public class GroupUserResolver implements PermissionsResolver {
return true; return true;
} }
@Override
public boolean permission(Player player, String permCmd) { public boolean permission(Player player, String permCmd) {
if (!check()) if (!check())
return false; return false;
return perms.playerCanUseCommand(player, permCmd); return perms.playerCanUseCommand(player, permCmd);
} }
@Override
public String getGroup(String player) { public String getGroup(String player) {
return ""; return "";
} }
@Override
public String getGroupPrefix(String player) { public String getGroupPrefix(String player) {
return ""; return "";
} }
@Override
public String getGroupSuffix(String player) { public String getGroupSuffix(String player) {
return ""; return "";
} }
@Override
public boolean canGroupBuild(String group) { public boolean canGroupBuild(String group) {
return true; return true;
} }
@Override
public boolean inGroup(Player player, String group) { public boolean inGroup(Player player, String group) {
if (!check()) if (!check())
return false; return false;

View File

@@ -16,6 +16,7 @@ public class NijiPermissionsResolver implements PermissionsResolver {
check(); check();
} }
@Override
public boolean check() { public boolean check() {
if (perms == null) { if (perms == null) {
Plugin checkPlugin = plugin.getServer().getPluginManager().getPlugin("Permissions"); Plugin checkPlugin = plugin.getServer().getPluginManager().getPlugin("Permissions");
@@ -30,6 +31,7 @@ public class NijiPermissionsResolver implements PermissionsResolver {
return true; return true;
} }
@Override
public boolean permission(Player player, String permCmd) { public boolean permission(Player player, String permCmd) {
if (!check()) if (!check())
@@ -37,24 +39,28 @@ public class NijiPermissionsResolver implements PermissionsResolver {
return perms.getHandler().permission(player, permCmd); return perms.getHandler().permission(player, permCmd);
} }
@Override
public String getGroup(String player) { public String getGroup(String player) {
if (!check()) if (!check())
return ""; return "";
return perms.getHandler().getGroup(player); return perms.getHandler().getGroup(player);
} }
@Override
public String getGroupPrefix(String player) { public String getGroupPrefix(String player) {
if (!check()) if (!check())
return ""; return "";
return perms.getHandler().getGroupPrefix(player); return perms.getHandler().getGroupPrefix(player);
} }
@Override
public String getGroupSuffix(String player) { public String getGroupSuffix(String player) {
if (!check()) if (!check())
return ""; return "";
return perms.getHandler().getGroupSuffix(player); return perms.getHandler().getGroupSuffix(player);
} }
@Override
public boolean canGroupBuild(String group) { public boolean canGroupBuild(String group) {
if (!check()) if (!check())
return false; return false;

View File

@@ -69,7 +69,6 @@ public class PropertiesFile {
return false; return false;
} }
public void remove(String key) { public void remove(String key) {
map.remove(key); map.remove(key);
} }
@@ -125,6 +124,7 @@ public class PropertiesFile {
fwriter = new FileWriter(file); fwriter = new FileWriter(file);
bwriter = new BufferedWriter(fwriter); bwriter = new BufferedWriter(fwriter);
SortedSet<Map.Entry<String, PropertiesEntry>> results = new TreeSet<Map.Entry<String, PropertiesEntry>>(new Comparator<Map.Entry<String, PropertiesEntry>>() { SortedSet<Map.Entry<String, PropertiesEntry>> results = new TreeSet<Map.Entry<String, PropertiesEntry>>(new Comparator<Map.Entry<String, PropertiesEntry>>() {
@Override
public int compare(Map.Entry<String, PropertiesEntry> a, Map.Entry<String, PropertiesEntry> b) { public int compare(Map.Entry<String, PropertiesEntry> a, Map.Entry<String, PropertiesEntry> b) {
// int d = a.getValue().compareTo(b.getValue()); // int d = a.getValue().compareTo(b.getValue());
int d = a.getKey().compareTo(b.getKey()); int d = a.getKey().compareTo(b.getKey());

View File

@@ -28,10 +28,8 @@ import org.bukkit.event.Event;
import org.bukkit.plugin.Plugin; import org.bukkit.plugin.Plugin;
import org.bukkit.plugin.java.JavaPlugin; import org.bukkit.plugin.java.JavaPlugin;
import com.nidefawl.Achievements.Achievements;
import com.nidefawl.Stats.ItemResolver.hModItemResolver; import com.nidefawl.Stats.ItemResolver.hModItemResolver;
import com.nidefawl.Stats.ItemResolver.itemResolver; import com.nidefawl.Stats.ItemResolver.itemResolver;
import com.nidefawl.Stats.ItemResolver.myGeneralItemResolver;
import com.nidefawl.Stats.Permissions.GroupUserResolver; import com.nidefawl.Stats.Permissions.GroupUserResolver;
import com.nidefawl.Stats.Permissions.NijiPermissionsResolver; import com.nidefawl.Stats.Permissions.NijiPermissionsResolver;
import com.nidefawl.Stats.Permissions.PermissionsResolver; import com.nidefawl.Stats.Permissions.PermissionsResolver;
@@ -44,12 +42,13 @@ import com.nidefawl.Stats.util.Updater;
public class Stats extends JavaPlugin { public class Stats extends JavaPlugin {
public final static Logger log = Logger.getLogger("Minecraft"); public final static Logger log = Logger.getLogger("Minecraft");
public final static double version = 0.7; public final static double version = 0.8;
public final static String logprefix = "[Stats-" + version + "]"; public final static String logprefix = "[Stats-" + version + "]";
public final static String defaultCategory = "stats"; public final static String defaultCategory = "stats";
public boolean enabled = false; public boolean enabled = false;
public boolean updated = false; public boolean updated = false;
protected HashMap<String, PlayerStat> stats = new HashMap<String, PlayerStat>(); protected HashMap<String, PlayerStat> stats = new HashMap<String, PlayerStat>();
protected HashMap<String, Long> lastPlayerActivity = new HashMap<String, Long>();
protected itemResolver items = new hModItemResolver("items.txt"); protected itemResolver items = new hModItemResolver("items.txt");
private static PermissionsResolver perms = null; private static PermissionsResolver perms = null;
private static StatsPlayerListener playerListener; private static StatsPlayerListener playerListener;
@@ -175,6 +174,8 @@ public class Stats extends JavaPlugin {
rs.close(); rs.close();
if (ps != null) if (ps != null)
ps.close(); ps.close();
if (conn != null)
conn.close();
} catch (SQLException ex) { } catch (SQLException ex) {
log.log(Level.SEVERE, logprefix + " " + this.getClass().getName() + " SQL exception on close", ex); log.log(Level.SEVERE, logprefix + " " + this.getClass().getName() + " SQL exception on close", ex);
Messaging.send(admin, StatsSettings.premessage + ex.getMessage()); Messaging.send(admin, StatsSettings.premessage + ex.getMessage());
@@ -448,7 +449,6 @@ public class Stats extends JavaPlugin {
} }
public void convertFlatFiles() { public void convertFlatFiles() {
File dir = new File(StatsSettings.directory);
FilenameFilter filter = new FilenameFilter() { FilenameFilter filter = new FilenameFilter() {
public boolean accept(File dir, String name) { public boolean accept(File dir, String name) {
return name.endsWith(".txt"); return name.endsWith(".txt");
@@ -460,31 +460,29 @@ public class Stats extends JavaPlugin {
return name.endsWith(".txt.old"); return name.endsWith(".txt.old");
} }
}; };
String[] files = dir.list(filterOld); String[] files = getDataFolder().list(filterOld);
if (files != null && files.length > 0) { if (files != null && files.length > 0) {
for (int i = 0; i < files.length; i++) { for (int i = 0; i < files.length; i++) {
String location = StatsSettings.directory + File.separator + files[i];
String basename = files[i].substring(0, files[i].lastIndexOf(".")); String basename = files[i].substring(0, files[i].lastIndexOf("."));
File fnew = new File(location); File fnew = new File(getDataFolder(), files[i]);
File fold = new File(StatsSettings.directory + File.separator + basename); File fold = new File(getDataFolder(), basename);
fnew.renameTo(fold); fnew.renameTo(fold);
} }
} }
files = dir.list(filter); files = getDataFolder().list(filter);
if (files == null || files.length == 0) { if (files == null || files.length == 0) {
} }
int count = 0; int count = 0;
PlayerStatSQL ps; PlayerStatSQL ps;
for (int i = 0; i < files.length; i++) { for (int i = 0; i < files.length; i++) {
String location = StatsSettings.directory + File.separator + files[i]; File fold = new File(getDataFolder(), files[i]);
File fold = new File(location);
if (!fold.exists()) if (!fold.exists())
continue; continue;
String basename = files[i].substring(0, files[i].lastIndexOf(".")); String basename = files[i].substring(0, files[i].lastIndexOf("."));
ps = new PlayerStatSQL(basename, this); ps = new PlayerStatSQL(basename, this);
ps.convertFlatFile(StatsSettings.directory); ps.convertFlatFile(getDataFolder().getPath());
ps.save(); ps.save();
count++; count++;
} }
@@ -492,16 +490,35 @@ public class Stats extends JavaPlugin {
} }
public Stats() { public Stats() {
StatsSettings.initialize();
updater = new Updater(); }
public void onEnable() {
getDataFolder().mkdirs();
File statsDirectory = new File("stats");
if (statsDirectory.exists() && statsDirectory.isDirectory()) {
File intSettings = new File("stats", "internal.ini");
if (intSettings.exists()) {
intSettings.delete();
}
LogInfo("Moving ./stats/ directory to " + getDataFolder().getPath());
if (!statsDirectory.renameTo(new File(getDataFolder().getPath()))) {
LogError("Moving ./stats/ directory to " + getDataFolder().getPath() + " failed");
LogError("Please move your files manually and delete the old 'stats' directory. Thanks");
LogError("Disabling Stats");
getServer().getPluginManager().disablePlugin(this);
return;
}
}
StatsSettings.load(this);
updater = new Updater(this);
System.setProperty("org.sqlite.lib.path", updater.getOSSpecificFolder()); System.setProperty("org.sqlite.lib.path", updater.getOSSpecificFolder());
StatsSQLConnectionManager.getConnection();
try { try {
if (StatsSettings.autoUpdate) { if (StatsSettings.autoUpdate) {
updated = updater.checkDist(); updated = updater.checkDist();
updated |= updater.checkAchDist(); updated |= updater.checkAchDist();
if(updated) { if (updated) {
LogInfo("UPDATE INSTALLED. PLEASE RESTART...."); LogInfo("UPDATE INSTALLED. PLEASE RESTART....");
return; return;
} }
@@ -513,50 +530,27 @@ public class Stats extends JavaPlugin {
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
} }
try {
if (StatsSettings.useMySQL) {
Class.forName("com.mysql.jdbc.Driver");
} else {
Class.forName("org.sqlite.JDBC");
}
} catch (ClassNotFoundException e) {
LogError("JDBC driver for " + (StatsSettings.useMySQL ? "MySQL" : "SQLite") + " not found. Disabling Stats");
getServer().getPluginManager().disablePlugin(this);
e.printStackTrace();
return;
}
Connection conn = StatsSQLConnectionManager.getConnection(); Connection conn = StatsSQLConnectionManager.getConnection();
if (conn == null) { try {
if (conn == null || conn.isClosed()) {
LogError("Could not establish SQL connection. Disabling Stats"); LogError("Could not establish SQL connection. Disabling Stats");
getServer().getPluginManager().disablePlugin(this); getServer().getPluginManager().disablePlugin(this);
return; return;
} else {
try {
if (conn != null) {
conn.close();
} }
} catch (SQLException e) { } catch (SQLException e) {
LogError("Could not establish SQL connection. Disabling Stats");
e.printStackTrace(); e.printStackTrace();
getServer().getPluginManager().disablePlugin(this);
return; return;
} }
}
if (!checkSchema()) { if (!checkSchema()) {
LogError("Could not create table. Disabling Stats"); LogError("Could not create table. Disabling Stats");
getServer().getPluginManager().disablePlugin(this); getServer().getPluginManager().disablePlugin(this);
return; return;
} }
convertFlatFiles(); convertFlatFiles();
} if (updated)
return;
public void onEnable() {
if(updated) return;
if (new File("plugins/MyGeneral.jar").exists()) {
Plugin myPlug = this.getServer().getPluginManager().getPlugin("MyGeneral");
if (myPlug != null) {
LogInfo("Using MyGeneral Item Resolver");
setItems(new myGeneralItemResolver(myPlug));
}
}
stats = new HashMap<String, PlayerStat>(); stats = new HashMap<String, PlayerStat>();
CreatePermissionResolver(); CreatePermissionResolver();
enabled = true; enabled = true;
@@ -570,18 +564,7 @@ public class Stats extends JavaPlugin {
load(p); load(p);
} }
getServer().getScheduler().scheduleAsyncRepeatingTask(this, new SaveTask(this), StatsSettings.delay * 20, StatsSettings.delay * 20); getServer().getScheduler().scheduleSyncRepeatingTask(this, new SaveTask(this), StatsSettings.delay * 20, StatsSettings.delay * 20);
Plugin ach = this.getServer().getPluginManager().getPlugin("Achievements");
if(ach!=null) {
if(((Achievements)ach).enabled) {
((Achievements)ach).Disable();
} else if(!ach.isEnabled()) {
ach.onEnable();
}
((Achievements)ach).Enable();
}
} }
public Player playerMatch(String name) { public Player playerMatch(String name) {
@@ -608,22 +591,19 @@ public class Stats extends JavaPlugin {
} }
public void onDisable() { public void onDisable() {
if (enabled) {
saveAll(); saveAll();
Plugin ach = this.getServer().getPluginManager().getPlugin("Achievements");
if(ach!=null) {
if(((Achievements)ach).enabled) {
((Achievements)ach).Disable();
}
}
enabled = false; enabled = false;
getServer().getScheduler().cancelTasks(this); getServer().getScheduler().cancelTasks(this);
stats = null; stats = null;
updater.saveInternal(); updater.saveInternal();
StatsSQLConnectionManager.closeConnection();
}
log.info(logprefix + " " + version + " Plugin Disabled"); log.info(logprefix + " " + version + " Plugin Disabled");
} }
public void initialize() { public void initialize() {
getServer().getPluginManager().registerEvent(Event.Type.PLAYER_JOIN, playerListener, 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_COMMAND_PREPROCESS, playerListener, Priority.Normal, this);
getServer().getPluginManager().registerEvent(Event.Type.PLAYER_QUIT, 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_CHAT, playerListener, Priority.Monitor, this);
@@ -639,36 +619,36 @@ public class Stats extends JavaPlugin {
getServer().getPluginManager().registerEvent(Event.Type.BLOCK_INTERACT, blockListener, Priority.Monitor, this); getServer().getPluginManager().registerEvent(Event.Type.BLOCK_INTERACT, blockListener, Priority.Monitor, this);
getServer().getPluginManager().registerEvent(Event.Type.BLOCK_IGNITE, 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.BLOCK_BREAK, blockListener, Priority.Monitor, this);
getServer().getPluginManager().registerEvent(Event.Type.ENTITY_DEATH, entityListener, 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_DAMAGED, entityListener, Priority.Monitor, this);
getServer().getPluginManager().registerEvent(Event.Type.VEHICLE_ENTER, vehicleListener, Priority.Monitor, 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.VEHICLE_MOVE, vehicleListener, Priority.Monitor, this);
} }
public void updateStat(Player player, String statType) { public void updateStat(Player player, String statType, boolean resetAfkTimer) {
updateStat(player, statType, 1); updateStat(player, statType, 1, resetAfkTimer);
} }
public void updateStat(Player player, String statType, int num) { public void updateStat(Player player, String statType, int num, boolean resetAfkTimer) {
updateStat(player.getName(), defaultCategory, statType, num); updateStat(player.getName(), defaultCategory, statType, num, resetAfkTimer);
} }
public void updateStat(Player player, String statType, Block block) { public void updateStat(Player player, String statType, Block block, boolean resetAfkTimer) {
updateStat(player, statType, block, 1); updateStat(player, statType, block, 1, resetAfkTimer);
} }
public void updateStat(Player player, String statType, Block block, int num) { public void updateStat(Player player, String statType, Block block, int num, boolean resetAfkTimer) {
if (block.getTypeId() <= 0) if (block.getTypeId() <= 0)
return; return;
String blockName = getItems().getItem(block.getTypeId()); String blockName = getItems().getItem(block.getTypeId());
updateStat(player.getName(), statType, blockName, num); updateStat(player.getName(), statType, blockName, num, resetAfkTimer);
} }
public void updateStat(Player player, String category, String key, int val) { public void updateStat(Player player, String category, String key, int val, boolean resetAfkTimer) {
updateStat(player.getName(), category, key, val); updateStat(player.getName(), category, key, val, resetAfkTimer);
} }
public void updateStat(String player, String category, String key, int val) { public void updateStat(String player, String category, String key, int val, boolean resetAfkTimer) {
if (!enabled) if (!enabled)
return; return;
if (player == null || player.length() < 1) { if (player == null || player.length() < 1) {
@@ -683,30 +663,13 @@ public class Stats extends JavaPlugin {
if (cat == null) if (cat == null)
cat = ps.newCategory(category); cat = ps.newCategory(category);
cat.add(key, val); cat.add(key, val);
if (resetAfkTimer)
ps.setLastUpdate();
if (StatsSettings.debugOutput) if (StatsSettings.debugOutput)
log.info(logprefix + " [DEBUG]: adding " + val + " to " + category + "/" + key + " of " + player); log.info(logprefix + " [DEBUG]: adding " + val + " to " + category + "/" + key + " of " + player);
} }
public void updateStatUnsafe(String player, String category, String key, int val) { public void setStat(String player, String category, String key, int val) {
if (!enabled)
return;
if (player == null || player.length() < 1) {
log.log(Level.SEVERE, logprefix + " updateStat got empty player for [" + category + "] [" + key + "] [" + val + "]");
return;
}
PlayerStat ps = stats.get(player);
if (ps == null)
return;
Category cat = ps.get(category);
if (cat == null)
cat = ps.newCategory(category);
cat.addUnsafe(key, val);
if (StatsSettings.debugOutput)
log.info(logprefix + " [DEBUG]: adding " + val + " to " + category + "/" + key + " of " + player + " without touching modifed flag");
}
protected void setStat(String player, String category, String key, int val) {
PlayerStat ps = stats.get(player); PlayerStat ps = stats.get(player);
if (ps == null) if (ps == null)
return; return;
@@ -867,17 +830,36 @@ public class Stats extends JavaPlugin {
} }
} }
private void saveAll() { public boolean isAfk(Player p) {
if (!stats.containsKey(p.getName()))
return false;
return stats.get(p.getName()).isAfk();
}
private synchronized void saveAll() {
if (StatsSettings.debugOutput) if (StatsSettings.debugOutput)
log.info("Stats debug: saving " + stats.size() + " players stats"); log.info("Stats debug: saving " + stats.size() + " players stats");
try {
Connection conn = StatsSQLConnectionManager.getConnection();
if (conn == null)
return;
conn.setAutoCommit(false);
} catch (SQLException e) {
e.printStackTrace();
}
for (PlayerStat stat : stats.values()) { for (PlayerStat stat : stats.values()) {
if (stat == null || playerMatch(stat.getName()) == null) { if (stat == null || playerMatch(stat.getName()) == null) {
stat.unload = true; stat.unload = true;
continue; continue;
} }
updateStat(stat.getName(), defaultCategory, "playedfor", (int) StatsSettings.delay); if (StatsSettings.afkTimer > 0 && !stat.isAfk()) {
stat.save(); 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());
} }
stat.save(false);
}
StatsSQLConnectionManager.closeConnection();
for (PlayerStat stat : stats.values()) { for (PlayerStat stat : stats.values()) {
if (!stat.unload) if (!stat.unload)
continue; continue;
@@ -893,10 +875,6 @@ public class Stats extends JavaPlugin {
public itemResolver getItems() { public itemResolver getItems() {
if (items == null) { if (items == null) {
Plugin myPlug = this.getServer().getPluginManager().getPlugin("MyGeneral");
if (myPlug != null) {
setItems(new myGeneralItemResolver(myPlug));
} else
setItems(new hModItemResolver("items.txt")); setItems(new hModItemResolver("items.txt"));
} }
return items; return items;
@@ -906,7 +884,7 @@ public class Stats extends JavaPlugin {
int lastLog = get(player.getName(), defaultCategory, "lastlogin"); int lastLog = get(player.getName(), defaultCategory, "lastlogin");
int now = (int) (System.currentTimeMillis() / 1000L); int now = (int) (System.currentTimeMillis() / 1000L);
if (now - lastLog > StatsSettings.loginRateLimit) { if (now - lastLog > StatsSettings.loginRateLimit) {
updateStat(player, "login"); updateStat(player, "login", true);
} }
setStat(player.getName(), defaultCategory, "lastlogin", now); setStat(player.getName(), defaultCategory, "lastlogin", now);
} }
@@ -930,16 +908,21 @@ public class Stats extends JavaPlugin {
if (vhc instanceof org.bukkit.entity.Boat) { if (vhc instanceof org.bukkit.entity.Boat) {
if (now - ps.getLastBoatEnter() > 60) { if (now - ps.getLastBoatEnter() > 60) {
updateStat(player, "boat", "enter", 1); updateStat(player, "boat", "enter", 1, true);
ps.setLastBoatEnter(now); ps.setLastBoatEnter(now);
} }
} else if (vhc instanceof org.bukkit.entity.Minecart) { } else if (vhc instanceof org.bukkit.entity.Minecart) {
if (now - ps.getLastMinecartEnter() > 60) { if (now - ps.getLastMinecartEnter() > 60) {
updateStat(player, "minecart", "enter", 1); updateStat(player, "minecart", "enter", 1, true);
ps.setLastMinecartEnter(now); ps.setLastMinecartEnter(now);
} }
} }
} }
public void onLoad() {
// TODO Auto-generated method stub
}
} }

View File

@@ -66,8 +66,8 @@ public class StatsBlockListener extends BlockListener {
return; return;
if (!(event.getPlayer() instanceof Player)) if (!(event.getPlayer() instanceof Player))
return; return;
plugin.updateStat(event.getPlayer(), "blockdestroy", event.getBlock()); plugin.updateStat(event.getPlayer(), "blockdestroy", event.getBlock(), true);
plugin.updateStat(event.getPlayer(), "totalblockdestroy"); plugin.updateStat(event.getPlayer(), "totalblockdestroy", true);
} }
/** /**
@@ -99,7 +99,7 @@ public class StatsBlockListener extends BlockListener {
return; return;
if (!(event.getPlayer() instanceof Player)) if (!(event.getPlayer() instanceof Player))
return; return;
plugin.updateStat(event.getPlayer(), "lighter"); plugin.updateStat(event.getPlayer(), "lighter", true);
} }
@@ -125,8 +125,8 @@ public class StatsBlockListener extends BlockListener {
return; return;
if (!(event.getPlayer() instanceof Player)) if (!(event.getPlayer() instanceof Player))
return; return;
plugin.updateStat(event.getPlayer(), "blockcreate", event.getBlockPlaced()); plugin.updateStat(event.getPlayer(), "blockcreate", event.getBlockPlaced(), true);
plugin.updateStat(event.getPlayer(), "totalblockcreate"); plugin.updateStat(event.getPlayer(), "totalblockcreate", true);
} }
/** /**
@@ -142,7 +142,7 @@ public class StatsBlockListener extends BlockListener {
if (!event.isPlayer()) if (!event.isPlayer())
return; return;
if (event.getBlock().getType() == Material.CHEST) { if (event.getBlock().getType() == Material.CHEST) {
plugin.updateStat((Player) event.getEntity(), "openchest"); plugin.updateStat((Player) event.getEntity(), "openchest", true);
} }
} }

View File

@@ -46,7 +46,7 @@ public class StatsEntityListener extends EntityListener {
break; break;
} }
} }
if(res!=null) { if (res != null) {
if (setNull) { if (setNull) {
entsKilledByEnt.get(res).remove(entity); entsKilledByEnt.get(res).remove(entity);
if (entsKilledByEnt.get(res).size() == 0) if (entsKilledByEnt.get(res).size() == 0)
@@ -118,25 +118,27 @@ public class StatsEntityListener extends EntityListener {
entsKilledByEnt.put(damager, ents); entsKilledByEnt.put(damager, ents);
} }
} }
public String getNiceDamageString(String cause) { public String getNiceDamageString(String cause) {
if(cause.equals("fire")) if (cause.equals("fire"))
return "burned to death"; return "burned to death";
if(cause.equals("fall")) if (cause.equals("fall"))
return "died by falling down a cliff"; return "died by falling down a cliff";
if(cause.equals("drowning")) if (cause.equals("drowning"))
return "died by 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"; return "was hit by an explosion";
if(cause.equals("lava")) if (cause.equals("lava"))
return "had a bath in lava"; return "had a bath in lava";
if(cause.equals("suffocation")) if (cause.equals("suffocation"))
return "suffocated"; return "suffocated";
if(cause.equals("entityattack")) if (cause.equals("entityattack"))
return "was hunt down by some creature"; return "was hunt down by some creature";
if(cause.equals("unknown")) if (cause.equals("unknown"))
return "was killed by Herobrine"; return "was killed by Herobrine";
return "was killed by "+cause.toLowerCase(); return "was killed by " + cause.toLowerCase();
} }
private void checkOtherDamage(EntityDamageEvent event) { private void checkOtherDamage(EntityDamageEvent event) {
if (event.getEntity() instanceof Player) { if (event.getEntity() instanceof Player) {
String cause = "unknown"; String cause = "unknown";
@@ -176,8 +178,8 @@ public class StatsEntityListener extends EntityListener {
default: default:
cause = "unknown"; cause = "unknown";
} }
plugin.updateStat((Player) event.getEntity(), "damagetaken", cause, event.getDamage()); plugin.updateStat((Player) event.getEntity(), "damagetaken", cause, event.getDamage(), false);
plugin.updateStat((Player) event.getEntity(), "damagetaken", "total", event.getDamage()); 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())) { if (event.getDamage() >= ((Player) event.getEntity()).getHealth() && plugin.stats.keySet().contains(((Player) event.getEntity()).getName())) {
otherDeathCauses.put((Player) event.getEntity(), cause); otherDeathCauses.put((Player) event.getEntity(), cause);
} }
@@ -185,6 +187,7 @@ public class StatsEntityListener extends EntityListener {
} }
} }
public void sendEntList(Player player) { public void sendEntList(Player player) {
int LoadedEnts = 0; int LoadedEnts = 0;
int nullEnts = 0; int nullEnts = 0;
@@ -203,7 +206,7 @@ public class StatsEntityListener extends EntityListener {
if (ee instanceof Player) if (ee instanceof Player)
entsList += ((Player) ee).getName() + ", "; entsList += ((Player) ee).getName() + ", ";
else else
entsList += StatsEntityListener.EntToString(ee) + " (" + ee.getEntityId() + ","+((LivingEntity)ee).getHealth()+"), "; entsList += StatsEntityListener.EntToString(ee) + " (" + ee.getEntityId() + "," + ((LivingEntity) ee).getHealth() + "), ";
} }
if (entsList.length() > 2) if (entsList.length() > 2)
@@ -224,14 +227,14 @@ public class StatsEntityListener extends EntityListener {
String typeName = null; String typeName = null;
if ((damager instanceof Player) && (entity instanceof Player)) { if ((damager instanceof Player) && (entity instanceof Player)) {
typeName = "Player"; typeName = "Player";
if(((LivingEntity) entity).getHealth()>0 ) { if (((LivingEntity) entity).getHealth() > 0) {
StatsPlayerDamagedPlayerEvent damageevent = new StatsPlayerDamagedPlayerEvent((Player)damager,(Player)entity,amount); StatsPlayerDamagedPlayerEvent damageevent = new StatsPlayerDamagedPlayerEvent((Player) damager, (Player) entity, amount);
plugin.getServer().getPluginManager().callEvent(damageevent); plugin.getServer().getPluginManager().callEvent(damageevent);
if(damageevent.isCancelled()) { if (damageevent.isCancelled()) {
return false; return false;
} }
plugin.updateStat((Player) damager, "damagedealt", typeName, amount); plugin.updateStat((Player) damager, "damagedealt", typeName, amount, false);
plugin.updateStat((Player) entity, "damagetaken", typeName, amount); plugin.updateStat((Player) entity, "damagetaken", typeName, amount, false);
if (amount >= ((LivingEntity) entity).getHealth() && plugin.stats.keySet().contains(((Player) damager).getName())) { if (amount >= ((LivingEntity) entity).getHealth() && plugin.stats.keySet().contains(((Player) damager).getName())) {
if (getEntFromEnt(entity, false) == null) if (getEntFromEnt(entity, false) == null)
saveEntToEnt(damager, entity); saveEntToEnt(damager, entity);
@@ -242,13 +245,13 @@ public class StatsEntityListener extends EntityListener {
if (damager instanceof Player) { if (damager instanceof Player) {
typeName = EntToString(entity); typeName = EntToString(entity);
if (!(entity instanceof LivingEntity)) { if (!(entity instanceof LivingEntity)) {
plugin.updateStat((Player) damager, "damagedealt", typeName, amount); plugin.updateStat((Player) damager, "damagedealt", typeName, amount, false);
plugin.updateStat((Player) damager, "damagedealt", "total", amount); plugin.updateStat((Player) damager, "damagedealt", "total", amount, false);
return true; return true;
} else { } else {
if (((LivingEntity) entity).getHealth() > 0) { if (((LivingEntity) entity).getHealth() > 0) {
plugin.updateStat((Player) damager, "damagedealt", typeName, amount); plugin.updateStat((Player) damager, "damagedealt", typeName, amount, false);
plugin.updateStat((Player) damager, "damagedealt", "total", amount); plugin.updateStat((Player) damager, "damagedealt", "total", amount, false);
if (amount >= ((LivingEntity) entity).getHealth() && plugin.stats.keySet().contains(((Player) damager).getName())) { if (amount >= ((LivingEntity) entity).getHealth() && plugin.stats.keySet().contains(((Player) damager).getName())) {
if (getEntFromEnt(entity, false) == null) if (getEntFromEnt(entity, false) == null)
saveEntToEnt(damager, entity); saveEntToEnt(damager, entity);
@@ -256,13 +259,12 @@ public class StatsEntityListener extends EntityListener {
} }
} }
} }
if (entity instanceof Player) { if (entity instanceof Player) {
typeName = EntToString(damager); typeName = EntToString(damager);
if (((LivingEntity) entity).getHealth() > 0) { if (((LivingEntity) entity).getHealth() > 0) {
plugin.updateStat((Player) entity, "damagetaken", typeName, amount); plugin.updateStat((Player) entity, "damagetaken", typeName, amount, false);
plugin.updateStat((Player) entity, "damagetaken", "total", amount); plugin.updateStat((Player) entity, "damagetaken", "total", amount, false);
if (amount >= ((Player) entity).getHealth() && plugin.stats.keySet().contains(((Player) entity).getName())) { if (amount >= ((Player) entity).getHealth() && plugin.stats.keySet().contains(((Player) entity).getName())) {
if (getEntFromEnt(entity, false) == null) if (getEntFromEnt(entity, false) == null)
saveEntToEnt(damager, entity); saveEntToEnt(damager, entity);
@@ -286,44 +288,46 @@ public class StatsEntityListener extends EntityListener {
if (ps == null) if (ps == null)
return; return;
ps.skipTeleports = 1; ps.skipTeleports = 1;
plugin.updateStat(p, "deaths", "total", 1); plugin.updateStat(p, "deaths", "total", 1, false);
String otherReason = otherDeathCauses.get(p); String otherReason = otherDeathCauses.get(p);
otherReason = otherReason != null ? otherReason : "unknown"; otherReason = otherReason != null ? otherReason : "unknown";
if (StatsSettings.deathNotifying) { if (StatsSettings.deathNotifying) {
String name = p.getDisplayName();
String message = name + " &4died";
if (e instanceof Player) { if (e instanceof Player) {
plugin.updateStat(((Player) e), "kills", "total", 1, false);
plugin.updateStat(((Player) e), "kills", "total", 1); plugin.updateStat(((Player) e), "kills", "player", 1, false);
plugin.updateStat(((Player) e), "kills", "player", 1); message = name + " &4was killed by &8" + ((Player) e).getDisplayName();
Messaging.broadcast(plugin.getServer(), p.getName() + " &4was killed by &8" + ((Player) e).getName());
} else if (e instanceof LivingEntity) { } else if (e instanceof LivingEntity) {
Messaging.broadcast(plugin.getServer(), p.getName() + " &4was killed by &8" + EntToString(e)); message = name + " &4was killed by &8" + EntToString(e);
} else if (otherReason != null) { } else if (otherReason != null) {
Messaging.broadcast(plugin.getServer(), p.getName() + " &4"+getNiceDamageString(otherReason)); message = name + " &4" + getNiceDamageString(otherReason);
} else { } else {
Messaging.broadcast(plugin.getServer(), p.getName() + " &4died"); message = name + " &4died";
} }
Messaging.worldbroadcast(event.getEntity().getWorld(), message);
} }
if (e instanceof LivingEntity) { if (e instanceof LivingEntity) {
plugin.updateStat(p, "deaths", EntToString(e), 1); plugin.updateStat(p, "deaths", EntToString(e), 1, false);
if(e instanceof Player) { if (e instanceof Player) {
StatsPlayerDeathByPlayerEvent ev = new StatsPlayerDeathByPlayerEvent((Player)event.getEntity(),(Player)e); StatsPlayerDeathByPlayerEvent ev = new StatsPlayerDeathByPlayerEvent(event, (Player) event.getEntity(), (Player) e);
plugin.getServer().getPluginManager().callEvent(ev); plugin.getServer().getPluginManager().callEvent(ev);
} else { } else {
StatsPlayerDeathByEntityEvent ev = new StatsPlayerDeathByEntityEvent((Player)event.getEntity(),e); StatsPlayerDeathByEntityEvent ev = new StatsPlayerDeathByEntityEvent(event, (Player) event.getEntity(), e);
plugin.getServer().getPluginManager().callEvent(ev); plugin.getServer().getPluginManager().callEvent(ev);
} }
} else if (otherReason != null) { } else if (otherReason != null) {
plugin.updateStat(p, "deaths", otherReason, 1); plugin.updateStat(p, "deaths", otherReason, 1, false);
StatsPlayerDeathByOtherEvent ev = new StatsPlayerDeathByOtherEvent((Player)event.getEntity(),otherReason); StatsPlayerDeathByOtherEvent ev = new StatsPlayerDeathByOtherEvent(event, (Player) event.getEntity(), otherReason);
plugin.getServer().getPluginManager().callEvent(ev); plugin.getServer().getPluginManager().callEvent(ev);
} }
otherDeathCauses.remove(p); otherDeathCauses.remove(p);
} else if (event.getEntity() instanceof LivingEntity) { } else if (event.getEntity() instanceof LivingEntity) {
if (e instanceof Player) { if (e instanceof Player) {
plugin.updateStat((Player) e, "kills", "total", 1); plugin.updateStat((Player) e, "kills", "total", 1, false);
plugin.updateStat((Player) e, "kills", EntToString(event.getEntity()), 1); plugin.updateStat((Player) e, "kills", EntToString(event.getEntity()), 1, false);
StatsMobDeathByPlayerEvent ev = new StatsMobDeathByPlayerEvent((Player)e,event.getEntity()); StatsMobDeathByPlayerEvent ev = new StatsMobDeathByPlayerEvent(event, (Player) e, event.getEntity());
plugin.getServer().getPluginManager().callEvent(ev); plugin.getServer().getPluginManager().callEvent(ev);
} }
entsKilledByEnt.remove(e); entsKilledByEnt.remove(e);
@@ -331,8 +335,6 @@ public class StatsEntityListener extends EntityListener {
entsKilledByEnt.remove(event.getEntity()); entsKilledByEnt.remove(event.getEntity());
} }
@Override @Override
public void onEntityCombust(EntityCombustEvent event) { public void onEntityCombust(EntityCombustEvent event) {
@@ -342,18 +344,16 @@ public class StatsEntityListener extends EntityListener {
public void onEntityDamage(EntityDamageEvent event) { public void onEntityDamage(EntityDamageEvent event) {
if (event.isCancelled()) if (event.isCancelled())
return; return;
if(event instanceof EntityDamageByProjectileEvent) { if (event instanceof EntityDamageByProjectileEvent) {
if(!checkEntDamage(event.getEntity(), ((EntityDamageByProjectileEvent)event).getDamager(), event.getDamage())) { if (!checkEntDamage(event.getEntity(), ((EntityDamageByProjectileEvent) event).getDamager(), event.getDamage())) {
event.setCancelled(true); event.setCancelled(true);
return;
} }
} else if(event instanceof EntityDamageByEntityEvent) { } else if (event instanceof EntityDamageByEntityEvent) {
if(!checkEntDamage(((EntityDamageByEntityEvent)event).getEntity(), ((EntityDamageByEntityEvent)event).getDamager(), event.getDamage())) { if (!checkEntDamage(((EntityDamageByEntityEvent) event).getEntity(), ((EntityDamageByEntityEvent) event).getDamager(), event.getDamage())) {
event.setCancelled(true); event.setCancelled(true);
return;
} }
} else if(event instanceof EntityDamageByBlockEvent) { } else if (event instanceof EntityDamageByBlockEvent) {
checkOtherDamage((EntityDamageByBlockEvent)event); checkOtherDamage((EntityDamageByBlockEvent) event);
} else { } else {
checkOtherDamage(event); checkOtherDamage(event);
} }

View File

@@ -36,8 +36,8 @@ public class StatsPlayerListener extends PlayerListener {
public void onPlayerChat(PlayerChatEvent event) { public void onPlayerChat(PlayerChatEvent event) {
if (event.isCancelled()) if (event.isCancelled())
return; return;
plugin.updateStat(event.getPlayer(), "chat"); plugin.updateStat(event.getPlayer(), "chat", true);
plugin.updateStat(event.getPlayer(), "chatletters", event.getMessage().length()); plugin.updateStat(event.getPlayer(), "chatletters", event.getMessage().length(), true);
} }
/** /**
@@ -50,7 +50,7 @@ public class StatsPlayerListener extends PlayerListener {
public void onPlayerCommandPreprocess(PlayerChatEvent event) { public void onPlayerCommandPreprocess(PlayerChatEvent event) {
if (event.isCancelled()) if (event.isCancelled())
return; return;
plugin.updateStat(event.getPlayer(), "command"); plugin.updateStat(event.getPlayer(), "command", true);
} }
/** /**
@@ -82,11 +82,11 @@ public class StatsPlayerListener extends PlayerListener {
PlayerStat ps = plugin.stats.get(event.getPlayer().getName()); PlayerStat ps = plugin.stats.get(event.getPlayer().getName());
if (ps == null) if (ps == null)
return; return;
if (ps.skipTeleports>0) { if (ps.skipTeleports > 0) {
ps.skipTeleports--; ps.skipTeleports--;
return; return;
} }
plugin.updateStat(event.getPlayer(), "teleport"); plugin.updateStat(event.getPlayer(), "teleport", false);
} }
/** /**
@@ -97,7 +97,7 @@ public class StatsPlayerListener extends PlayerListener {
*/ */
@Override @Override
public void onPlayerItem(PlayerItemEvent event) { public void onPlayerItem(PlayerItemEvent event) {
if (event.isCancelled()||event.getBlockFace()==null) if (event.isCancelled() || event.getBlockFace() == null)
return; return;
switch (event.getMaterial()) { switch (event.getMaterial()) {
case LAVA_BUCKET: case LAVA_BUCKET:
@@ -107,7 +107,7 @@ public class StatsPlayerListener extends PlayerListener {
case CAKE_BLOCK: case CAKE_BLOCK:
case FLINT_AND_STEEL: case FLINT_AND_STEEL:
case TNT: case TNT:
plugin.updateStat(event.getPlayer(), "itemuse", plugin.getItems().getItem(event.getMaterial().getId()), 1); plugin.updateStat(event.getPlayer(), "itemuse", plugin.getItems().getItem(event.getMaterial().getId()), 1, false);
break; break;
default: default:
break; break;
@@ -136,7 +136,7 @@ public class StatsPlayerListener extends PlayerListener {
@Override @Override
public void onPlayerAnimation(PlayerAnimationEvent event) { public void onPlayerAnimation(PlayerAnimationEvent event) {
if (event.getAnimationType() == PlayerAnimationType.ARM_SWING && event.getPlayer().getItemInHand().getType() == Material.AIR) { if (event.getAnimationType() == PlayerAnimationType.ARM_SWING && event.getPlayer().getItemInHand().getType() == Material.AIR) {
plugin.updateStat(event.getPlayer(), "armswing"); plugin.updateStat(event.getPlayer(), "armswing", false);
} }
} }
@@ -148,7 +148,7 @@ public class StatsPlayerListener extends PlayerListener {
*/ */
@Override @Override
public void onPlayerEggThrow(PlayerEggThrowEvent event) { public void onPlayerEggThrow(PlayerEggThrowEvent event) {
plugin.updateStat(event.getPlayer(), "eggthrow"); plugin.updateStat(event.getPlayer(), "eggthrow", false);
} }
/** /**
@@ -159,10 +159,14 @@ public class StatsPlayerListener extends PlayerListener {
*/ */
@Override @Override
public void onPlayerDropItem(PlayerDropItemEvent event) { public void onPlayerDropItem(PlayerDropItemEvent event) {
if(event.getItemDrop()==null) return; if (event.isCancelled())
return;
if (event.getItemDrop() == null)
return;
if (event.getItemDrop() instanceof CraftItem) { if (event.getItemDrop() instanceof CraftItem) {
if(((CraftItem)event.getItemDrop()).getItemStack() == null) return; if (((CraftItem) event.getItemDrop()).getItemStack() == null)
plugin.updateStat(event.getPlayer(), "itemdrop", plugin.getItems().getItem(((CraftItem)event.getItemDrop()).getItemStack().getTypeId()), 1); return;
plugin.updateStat(event.getPlayer(), "itemdrop", plugin.getItems().getItem(((CraftItem) event.getItemDrop()).getItemStack().getTypeId()), 1, false);
} }
} }
@@ -177,7 +181,7 @@ public class StatsPlayerListener extends PlayerListener {
public void onPlayerKick(PlayerKickEvent event) { public void onPlayerKick(PlayerKickEvent event) {
if (event.isCancelled()) if (event.isCancelled())
return; return;
plugin.updateStat(event.getPlayer(), "kick"); plugin.updateStat(event.getPlayer(), "kick", false);
} }
/** /**
@@ -188,7 +192,7 @@ public class StatsPlayerListener extends PlayerListener {
*/ */
@Override @Override
public void onPlayerRespawn(PlayerRespawnEvent event) { public void onPlayerRespawn(PlayerRespawnEvent event) {
plugin.updateStat(event.getPlayer(), "respawn"); plugin.updateStat(event.getPlayer(), "respawn", false);
} }
/** /**
@@ -209,10 +213,14 @@ public class StatsPlayerListener extends PlayerListener {
*/ */
@Override @Override
public void onPlayerPickupItem(PlayerPickupItemEvent event) { public void onPlayerPickupItem(PlayerPickupItemEvent event) {
if(event.getItem()==null) return; if (event.isCancelled())
return;
if (event.getItem() == null)
return;
if (event.getItem() instanceof CraftItem) { if (event.getItem() instanceof CraftItem) {
if(((CraftItem)event.getItem()).getItemStack() == null) return; if (((CraftItem) event.getItem()).getItemStack() == null)
plugin.updateStat(event.getPlayer(), "itempickup", plugin.getItems().getItem(((CraftItem)event.getItem()).getItemStack().getTypeId()), 1); return;
plugin.updateStat(event.getPlayer(), "itempickup", plugin.getItems().getItem(((CraftItem) event.getItem()).getItemStack().getTypeId()), 1, false);
} }
} }

View File

@@ -4,14 +4,12 @@ import java.io.File;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
public class StatsSettings { public class StatsSettings {
public static String directory = "stats";
public static String liteDb; public static String liteDb;
public static int loginRateLimit = 3600; public static int loginRateLimit = 3600;
public static long delay = 30; public static long delay = 30;
public static long afkTimer = 300;
public static String dbUrl; public static String dbUrl;
public static String dbUsername; public static String dbUsername;
public static String dbPassword; public static String dbPassword;
@@ -23,33 +21,18 @@ public class StatsSettings {
public static String libPath; public static String libPath;
public static String premessage = ChatColor.YELLOW + "[Stats]" + ChatColor.WHITE; public static String premessage = ChatColor.YELLOW + "[Stats]" + ChatColor.WHITE;
public static void initialize() { public static void load(Stats plugin) {
if (!new File(directory).exists()) {
try {
(new File(directory)).mkdir();
} catch (Exception ex) {
Stats.LogError("Unable to create " + directory + " directory");
}
Stats.LogInfo("directory '" + directory + "' created!");
Stats.LogInfo("make sure to check stats/stats.properties and mysql.properties ");
}
liteDb = "jdbc:sqlite:" + directory + File.separator + "stats.db";
loadPropertiesFiles();
}
public static void onDisable() { PropertiesFile properties = new PropertiesFile(new File(plugin.getDataFolder(), "stats.properties"));
} liteDb = "jdbc:sqlite:" + plugin.getDataFolder().getPath() + File.separator + "stats.db";
delay = properties.getInt("stats-save-delay", 30, "delay between automatic saving (seconds)");
private static void loadPropertiesFiles() {
PropertiesFile properties = new PropertiesFile(new File(directory + File.separator + "stats.properties"));
delay = (long) properties.getInt("stats-save-delay", 30, "delay between automatic saving (seconds)");
loginRateLimit = properties.getInt("stats-login-delay", 3600, "limit between login-count increases"); loginRateLimit = properties.getInt("stats-login-delay", 3600, "limit between login-count increases");
afkTimer = properties.getInt("stats-afk-delay", 300, " (seconds) If there is no player-activity in this time playedfor does not get updated. Set to 0 to disable.");
boolean useSQL = properties.getBoolean("stats-use-sql"); boolean useSQL = properties.getBoolean("stats-use-sql");
properties.remove("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", "dropped flatfile support");
if(dataSource.toLowerCase().equals("mysql")) { if (dataSource.toLowerCase().equals("mysql")) {
useMySQL = true; useMySQL = true;
} else { } else {
useMySQL = false; useMySQL = false;
@@ -59,11 +42,9 @@ public class StatsSettings {
debugOutput = properties.getBoolean("stats-debug", false, ""); debugOutput = properties.getBoolean("stats-debug", false, "");
deathNotifying = properties.getBoolean("stats-deathnotify", true, ""); deathNotifying = properties.getBoolean("stats-deathnotify", true, "");
autoUpdate = properties.getBoolean("stats-autoUpdate", true, ""); autoUpdate = properties.getBoolean("stats-autoUpdate", true, "");
properties.save();
if (premessage.length() > 0) if (premessage.length() > 0)
if (premessage.charAt(premessage.length() - 1) != ' ') if (premessage.charAt(premessage.length() - 1) != ' ')
premessage += " "; premessage += " ";
properties = new PropertiesFile(new File("mysql.properties"));
dbUrl = properties.getString("sql-db", "jdbc:mysql://localhost:3306/minecraft", ""); dbUrl = properties.getString("sql-db", "jdbc:mysql://localhost:3306/minecraft", "");
dbUsername = properties.getString("sql-user", "root", ""); dbUsername = properties.getString("sql-user", "root", "");
dbPassword = properties.getString("sql-pass", "root", ""); dbPassword = properties.getString("sql-pass", "root", "");

View File

@@ -5,7 +5,6 @@ import java.util.Iterator;
import java.util.Set; import java.util.Set;
import java.util.logging.Logger; import java.util.logging.Logger;
public class Category { public class Category {
public boolean modified = false; public boolean modified = false;
protected HashMap<String, Integer> stats; protected HashMap<String, Integer> stats;
@@ -45,15 +44,6 @@ public class Category {
put(name, value + oldval); put(name, value + oldval);
} }
public void addUnsafe(String name, Integer value) {
if (!stats.containsKey(name)) {
put(name, value);
return;
}
Integer oldval = stats.get(name);
stats.put(name, value+oldval);
}
Iterator<String> iterator() { Iterator<String> iterator() {
return stats.keySet().iterator(); return stats.keySet().iterator();
} }

View File

@@ -6,6 +6,7 @@ import java.util.Set;
import java.util.logging.Logger; import java.util.logging.Logger;
import org.bukkit.block.Block; import org.bukkit.block.Block;
import com.nidefawl.Stats.StatsSettings;
public abstract class PlayerStat { public abstract class PlayerStat {
private String name; private String name;
@@ -16,6 +17,7 @@ public abstract class PlayerStat {
private double boatDistance = 0; private double boatDistance = 0;
private int lastBoatEnter = 0; private int lastBoatEnter = 0;
private int lastMinecartEnter = 0; private int lastMinecartEnter = 0;
private long lastUpdate = System.currentTimeMillis();
public int skipTeleports = 0; public int skipTeleports = 0;
Block lastFace = null; Block lastFace = null;
public boolean unload = false; public boolean unload = false;
@@ -51,8 +53,7 @@ public abstract class PlayerStat {
cat.put(key, val); cat.put(key, val);
} }
protected void copy(PlayerStat from) protected void copy(PlayerStat from) {
{
this.name = from.name; this.name = from.name;
this.categories = new HashMap<String, Category>(from.categories); this.categories = new HashMap<String, Category>(from.categories);
} }
@@ -70,37 +71,43 @@ public abstract class PlayerStat {
public abstract void save(); public abstract void save();
public abstract void save(boolean close);
public abstract void load(); public abstract void load();
public void UpdateMove(double distance) { public void UpdateMove(double distance) {
moveDistance += distance; moveDistance += distance;
if(moveDistance>10.0F) { if (moveDistance > 10.0F) {
Category cat = categories.get("stats"); Category cat = categories.get("stats");
if (cat == null) if (cat == null)
cat = newCategory("stats"); cat = newCategory("stats");
cat.add("move", 10); cat.add("move", 10);
moveDistance = 0; moveDistance = 0;
setLastUpdate();
} }
} }
public void UpdateMinecartMove(double distance) { public void UpdateMinecartMove(double distance) {
minecartDistance += distance; minecartDistance += distance;
if(minecartDistance>=10.0F) { if (minecartDistance >= 10.0F) {
Category cat = categories.get("minecart"); Category cat = categories.get("minecart");
if (cat == null) if (cat == null)
cat = newCategory("minecart"); cat = newCategory("minecart");
cat.add("move", 10); cat.add("move", 10);
minecartDistance = 0; minecartDistance = 0;
setLastUpdate();
} }
} }
public void UpdateBoatMove(double distance) { public void UpdateBoatMove(double distance) {
boatDistance += distance; boatDistance += distance;
if(boatDistance>=10.0F) { if (boatDistance >= 10.0F) {
Category cat = categories.get("boat"); Category cat = categories.get("boat");
if (cat == null) if (cat == null)
cat = newCategory("boat"); cat = newCategory("boat");
cat.add("move", 10); cat.add("move", 10);
boatDistance = 0; boatDistance = 0;
setLastUpdate();
} }
} }
@@ -121,7 +128,8 @@ public abstract class PlayerStat {
} }
/** /**
* @param name the name to set * @param name
* the name to set
*/ */
public void setName(String name) { public void setName(String name) {
this.name = name; this.name = name;
@@ -133,4 +141,20 @@ public abstract class PlayerStat {
public String getName() { public String getName() {
return name; return name;
} }
/**
* @param lastUpdate
* the lastUpdate to set
*/
public void setLastUpdate() {
this.lastUpdate = System.currentTimeMillis();
}
/**
* @return the lastUpdate
*/
public boolean isAfk() {
return System.currentTimeMillis() - lastUpdate > StatsSettings.afkTimer * 1000;
}
} }

View File

@@ -19,9 +19,11 @@ public class PlayerStatFile extends PlayerStat {
this.directory = directory; this.directory = directory;
} }
@Override
public void save() { public void save() {
} }
@Override
public void load() { public void load() {
String location = directory + File.separator + getName() + ".txt"; String location = directory + File.separator + getName() + ".txt";
@@ -51,4 +53,8 @@ public class PlayerStatFile extends PlayerStat {
return; return;
} }
} }
@Override
public void save(boolean close) {
}
} }

View File

@@ -6,7 +6,6 @@ import java.sql.*;
import com.nidefawl.Stats.Stats; import com.nidefawl.Stats.Stats;
import com.nidefawl.Stats.StatsSettings; import com.nidefawl.Stats.StatsSettings;
public class PlayerStatSQL extends PlayerStat { public class PlayerStatSQL extends PlayerStat {
static final Logger log = Logger.getLogger("Minecraft"); static final Logger log = Logger.getLogger("Minecraft");
public final String logprefix = "[Stats-" + Stats.version + "]"; public final String logprefix = "[Stats-" + Stats.version + "]";
@@ -17,28 +16,32 @@ public class PlayerStatSQL extends PlayerStat {
this.plugin = plugin; this.plugin = plugin;
} }
public void save() { @Override
public void save(boolean close) {
Connection conn = null; Connection conn = null;
PreparedStatement ps = null; PreparedStatement ps = null;
try { try {
conn = StatsSQLConnectionManager.getConnection(); conn = StatsSQLConnectionManager.getConnection();
if (close) {
conn.setAutoCommit(false); conn.setAutoCommit(false);
for(String catName : categories.keySet()) { }
for (String catName : categories.keySet()) {
Category cat = categories.get(catName); Category cat = categories.get(catName);
if (!cat.modified) { if (!cat.modified) {
continue; continue;
} }
for(String statName : cat.stats.keySet()) { for (String statName : cat.stats.keySet()) {
int value = cat.get(statName); int value = cat.get(statName);
ps = conn.prepareStatement("UPDATE " + StatsSettings.dbTable + " set value=? where player = ? and category = ? and stat = ?;", Statement.RETURN_GENERATED_KEYS); ps = conn.prepareStatement(StatsSQLConnectionManager.getPreparedPlayerStatUpdateStatement());
ps.setInt(1, value); ps.setInt(1, value);
ps.setString(2, getName()); ps.setString(2, getName());
ps.setString(3, catName); ps.setString(3, catName);
ps.setString(4, statName); ps.setString(4, statName);
if(ps.executeUpdate()==0) { if (ps.executeUpdate() == 0) {
ps = conn.prepareStatement("INSERT INTO " + StatsSettings.dbTable + " (player,category,stat,value) VALUES(?,?,?,?);", Statement.RETURN_GENERATED_KEYS); Stats.LogInfo("new stat!!!!");
ps = conn.prepareStatement(StatsSQLConnectionManager.getPreparedPlayerStatInsertStatement());
ps.setString(1, getName()); ps.setString(1, getName());
ps.setString(2, catName); ps.setString(2, catName);
ps.setString(3, statName); ps.setString(3, statName);
@@ -46,7 +49,7 @@ public class PlayerStatSQL extends PlayerStat {
ps.executeUpdate(); ps.executeUpdate();
} }
} }
cat.modified=false; cat.modified = false;
} }
conn.commit(); conn.commit();
} catch (SQLException ex) { } catch (SQLException ex) {
@@ -57,7 +60,7 @@ public class PlayerStatSQL extends PlayerStat {
if (ps != null) { if (ps != null) {
ps.close(); ps.close();
} }
if(conn != null) { if (conn != null && close) {
conn.close(); conn.close();
} }
} catch (SQLException ex) { } catch (SQLException ex) {
@@ -67,6 +70,7 @@ public class PlayerStatSQL extends PlayerStat {
} }
} }
@Override
public void load() { public void load() {
if (!plugin.enabled) if (!plugin.enabled)
return; return;
@@ -92,7 +96,7 @@ public class PlayerStatSQL extends PlayerStat {
rs.close(); rs.close();
if (ps != null) if (ps != null)
ps.close(); ps.close();
if(conn != null) { if (conn != null) {
conn.close(); conn.close();
} }
} catch (SQLException ex) { } catch (SQLException ex) {
@@ -101,4 +105,9 @@ public class PlayerStatSQL extends PlayerStat {
} }
} }
} }
@Override
public void save() {
save(true);
}
} }

View File

@@ -3,35 +3,52 @@ package com.nidefawl.Stats.datasource;
import java.sql.Connection; import java.sql.Connection;
import java.sql.DriverManager; import java.sql.DriverManager;
import java.sql.SQLException; import java.sql.SQLException;
import com.nidefawl.Stats.Stats; import com.nidefawl.Stats.Stats;
import com.nidefawl.Stats.StatsSettings; import com.nidefawl.Stats.StatsSettings;
public class StatsSQLConnectionManager { public class StatsSQLConnectionManager {
static Connection conn = null;
public final static String getPreparedPlayerStatUpdateStatement() {
return "UPDATE " + StatsSettings.dbTable + " set value=? where player = ? and category = ? and stat = ?;";
}
public final static String getPreparedPlayerStatInsertStatement() {
return "INSERT INTO " + StatsSettings.dbTable + " (player,category,stat,value) VALUES(?,?,?,?);";
}
public static Connection getConnection() { public static Connection getConnection() {
try { try {
if (conn == null || conn.isClosed()) {
if (StatsSettings.useMySQL) { if (StatsSettings.useMySQL) {
Class.forName("com.mysql.jdbc.Driver"); Class.forName("com.mysql.jdbc.Driver");
Connection ret = DriverManager.getConnection(StatsSettings.dbUrl, StatsSettings.dbUsername, StatsSettings.dbPassword); conn = DriverManager.getConnection(StatsSettings.dbUrl, StatsSettings.dbUsername, StatsSettings.dbPassword);
ret.setAutoCommit(true);
return ret;
} else { } else {
Class.forName("org.sqlite.JDBC"); Class.forName("org.sqlite.JDBC");
Connection ret = DriverManager.getConnection(StatsSettings.liteDb); conn = DriverManager.getConnection(StatsSettings.liteDb);
ret.setAutoCommit(true); }
return ret;
} }
} catch (SQLException e) { } catch (SQLException e) {
Stats.LogError("Error getting SQL-connection: "+e.getMessage()); Stats.LogError("Error getting SQL-connection: " + e.getMessage());
e.printStackTrace(); e.printStackTrace();
return null; return null;
} catch (ClassNotFoundException e) { } catch (ClassNotFoundException e) {
Stats.LogError("Error getting SQL-connection: "+e.getMessage()); Stats.LogError("Error getting SQL-connection: " + e.getMessage());
e.printStackTrace(); e.printStackTrace();
return null; return null;
} }
return conn;
} }
public static void closeConnection() {
try {
if (conn != null && !conn.isClosed()) {
conn.close();
}
} catch (SQLException e) {
Stats.LogError("Error closing SQL-connection: " + e.getMessage());
e.printStackTrace();
}
}
} }

View File

@@ -9,6 +9,8 @@ public class StatsListener extends CustomEventListener implements Listener {
public StatsListener() { public StatsListener() {
} }
@Override
public void onCustomEvent(Event event) { public void onCustomEvent(Event event) {
if (event instanceof StatsMobDeathByPlayerEvent) { if (event instanceof StatsMobDeathByPlayerEvent) {
onStatsMobDeathByPlayerEvent((StatsMobDeathByPlayerEvent) event); onStatsMobDeathByPlayerEvent((StatsMobDeathByPlayerEvent) event);
@@ -20,7 +22,7 @@ public class StatsListener extends CustomEventListener implements Listener {
onStatsPlayerDeathByPlayerEvent((StatsPlayerDeathByPlayerEvent) event); onStatsPlayerDeathByPlayerEvent((StatsPlayerDeathByPlayerEvent) event);
} else if (event instanceof StatsPlayerDeathByOtherEvent) { } else if (event instanceof StatsPlayerDeathByOtherEvent) {
onStatsPlayerDeathByOtherEvent((StatsPlayerDeathByOtherEvent) event); onStatsPlayerDeathByOtherEvent((StatsPlayerDeathByOtherEvent) event);
}else if (event instanceof StatsPlayerMoveEvent) { } else if (event instanceof StatsPlayerMoveEvent) {
onStatsPlayerMoveEvent((StatsPlayerMoveEvent) event); onStatsPlayerMoveEvent((StatsPlayerMoveEvent) event);
} }
} }

View File

@@ -2,50 +2,34 @@ package com.nidefawl.Stats.event;
import org.bukkit.entity.Entity; import org.bukkit.entity.Entity;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.event.Cancellable; import org.bukkit.event.entity.EntityDeathEvent;
public class StatsMobDeathByPlayerEvent extends org.bukkit.event.Event implements Cancellable { public class StatsMobDeathByPlayerEvent extends org.bukkit.event.Event {
/** /**
* *
*/ */
private static final long serialVersionUID = 2158229946386582299L; private static final long serialVersionUID = 2158229946386582299L;
private Entity entity;
private Player player; private Player player;
boolean isCancelled; boolean isCancelled;
EntityDeathEvent base;
@Override public StatsMobDeathByPlayerEvent(EntityDeathEvent event, Player player, Entity entity) {
public boolean isCancelled() { super("StatsMobDeathByPlayerEvent");
return this.isCancelled; this.base = event;
}
@Override
public void setCancelled(boolean arg0) {
isCancelled = arg0;
}
public StatsMobDeathByPlayerEvent(Player player, Entity entity) {
super("StatsPlayerDamageEvent");
this.entity = entity;
this.player = player; this.player = player;
isCancelled=false; isCancelled = false;
}
/**
* @param entity the entity to set
*/
public void setEntity(Entity entity) {
this.entity = entity;
} }
/** /**
* @return the entity * @return the entity
*/ */
public Entity getEntity() { public Entity getEntity() {
return entity; return this.base.getEntity();
} }
/** /**
* @param player the player to set * @param player
* the player to set
*/ */
public void setPlayer(Player player) { public void setPlayer(Player player) {
this.player = player; this.player = player;

View File

@@ -22,16 +22,18 @@ public class StatsPlayerDamagedPlayerEvent extends org.bukkit.event.Event implem
public void setCancelled(boolean arg0) { public void setCancelled(boolean arg0) {
isCancelled = arg0; isCancelled = arg0;
} }
public StatsPlayerDamagedPlayerEvent(Player player, Player damaged, int damage) { public StatsPlayerDamagedPlayerEvent(Player player, Player damaged, int damage) {
super("StatsPlayerDamageEvent"); super("StatsPlayerDamagedPlayerEvent");
this.player = player; this.player = player;
this.damaged = damaged; this.damaged = damaged;
this.damage = damage; this.damage = damage;
isCancelled=false; isCancelled = false;
} }
/** /**
* @param player the player to set * @param player
* the player to set
*/ */
public void setPlayer(Player player) { public void setPlayer(Player player) {
this.player = player; this.player = player;
@@ -45,7 +47,8 @@ public class StatsPlayerDamagedPlayerEvent extends org.bukkit.event.Event implem
} }
/** /**
* @param damage the damage to set * @param damage
* the damage to set
*/ */
public void setDamage(int damage) { public void setDamage(int damage) {
this.damage = damage; this.damage = damage;
@@ -59,7 +62,8 @@ public class StatsPlayerDamagedPlayerEvent extends org.bukkit.event.Event implem
} }
/** /**
* @param damaged the damaged to set * @param damaged
* the damaged to set
*/ */
public void setDamagedPlayer(Player damaged) { public void setDamagedPlayer(Player damaged) {
this.damaged = damaged; this.damaged = damaged;

View File

@@ -3,6 +3,7 @@ package com.nidefawl.Stats.event;
import org.bukkit.entity.Entity; import org.bukkit.entity.Entity;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.event.Cancellable; import org.bukkit.event.Cancellable;
import org.bukkit.event.entity.EntityDeathEvent;
public class StatsPlayerDeathByEntityEvent extends org.bukkit.event.Event implements Cancellable { public class StatsPlayerDeathByEntityEvent extends org.bukkit.event.Event implements Cancellable {
/** /**
@@ -12,6 +13,7 @@ public class StatsPlayerDeathByEntityEvent extends org.bukkit.event.Event implem
private Player player; private Player player;
private Entity entity; private Entity entity;
boolean isCancelled; boolean isCancelled;
private EntityDeathEvent base;
@Override @Override
public boolean isCancelled() { public boolean isCancelled() {
@@ -23,14 +25,18 @@ public class StatsPlayerDeathByEntityEvent extends org.bukkit.event.Event implem
isCancelled = arg0; isCancelled = arg0;
} }
public StatsPlayerDeathByEntityEvent(Player player, Entity entity) { public StatsPlayerDeathByEntityEvent(EntityDeathEvent event, Player player, Entity entity) {
super("StatsPlayerDamageEvent");
super("StatsPlayerDeathByEntityEvent");
this.base = event;
this.player = player; this.player = player;
this.entity = entity; this.entity = entity;
isCancelled=false; isCancelled = false;
} }
/** /**
* @param player the player to set * @param player
* the player to set
*/ */
public void setPlayer(Player player) { public void setPlayer(Player player) {
this.player = player; this.player = player;
@@ -44,7 +50,8 @@ public class StatsPlayerDeathByEntityEvent extends org.bukkit.event.Event implem
} }
/** /**
* @param entity the entity to set * @param entity
* the entity to set
*/ */
public void setEntity(Entity entity) { public void setEntity(Entity entity) {
this.entity = entity; this.entity = entity;
@@ -57,5 +64,11 @@ public class StatsPlayerDeathByEntityEvent extends org.bukkit.event.Event implem
return entity; return entity;
} }
/**
* @return the base
*/
public EntityDeathEvent getBase() {
return base;
}
} }

View File

@@ -2,6 +2,7 @@ package com.nidefawl.Stats.event;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.event.Cancellable; import org.bukkit.event.Cancellable;
import org.bukkit.event.entity.EntityDeathEvent;
public class StatsPlayerDeathByOtherEvent extends org.bukkit.event.Event implements Cancellable { public class StatsPlayerDeathByOtherEvent extends org.bukkit.event.Event implements Cancellable {
/** /**
@@ -11,6 +12,7 @@ public class StatsPlayerDeathByOtherEvent extends org.bukkit.event.Event impleme
private Player player; private Player player;
private String reason; private String reason;
boolean isCancelled; boolean isCancelled;
private EntityDeathEvent base;
@Override @Override
public boolean isCancelled() { public boolean isCancelled() {
@@ -22,15 +24,17 @@ public class StatsPlayerDeathByOtherEvent extends org.bukkit.event.Event impleme
isCancelled = arg0; isCancelled = arg0;
} }
public StatsPlayerDeathByOtherEvent(Player player, String reason) { public StatsPlayerDeathByOtherEvent(EntityDeathEvent event, Player player, String reason) {
super("StatsPlayerDamageEvent"); super("StatsPlayerDeathByOtherEvent");
this.base = event;
this.player = player; this.player = player;
this.reason = reason; this.reason = reason;
isCancelled=false; isCancelled = false;
} }
/** /**
* @param player the player to set * @param player
* the player to set
*/ */
public void setPlayer(Player player) { public void setPlayer(Player player) {
this.player = player; this.player = player;
@@ -44,12 +48,20 @@ public class StatsPlayerDeathByOtherEvent extends org.bukkit.event.Event impleme
} }
/** /**
* @param reason the reason to set * @param reason
* the reason to set
*/ */
public void setReason(String reason) { public void setReason(String reason) {
this.reason = reason; this.reason = reason;
} }
/**
* @return the base
*/
public EntityDeathEvent getBase() {
return base;
}
/** /**
* @return the reason * @return the reason
*/ */

View File

@@ -2,6 +2,7 @@ package com.nidefawl.Stats.event;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.event.Cancellable; import org.bukkit.event.Cancellable;
import org.bukkit.event.entity.EntityDeathEvent;
public class StatsPlayerDeathByPlayerEvent extends org.bukkit.event.Event implements Cancellable { public class StatsPlayerDeathByPlayerEvent extends org.bukkit.event.Event implements Cancellable {
/** /**
@@ -11,6 +12,7 @@ public class StatsPlayerDeathByPlayerEvent extends org.bukkit.event.Event implem
private Player player; private Player player;
private Player killer; private Player killer;
boolean isCancelled; boolean isCancelled;
private EntityDeathEvent base;
@Override @Override
public boolean isCancelled() { public boolean isCancelled() {
@@ -22,14 +24,17 @@ public class StatsPlayerDeathByPlayerEvent extends org.bukkit.event.Event implem
isCancelled = arg0; isCancelled = arg0;
} }
public StatsPlayerDeathByPlayerEvent(Player player, Player killer) { public StatsPlayerDeathByPlayerEvent(EntityDeathEvent event, Player player, Player killer) {
super("StatsPlayerDamageEvent"); super("StatsPlayerDeathByPlayerEvent");
this.base = event;
this.player = player; this.player = player;
this.killer = killer; this.killer = killer;
isCancelled=false; isCancelled = false;
} }
/** /**
* @param player the player to set * @param player
* the player to set
*/ */
public void setPlayer(Player player) { public void setPlayer(Player player) {
this.player = player; this.player = player;
@@ -43,12 +48,20 @@ public class StatsPlayerDeathByPlayerEvent extends org.bukkit.event.Event implem
} }
/** /**
* @param killer the killer to set * @param killer
* the killer to set
*/ */
public void setKiller(Player killer) { public void setKiller(Player killer) {
this.killer = killer; this.killer = killer;
} }
/**
* @return the base
*/
public EntityDeathEvent getBase() {
return base;
}
/** /**
* @return the killer * @return the killer
*/ */

View File

@@ -1,35 +1,42 @@
package com.nidefawl.Stats.event; package com.nidefawl.Stats.event;
public class StatsPlayerMoveEvent extends org.bukkit.event.Event{ public class StatsPlayerMoveEvent extends org.bukkit.event.Event {
/** /**
* *
*/ */
private static final long serialVersionUID = 4195026324747114268L; private static final long serialVersionUID = 4195026324747114268L;
private String player; private String player;
private int distance; private int distance;
public StatsPlayerMoveEvent(String player, int distance) { public StatsPlayerMoveEvent(String player, int distance) {
super("StatsPlayerDamageEvent"); super("StatsPlayerMoveEvent");
this.player = player; this.player = player;
this.distance = distance; this.distance = distance;
} }
/** /**
* @param player the player to set * @param player
* the player to set
*/ */
public void setPlayer(String player) { public void setPlayer(String player) {
this.player = player; this.player = player;
} }
/** /**
* @return the player * @return the player
*/ */
public String getPlayer() { public String getPlayer() {
return player; return player;
} }
/** /**
* @param distance the distance to set * @param distance
* the distance to set
*/ */
public void setDistance(int distance) { public void setDistance(int distance) {
this.distance = distance; this.distance = distance;
} }
/** /**
* @return the distance * @return the distance
*/ */

View File

@@ -36,7 +36,6 @@ import java.util.List;
import com.nidefawl.Achievements.Achievements; import com.nidefawl.Achievements.Achievements;
import com.nidefawl.Stats.Stats; import com.nidefawl.Stats.Stats;
public class Updater { public class Updater {
/** /**
@@ -47,7 +46,7 @@ public class Updater {
/** /**
* File used to obtain the latest version * File used to obtain the latest version
*/ */
private final static String VERSION_FILE = "VERSIONDEV"; private final static String VERSION_FILE = "VERSION";
/** /**
* File used for the distribution * File used for the distribution
@@ -68,8 +67,11 @@ public class Updater {
*/ */
private HashMap<String, String> config = new HashMap<String, String>(); private HashMap<String, String> config = new HashMap<String, String>();
public Updater() { private Stats plugin = null;
//enableSSL();
public Updater(Stats plugin) {
this.plugin = plugin;
// enableSSL();
/* /*
* Default config values * Default config values
@@ -115,9 +117,8 @@ public class Updater {
Stats.LogInfo("Update detected for Achievements"); Stats.LogInfo("Update detected for Achievements");
Stats.LogInfo("Latest version: " + latestVersion); Stats.LogInfo("Latest version: " + latestVersion);
} }
} } catch (Exception e) {
catch (Exception e) { Stats.LogError("Exception while updating Achievements plugin: " + e);
Stats.LogError("Exception while updating Achievements plugin: "+e);
e.printStackTrace(); e.printStackTrace();
} }
} }
@@ -127,7 +128,7 @@ public class Updater {
* Force update of binaries * Force update of binaries
*/ */
private void requireBinaryUpdate() { private void requireBinaryUpdate() {
String[] paths = new String[] { "lib/sqlite.jar", getFullNativeLibraryPath() , "lib/mysql.jar" }; String[] paths = new String[] { "lib/sqlite.jar", getFullNativeLibraryPath(), "lib/mysql.jar" };
for (String path : paths) { for (String path : paths) {
UpdaterFile updaterFile = new UpdaterFile(UPDATE_SITE + path); UpdaterFile updaterFile = new UpdaterFile(UPDATE_SITE + path);
@@ -166,6 +167,7 @@ public class Updater {
return false; return false;
} }
public boolean checkAchDist() { public boolean checkAchDist() {
if (new File("plugins/Achievements.jar").exists()) { if (new File("plugins/Achievements.jar").exists()) {
@@ -184,16 +186,16 @@ public class Updater {
e.printStackTrace(); e.printStackTrace();
} }
} else { } else {
Stats.LogInfo("Achievements plugin is up to date ("+(Achievements.version)+")"); Stats.LogInfo("Achievements plugin is up to date (" + (Achievements.version) + ")");
} }
} } catch (Exception e) {
catch (Exception e) { Stats.LogError("Exception while updating Achievements plugin: " + e);
Stats.LogError("Exception while updating Achievements plugin: "+e);
e.printStackTrace(); e.printStackTrace();
} }
} }
return false; return false;
} }
/** /**
* Get the latest Achievemnts version * Get the latest Achievemnts version
* *
@@ -219,6 +221,7 @@ public class Updater {
return 0.00; return 0.00;
} }
/** /**
* Get the latest version * Get the latest version
* *
@@ -249,6 +252,7 @@ public class Updater {
public double getCurrentSQLiteVersion() { public double getCurrentSQLiteVersion() {
return Double.parseDouble(config.get("sqlite")); return Double.parseDouble(config.get("sqlite"));
} }
public String combineSplit(int startIndex, String[] string, String seperator) { public String combineSplit(int startIndex, String[] string, String seperator) {
if (string.length == 0) if (string.length == 0)
return ""; return "";
@@ -261,6 +265,7 @@ public class Updater {
builder.deleteCharAt(builder.length() - seperator.length()); // remove builder.deleteCharAt(builder.length() - seperator.length()); // remove
return builder.toString(); return builder.toString();
} }
/** /**
* @return the latest sqlite version * @return the latest sqlite version
*/ */
@@ -288,7 +293,7 @@ public class Updater {
* @return the internal config file * @return the internal config file
*/ */
private File getInternalFile() { private File getInternalFile() {
return new File("stats" + File.separator + "internal.ini"); return new File(plugin.getDataFolder() + File.separator + "internal.ini");
} }
/** /**
@@ -328,8 +333,8 @@ public class Updater {
* Get the key/value * Get the key/value
*/ */
String key = arr[0]; String key = arr[0];
String value = combineSplit(1,arr, ":"); String value = combineSplit(1, arr, ":");
//value = value.substring(0, value.length() - 1); // value = value.substring(0, value.length() - 1);
/* /*
* Set the config value * Set the config value
@@ -438,7 +443,7 @@ public class Updater {
/* /*
* Make the native folder hierarchy if needed * Make the native folder hierarchy if needed
*/ */
File folder = new File(getOSSpecificFolder()); File folder = new File(plugin.getDataFolder(), getOSSpecificFolder());
folder.mkdirs(); folder.mkdirs();
Stats.LogInfo("Need to download " + needsUpdating.size() + " file(s)"); Stats.LogInfo("Need to download " + needsUpdating.size() + " file(s)");
@@ -451,8 +456,7 @@ public class Updater {
Stats.LogInfo(" - Downloading file : " + item.getRemoteLocation()); Stats.LogInfo(" - Downloading file : " + item.getRemoteLocation());
URL url = new URL(item.getRemoteLocation()); URL url = new URL(item.getRemoteLocation());
File file = new File(item.getLocalLocation()); File file = new File(plugin.getDataFolder(), item.getLocalLocation());
if (file.exists()) { if (file.exists()) {
file.delete(); file.delete();
} }
@@ -475,7 +479,6 @@ public class Updater {
saveInternal(); saveInternal();
} }
/** /**
* Write an input stream to an output stream * Write an input stream to an output stream
* *