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