Fix for Permissions 3.x (2.x should still work)
This commit is contained in:
8
META-INF/MANIFEST.MF
Executable file
8
META-INF/MANIFEST.MF
Executable file
@@ -0,0 +1,8 @@
|
||||
Manifest-Version: 1.0
|
||||
Class-Path: Stats/lib/sqlite.jar Stats/lib/mysql.jar GroupManager.jar Permissions.jar
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
66
com/nidefawl/Stats/Permissions/GroupManagerResolver.java
Executable file
66
com/nidefawl/Stats/Permissions/GroupManagerResolver.java
Executable file
@@ -0,0 +1,66 @@
|
||||
package com.nidefawl.Stats.Permissions;
|
||||
|
||||
import java.util.logging.Logger;
|
||||
|
||||
import org.anjocaido.groupmanager.GroupManager;
|
||||
import org.anjocaido.groupmanager.data.Group;
|
||||
import org.anjocaido.groupmanager.data.User;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.plugin.Plugin;
|
||||
|
||||
public class GroupManagerResolver implements PermissionsResolver {
|
||||
public static final Logger log = Logger.getLogger("Minecraft");
|
||||
Plugin plugin = null;
|
||||
private GroupManager perms = null;
|
||||
|
||||
public GroupManagerResolver(Plugin plugin) {
|
||||
this.plugin = plugin;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean load() {
|
||||
if (perms == null) {
|
||||
Plugin checkPlugin = plugin.getServer().getPluginManager().getPlugin("GroupManager");
|
||||
if (checkPlugin != null && checkPlugin.isEnabled() && checkPlugin instanceof GroupManager) {
|
||||
perms = (GroupManager) checkPlugin;
|
||||
} else
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean permission(CommandSender sender, String permCmd) {
|
||||
if(sender.isOp()) return true;
|
||||
if(!(sender instanceof Player)) return false;
|
||||
if (!load())
|
||||
return false;
|
||||
final Player player = (Player)sender;
|
||||
return perms.getWorldsHolder().getWorldData(player).getPermissionsHandler().has(player, permCmd);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public boolean inGroup(Player player, String group) {
|
||||
if (!load())
|
||||
return false;
|
||||
Group g = perms.getWorldsHolder().getWorldData(player).getGroup(group);
|
||||
if(g==null) return false;
|
||||
User u = perms.getWorldsHolder().getWorldData(player).getUser(player.getName());
|
||||
if(u==null) return false;
|
||||
return u.containsSubGroup(g)||u.getGroup().equals(g);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void reloadPerms() {
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getGroup(Player player) {
|
||||
User u = perms.getWorldsHolder().getWorldData(player).getUser(player.getName());
|
||||
if(u==null) return "";
|
||||
return u.getGroupName();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -59,7 +59,11 @@ public class NijiPermissionsResolver implements PermissionsResolver {
|
||||
public void reloadPerms() {
|
||||
if (!load())
|
||||
return;
|
||||
perms.setupPermissions();
|
||||
if(Permissions.version.toLowerCase().startsWith("3.")) {
|
||||
((Permissions)Permissions.instance).getHandler().reload();
|
||||
} else {
|
||||
perms.setupPermissions();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -41,7 +41,7 @@ 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.985;
|
||||
public final static double version = 0.99;
|
||||
public final static String logprefix = "[Stats-" + version + "]";
|
||||
public final static String defaultCategory = "stats";
|
||||
public boolean enabled = false;
|
||||
|
||||
44
com/nidefawl/Stats/StatsServerListener.java
Executable file
44
com/nidefawl/Stats/StatsServerListener.java
Executable file
@@ -0,0 +1,44 @@
|
||||
package com.nidefawl.Stats;
|
||||
|
||||
import org.bukkit.event.server.PluginDisableEvent;
|
||||
import org.bukkit.event.server.PluginEnableEvent;
|
||||
import org.bukkit.event.server.ServerListener;
|
||||
import org.bukkit.plugin.Plugin;
|
||||
|
||||
import com.nidefawl.Stats.Permissions.GroupManagerResolver;
|
||||
import com.nidefawl.Stats.Permissions.NijiPermissionsResolver;
|
||||
import com.nidefawl.Stats.Permissions.defaultResolver;
|
||||
|
||||
public class StatsServerListener extends ServerListener {
|
||||
Stats stats = null;
|
||||
public StatsServerListener(Stats plugin) {
|
||||
this.stats = plugin;
|
||||
}
|
||||
@Override
|
||||
public void onPluginEnable(PluginEnableEvent event) {
|
||||
Plugin plugin = event.getPlugin();
|
||||
String name = plugin.getDescription().getName();
|
||||
if (name.equals("GroupManager")) {
|
||||
stats.setPerms(new GroupManagerResolver(plugin));
|
||||
} else if (name.equals("Permissions")) {
|
||||
stats.setPerms(new NijiPermissionsResolver(plugin));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Called when a plugin is disabled
|
||||
*
|
||||
* @param event Relevant event details
|
||||
*/
|
||||
@Override
|
||||
public void onPluginDisable(PluginDisableEvent event) {
|
||||
Plugin plugin = event.getPlugin();
|
||||
String name = plugin.getDescription().getName();
|
||||
if (name.equals("GroupManager")) {
|
||||
stats.setPerms(new defaultResolver());
|
||||
} else if (name.equals("Permissions")) {
|
||||
stats.setPerms(new defaultResolver());
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
223
com/nidefawl/Stats/StatsView.java
Executable file
223
com/nidefawl/Stats/StatsView.java
Executable file
@@ -0,0 +1,223 @@
|
||||
package com.nidefawl.Stats;
|
||||
|
||||
import java.sql.Date;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.Server;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.command.ConsoleCommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
import com.nidefawl.Stats.datasource.Category;
|
||||
import com.nidefawl.Stats.datasource.PlayerStat;
|
||||
|
||||
public class StatsView {
|
||||
|
||||
public static boolean onCommand(Stats plugin, CommandSender sender, String[] args) {
|
||||
if (!plugin.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(plugin.getServer(), args[0]);
|
||||
if (who != null) {
|
||||
if (!plugin.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(plugin, who.getName(), args[offs])) {
|
||||
printStat(plugin, sender, who, "stats", args[offs]);
|
||||
return true;
|
||||
} else if (plugin.getItems().getItem(args[offs]) != 0 && !(args[offs].equals("boat") || args[offs].equals("minecart"))) {
|
||||
printStat(plugin, sender, who, "blockcreate", args[offs]);
|
||||
printStat(plugin, sender, who, "blockdestroy", args[offs]);
|
||||
return true;
|
||||
} else if (isCat(plugin, who.getName(), args[offs])) {
|
||||
sender.sendMessage(StatsSettings.premessage + "Please choose: (/stats " + args[offs] + " <stat-name>)");
|
||||
sender.sendMessage(StatsSettings.premessage + ChatColor.WHITE + getCatEntries(plugin, 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(plugin, who.getName()));
|
||||
return true;
|
||||
}
|
||||
} else if (args.length == offs + 2) {
|
||||
if (isCat(plugin, who.getName(), args[offs])) {
|
||||
printStat(plugin, 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(plugin, who.getName()));
|
||||
return true;
|
||||
}
|
||||
}
|
||||
int playedTime = plugin.get(who.getName(), "stats", "playedfor");
|
||||
int movedBlocks = plugin.get(who.getName(), "stats", "move");
|
||||
int totalCreate = plugin.get(who.getName(), "stats", "totalblockcreate");
|
||||
int totalDestroy = plugin.get(who.getName(), "stats", "totalblockdestroy");
|
||||
int tkills = plugin.get(who.getName(), "kills", "total");
|
||||
int tdeaths = plugin.get(who.getName(), "deaths", "total");
|
||||
int pdeaths = plugin.get(who.getName(), "deaths", "player");
|
||||
int pkills = plugin.get(who.getName(), "kills", "player");
|
||||
int totalDamage = plugin.get(who.getName(), "damagetaken", "total");
|
||||
int totalDamageDealt = plugin.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;
|
||||
}
|
||||
|
||||
public static Player playerMatch(Server server, String name) {
|
||||
List<Player> list = server.matchPlayer(name);
|
||||
for (Player p : list)
|
||||
if (p != null && p.getName().equalsIgnoreCase(name))
|
||||
return p;
|
||||
return null;
|
||||
}
|
||||
|
||||
private static 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 static boolean isCat(Stats plugin, String player, String category) {
|
||||
PlayerStat ps = plugin.getStats().get(player);
|
||||
if (ps == null)
|
||||
return false;
|
||||
Category cat = ps.get(category);
|
||||
if (cat == null)
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
public static void printStat(Stats plugin, CommandSender sendTo, Player statPlayer, String cat, String stat) {
|
||||
long statVal = plugin.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 static 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 static String getCatEntries(Stats plugin, String player, String category) {
|
||||
PlayerStat ps = plugin.getStats().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 static String getCats(Stats plugin, String player) {
|
||||
PlayerStat ps = plugin.getStats().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 static boolean isStat(Stats plugin, String player, String stat) {
|
||||
PlayerStat ps = plugin.getStats().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;
|
||||
}
|
||||
}
|
||||
15
com/nidefawl/Stats/udpates/Update1.java
Executable file
15
com/nidefawl/Stats/udpates/Update1.java
Executable file
@@ -0,0 +1,15 @@
|
||||
package com.nidefawl.Stats.udpates;
|
||||
|
||||
import java.io.File;
|
||||
|
||||
import com.nidefawl.Stats.Stats;
|
||||
|
||||
public class Update1 {
|
||||
public static void execute(Stats plugin) {
|
||||
File oldLoc = new File("items.txt");
|
||||
if(oldLoc.exists()) {
|
||||
Stats.LogInfo("Moving items.txt to "+plugin.getDataFolder().getPath()+"/items.txt");
|
||||
oldLoc.renameTo(new File(plugin.getDataFolder(),"items.txt"));
|
||||
}
|
||||
}
|
||||
}
|
||||
96
com/nidefawl/Stats/udpates/Update2.java
Executable file
96
com/nidefawl/Stats/udpates/Update2.java
Executable file
@@ -0,0 +1,96 @@
|
||||
package com.nidefawl.Stats.udpates;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileWriter;
|
||||
import java.io.IOException;
|
||||
import java.sql.Connection;
|
||||
import java.sql.PreparedStatement;
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.SQLException;
|
||||
|
||||
import com.nidefawl.Stats.Stats;
|
||||
import com.nidefawl.Stats.StatsSettings;
|
||||
import com.nidefawl.Stats.ItemResolver.hModItemResolver;
|
||||
import com.nidefawl.Stats.ItemResolver.itemResolver;
|
||||
import com.nidefawl.Stats.datasource.StatsSQLConnectionManager;
|
||||
|
||||
public class Update2 {
|
||||
public static void execute(Stats plugin) {
|
||||
FileWriter writer;
|
||||
itemResolver items = new hModItemResolver(new File(plugin.getDataFolder(),"items.txt"));
|
||||
try {
|
||||
writer = new FileWriter(new File(plugin.getDataFolder(),"items.txt"),true);
|
||||
if (writer != null) {
|
||||
try {
|
||||
if(items.getItem(26).equals("26")) {
|
||||
Stats.LogInfo("Adding bedblock (26) to items.txt");
|
||||
writer.write("bedblock:26\r\n");
|
||||
Stats.LogInfo("Updating stats in database");
|
||||
UpdateItemStatKey("26","bedblock");
|
||||
}
|
||||
if(items.getItem(93).equals("93")) {
|
||||
Stats.LogInfo("Adding repeateron (93) to items.txt");
|
||||
writer.write("repeateron:93\r\n");
|
||||
Stats.LogInfo("Updating stats in database");
|
||||
UpdateItemStatKey("93","repeateron");
|
||||
}
|
||||
if(items.getItem(94).equals("94")) {
|
||||
Stats.LogInfo("Adding repeateroff (94) to items.txt");
|
||||
writer.write("repeateroff:94\r\n");
|
||||
Stats.LogInfo("Updating stats in database");
|
||||
UpdateItemStatKey("94","repeateroff");
|
||||
}
|
||||
if(items.getItem(355).equals("355")) {
|
||||
Stats.LogInfo("Adding bed (355) to items.txt");
|
||||
writer.write("bed:355\r\n");
|
||||
Stats.LogInfo("Updating stats in database");
|
||||
UpdateItemStatKey("355","bed");
|
||||
}
|
||||
if(items.getItem(356).equals("356")) {
|
||||
Stats.LogInfo("Adding repeater (356) to items.txt");
|
||||
writer.write("repeater:356\r\n");
|
||||
Stats.LogInfo("Updating stats in database");
|
||||
UpdateItemStatKey("356","repeater");
|
||||
}
|
||||
writer.close();
|
||||
plugin.setItems( new hModItemResolver(new File(plugin.getDataFolder(),"items.txt")));
|
||||
} catch (IOException e) {
|
||||
Stats.LogError("Exception while updating "+plugin.getDataFolder().getPath()+"/items.txt "+ e);
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
} catch (IOException e1) {
|
||||
e1.printStackTrace();
|
||||
}
|
||||
}
|
||||
static void UpdateItemStatKey(String oldKey,String newKey) {
|
||||
|
||||
int result = 0;
|
||||
Connection conn = null;
|
||||
PreparedStatement ps = null;
|
||||
ResultSet rs = null;
|
||||
try {
|
||||
conn = StatsSQLConnectionManager.getConnection(StatsSettings.useMySQL);
|
||||
ps = conn.prepareStatement("UPDATE " + StatsSettings.dbTable + " set stat = ? where stat = ? and (category = 'blockdestroy' or category = 'blockcreate' or category = 'itemuse' or category = 'itemdrop' or category = 'itempickup');");
|
||||
ps.setString(1, newKey);
|
||||
ps.setString(2, oldKey);
|
||||
result = ps.executeUpdate();
|
||||
} catch (SQLException ex) {
|
||||
Stats.LogError("SQL exception" + ex);
|
||||
ex.printStackTrace();
|
||||
} finally {
|
||||
try {
|
||||
if (rs != null)
|
||||
rs.close();
|
||||
if (ps != null)
|
||||
ps.close();
|
||||
if (conn != null)
|
||||
conn.close();
|
||||
} catch (SQLException ex) {
|
||||
Stats.LogError("SQL exception on close"+ ex);
|
||||
ex.printStackTrace();
|
||||
}
|
||||
}
|
||||
Stats.LogInfo("Updated " + result + " stats.");
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
name: Stats
|
||||
main: com.nidefawl.Stats.Stats
|
||||
version: 0.985
|
||||
version: 0.99
|
||||
author: nidefawl
|
||||
commands:
|
||||
stats:
|
||||
|
||||
Reference in New Issue
Block a user