Added Support for UUID

This commit is contained in:
Sn0wStorm
2014-06-06 01:27:27 +02:00
parent 28dcfbe5d2
commit e8c905e19f
7 changed files with 169 additions and 68 deletions
+2
View File
@@ -66,6 +66,8 @@ permissions:
description: Copy Potions description: Copy Potions
brewery.cmd.delete: brewery.cmd.delete:
description: Delete Potions description: Delete Potions
brewery.cmd.persist:
description: Make Potions Persistent
brewery.cmd.reload: brewery.cmd.reload:
description: Reload config description: Reload config
+87 -35
View File
@@ -3,7 +3,9 @@ package com.dre.brewery;
import java.util.Map; import java.util.Map;
import java.util.HashMap; import java.util.HashMap;
import java.util.Iterator; import java.util.Iterator;
import java.util.UUID;
import org.bukkit.OfflinePlayer;
import org.bukkit.event.player.PlayerMoveEvent; import org.bukkit.event.player.PlayerMoveEvent;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.entity.Entity; import org.bukkit.entity.Entity;
@@ -17,7 +19,7 @@ import org.bukkit.potion.PotionEffectType;
import org.bukkit.configuration.ConfigurationSection; import org.bukkit.configuration.ConfigurationSection;
public class BPlayer { public class BPlayer {
public static Map<String, BPlayer> players = new HashMap<String, BPlayer>();// Players name and BPlayer private static Map<String, BPlayer> players = new HashMap<String, BPlayer>();// Players name/uuid and BPlayer
private static Map<Player, Integer> pTasks = new HashMap<Player, Integer>();// Player and count private static Map<Player, Integer> pTasks = new HashMap<Player, Integer>();// Player and count
private static int taskId; private static int taskId;
@@ -50,31 +52,81 @@ public class BPlayer {
players.put(name, this); players.put(name, this);
} }
public static BPlayer get(String name) { public static BPlayer get(Player player) {
if (!players.isEmpty()) { if (!players.isEmpty()) {
if (players.containsKey(name)) { return players.get(P.playerString(player));
return players.get(name);
}
} }
return null; return null;
} }
/*public String getPlayerName() { // This method may be slow and should not be used if not needed
for (Map.Entry<String,BPlayer> entry : players.entrySet()) { public static BPlayer getByName(String playerName) {
if (P.useUUID) {
for (Map.Entry<String, BPlayer> entry : players.entrySet()) {
OfflinePlayer p = P.p.getServer().getOfflinePlayer(UUID.fromString(entry.getKey()));
if (p != null) {
String name = p.getName();
if (name != null) {
if (name.equalsIgnoreCase(playerName)) {
return entry.getValue();
}
}
}
}
return null;
}
return players.get(playerName);
}
// This method may be slow and should not be used if not needed
public static boolean hasPlayerbyName(String playerName) {
if (P.useUUID) {
for (Map.Entry<String, BPlayer> entry : players.entrySet()) {
OfflinePlayer p = P.p.getServer().getOfflinePlayer(UUID.fromString(entry.getKey()));
if (p != null) {
String name = p.getName();
if (name != null) {
if (name.equalsIgnoreCase(playerName)) {
return true;
}
}
}
}
return false;
}
return players.containsKey(playerName);
}
public static boolean isEmpty() {
return players.isEmpty();
}
public static boolean hasPlayer(Player player) {
return players.containsKey(P.playerString(player));
}
// Create a new BPlayer and add it to the list
public static BPlayer addPlayer(Player player) {
BPlayer bPlayer = new BPlayer();
players.put(P.playerString(player), bPlayer);
return bPlayer;
}
public static void remove(Player player) {
players.remove(P.playerString(player));
}
public void remove() {
for (Map.Entry<String, BPlayer> entry : players.entrySet()) {
if (entry.getValue() == this) { if (entry.getValue() == this) {
return entry.getKey(); players.remove(entry.getKey());
return;
} }
} }
return null;
} }
public Player getPlayer() { public static void clear() {
return org.bukkit.Bukkit.getPlayer(getPlayerName()); players.clear();
}*/
// returns the Player if online
public static Player getPlayer(String name) {
return org.bukkit.Bukkit.getPlayerExact(name);
} }
// Drink a brew and apply effects, etc. // Drink a brew and apply effects, etc.
@@ -85,10 +137,9 @@ public class BPlayer {
addBrewEffects(brew, player); addBrewEffects(brew, player);
return; return;
} }
BPlayer bPlayer = get(player.getName()); BPlayer bPlayer = get(player);
if (bPlayer == null) { if (bPlayer == null) {
bPlayer = new BPlayer(); bPlayer = addPlayer(player);
players.put(player.getName(), bPlayer);
} }
bPlayer.drunkeness += brewAlc; bPlayer.drunkeness += brewAlc;
if (brew.getQuality() > 0) { if (brew.getQuality() > 0) {
@@ -121,29 +172,29 @@ public class BPlayer {
// push the player around if he moves // push the player around if he moves
public static void playerMove(PlayerMoveEvent event) { public static void playerMove(PlayerMoveEvent event) {
BPlayer bPlayer = get(event.getPlayer().getName()); BPlayer bPlayer = get(event.getPlayer());
if (bPlayer != null) { if (bPlayer != null) {
bPlayer.move(event); bPlayer.move(event);
} }
} }
// Eat something to drain the drunkeness // Eat something to drain the drunkeness
public void drainByItem(String name, Material mat) { public void drainByItem(Player player, Material mat) {
int strength = drainItems.get(mat); int strength = drainItems.get(mat);
if (drain(name, strength)) { if (drain(player, strength)) {
players.remove(name); remove(player);
} }
} }
// drain the drunkeness by amount, returns true when player has to be removed // drain the drunkeness by amount, returns true when player has to be removed
public boolean drain(String name, int amount) { public boolean drain(Player player, int amount) {
if (drunkeness > 0) { if (drunkeness > 0) {
quality -= getQuality() * amount; quality -= getQuality() * amount;
} }
drunkeness -= amount; drunkeness -= amount;
if (drunkeness > 0) { if (drunkeness > 0) {
if (offlineDrunk == 0) { if (offlineDrunk == 0) {
if (getPlayer(name) == null) { if (player == null) {
offlineDrunk = drunkeness; offlineDrunk = drunkeness;
} }
} }
@@ -263,7 +314,7 @@ public class BPlayer {
} }
hangoverEffects(player); hangoverEffects(player);
// wird der spieler noch gebraucht? // wird der spieler noch gebraucht?
players.remove(player.getName()); players.remove(P.playerString(player));
} else if (offlineDrunk - drunkeness >= 30) { } else if (offlineDrunk - drunkeness >= 30) {
Location randomLoc = Wakeup.getRandom(player.getLocation()); Location randomLoc = Wakeup.getRandom(player.getLocation());
@@ -448,7 +499,7 @@ public class BPlayer {
if (bplayer.drunkeness > 30) { if (bplayer.drunkeness > 30) {
if (bplayer.offlineDrunk == 0) { if (bplayer.offlineDrunk == 0) {
Player player = getPlayer(name); Player player = P.getPlayerfromString(name);
if (player != null) { if (player != null) {
bplayer.drunkEffects(player); bplayer.drunkEffects(player);
@@ -476,7 +527,7 @@ public class BPlayer {
// Prevent 0 drunkeness // Prevent 0 drunkeness
soberPerMin++; soberPerMin++;
} }
if (bplayer.drain(name, soberPerMin)) { if (bplayer.drain(P.getPlayerfromString(name), soberPerMin)) {
iter.remove(); iter.remove();
} }
} }
@@ -485,14 +536,15 @@ public class BPlayer {
// save all data // save all data
public static void save(ConfigurationSection config) { public static void save(ConfigurationSection config) {
for (String name : players.keySet()) { for (Map.Entry<String, BPlayer> entry : players.entrySet()) {
ConfigurationSection section = config.createSection(name); ConfigurationSection section = config.createSection(entry.getKey());
section.set("quality", players.get(name).quality); BPlayer bPlayer = entry.getValue();
section.set("drunk", players.get(name).drunkeness); section.set("quality", bPlayer.quality);
if (players.get(name).offlineDrunk != 0) { section.set("drunk", bPlayer.drunkeness);
section.set("offDrunk", players.get(name).offlineDrunk); if (bPlayer.offlineDrunk != 0) {
section.set("offDrunk", bPlayer.offlineDrunk);
} }
if (players.get(name).passedOut) { if (bPlayer.passedOut) {
section.set("passedOut", true); section.set("passedOut", true);
} }
} }
+42 -3
View File
@@ -7,6 +7,7 @@ import java.util.ListIterator;
import java.util.HashMap; import java.util.HashMap;
import java.io.IOException; import java.io.IOException;
import java.io.File; import java.io.File;
import java.util.UUID;
import java.util.logging.Level; import java.util.logging.Level;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@@ -35,6 +36,7 @@ public class P extends JavaPlugin {
public static int lastBackup = 0; public static int lastBackup = 0;
public static int lastSave = 1; public static int lastSave = 1;
public static int autosave = 3; public static int autosave = 3;
public static boolean useUUID;
// Third Party Enabled // Third Party Enabled
public boolean useWG; //WorldGuard public boolean useWG; //WorldGuard
@@ -57,6 +59,11 @@ public class P extends JavaPlugin {
public void onEnable() { public void onEnable() {
p = this; p = this;
// Version check
String v = Bukkit.getBukkitVersion();
useUUID = !v.matches(".*1\\.[1-6].*") && !v.matches(".*1\\.7\\.[0-5].*");
P.p.log("Bukkit Version: " + v + "uuid: " + useUUID);
readConfig(); readConfig();
readData(); readData();
@@ -105,7 +112,7 @@ public class P extends JavaPlugin {
BIngredients.possibleIngredients.clear(); BIngredients.possibleIngredients.clear();
BIngredients.recipes.clear(); BIngredients.recipes.clear();
BIngredients.cookedNames.clear(); BIngredients.cookedNames.clear();
BPlayer.players.clear(); BPlayer.clear();
Brew.potions.clear(); Brew.potions.clear();
Wakeup.wakeups.clear(); Wakeup.wakeups.clear();
Words.words.clear(); Words.words.clear();
@@ -319,6 +326,17 @@ public class P extends JavaPlugin {
if (section != null) { if (section != null) {
// keys have players name // keys have players name
for (String name : section.getKeys(false)) { for (String name : section.getKeys(false)) {
try {
UUID.fromString(name);
if (!useUUID) {
continue;
}
} catch (IllegalArgumentException e) {
if (useUUID) {
continue;
}
}
int quality = section.getInt(name + ".quality"); int quality = section.getInt(name + ".quality");
int drunk = section.getInt(name + ".drunk"); int drunk = section.getInt(name + ".drunk");
int offDrunk = section.getInt(name + ".offDrunk", 0); int offDrunk = section.getInt(name + ".offDrunk", 0);
@@ -493,7 +511,7 @@ public class P extends JavaPlugin {
Barrel.save(configFile.createSection("Barrel"), oldData.getConfigurationSection("Barrel")); Barrel.save(configFile.createSection("Barrel"), oldData.getConfigurationSection("Barrel"));
} }
if (!BPlayer.players.isEmpty()) { if (!BPlayer.isEmpty()) {
BPlayer.save(configFile.createSection("Player")); BPlayer.save(configFile.createSection("Player"));
} }
@@ -651,6 +669,27 @@ public class P extends JavaPlugin {
return msg; return msg;
} }
// Returns either uuid or Name of player, depending on bukkit version
public static String playerString(Player player) {
if (useUUID) {
return player.getUniqueId().toString();
} else {
return player.getName();
}
}
// returns the Player if online
public static Player getPlayerfromString(String name) {
if (useUUID) {
try {
return Bukkit.getPlayer(UUID.fromString(name));
} catch (IllegalArgumentException e) {
return Bukkit.getPlayerExact(name);
}
}
return Bukkit.getPlayerExact(name);
}
// Runnables // Runnables
public class DrunkRunnable implements Runnable { public class DrunkRunnable implements Runnable {
@@ -660,7 +699,7 @@ public class P extends JavaPlugin {
@Override @Override
public void run() { public void run() {
if (!BPlayer.players.isEmpty()) { if (!BPlayer.isEmpty()) {
BPlayer.drunkeness(); BPlayer.drunkeness();
} }
} }
+4 -4
View File
@@ -76,10 +76,10 @@ public class Words {
// Distort players words when he uses a command // Distort players words when he uses a command
public static void playerCommand(PlayerCommandPreprocessEvent event) { public static void playerCommand(PlayerCommandPreprocessEvent event) {
String name = event.getPlayer().getName(); BPlayer bPlayer = BPlayer.get(event.getPlayer());
BPlayer bPlayer = BPlayer.get(name);
if (bPlayer != null) { if (bPlayer != null) {
if (!commands.isEmpty() && loadWords()) { if (!commands.isEmpty() && loadWords()) {
String name = event.getPlayer().getName();
if (!waitPlayers.containsKey(name) || waitPlayers.get(name) + 500 < System.currentTimeMillis()) { if (!waitPlayers.containsKey(name) || waitPlayers.get(name) + 500 < System.currentTimeMillis()) {
String chat = event.getMessage(); String chat = event.getMessage();
for (String command : commands) { for (String command : commands) {
@@ -106,7 +106,7 @@ public class Words {
// Distort players words when he uses a command // Distort players words when he uses a command
public static void signWrite(SignChangeEvent event) { public static void signWrite(SignChangeEvent event) {
BPlayer bPlayer = BPlayer.get(event.getPlayer().getName()); BPlayer bPlayer = BPlayer.get(event.getPlayer());
if (bPlayer != null) { if (bPlayer != null) {
if (loadWords()) { if (loadWords()) {
int index = 0; int index = 0;
@@ -127,7 +127,7 @@ public class Words {
// Distort players words when he talks // Distort players words when he talks
public static void playerChat(AsyncPlayerChatEvent event) { public static void playerChat(AsyncPlayerChatEvent event) {
BPlayer bPlayer = BPlayer.get(event.getPlayer().getName()); BPlayer bPlayer = BPlayer.get(event.getPlayer());
if (bPlayer != null) { if (bPlayer != null) {
if (loadWords()) { if (loadWords()) {
String message = event.getMessage(); String message = event.getMessage();
@@ -37,7 +37,7 @@ public class BlockListener implements Listener {
@EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true)
public void onSignChangeLow(SignChangeEvent event) { public void onSignChangeLow(SignChangeEvent event) {
if (Words.doSigns) { if (Words.doSigns) {
if (BPlayer.players.containsKey(event.getPlayer().getName())) { if (BPlayer.hasPlayer(event.getPlayer())) {
Words.signWrite(event); Words.signWrite(event);
} }
} }
@@ -78,7 +78,7 @@ public class CommandListener implements CommandExecutor {
p.msg(sender, p.languageReader.get("Error_NoPermissions")); p.msg(sender, p.languageReader.get("Error_NoPermissions"));
} }
} else if (cmd.equalsIgnoreCase("delete") || cmd.equalsIgnoreCase("rm")) { } else if (cmd.equalsIgnoreCase("delete") || cmd.equalsIgnoreCase("rm") || cmd.equalsIgnoreCase("remove")) {
if (sender.hasPermission("brewery.cmd.delete")) { if (sender.hasPermission("brewery.cmd.delete")) {
cmdDelete(sender); cmdDelete(sender);
@@ -104,7 +104,7 @@ public class CommandListener implements CommandExecutor {
} else { } else {
if (p.getServer().getPlayerExact(cmd) != null || BPlayer.players.containsKey(cmd)) { if (p.getServer().getPlayerExact(cmd) != null || BPlayer.hasPlayerbyName(cmd)) {
if (args.length == 1) { if (args.length == 1) {
if (sender.hasPermission("brewery.cmd.infoOther")) { if (sender.hasPermission("brewery.cmd.infoOther")) {
@@ -267,23 +267,30 @@ public class CommandListener implements CommandExecutor {
} }
String playerName = args[0]; String playerName = args[0];
BPlayer bPlayer = BPlayer.get(playerName); Player player = P.p.getServer().getPlayerExact(playerName);
if (bPlayer == null) { BPlayer bPlayer;
if (player == null) {
bPlayer = BPlayer.getByName(playerName);
} else {
bPlayer = BPlayer.get(player);
}
if (bPlayer == null && player != null) {
if (drunkeness == 0) { if (drunkeness == 0) {
return; return;
} }
bPlayer = new BPlayer(); bPlayer = BPlayer.addPlayer(player);
BPlayer.players.put(playerName, bPlayer); }
if (bPlayer == null) {
return;
} }
if (drunkeness == 0) { if (drunkeness == 0) {
BPlayer.players.remove(playerName); bPlayer.remove();
} else { } else {
bPlayer.setData(drunkeness, quality); bPlayer.setData(drunkeness, quality);
} }
if (drunkeness > 100) { if (drunkeness > 100) {
Player player = p.getServer().getPlayer(playerName);
if (player != null) { if (player != null) {
bPlayer.drinkCap(player); bPlayer.drinkCap(player);
} else { } else {
@@ -308,7 +315,13 @@ public class CommandListener implements CommandExecutor {
} }
} }
BPlayer bPlayer = BPlayer.get(playerName); Player player = P.p.getServer().getPlayerExact(playerName);
BPlayer bPlayer;
if (player == null) {
bPlayer = BPlayer.getByName(playerName);
} else {
bPlayer = BPlayer.get(player);
}
if (bPlayer == null) { if (bPlayer == null) {
p.msg(sender, p.languageReader.get("CMD_Info_NotDrunk", playerName)); p.msg(sender, p.languageReader.get("CMD_Info_NotDrunk", playerName));
} else { } else {
@@ -163,9 +163,9 @@ public class PlayerListener implements Listener {
} }
} }
} else if (BPlayer.drainItems.containsKey(item.getType())) { } else if (BPlayer.drainItems.containsKey(item.getType())) {
BPlayer bplayer = BPlayer.get(player.getName()); BPlayer bplayer = BPlayer.get(player);
if (bplayer != null) { if (bplayer != null) {
bplayer.drainByItem(player.getName(), item.getType()); bplayer.drainByItem(player, item.getType());
} }
} }
} }
@@ -174,13 +174,12 @@ public class PlayerListener implements Listener {
// Player has died! Decrease Drunkeness by 20 // Player has died! Decrease Drunkeness by 20
@EventHandler @EventHandler
public void onPlayerRespawn(PlayerRespawnEvent event) { public void onPlayerRespawn(PlayerRespawnEvent event) {
String playerName = event.getPlayer().getName(); BPlayer bPlayer = BPlayer.get(event.getPlayer());
BPlayer bPlayer = BPlayer.get(playerName);
if (bPlayer != null) { if (bPlayer != null) {
if (bPlayer.getDrunkeness() > 20) { if (bPlayer.getDrunkeness() > 20) {
bPlayer.setData(bPlayer.getDrunkeness() - 20, 0); bPlayer.setData(bPlayer.getDrunkeness() - 20, 0);
} else { } else {
BPlayer.players.remove(playerName); BPlayer.remove(event.getPlayer());
} }
} }
} }
@@ -188,7 +187,7 @@ public class PlayerListener implements Listener {
// player walks while drunk, push him around! // player walks while drunk, push him around!
@EventHandler(priority = EventPriority.LOW) @EventHandler(priority = EventPriority.LOW)
public void onPlayerMove(PlayerMoveEvent event) { public void onPlayerMove(PlayerMoveEvent event) {
if (BPlayer.players.containsKey(event.getPlayer().getName())) { if (BPlayer.hasPlayer(event.getPlayer())) {
BPlayer.playerMove(event); BPlayer.playerMove(event);
} }
} }
@@ -196,25 +195,21 @@ public class PlayerListener implements Listener {
// player talks while drunk, but he cant speak very well // player talks while drunk, but he cant speak very well
@EventHandler(priority = EventPriority.LOWEST) @EventHandler(priority = EventPriority.LOWEST)
public void onPlayerChat(AsyncPlayerChatEvent event) { public void onPlayerChat(AsyncPlayerChatEvent event) {
if (BPlayer.players.containsKey(event.getPlayer().getName())) {
Words.playerChat(event); Words.playerChat(event);
} }
}
// player commands while drunk, distort chat commands // player commands while drunk, distort chat commands
@EventHandler(priority = EventPriority.LOWEST) @EventHandler(priority = EventPriority.LOWEST)
public void onCommandPreProcess(PlayerCommandPreprocessEvent event) { public void onCommandPreProcess(PlayerCommandPreprocessEvent event) {
if (BPlayer.players.containsKey(event.getPlayer().getName())) {
Words.playerCommand(event); Words.playerCommand(event);
} }
}
// player joins while passed out // player joins while passed out
@EventHandler() @EventHandler()
public void onPlayerLogin(PlayerLoginEvent event) { public void onPlayerLogin(PlayerLoginEvent event) {
if (event.getResult() == PlayerLoginEvent.Result.ALLOWED) { if (event.getResult() == PlayerLoginEvent.Result.ALLOWED) {
final Player player = event.getPlayer(); final Player player = event.getPlayer();
BPlayer bplayer = BPlayer.get(player.getName()); BPlayer bplayer = BPlayer.get(player);
if (bplayer != null) { if (bplayer != null) {
if (player.hasPermission("brewery.bypass.logindeny")) { if (player.hasPermission("brewery.bypass.logindeny")) {
if (bplayer.getDrunkeness() > 100) { if (bplayer.getDrunkeness() > 100) {
@@ -239,7 +234,7 @@ public class PlayerListener implements Listener {
@EventHandler @EventHandler
public void onPlayerQuit(PlayerQuitEvent event) { public void onPlayerQuit(PlayerQuitEvent event) {
BPlayer bplayer = BPlayer.get(event.getPlayer().getName()); BPlayer bplayer = BPlayer.get(event.getPlayer());
if (bplayer != null) { if (bplayer != null) {
bplayer.disconnecting(); bplayer.disconnecting();
} }
@@ -247,7 +242,7 @@ public class PlayerListener implements Listener {
@EventHandler @EventHandler
public void onPlayerKick(PlayerKickEvent event) { public void onPlayerKick(PlayerKickEvent event) {
BPlayer bplayer = BPlayer.get(event.getPlayer().getName()); BPlayer bplayer = BPlayer.get(event.getPlayer());
if (bplayer != null) { if (bplayer != null) {
bplayer.disconnecting(); bplayer.disconnecting();
} }