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;
import org.bukkit.Server;
import org.bukkit.World;
import org.bukkit.entity.Player;
/**
@@ -181,4 +182,17 @@ public class Messaging {
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();
}
@Override
public boolean check() {
if (perms == null) {
Plugin checkPlugin = plugin.getServer().getPluginManager().getPlugin("GroupUsers");
@@ -30,28 +31,34 @@ public class GroupUserResolver implements PermissionsResolver {
return true;
}
@Override
public boolean permission(Player player, String permCmd) {
if (!check())
return false;
return perms.playerCanUseCommand(player, permCmd);
}
@Override
public String getGroup(String player) {
return "";
}
@Override
public String getGroupPrefix(String player) {
return "";
}
@Override
public String getGroupSuffix(String player) {
return "";
}
@Override
public boolean canGroupBuild(String group) {
return true;
}
@Override
public boolean inGroup(Player player, String group) {
if (!check())
return false;

View File

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

View File

@@ -65,11 +65,10 @@ public class PropertiesFile {
public boolean getBoolean(String key) {
if (map.containsKey(key)) {
return Boolean.parseBoolean(map.get(key).value);
}
}
return false;
}
public void remove(String key) {
map.remove(key);
}
@@ -125,6 +124,7 @@ public class PropertiesFile {
fwriter = new FileWriter(file);
bwriter = new BufferedWriter(fwriter);
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) {
// int d = a.getValue().compareTo(b.getValue());
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.java.JavaPlugin;
import com.nidefawl.Achievements.Achievements;
import com.nidefawl.Stats.ItemResolver.hModItemResolver;
import com.nidefawl.Stats.ItemResolver.itemResolver;
import com.nidefawl.Stats.ItemResolver.myGeneralItemResolver;
import com.nidefawl.Stats.Permissions.GroupUserResolver;
import com.nidefawl.Stats.Permissions.NijiPermissionsResolver;
import com.nidefawl.Stats.Permissions.PermissionsResolver;
@@ -44,12 +42,13 @@ 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.7;
public final static double version = 0.8;
public final static String logprefix = "[Stats-" + version + "]";
public final static String defaultCategory = "stats";
public boolean enabled = false;
public boolean updated = false;
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");
private static PermissionsResolver perms = null;
private static StatsPlayerListener playerListener;
@@ -175,6 +174,8 @@ public class Stats extends JavaPlugin {
rs.close();
if (ps != null)
ps.close();
if (conn != null)
conn.close();
} catch (SQLException ex) {
log.log(Level.SEVERE, logprefix + " " + this.getClass().getName() + " SQL exception on close", ex);
Messaging.send(admin, StatsSettings.premessage + ex.getMessage());
@@ -448,7 +449,6 @@ public class Stats extends JavaPlugin {
}
public void convertFlatFiles() {
File dir = new File(StatsSettings.directory);
FilenameFilter filter = new FilenameFilter() {
public boolean accept(File dir, String name) {
return name.endsWith(".txt");
@@ -460,31 +460,29 @@ public class Stats extends JavaPlugin {
return name.endsWith(".txt.old");
}
};
String[] files = dir.list(filterOld);
String[] files = getDataFolder().list(filterOld);
if (files != null && files.length > 0) {
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("."));
File fnew = new File(location);
File fold = new File(StatsSettings.directory + File.separator + basename);
File fnew = new File(getDataFolder(), files[i]);
File fold = new File(getDataFolder(), basename);
fnew.renameTo(fold);
}
}
files = dir.list(filter);
files = getDataFolder().list(filter);
if (files == null || files.length == 0) {
}
int count = 0;
PlayerStatSQL ps;
for (int i = 0; i < files.length; i++) {
String location = StatsSettings.directory + File.separator + files[i];
File fold = new File(location);
File fold = new File(getDataFolder(), files[i]);
if (!fold.exists())
continue;
String basename = files[i].substring(0, files[i].lastIndexOf("."));
ps = new PlayerStatSQL(basename, this);
ps.convertFlatFile(StatsSettings.directory);
ps.convertFlatFile(getDataFolder().getPath());
ps.save();
count++;
}
@@ -492,20 +490,39 @@ public class Stats extends JavaPlugin {
}
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());
StatsSQLConnectionManager.getConnection();
try {
if (StatsSettings.autoUpdate) {
updated = updater.checkDist();
updated |= updater.checkAchDist();
if(updated) {
if (updated) {
LogInfo("UPDATE INSTALLED. PLEASE RESTART....");
return;
}
} else {
updater.check();
}
@@ -513,32 +530,18 @@ public class Stats extends JavaPlugin {
} catch (Exception e) {
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();
if (conn == null) {
LogError("Could not establish SQL connection. Disabling Stats");
getServer().getPluginManager().disablePlugin(this);
return;
} else {
try {
if (conn != null) {
conn.close();
}
} catch (SQLException e) {
e.printStackTrace();
try {
if (conn == null || conn.isClosed()) {
LogError("Could not establish SQL connection. Disabling Stats");
getServer().getPluginManager().disablePlugin(this);
return;
}
} catch (SQLException e) {
LogError("Could not establish SQL connection. Disabling Stats");
e.printStackTrace();
getServer().getPluginManager().disablePlugin(this);
return;
}
if (!checkSchema()) {
LogError("Could not create table. Disabling Stats");
@@ -546,17 +549,8 @@ public class Stats extends JavaPlugin {
return;
}
convertFlatFiles();
}
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));
}
}
if (updated)
return;
stats = new HashMap<String, PlayerStat>();
CreatePermissionResolver();
enabled = true;
@@ -570,18 +564,7 @@ public class Stats extends JavaPlugin {
load(p);
}
getServer().getScheduler().scheduleAsyncRepeatingTask(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();
}
getServer().getScheduler().scheduleSyncRepeatingTask(this, new SaveTask(this), StatsSettings.delay * 20, StatsSettings.delay * 20);
}
public Player playerMatch(String name) {
@@ -608,22 +591,19 @@ public class Stats extends JavaPlugin {
}
public void onDisable() {
saveAll();
Plugin ach = this.getServer().getPluginManager().getPlugin("Achievements");
if(ach!=null) {
if(((Achievements)ach).enabled) {
((Achievements)ach).Disable();
}
if (enabled) {
saveAll();
enabled = false;
getServer().getScheduler().cancelTasks(this);
stats = null;
updater.saveInternal();
StatsSQLConnectionManager.closeConnection();
}
enabled = false;
getServer().getScheduler().cancelTasks(this);
stats = null;
updater.saveInternal();
log.info(logprefix + " " + version + " Plugin Disabled");
}
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_QUIT, playerListener, Priority.Normal, 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_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.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.VEHICLE_ENTER, vehicleListener, Priority.Monitor, this);
getServer().getPluginManager().registerEvent(Event.Type.VEHICLE_MOVE, vehicleListener, Priority.Monitor, this);
}
public void updateStat(Player player, String statType) {
updateStat(player, statType, 1);
public void updateStat(Player player, String statType, boolean resetAfkTimer) {
updateStat(player, statType, 1, resetAfkTimer);
}
public void updateStat(Player player, String statType, int num) {
updateStat(player.getName(), defaultCategory, statType, num);
public void updateStat(Player player, String statType, int num, boolean resetAfkTimer) {
updateStat(player.getName(), defaultCategory, statType, num, resetAfkTimer);
}
public void updateStat(Player player, String statType, Block block) {
updateStat(player, statType, block, 1);
public void updateStat(Player player, String statType, Block block, boolean resetAfkTimer) {
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)
return;
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) {
updateStat(player.getName(), category, key, val);
public void updateStat(Player player, String category, String key, int val, boolean resetAfkTimer) {
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)
return;
if (player == null || player.length() < 1) {
@@ -683,30 +663,13 @@ public class Stats extends JavaPlugin {
if (cat == null)
cat = ps.newCategory(category);
cat.add(key, val);
if (resetAfkTimer)
ps.setLastUpdate();
if (StatsSettings.debugOutput)
log.info(logprefix + " [DEBUG]: adding " + val + " to " + category + "/" + key + " of " + player);
}
public void updateStatUnsafe(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) {
public void setStat(String player, String category, String key, int val) {
PlayerStat ps = stats.get(player);
if (ps == null)
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)
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()) {
if (stat == null || playerMatch(stat.getName()) == null) {
stat.unload = true;
continue;
}
updateStat(stat.getName(), defaultCategory, "playedfor", (int) StatsSettings.delay);
stat.save();
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());
}
stat.save(false);
}
StatsSQLConnectionManager.closeConnection();
for (PlayerStat stat : stats.values()) {
if (!stat.unload)
continue;
@@ -893,11 +875,7 @@ public class Stats extends JavaPlugin {
public itemResolver getItems() {
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;
}
@@ -906,7 +884,7 @@ public class Stats extends JavaPlugin {
int lastLog = get(player.getName(), defaultCategory, "lastlogin");
int now = (int) (System.currentTimeMillis() / 1000L);
if (now - lastLog > StatsSettings.loginRateLimit) {
updateStat(player, "login");
updateStat(player, "login", true);
}
setStat(player.getName(), defaultCategory, "lastlogin", now);
}
@@ -930,16 +908,21 @@ public class Stats extends JavaPlugin {
if (vhc instanceof org.bukkit.entity.Boat) {
if (now - ps.getLastBoatEnter() > 60) {
updateStat(player, "boat", "enter", 1);
updateStat(player, "boat", "enter", 1, true);
ps.setLastBoatEnter(now);
}
} else if (vhc instanceof org.bukkit.entity.Minecart) {
if (now - ps.getLastMinecartEnter() > 60) {
updateStat(player, "minecart", "enter", 1);
updateStat(player, "minecart", "enter", 1, true);
ps.setLastMinecartEnter(now);
}
}
}
public void onLoad() {
// TODO Auto-generated method stub
}
}

View File

@@ -30,7 +30,7 @@ public class StatsBlockListener extends BlockListener {
* @param event
* Relevant event details
*/
@Override
@Override
public void onBlockDamage(BlockDamageEvent event) {
}
@@ -40,8 +40,8 @@ public class StatsBlockListener extends BlockListener {
* @param event
* Relevant event details
*/
@Override
public void onSignChange(SignChangeEvent event) {
@Override
public void onSignChange(SignChangeEvent event) {
}
/**
@@ -50,8 +50,8 @@ public class StatsBlockListener extends BlockListener {
* @param event
* Relevant event details
*/
@Override
public void onBlockBurn(BlockBurnEvent event) {
@Override
public void onBlockBurn(BlockBurnEvent event) {
}
/**
@@ -60,21 +60,21 @@ public class StatsBlockListener extends BlockListener {
* @param event
* Relevant event details
*/
@Override
public void onBlockBreak(BlockBreakEvent event) {
@Override
public void onBlockBreak(BlockBreakEvent event) {
if (event.isCancelled())
return;
if (!(event.getPlayer() instanceof Player))
return;
plugin.updateStat(event.getPlayer(), "blockdestroy", event.getBlock());
plugin.updateStat(event.getPlayer(), "totalblockdestroy");
plugin.updateStat(event.getPlayer(), "blockdestroy", event.getBlock(), true);
plugin.updateStat(event.getPlayer(), "totalblockdestroy", true);
}
/**
* Called when we try to place a block, to see if we can build it
*/
@Override
public void onBlockCanBuild(BlockCanBuildEvent event) {
@Override
public void onBlockCanBuild(BlockCanBuildEvent event) {
}
/**
@@ -83,8 +83,8 @@ public class StatsBlockListener extends BlockListener {
* @param event
* Relevant event details
*/
@Override
public void onBlockFlow(BlockFromToEvent event) {
@Override
public void onBlockFlow(BlockFromToEvent event) {
}
/**
@@ -93,13 +93,13 @@ public class StatsBlockListener extends BlockListener {
* @param event
* Relevant event details
*/
@Override
public void onBlockIgnite(BlockIgniteEvent event) {
@Override
public void onBlockIgnite(BlockIgniteEvent event) {
if (event.isCancelled())
return;
if (!(event.getPlayer() instanceof Player))
return;
plugin.updateStat(event.getPlayer(), "lighter");
plugin.updateStat(event.getPlayer(), "lighter", true);
}
@@ -109,7 +109,7 @@ public class StatsBlockListener extends BlockListener {
* @param event
* Relevant event details
*/
@Override
@Override
public void onBlockPhysics(BlockPhysicsEvent event) {
}
@@ -119,14 +119,14 @@ public class StatsBlockListener extends BlockListener {
* @param event
* Relevant event details
*/
@Override
@Override
public void onBlockPlace(BlockPlaceEvent event) {
if (event.isCancelled())
return;
if (!(event.getPlayer() instanceof Player))
return;
plugin.updateStat(event.getPlayer(), "blockcreate", event.getBlockPlaced());
plugin.updateStat(event.getPlayer(), "totalblockcreate");
plugin.updateStat(event.getPlayer(), "blockcreate", event.getBlockPlaced(), true);
plugin.updateStat(event.getPlayer(), "totalblockcreate", true);
}
/**
@@ -135,14 +135,14 @@ public class StatsBlockListener extends BlockListener {
* @param event
* Relevant event details
*/
@Override
@Override
public void onBlockInteract(BlockInteractEvent event) {
if (event.isCancelled())
return;
if (!event.isPlayer())
return;
if (event.getBlock().getType() == Material.CHEST) {
plugin.updateStat((Player) event.getEntity(), "openchest");
plugin.updateStat((Player) event.getEntity(), "openchest", true);
}
}
@@ -152,7 +152,7 @@ public class StatsBlockListener extends BlockListener {
* @param event
* Relevant event details
*/
@Override
@Override
public void onBlockRightClick(BlockRightClickEvent event) {
}
@@ -164,8 +164,8 @@ public class StatsBlockListener extends BlockListener {
* @param event
* Relevant event details
*/
@Override
public void onBlockRedstoneChange(BlockRedstoneEvent event) {
@Override
public void onBlockRedstoneChange(BlockRedstoneEvent event) {
}
/**

View File

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

View File

@@ -19,7 +19,7 @@ public class StatsPlayerListener extends PlayerListener {
* @param event
* Relevant event details
*/
@Override
@Override
public void onPlayerQuit(PlayerEvent event) {
plugin.logout(event.getPlayer().getName());
plugin.unload(event.getPlayer().getName());
@@ -32,12 +32,12 @@ public class StatsPlayerListener extends PlayerListener {
* @param event
* Relevant event details
*/
@Override
@Override
public void onPlayerChat(PlayerChatEvent event) {
if (event.isCancelled())
return;
plugin.updateStat(event.getPlayer(), "chat");
plugin.updateStat(event.getPlayer(), "chatletters", event.getMessage().length());
plugin.updateStat(event.getPlayer(), "chat", true);
plugin.updateStat(event.getPlayer(), "chatletters", event.getMessage().length(), true);
}
/**
@@ -46,11 +46,11 @@ public class StatsPlayerListener extends PlayerListener {
* @param event
* Relevant event details
*/
@Override
public void onPlayerCommandPreprocess(PlayerChatEvent event) {
@Override
public void onPlayerCommandPreprocess(PlayerChatEvent event) {
if (event.isCancelled())
return;
plugin.updateStat(event.getPlayer(), "command");
plugin.updateStat(event.getPlayer(), "command", true);
}
/**
@@ -59,7 +59,7 @@ public class StatsPlayerListener extends PlayerListener {
* @param event
* Relevant event details
*/
@Override
@Override
public void onPlayerMove(PlayerMoveEvent event) {
if (event.isCancelled())
return;
@@ -73,7 +73,7 @@ public class StatsPlayerListener extends PlayerListener {
* @param event
* Relevant event details
*/
@Override
@Override
public void onPlayerTeleport(PlayerMoveEvent event) {
if (event.isCancelled())
return;
@@ -82,11 +82,11 @@ public class StatsPlayerListener extends PlayerListener {
PlayerStat ps = plugin.stats.get(event.getPlayer().getName());
if (ps == null)
return;
if (ps.skipTeleports>0) {
if (ps.skipTeleports > 0) {
ps.skipTeleports--;
return;
}
plugin.updateStat(event.getPlayer(), "teleport");
plugin.updateStat(event.getPlayer(), "teleport", false);
}
/**
@@ -95,24 +95,24 @@ public class StatsPlayerListener extends PlayerListener {
* @param event
* Relevant event details
*/
@Override
@Override
public void onPlayerItem(PlayerItemEvent event) {
if (event.isCancelled()||event.getBlockFace()==null)
if (event.isCancelled() || event.getBlockFace() == null)
return;
switch (event.getMaterial()) {
case LAVA_BUCKET:
case WATER_BUCKET:
case SIGN:
case BUCKET:
case CAKE_BLOCK:
case FLINT_AND_STEEL:
case TNT:
plugin.updateStat(event.getPlayer(), "itemuse", plugin.getItems().getItem(event.getMaterial().getId()), 1);
break;
default:
break;
}
switch (event.getMaterial()) {
case LAVA_BUCKET:
case WATER_BUCKET:
case SIGN:
case BUCKET:
case CAKE_BLOCK:
case FLINT_AND_STEEL:
case TNT:
plugin.updateStat(event.getPlayer(), "itemuse", plugin.getItems().getItem(event.getMaterial().getId()), 1, false);
break;
default:
break;
}
}
/**
@@ -121,7 +121,7 @@ public class StatsPlayerListener extends PlayerListener {
* @param event
* Relevant event details
*/
@Override
@Override
public void onPlayerJoin(PlayerEvent event) {
plugin.load(event.getPlayer());
plugin.login(event.getPlayer());
@@ -133,10 +133,10 @@ public class StatsPlayerListener extends PlayerListener {
* @param event
* Relevant event details
*/
@Override
@Override
public void onPlayerAnimation(PlayerAnimationEvent event) {
if (event.getAnimationType() == PlayerAnimationType.ARM_SWING && event.getPlayer().getItemInHand().getType() == Material.AIR) {
plugin.updateStat(event.getPlayer(), "armswing");
plugin.updateStat(event.getPlayer(), "armswing", false);
}
}
@@ -146,9 +146,9 @@ public class StatsPlayerListener extends PlayerListener {
* @param event
* Relevant event details
*/
@Override
@Override
public void onPlayerEggThrow(PlayerEggThrowEvent event) {
plugin.updateStat(event.getPlayer(), "eggthrow");
plugin.updateStat(event.getPlayer(), "eggthrow", false);
}
/**
@@ -157,14 +157,18 @@ public class StatsPlayerListener extends PlayerListener {
* @param event
* Relevant event details
*/
@Override
@Override
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(((CraftItem)event.getItemDrop()).getItemStack() == null) return;
plugin.updateStat(event.getPlayer(), "itemdrop", plugin.getItems().getItem(((CraftItem)event.getItemDrop()).getItemStack().getTypeId()), 1);
if (((CraftItem) event.getItemDrop()).getItemStack() == null)
return;
plugin.updateStat(event.getPlayer(), "itemdrop", plugin.getItems().getItem(((CraftItem) event.getItemDrop()).getItemStack().getTypeId()), 1, false);
}
}
/**
@@ -173,11 +177,11 @@ public class StatsPlayerListener extends PlayerListener {
* @param event
* Relevant event details
*/
@Override
@Override
public void onPlayerKick(PlayerKickEvent event) {
if (event.isCancelled())
return;
plugin.updateStat(event.getPlayer(), "kick");
plugin.updateStat(event.getPlayer(), "kick", false);
}
/**
@@ -186,9 +190,9 @@ public class StatsPlayerListener extends PlayerListener {
* @param event
* Relevant event details
*/
@Override
@Override
public void onPlayerRespawn(PlayerRespawnEvent event) {
plugin.updateStat(event.getPlayer(), "respawn");
plugin.updateStat(event.getPlayer(), "respawn", false);
}
/**
@@ -197,7 +201,7 @@ public class StatsPlayerListener extends PlayerListener {
* @param event
* Relevant event details
*/
@Override
@Override
public void onPlayerLogin(PlayerLoginEvent event) {
}
@@ -207,12 +211,16 @@ public class StatsPlayerListener extends PlayerListener {
* @param event
* Relevant event details
*/
@Override
@Override
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(((CraftItem)event.getItem()).getItemStack() == null) return;
plugin.updateStat(event.getPlayer(), "itempickup", plugin.getItems().getItem(((CraftItem)event.getItem()).getItemStack().getTypeId()), 1);
if (((CraftItem) event.getItem()).getItemStack() == null)
return;
plugin.updateStat(event.getPlayer(), "itempickup", plugin.getItems().getItem(((CraftItem) event.getItem()).getItemStack().getTypeId()), 1, false);
}
}
@@ -222,7 +230,7 @@ public class StatsPlayerListener extends PlayerListener {
* @param event
* Relevant event details
*/
@Override
@Override
public void onInventoryOpen(PlayerInventoryEvent event) {
}
@@ -232,7 +240,7 @@ public class StatsPlayerListener extends PlayerListener {
* @param event
* Relevant event details
*/
@Override
@Override
public void onItemHeldChange(PlayerItemHeldEvent event) {
}
@@ -242,7 +250,7 @@ public class StatsPlayerListener extends PlayerListener {
* @param event
* Relevant event details
*/
@Override
@Override
public void onPlayerToggleSneak(PlayerToggleSneakEvent event) {
}
}

View File

@@ -4,14 +4,12 @@ import java.io.File;
import org.bukkit.ChatColor;
public class StatsSettings {
public static String directory = "stats";
public static String liteDb;
public static int loginRateLimit = 3600;
public static long delay = 30;
public static long afkTimer = 300;
public static String dbUrl;
public static String dbUsername;
public static String dbPassword;
@@ -23,47 +21,30 @@ public class StatsSettings {
public static String libPath;
public static String premessage = ChatColor.YELLOW + "[Stats]" + ChatColor.WHITE;
public static void initialize() {
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() {
}
public static void load(Stats plugin) {
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)");
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)");
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");
properties.remove("stats-use-sql");
String dataSource = properties.getString("stats-datasource", useSQL?"mysql":"sqlite", "dropped flatfile support");
if(dataSource.toLowerCase().equals("mysql")) {
useMySQL = true;
String dataSource = properties.getString("stats-datasource", useSQL ? "mysql" : "sqlite", "dropped flatfile support");
if (dataSource.toLowerCase().equals("mysql")) {
useMySQL = true;
} else {
useMySQL = false;
useMySQL = false;
}
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, "");
properties.save();
if (premessage.length() > 0)
if (premessage.charAt(premessage.length() - 1) != ' ')
premessage += " ";
properties = new PropertiesFile(new File("mysql.properties"));
dbUrl = properties.getString("sql-db", "jdbc:mysql://localhost:3306/minecraft", "");
dbUsername = properties.getString("sql-user", "root", "");
dbPassword = properties.getString("sql-pass", "root", "");

View File

@@ -21,7 +21,7 @@ public class StatsVehicleListener extends VehicleListener {
*
* @param event
*/
@Override
@Override
public void onVehicleCreate(VehicleCreateEvent event) {
}
@@ -30,7 +30,7 @@ public class StatsVehicleListener extends VehicleListener {
*
* @param event
*/
@Override
@Override
public void onVehicleDamage(VehicleDamageEvent event) {
}
@@ -39,7 +39,7 @@ public class StatsVehicleListener extends VehicleListener {
*
* @param event
*/
@Override
@Override
public void onVehicleBlockCollision(VehicleBlockCollisionEvent event) {
}
@@ -48,7 +48,7 @@ public class StatsVehicleListener extends VehicleListener {
*
* @param event
*/
@Override
@Override
public void onVehicleEntityCollision(VehicleEntityCollisionEvent event) {
}
@@ -57,7 +57,7 @@ public class StatsVehicleListener extends VehicleListener {
*
* @param event
*/
@Override
@Override
public void onVehicleEnter(VehicleEnterEvent event) {
if (!(event.getEntered() instanceof Player))
return;
@@ -69,7 +69,7 @@ public class StatsVehicleListener extends VehicleListener {
*
* @param event
*/
@Override
@Override
public void onVehicleExit(VehicleExitEvent event) {
}
@@ -78,7 +78,7 @@ public class StatsVehicleListener extends VehicleListener {
*
* @param event
*/
@Override
@Override
public void onVehicleMove(VehicleMoveEvent event) {
if (event.getVehicle() == null)
return;

View File

@@ -5,7 +5,6 @@ import java.util.Iterator;
import java.util.Set;
import java.util.logging.Logger;
public class Category {
public boolean modified = false;
protected HashMap<String, Integer> stats;
@@ -44,15 +43,6 @@ public class Category {
Integer oldval = stats.get(name);
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() {
return stats.keySet().iterator();

View File

@@ -6,6 +6,7 @@ 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;
@@ -16,6 +17,7 @@ public abstract class PlayerStat {
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 boolean unload = false;
@@ -51,8 +53,7 @@ public abstract class PlayerStat {
cat.put(key, val);
}
protected void copy(PlayerStat from)
{
protected void copy(PlayerStat from) {
this.name = from.name;
this.categories = new HashMap<String, Category>(from.categories);
}
@@ -70,37 +71,43 @@ public abstract class PlayerStat {
public abstract void save();
public abstract void save(boolean close);
public abstract void load();
public void UpdateMove(double distance) {
moveDistance += distance;
if(moveDistance>10.0F) {
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) {
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) {
if (boatDistance >= 10.0F) {
Category cat = categories.get("boat");
if (cat == null)
cat = newCategory("boat");
cat.add("move", 10);
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) {
this.name = name;
@@ -133,4 +141,20 @@ public abstract class PlayerStat {
public String getName() {
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;
}
@Override
public void save() {
}
@Override
public void load() {
String location = directory + File.separator + getName() + ".txt";
@@ -51,4 +53,8 @@ public class PlayerStatFile extends PlayerStat {
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.StatsSettings;
public class PlayerStatSQL extends PlayerStat {
static final Logger log = Logger.getLogger("Minecraft");
public final String logprefix = "[Stats-" + Stats.version + "]";
@@ -17,36 +16,40 @@ public class PlayerStatSQL extends PlayerStat {
this.plugin = plugin;
}
public void save() {
@Override
public void save(boolean close) {
Connection conn = null;
PreparedStatement ps = null;
try {
conn = StatsSQLConnectionManager.getConnection();
conn.setAutoCommit(false);
for(String catName : categories.keySet()) {
if (close) {
conn.setAutoCommit(false);
}
for (String catName : categories.keySet()) {
Category cat = categories.get(catName);
if (!cat.modified) {
continue;
}
for(String statName : cat.stats.keySet()) {
for (String statName : cat.stats.keySet()) {
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.setString(2, getName());
ps.setString(3, catName);
ps.setString(4, statName);
if(ps.executeUpdate()==0) {
ps = conn.prepareStatement("INSERT INTO " + StatsSettings.dbTable + " (player,category,stat,value) VALUES(?,?,?,?);", Statement.RETURN_GENERATED_KEYS);
if (ps.executeUpdate() == 0) {
Stats.LogInfo("new stat!!!!");
ps = conn.prepareStatement(StatsSQLConnectionManager.getPreparedPlayerStatInsertStatement());
ps.setString(1, getName());
ps.setString(2, catName);
ps.setString(3, statName);
ps.setString(3, statName);
ps.setInt(4, value);
ps.executeUpdate();
}
}
cat.modified=false;
cat.modified = false;
}
conn.commit();
} catch (SQLException ex) {
@@ -54,12 +57,12 @@ public class PlayerStatSQL extends PlayerStat {
ex.printStackTrace();
} finally {
try {
if (ps != null) {
ps.close();
}
if(conn != null) {
conn.close();
}
if (ps != null) {
ps.close();
}
if (conn != null && close) {
conn.close();
}
} catch (SQLException ex) {
Stats.LogError("SQL exception: " + ex.getMessage());
ex.printStackTrace();
@@ -67,6 +70,7 @@ public class PlayerStatSQL extends PlayerStat {
}
}
@Override
public void load() {
if (!plugin.enabled)
return;
@@ -92,13 +96,18 @@ public class PlayerStatSQL extends PlayerStat {
rs.close();
if (ps != null)
ps.close();
if(conn != null) {
conn.close();
}
if (conn != null) {
conn.close();
}
} catch (SQLException ex) {
Stats.LogError("SQL exception (on close): " + ex.getMessage());
ex.printStackTrace();
}
}
}
@Override
public void save() {
save(true);
}
}

View File

@@ -3,35 +3,52 @@ package com.nidefawl.Stats.datasource;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import com.nidefawl.Stats.Stats;
import com.nidefawl.Stats.StatsSettings;
public class StatsSQLConnectionManager {
public static Connection getConnection() {
try {
if (StatsSettings.useMySQL) {
Class.forName("com.mysql.jdbc.Driver");
Connection ret = DriverManager.getConnection(StatsSettings.dbUrl, StatsSettings.dbUsername, StatsSettings.dbPassword);
ret.setAutoCommit(true);
return ret;
} else {
Class.forName("org.sqlite.JDBC");
Connection ret = DriverManager.getConnection(StatsSettings.liteDb);
ret.setAutoCommit(true);
return ret;
}
} catch (SQLException e) {
Stats.LogError("Error getting SQL-connection: "+e.getMessage());
e.printStackTrace();
return null;
} catch (ClassNotFoundException e) {
Stats.LogError("Error getting SQL-connection: "+e.getMessage());
e.printStackTrace();
return null;
}
}
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() {
try {
if (conn == null || conn.isClosed()) {
if (StatsSettings.useMySQL) {
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection(StatsSettings.dbUrl, StatsSettings.dbUsername, StatsSettings.dbPassword);
} else {
Class.forName("org.sqlite.JDBC");
conn = DriverManager.getConnection(StatsSettings.liteDb);
}
}
} catch (SQLException e) {
Stats.LogError("Error getting SQL-connection: " + e.getMessage());
e.printStackTrace();
return null;
} catch (ClassNotFoundException e) {
Stats.LogError("Error getting SQL-connection: " + e.getMessage());
e.printStackTrace();
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() {
}
@Override
public void onCustomEvent(Event event) {
if (event instanceof StatsMobDeathByPlayerEvent) {
onStatsMobDeathByPlayerEvent((StatsMobDeathByPlayerEvent) event);
@@ -20,29 +22,29 @@ public class StatsListener extends CustomEventListener implements Listener {
onStatsPlayerDeathByPlayerEvent((StatsPlayerDeathByPlayerEvent) event);
} else if (event instanceof StatsPlayerDeathByOtherEvent) {
onStatsPlayerDeathByOtherEvent((StatsPlayerDeathByOtherEvent) event);
}else if (event instanceof StatsPlayerMoveEvent) {
} else if (event instanceof StatsPlayerMoveEvent) {
onStatsPlayerMoveEvent((StatsPlayerMoveEvent) event);
}
}
public void onStatsPlayerMoveEvent(StatsPlayerMoveEvent event) {
}
public void onStatsPlayerDeathByOtherEvent(StatsPlayerDeathByOtherEvent event) {
}
public void onStatsPlayerDeathByPlayerEvent(StatsPlayerDeathByPlayerEvent event) {
}
public void onStatsPlayerDeathByEntityEvent(StatsPlayerDeathByEntityEvent event) {
}
public void onStatsPlayerDamagedPlayerEvent(StatsPlayerDamagedPlayerEvent event) {
}
public void onStatsMobDeathByPlayerEvent(StatsMobDeathByPlayerEvent event) {

View File

@@ -2,50 +2,34 @@ package com.nidefawl.Stats.event;
import org.bukkit.entity.Entity;
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 Entity entity;
private Player player;
boolean isCancelled;
EntityDeathEvent base;
@Override
public boolean isCancelled() {
return this.isCancelled;
}
@Override
public void setCancelled(boolean arg0) {
isCancelled = arg0;
}
public StatsMobDeathByPlayerEvent(Player player, Entity entity) {
super("StatsPlayerDamageEvent");
this.entity = entity;
public StatsMobDeathByPlayerEvent(EntityDeathEvent event, Player player, Entity entity) {
super("StatsMobDeathByPlayerEvent");
this.base = event;
this.player = player;
isCancelled=false;
}
/**
* @param entity the entity to set
*/
public void setEntity(Entity entity) {
this.entity = entity;
isCancelled = false;
}
/**
* @return the entity
*/
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) {
this.player = player;
@@ -57,5 +41,5 @@ public class StatsMobDeathByPlayerEvent extends org.bukkit.event.Event implement
public Player getPlayer() {
return player;
}
}

View File

@@ -22,16 +22,18 @@ public class StatsPlayerDamagedPlayerEvent extends org.bukkit.event.Event implem
public void setCancelled(boolean arg0) {
isCancelled = arg0;
}
public StatsPlayerDamagedPlayerEvent(Player player, Player damaged, int damage) {
super("StatsPlayerDamageEvent");
super("StatsPlayerDamagedPlayerEvent");
this.player = player;
this.damaged = damaged;
this.damage = damage;
isCancelled=false;
isCancelled = false;
}
/**
* @param player the player to set
* @param player
* the player to set
*/
public void setPlayer(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) {
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) {
this.damaged = damaged;

View File

@@ -3,6 +3,7 @@ package com.nidefawl.Stats.event;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Player;
import org.bukkit.event.Cancellable;
import org.bukkit.event.entity.EntityDeathEvent;
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 Entity entity;
boolean isCancelled;
private EntityDeathEvent base;
@Override
public boolean isCancelled() {
@@ -23,14 +25,18 @@ public class StatsPlayerDeathByEntityEvent extends org.bukkit.event.Event implem
isCancelled = arg0;
}
public StatsPlayerDeathByEntityEvent(Player player, Entity entity) {
super("StatsPlayerDamageEvent");
public StatsPlayerDeathByEntityEvent(EntityDeathEvent event, Player player, Entity entity) {
super("StatsPlayerDeathByEntityEvent");
this.base = event;
this.player = player;
this.entity = entity;
isCancelled=false;
isCancelled = false;
}
/**
* @param player the player to set
* @param player
* the player to set
*/
public void setPlayer(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) {
this.entity = entity;
@@ -57,5 +64,11 @@ public class StatsPlayerDeathByEntityEvent extends org.bukkit.event.Event implem
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.event.Cancellable;
import org.bukkit.event.entity.EntityDeathEvent;
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 String reason;
boolean isCancelled;
private EntityDeathEvent base;
@Override
public boolean isCancelled() {
@@ -22,15 +24,17 @@ public class StatsPlayerDeathByOtherEvent extends org.bukkit.event.Event impleme
isCancelled = arg0;
}
public StatsPlayerDeathByOtherEvent(Player player, String reason) {
super("StatsPlayerDamageEvent");
public StatsPlayerDeathByOtherEvent(EntityDeathEvent event, Player player, String reason) {
super("StatsPlayerDeathByOtherEvent");
this.base = event;
this.player = player;
this.reason = reason;
isCancelled=false;
isCancelled = false;
}
/**
* @param player the player to set
* @param player
* the player to set
*/
public void setPlayer(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) {
this.reason = reason;
}
/**
* @return the base
*/
public EntityDeathEvent getBase() {
return base;
}
/**
* @return the reason
*/

View File

@@ -2,8 +2,9 @@ package com.nidefawl.Stats.event;
import org.bukkit.entity.Player;
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 killer;
boolean isCancelled;
private EntityDeathEvent base;
@Override
public boolean isCancelled() {
@@ -22,14 +24,17 @@ public class StatsPlayerDeathByPlayerEvent extends org.bukkit.event.Event implem
isCancelled = arg0;
}
public StatsPlayerDeathByPlayerEvent(Player player, Player killer) {
super("StatsPlayerDamageEvent");
public StatsPlayerDeathByPlayerEvent(EntityDeathEvent event, Player player, Player killer) {
super("StatsPlayerDeathByPlayerEvent");
this.base = event;
this.player = player;
this.killer = killer;
isCancelled=false;
isCancelled = false;
}
/**
* @param player the player to set
* @param player
* the player to set
*/
public void setPlayer(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) {
this.killer = killer;
}
/**
* @return the base
*/
public EntityDeathEvent getBase() {
return base;
}
/**
* @return the killer
*/

View File

@@ -1,35 +1,42 @@
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 String player;
private int distance;
public StatsPlayerMoveEvent(String player, int distance) {
super("StatsPlayerDamageEvent");
super("StatsPlayerMoveEvent");
this.player = player;
this.distance = distance;
}
/**
* @param player the player to set
* @param player
* the player to set
*/
public void setPlayer(String player) {
this.player = player;
}
/**
* @return the player
*/
public String getPlayer() {
return player;
}
/**
* @param distance the distance to set
* @param distance
* the distance to set
*/
public void setDistance(int distance) {
this.distance = distance;
}
/**
* @return the distance
*/

View File

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