diff --git a/plugin.yml b/plugin.yml index a77ddb3..a6b681b 100644 --- a/plugin.yml +++ b/plugin.yml @@ -6,7 +6,7 @@ softdepend: [LWC, LogBlock, WorldGuard, GriefPrevention] commands: brewery: description: Command for Administration - aliases: [brew,br] + aliases: [brew] permissions: # -- Groups -- # User @@ -39,6 +39,7 @@ permissions: brewery.cmd.player: true brewery.cmd.copy: true brewery.cmd.delete: true + brewery.cmd.persist: true brewery.cmd.reload: true # * brewery.*: @@ -65,6 +66,8 @@ permissions: description: Copy Potions brewery.cmd.delete: description: Delete Potions + brewery.cmd.persist: + description: Make Potions Persistent brewery.cmd.reload: description: Reload config diff --git a/pom.xml b/pom.xml index e63c2a6..a39ff5b 100644 --- a/pom.xml +++ b/pom.xml @@ -123,7 +123,7 @@ org.bukkit bukkit - 1.7.2-R0.3 + 1.7.9-R0.2 provided diff --git a/src/com/dre/brewery/BPlayer.java b/src/com/dre/brewery/BPlayer.java index 5d04311..ae72996 100644 --- a/src/com/dre/brewery/BPlayer.java +++ b/src/com/dre/brewery/BPlayer.java @@ -3,7 +3,9 @@ package com.dre.brewery; import java.util.Map; import java.util.HashMap; import java.util.Iterator; +import java.util.UUID; +import org.bukkit.OfflinePlayer; import org.bukkit.event.player.PlayerMoveEvent; import org.bukkit.entity.Player; import org.bukkit.entity.Entity; @@ -16,7 +18,7 @@ import org.bukkit.potion.PotionEffectType; import org.bukkit.configuration.ConfigurationSection; public class BPlayer { - public static Map players = new HashMap();// Players name and BPlayer + private static Map players = new HashMap();// Players name/uuid and BPlayer private static Map pTasks = new HashMap();// Player and count private static int taskId; @@ -49,66 +51,110 @@ public class BPlayer { players.put(name, this); } - public static BPlayer get(String name) { + public static BPlayer get(Player player) { if (!players.isEmpty()) { - if (players.containsKey(name)) { - return players.get(name); - } + return players.get(P.playerString(player)); } return null; } - /*public String getPlayerName() { - for (Map.Entry entry : players.entrySet()) { + // This method may be slow and should not be used if not needed + public static BPlayer getByName(String playerName) { + if (P.useUUID) { + for (Map.Entry 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 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 entry : players.entrySet()) { if (entry.getValue() == this) { - return entry.getKey(); + players.remove(entry.getKey()); + return; } } - return null; } - public Player getPlayer() { - return org.bukkit.Bukkit.getPlayer(getPlayerName()); - }*/ - - // returns the Player if online - public static Player getPlayer(String name) { - return org.bukkit.Bukkit.getPlayerExact(name); + public static void clear() { + players.clear(); } - // returns true if drinking was successful - public static boolean drink(int uid, Player player) { - Brew brew = Brew.get(uid); - if (brew != null) { - int brewAlc = brew.calcAlcohol(); - if (brewAlc == 0) { - //no alcohol so we dont need to add a BPlayer - addBrewEffects(brew, player); - return true; - } - BPlayer bPlayer = get(player.getName()); - if (bPlayer == null) { - bPlayer = new BPlayer(); - players.put(player.getName(), bPlayer); - } - bPlayer.drunkeness += brewAlc; - if (brew.getQuality() > 0) { - bPlayer.quality += brew.getQuality() * brewAlc; - } else { - bPlayer.quality += brewAlc; - } + // Drink a brew and apply effects, etc. + public static void drink(Brew brew, Player player) { + int brewAlc = brew.calcAlcohol(); + if (brewAlc == 0) { + //no alcohol so we dont need to add a BPlayer + addBrewEffects(brew, player); + return; + } + BPlayer bPlayer = get(player); + if (bPlayer == null) { + bPlayer = addPlayer(player); + } + bPlayer.drunkeness += brewAlc; + if (brew.getQuality() > 0) { + bPlayer.quality += brew.getQuality() * brewAlc; + } else { + bPlayer.quality += brewAlc; + } - if (bPlayer.drunkeness <= 100) { + if (bPlayer.drunkeness <= 100) { - addBrewEffects(brew, player); - addQualityEffects(brew.getQuality(), brewAlc, player); + addBrewEffects(brew, player); + addQualityEffects(brew.getQuality(), brewAlc, player); - } else { - bPlayer.drinkCap(player); - } - return true; + } else { + bPlayer.drinkCap(player); } - return false; } // Player has drunken too much @@ -125,29 +171,29 @@ public class BPlayer { // push the player around if he moves public static void playerMove(PlayerMoveEvent event) { - BPlayer bPlayer = get(event.getPlayer().getName()); + BPlayer bPlayer = get(event.getPlayer()); if (bPlayer != null) { bPlayer.move(event); } } // 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); - if (drain(name, strength)) { - players.remove(name); + if (drain(player, strength)) { + remove(player); } } // 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) { quality -= getQuality() * amount; } drunkeness -= amount; if (drunkeness > 0) { if (offlineDrunk == 0) { - if (getPlayer(name) == null) { + if (player == null) { offlineDrunk = drunkeness; } } @@ -158,7 +204,7 @@ public class BPlayer { quality = getQuality(); if (drunkeness <= -offlineDrunk) { if (drunkeness <= -hangoverTime) { - return true; + return true; } } } @@ -267,7 +313,7 @@ public class BPlayer { } hangoverEffects(player); // wird der spieler noch gebraucht? - players.remove(player.getName()); + players.remove(P.playerString(player)); } else if (offlineDrunk - drunkeness >= 30) { Location randomLoc = Wakeup.getRandom(player.getLocation()); @@ -452,7 +498,7 @@ public class BPlayer { if (bplayer.drunkeness > 30) { if (bplayer.offlineDrunk == 0) { - Player player = getPlayer(name); + Player player = P.getPlayerfromString(name); if (player != null) { bplayer.drunkEffects(player); @@ -480,7 +526,7 @@ public class BPlayer { // Prevent 0 drunkeness soberPerMin++; } - if (bplayer.drain(name, soberPerMin)) { + if (bplayer.drain(P.getPlayerfromString(name), soberPerMin)) { iter.remove(); } } @@ -489,14 +535,15 @@ public class BPlayer { // save all data public static void save(ConfigurationSection config) { - for (String name : players.keySet()) { - ConfigurationSection section = config.createSection(name); - section.set("quality", players.get(name).quality); - section.set("drunk", players.get(name).drunkeness); - if (players.get(name).offlineDrunk != 0) { - section.set("offDrunk", players.get(name).offlineDrunk); + for (Map.Entry entry : players.entrySet()) { + ConfigurationSection section = config.createSection(entry.getKey()); + BPlayer bPlayer = entry.getValue(); + section.set("quality", bPlayer.quality); + section.set("drunk", bPlayer.drunkeness); + if (bPlayer.offlineDrunk != 0) { + section.set("offDrunk", bPlayer.offlineDrunk); } - if (players.get(name).passedOut) { + if (bPlayer.passedOut) { section.set("passedOut", true); } } diff --git a/src/com/dre/brewery/Brew.java b/src/com/dre/brewery/Brew.java index 6ae0736..d355bfd 100644 --- a/src/com/dre/brewery/Brew.java +++ b/src/com/dre/brewery/Brew.java @@ -28,6 +28,7 @@ public class Brew { private float wood; private BRecipe currentRecipe; private boolean unlabeled; + private boolean persistent; public Brew(int uid, BIngredients ingredients) { this.ingredients = ingredients; @@ -43,7 +44,7 @@ public class Brew { } // loading from file - public Brew(int uid, BIngredients ingredients, int quality, int distillRuns, float ageTime, float wood, String recipe, Boolean unlabeled) { + public Brew(int uid, BIngredients ingredients, int quality, int distillRuns, float ageTime, float wood, String recipe, boolean unlabeled, boolean persistent) { potions.put(uid, this); this.ingredients = ingredients; this.quality = quality; @@ -51,6 +52,7 @@ public class Brew { this.ageTime = ageTime; this.wood = wood; this.unlabeled = unlabeled; + this.persistent = persistent; setRecipeFromString(recipe); } @@ -103,11 +105,6 @@ public class Brew { return 0; } - // remove potion from file (drinking, despawning, combusting, cmdDeleting, should be more!) - public static void remove(ItemStack item) { - potions.remove(getUID(item)); - } - // generate an UID public static int generateUID() { int uid = -2; @@ -169,6 +166,13 @@ public class Brew { return brew; } + // remove potion from file (drinking, despawning, combusting, cmdDeleting, should be more!) + public void remove(ItemStack item) { + if (!persistent) { + potions.remove(getUID(item)); + } + } + // calculate alcohol from recipe public int calcAlcohol() { if (quality == 0) { @@ -260,6 +264,20 @@ public class Brew { unlabeled = true; } + public boolean isPersistent() { + return persistent; + } + + // Make a potion persistent to not delete it when drinking it + public void makePersistent() { + persistent = true; + } + + // Remove the Persistence Flag from a brew, so it will be normally deleted when drinking it + public void removePersistence() { + persistent = false; + } + // Distilling section --------------- // distill all custom potions in the brewer @@ -573,6 +591,9 @@ public class Brew { if (brew.unlabeled) { idConfig.set("unlabeled", true); } + if (brew.persistent) { + idConfig.set("persist", true); + } // save the ingredients idConfig.set("ingId", brew.ingredients.save(config.getParent())); } diff --git a/src/com/dre/brewery/LanguageReader.java b/src/com/dre/brewery/LanguageReader.java index 8797606..e16ba58 100644 --- a/src/com/dre/brewery/LanguageReader.java +++ b/src/com/dre/brewery/LanguageReader.java @@ -82,11 +82,15 @@ public class LanguageReader { defaults.put("CMD_Info_NotDrunk", "&v1 is not drunk"); defaults.put("CMD_Info_Drunk", "&v1 is &6&v2% &fdrunk, with a quality of &6&v3"); defaults.put("CMD_UnLabel", "&aLabel removed!"); + defaults.put("CMD_Persistent", "&aPotion is now Persistent and may be copied like any other item. You can remove the persistence with the same command."); + defaults.put("CMD_PersistRemove", "&cThis Brew is Persistent. Deleting it would render every copy of it not made with '/brew copy' useless. To proceed, remove the persistence before deleting."); + defaults.put("CMD_UnPersist", "&aPersistence Removed. &eEvery Potential copy not made with '/brew copy' could become useless now!"); defaults.put("CMD_Copy_Error", "&6&v1 &cPotions did not fit into your inventory"); + defaults.put("CMD_CopyNotPersistent", "&eThese copies of this Brew will not be persistent!"); /* Error */ defaults.put("Error_UnknownCommand", "Unknown Command"); - defaults.put("Error_ShowHelp", "Use &6/br help &fto display the help"); + defaults.put("Error_ShowHelp", "Use &6/brew help &fto display the help"); defaults.put("Error_PlayerCommand", "&cThis command can only be executed as a player!"); defaults.put("Error_ItemNotPotion", "&cThe item in your hand could not be identified as a potion!"); defaults.put("Error_Recipeload", "&cNot all recipes could be restored: More information in the server log!"); @@ -102,20 +106,21 @@ public class LanguageReader { defaults.put("Perms_NoCauldronFill", "&cYou don't have permissions to fill bottles from this cauldron!"); /* Help */ - defaults.put("Help_Help", "&6/br help &9Shows a specific help-page"); - defaults.put("Help_Player", "&6/br <%Drunkeness> &9 Sets Drunkeness (and Quality) of a Player"); - defaults.put("Help_Info", "&6/br info&9 Displays your current Drunkeness and Quality"); - defaults.put("Help_UnLabel", "&6/br unlabel &9Removes the detailled label of a potion"); - defaults.put("Help_Copy", "&6/br copy &9 Copies the potion in your hand"); - defaults.put("Help_Delete", "&6/br delete &9Deletes the potion in your hand"); - defaults.put("Help_InfoOther", "&6/br info &9 Displays the current Drunkeness and Quality of "); - defaults.put("Help_Wakeup", "&6/br wakeup list &9 Lists all wakeup points"); - defaults.put("Help_WakeupList", "&6/br wakeup list &9 Lists all wakeup points of "); - defaults.put("Help_WakeupCheck", "&6/br wakeup check &9Teleports to all wakeup points"); - defaults.put("Help_WakeupCheckSpecific", "&6/br wakeup check &9Teleports to the wakeup point with "); - defaults.put("Help_WakeupAdd", "&6/br wakeup add &9Adds a wakeup point at your current position"); - defaults.put("Help_WakeupRemove", "&6/br wakeup remove &9Removes the wakeup point with "); - defaults.put("Help_Reload", "&6/br reload &9Reload config"); + defaults.put("Help_Help", "&6/brew help &9Shows a specific help-page"); + defaults.put("Help_Player", "&6/brew <%Drunkeness> &9 Sets Drunkeness (and Quality) of a Player"); + defaults.put("Help_Info", "&6/brew info&9 Displays your current Drunkeness and Quality"); + defaults.put("Help_UnLabel", "&6/brew unlabel &9Removes the detailled label of a potion"); + defaults.put("Help_Copy", "&6/brew copy &9 Copies the potion in your hand"); + defaults.put("Help_Delete", "&6/brew delete &9Deletes the potion in your hand"); + defaults.put("Help_InfoOther", "&6/brew info &9 Displays the current Drunkeness and Quality of "); + defaults.put("Help_Wakeup", "&6/brew wakeup list &9 Lists all wakeup points"); + defaults.put("Help_WakeupList", "&6/brew wakeup list &9 Lists all wakeup points of "); + defaults.put("Help_WakeupCheck", "&6/brew wakeup check &9Teleports to all wakeup points"); + defaults.put("Help_WakeupCheckSpecific", "&6/brew wakeup check &9Teleports to the wakeup point with "); + defaults.put("Help_WakeupAdd", "&6/brew wakeup add &9Adds a wakeup point at your current position"); + defaults.put("Help_WakeupRemove", "&6/brew wakeup remove &9Removes the wakeup point with "); + defaults.put("Help_Reload", "&6/brew reload &9Reload config"); + defaults.put("Help_Persist", "&6/brew persist &9Make Brew persistent -> copyable by any plugin and technique"); /* Etc. */ defaults.put("Etc_Usage", "Usage:"); diff --git a/src/com/dre/brewery/P.java b/src/com/dre/brewery/P.java index 9fbfc87..9e38827 100644 --- a/src/com/dre/brewery/P.java +++ b/src/com/dre/brewery/P.java @@ -7,6 +7,7 @@ import java.util.ListIterator; import java.util.HashMap; import java.io.IOException; import java.io.File; +import java.util.UUID; import java.util.logging.Level; import org.bukkit.entity.Player; @@ -36,6 +37,7 @@ public class P extends JavaPlugin { public static int lastSave = 1; public static int autosave = 3; final public static String dataVersion = "1.1"; + public static boolean useUUID; // Third Party Enabled public boolean useWG; //WorldGuard @@ -58,6 +60,10 @@ public class P extends JavaPlugin { public void onEnable() { p = this; + // Version check + String v = Bukkit.getBukkitVersion(); + useUUID = !v.matches(".*1\\.[1-6].*") && !v.matches(".*1\\.7\\.[0-5].*"); + readConfig(); readData(); @@ -106,7 +112,7 @@ public class P extends JavaPlugin { BIngredients.possibleIngredients.clear(); BIngredients.recipes.clear(); BIngredients.cookedNames.clear(); - BPlayer.players.clear(); + BPlayer.clear(); Brew.potions.clear(); Wakeup.wakeups.clear(); Words.words.clear(); @@ -318,9 +324,10 @@ public class P extends JavaPlugin { float ageTime = (float) section.getDouble(uid + ".ageTime", 0.0); float wood = (float) section.getDouble(uid + ".wood", -1.0); String recipe = section.getString(uid + ".recipe", null); - Boolean unlabeled = section.getBoolean(uid + ".unlabeled", false); + boolean unlabeled = section.getBoolean(uid + ".unlabeled", false); + boolean persistent = section.getBoolean(uid + ".persist", false); - new Brew(parseInt(uid), ingredients, quality, distillRuns, ageTime, wood, recipe, unlabeled); + new Brew(parseInt(uid), ingredients, quality, distillRuns, ageTime, wood, recipe, unlabeled, persistent); } } @@ -329,6 +336,17 @@ public class P extends JavaPlugin { if (section != null) { // keys have players name 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 drunk = section.getInt(name + ".drunk"); int offDrunk = section.getInt(name + ".offDrunk", 0); @@ -501,7 +519,7 @@ public class P extends JavaPlugin { Barrel.save(configFile.createSection("Barrel"), oldData.getConfigurationSection("Barrel")); } - if (!BPlayer.players.isEmpty()) { + if (!BPlayer.isEmpty()) { BPlayer.save(configFile.createSection("Player")); } @@ -661,6 +679,27 @@ public class P extends JavaPlugin { 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 (Exception e) { + return Bukkit.getPlayerExact(name); + } + } + return Bukkit.getPlayerExact(name); + } + // Runnables public class DrunkRunnable implements Runnable { @@ -670,7 +709,7 @@ public class P extends JavaPlugin { @Override public void run() { - if (!BPlayer.players.isEmpty()) { + if (!BPlayer.isEmpty()) { BPlayer.drunkeness(); } } diff --git a/src/com/dre/brewery/Words.java b/src/com/dre/brewery/Words.java index aa7985a..2e7c20b 100644 --- a/src/com/dre/brewery/Words.java +++ b/src/com/dre/brewery/Words.java @@ -76,10 +76,10 @@ public class Words { // Distort players words when he uses a command public static void playerCommand(PlayerCommandPreprocessEvent event) { - String name = event.getPlayer().getName(); - BPlayer bPlayer = BPlayer.get(name); + BPlayer bPlayer = BPlayer.get(event.getPlayer()); if (bPlayer != null) { if (!commands.isEmpty() && loadWords()) { + String name = event.getPlayer().getName(); if (!waitPlayers.containsKey(name) || waitPlayers.get(name) + 500 < System.currentTimeMillis()) { String chat = event.getMessage(); for (String command : commands) { @@ -106,7 +106,7 @@ public class Words { // Distort players words when he uses a command public static void signWrite(SignChangeEvent event) { - BPlayer bPlayer = BPlayer.get(event.getPlayer().getName()); + BPlayer bPlayer = BPlayer.get(event.getPlayer()); if (bPlayer != null) { if (loadWords()) { int index = 0; @@ -127,7 +127,7 @@ public class Words { // Distort players words when he talks public static void playerChat(AsyncPlayerChatEvent event) { - BPlayer bPlayer = BPlayer.get(event.getPlayer().getName()); + BPlayer bPlayer = BPlayer.get(event.getPlayer()); if (bPlayer != null) { if (loadWords()) { String message = event.getMessage(); diff --git a/src/com/dre/brewery/listeners/BlockListener.java b/src/com/dre/brewery/listeners/BlockListener.java index 05edc69..2239531 100644 --- a/src/com/dre/brewery/listeners/BlockListener.java +++ b/src/com/dre/brewery/listeners/BlockListener.java @@ -37,7 +37,7 @@ public class BlockListener implements Listener { @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) public void onSignChangeLow(SignChangeEvent event) { if (Words.doSigns) { - if (BPlayer.players.containsKey(event.getPlayer().getName())) { + if (BPlayer.hasPlayer(event.getPlayer())) { Words.signWrite(event); } } diff --git a/src/com/dre/brewery/listeners/CommandListener.java b/src/com/dre/brewery/listeners/CommandListener.java index 40462b2..e283033 100644 --- a/src/com/dre/brewery/listeners/CommandListener.java +++ b/src/com/dre/brewery/listeners/CommandListener.java @@ -79,7 +79,7 @@ public class CommandListener implements CommandExecutor { 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")) { cmdDelete(sender); @@ -87,6 +87,14 @@ public class CommandListener implements CommandExecutor { p.msg(sender, p.languageReader.get("Error_NoPermissions")); } + } else if (cmd.equalsIgnoreCase("persist") || cmd.equalsIgnoreCase("persistent")) { + + if (sender.hasPermission("brewery.cmd.persist")) { + cmdPersist(sender); + } else { + p.msg(sender, p.languageReader.get("Error_NoPermissions")); + } + } else if (cmd.equalsIgnoreCase("unlabel")) { if (sender.hasPermission("brewery.cmd.unlabel")) { @@ -97,7 +105,7 @@ public class CommandListener implements CommandExecutor { } 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 (sender.hasPermission("brewery.cmd.infoOther")) { @@ -181,6 +189,10 @@ public class CommandListener implements CommandExecutor { cmds.add(p.languageReader.get("Help_Reload")); } + if (sender.hasPermission("brewery.cmd.persist")) { + cmds.add(p.languageReader.get("Help_Persist")); + } + return cmds; } @@ -256,23 +268,30 @@ public class CommandListener implements CommandExecutor { } String playerName = args[0]; - BPlayer bPlayer = BPlayer.get(playerName); - if (bPlayer == null) { + Player player = P.p.getServer().getPlayerExact(playerName); + BPlayer bPlayer; + if (player == null) { + bPlayer = BPlayer.getByName(playerName); + } else { + bPlayer = BPlayer.get(player); + } + if (bPlayer == null && player != null) { if (drunkeness == 0) { return; } - bPlayer = new BPlayer(); - BPlayer.players.put(playerName, bPlayer); + bPlayer = BPlayer.addPlayer(player); + } + if (bPlayer == null) { + return; } if (drunkeness == 0) { - BPlayer.players.remove(playerName); + bPlayer.remove(); } else { bPlayer.setData(drunkeness, quality); } if (drunkeness > 100) { - Player player = p.getServer().getPlayer(playerName); if (player != null) { bPlayer.drinkCap(player); } else { @@ -297,7 +316,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) { p.msg(sender, p.languageReader.get("CMD_Info_NotDrunk", playerName)); } else { @@ -327,6 +352,9 @@ public class CommandListener implements CommandExecutor { } count--; } + if (brew.isPersistent()) { + p.msg(sender, p.languageReader.get("CMD_CopyNotPersistent")); + } return; } } @@ -345,9 +373,39 @@ public class CommandListener implements CommandExecutor { Player player = (Player) sender; ItemStack hand = player.getItemInHand(); if (hand != null) { - if (Brew.get(hand) != null) { - Brew.remove(hand); - player.setItemInHand(new ItemStack(Material.AIR)); + Brew brew = Brew.get(hand); + if (brew != null) { + if (brew.isPersistent()) { + p.msg(sender, p.languageReader.get("CMD_PersistRemove")); + } else { + brew.remove(hand); + player.setItemInHand(new ItemStack(Material.AIR)); + } + return; + } + } + p.msg(sender, p.languageReader.get("Error_ItemNotPotion")); + } else { + p.msg(sender, p.languageReader.get("Error_PlayerCommand")); + } + + } + + public void cmdPersist(CommandSender sender) { + + if (sender instanceof Player) { + Player player = (Player) sender; + ItemStack hand = player.getItemInHand(); + if (hand != null) { + Brew brew = Brew.get(hand); + if (brew != null) { + if (brew.isPersistent()) { + brew.removePersistence(); + p.msg(sender, p.languageReader.get("CMD_UnPersist")); + } else { + brew.makePersistent(); + p.msg(sender, p.languageReader.get("CMD_Persistent")); + } return; } } diff --git a/src/com/dre/brewery/listeners/EntityListener.java b/src/com/dre/brewery/listeners/EntityListener.java index bdcfb36..0947802 100644 --- a/src/com/dre/brewery/listeners/EntityListener.java +++ b/src/com/dre/brewery/listeners/EntityListener.java @@ -28,7 +28,10 @@ public class EntityListener implements Listener { public void onItemDespawn(ItemDespawnEvent event) { ItemStack item = event.getEntity().getItemStack(); if (item.getType() == Material.POTION) { - Brew.remove(item); + Brew brew = Brew.get(item); + if (brew != null) { + brew.remove(item); + } } } @@ -39,7 +42,10 @@ public class EntityListener implements Listener { if (entity instanceof Item) { ItemStack item = ((Item) entity).getItemStack(); if (item.getType() == Material.POTION) { - Brew.remove(item); + Brew brew = Brew.get(item); + if (brew != null) { + brew.remove(item); + } } } } diff --git a/src/com/dre/brewery/listeners/PlayerListener.java b/src/com/dre/brewery/listeners/PlayerListener.java index c92e4ce..313e35f 100644 --- a/src/com/dre/brewery/listeners/PlayerListener.java +++ b/src/com/dre/brewery/listeners/PlayerListener.java @@ -154,17 +154,17 @@ public class PlayerListener implements Listener { ItemStack item = event.getItem(); if (item != null) { if (item.getType() == Material.POTION) { - if (item.hasItemMeta()) { - if (BPlayer.drink(Brew.getUID(item), player)) { - if (player.getGameMode() != org.bukkit.GameMode.CREATIVE) { - Brew.remove(item); - } + Brew brew = Brew.get(item); + if (brew != null) { + BPlayer.drink(brew, player); + if (player.getGameMode() != org.bukkit.GameMode.CREATIVE) { + brew.remove(item); } } } else if (BPlayer.drainItems.containsKey(item.getType())) { - BPlayer bplayer = BPlayer.get(player.getName()); + BPlayer bplayer = BPlayer.get(player); if (bplayer != null) { - bplayer.drainByItem(player.getName(), item.getType()); + bplayer.drainByItem(player, item.getType()); } } } @@ -173,13 +173,12 @@ public class PlayerListener implements Listener { // Player has died! Decrease Drunkeness by 20 @EventHandler public void onPlayerRespawn(PlayerRespawnEvent event) { - String playerName = event.getPlayer().getName(); - BPlayer bPlayer = BPlayer.get(playerName); + BPlayer bPlayer = BPlayer.get(event.getPlayer()); if (bPlayer != null) { if (bPlayer.getDrunkeness() > 20) { bPlayer.setData(bPlayer.getDrunkeness() - 20, 0); } else { - BPlayer.players.remove(playerName); + BPlayer.remove(event.getPlayer()); } } } @@ -187,7 +186,7 @@ public class PlayerListener implements Listener { // player walks while drunk, push him around! @EventHandler(priority = EventPriority.LOW) public void onPlayerMove(PlayerMoveEvent event) { - if (BPlayer.players.containsKey(event.getPlayer().getName())) { + if (BPlayer.hasPlayer(event.getPlayer())) { BPlayer.playerMove(event); } } @@ -195,17 +194,13 @@ public class PlayerListener implements Listener { // player talks while drunk, but he cant speak very well @EventHandler(priority = EventPriority.LOWEST) 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 @EventHandler(priority = EventPriority.LOWEST) public void onCommandPreProcess(PlayerCommandPreprocessEvent event) { - if (BPlayer.players.containsKey(event.getPlayer().getName())) { - Words.playerCommand(event); - } + Words.playerCommand(event); } // player joins while passed out @@ -213,7 +208,7 @@ public class PlayerListener implements Listener { public void onPlayerLogin(PlayerLoginEvent event) { if (event.getResult() == PlayerLoginEvent.Result.ALLOWED) { final Player player = event.getPlayer(); - BPlayer bplayer = BPlayer.get(player.getName()); + BPlayer bplayer = BPlayer.get(player); if (bplayer != null) { if (player.hasPermission("brewery.bypass.logindeny")) { if (bplayer.getDrunkeness() > 100) { @@ -238,7 +233,7 @@ public class PlayerListener implements Listener { @EventHandler public void onPlayerQuit(PlayerQuitEvent event) { - BPlayer bplayer = BPlayer.get(event.getPlayer().getName()); + BPlayer bplayer = BPlayer.get(event.getPlayer()); if (bplayer != null) { bplayer.disconnecting(); } @@ -246,7 +241,7 @@ public class PlayerListener implements Listener { @EventHandler public void onPlayerKick(PlayerKickEvent event) { - BPlayer bplayer = BPlayer.get(event.getPlayer().getName()); + BPlayer bplayer = BPlayer.get(event.getPlayer()); if (bplayer != null) { bplayer.disconnecting(); }