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