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