0.8
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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());
|
||||
|
||||
@@ -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
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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) {
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -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) {
|
||||
}
|
||||
|
||||
|
||||
@@ -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) {
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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", "");
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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) {
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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
|
||||
*/
|
||||
|
||||
@@ -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
|
||||
*/
|
||||
|
||||
@@ -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
|
||||
*/
|
||||
|
||||
@@ -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
|
||||
*
|
||||
|
||||
Reference in New Issue
Block a user