Fix for Permissions 3.x (2.x should still work)

This commit is contained in:
Your Name
2011-07-24 16:37:39 +02:00
parent 6e828996db
commit 778da9d56b
9 changed files with 459 additions and 3 deletions

8
META-INF/MANIFEST.MF Executable file
View File

@@ -0,0 +1,8 @@
Manifest-Version: 1.0
Class-Path: Stats/lib/sqlite.jar Stats/lib/mysql.jar GroupManager.jar Permissions.jar

View 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();
}
}

View File

@@ -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();
}
}
}

View File

@@ -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;

View 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
View 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;
}
}

View 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"));
}
}
}

View 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.");
}
}

View File

@@ -1,6 +1,6 @@
name: Stats
main: com.nidefawl.Stats.Stats
version: 0.985
version: 0.99
author: nidefawl
commands:
stats: