diff --git a/config.yml b/config.yml index 412621e..7e058ef 100644 --- a/config.yml +++ b/config.yml @@ -39,6 +39,10 @@ drainItems: - BREAD/4 - MILK_BUCKET/2 +# Färben der Iteminformationen je nach Qualität während sie sich 1. im Fass und/oder 2. im Braustand befinden +colorInBarrels: true +colorInBrewer: true + # Autosave Intervall in Minuten autosave: 3 diff --git a/src/com/dre/brewery/BIngredients.java b/src/com/dre/brewery/BIngredients.java index bd99186..f52fc95 100644 --- a/src/com/dre/brewery/BIngredients.java +++ b/src/com/dre/brewery/BIngredients.java @@ -117,19 +117,8 @@ public class BIngredients { return count; } - public void qualityLore(PotionMeta meta, BRecipe recipe, boolean distilled) { - // Ingredients - String prefix = Brew.getQualityColor(getIngredientQuality(recipe)); - String lore = "Zutaten"; - Brew.addOrReplaceLore(meta, prefix, lore); - - // Cookingtime - prefix = Brew.getQualityColor(getCookingQuality(recipe, distilled)) + cookedTime + " minute"; - if (cookedTime > 1) { - prefix = prefix + "n"; - } - lore = " gegärt"; - Brew.addOrReplaceLore(meta, prefix, lore); + public int getCookedTime() { + return cookedTime; } // best recipe for current state of potion, STILL not always returns the diff --git a/src/com/dre/brewery/BPlayer.java b/src/com/dre/brewery/BPlayer.java index c083b9d..c079507 100644 --- a/src/com/dre/brewery/BPlayer.java +++ b/src/com/dre/brewery/BPlayer.java @@ -21,8 +21,16 @@ public class BPlayer { public static Map players = new HashMap();// Players name and BPlayer public static Map drainItems = new HashMap();// DrainItem Material and Strength private static Map pTasks = new HashMap();// Player and count + + // Settings private static int taskId; public static int pukeItemId; + public static boolean overdrinkKick; + public static boolean enableHome; + public static boolean enableLoginDisallow; + public static boolean enablePuke; + public static String wakeString; + public static String homeType; private int quality = 0;// = quality of drunkeness * drunkeness private int drunkeness = 0;// = amount of drunkeness @@ -105,7 +113,7 @@ public class BPlayer { // Player has drunken too much public void drinkCap(Player player) { - if (P.p.getConfig().getBoolean("enableKickOnOverdrink", false)) { + if (overdrinkKick) { passOut(player); } else { quality = getQuality() * 100; @@ -193,7 +201,7 @@ public class BPlayer { if (drunkeness <= 70) { return 0; } - if (P.p.getConfig().getBoolean("enableLoginDisallow", false) == false) { + if (!enableLoginDisallow) { if (drunkeness <= 100) { return 0; } else { @@ -240,7 +248,7 @@ public class BPlayer { public void login(final Player player) { if (drunkeness < 10) { if (offlineDrunk > 60) { - if (P.p.getConfig().getBoolean("enableHome", false)) { + if (enableHome) { goHome(player); } } @@ -252,7 +260,7 @@ public class BPlayer { Location randomLoc = Wakeup.getRandom(player.getLocation()); if (randomLoc != null) { player.teleport(randomLoc); - P.p.msg(player, P.p.getConfig().getString("wakeString", "Ohh nein! Ich kann mich nicht erinnern, wie ich hier hergekommen bin...")); + P.p.msg(player, wakeString); } } @@ -261,7 +269,6 @@ public class BPlayer { } public void goHome(final Player player) { - String homeType = P.p.getConfig().getString("homeType", null); if (homeType != null) { Location home = null; if (homeType.equalsIgnoreCase("bed")) { @@ -310,7 +317,7 @@ public class BPlayer { // make a Player puke "count" items public static void addPuke(Player player, int count) { - if (!P.p.getConfig().getBoolean("enablePuke", false)) { + if (!enablePuke) { return; } @@ -404,7 +411,7 @@ public class BPlayer { bplayer.drunkEffects(player); - if (P.p.getConfig().getBoolean("enablePuke", false)) { + if (enablePuke) { bplayer.drunkPuke(player); } diff --git a/src/com/dre/brewery/Brew.java b/src/com/dre/brewery/Brew.java index 50d6b5d..71c2de5 100644 --- a/src/com/dre/brewery/Brew.java +++ b/src/com/dre/brewery/Brew.java @@ -16,10 +16,14 @@ import com.dre.brewery.BIngredients; public class Brew { - public static Map potions = new HashMap(); - // represents the liquid in the brewed Potions + public static Map potions = new HashMap(); + public static Boolean colorInBarrels; // color the Lore while in Barrels + public static Boolean colorInBrewer; // color the Lore while in Brewer + + //public static Map> oldLore = new HashMap>(); + private BIngredients ingredients; private int quality; private int distillRuns; @@ -68,11 +72,16 @@ public class Brew { } // returns a Brew by ItemStack - /* - * public static Brew get(ItemStack item){ if(item.getTypeId() == 373){ - * PotionMeta potionMeta = (PotionMeta) item.getItemMeta(); return - * get(potionMeta); } return null; } - */ +/* public static Brew get(ItemStack item) { + * if (item.getTypeId() == 373) { + * if (item.hasItemMeta()) { + * PotionMeta potionMeta = (PotionMeta) item.getItemMeta(); + * return get(potionMeta); + * } + * } + * return null; + * } + */ // returns UID of custom Potion item public static int getUID(ItemStack item) { @@ -187,12 +196,15 @@ public class Brew { brew.currentRecipe = recipe; // Distill Lore - String lore = "destilliert"; - String prefix = P.p.color("&7"); - if (brew.distillRuns > 1) { - prefix = prefix + brew.distillRuns + "-fach "; + if (colorInBrewer != hasColorLore(potionMeta)) { + brew.convertLore(potionMeta, colorInBrewer); + } else { + String prefix = P.p.color("&7"); + if (colorInBrewer) { + prefix = getQualityColor(brew.ingredients.getDistillQuality(recipe, brew.distillRuns)); + } + brew.updateDistillLore(prefix, potionMeta); } - addOrReplaceLore(potionMeta, prefix, lore); addOrReplaceEffects(potionMeta, brew.getEffects()); P.p.log("destilled " + recipe.getName(5) + " has Quality: " + brew.quality + ", alc: " + brew.calcAlcohol()); @@ -228,25 +240,25 @@ public class Brew { brew.currentRecipe = recipe; P.p.log("Final " + recipe.getName(5) + " has Quality: " + brew.quality); - if (brew.ageTime >= 1) { - String lore = " Fassgereift"; - String prefix = P.p.color("&7"); - if (brew.ageTime == 1) { - prefix = prefix + "Ein Jahr"; - } else if (brew.ageTime < 201) { - prefix = prefix + (int) Math.floor(brew.ageTime) + " Jahre"; - } else { - prefix = prefix + "Hunderte Jahre"; - } - addOrReplaceLore(potionMeta, prefix, lore); - addOrReplaceEffects(potionMeta, brew.getEffects()); - } - potionMeta.setDisplayName(P.p.color("&f" + recipe.getName(brew.quality))); item.setDurability(PotionColor.valueOf(recipe.getColor()).getColorId(false)); - item.setItemMeta(potionMeta); } } + + // Lore + if (colorInBarrels != hasColorLore(potionMeta)) { + brew.convertLore(potionMeta, colorInBarrels); + } else { + if (brew.ageTime >= 1) { + String prefix = P.p.color("&7"); + if (colorInBarrels) { + prefix = getQualityColor(brew.ingredients.getAgeQuality(brew.currentRecipe, brew.ageTime)); + } + brew.updateAgeLore(prefix, potionMeta); + addOrReplaceEffects(potionMeta, brew.getEffects()); + } + } + item.setItemMeta(potionMeta); } } @@ -264,6 +276,83 @@ public class Brew { } } + // Lore ----------- + + // Converts to/from qualitycolored Lore + public void convertLore(PotionMeta meta, Boolean toQuality) { + if (currentRecipe == null) { + return; + } + if (meta == null) { + P.p.log("has no meta"); + return; + } + meta.setLore(null); + + // Ingredients + int quality; + String prefix = P.p.color("&7"); + String lore; + if (toQuality) { + quality = ingredients.getIngredientQuality(currentRecipe); + prefix = getQualityColor(quality); + lore = "Zutaten"; + addOrReplaceLore(meta, prefix, lore); + } + + // Cooking + if (toQuality) { + if (distillRuns > 0 == currentRecipe.needsDistilling()) { + quality = ingredients.getCookingQuality(currentRecipe, distillRuns > 0); + prefix = getQualityColor(quality) + ingredients.getCookedTime() + " minute"; + if (ingredients.getCookedTime() > 1) { + prefix = prefix + "n"; + } + lore = " gegärt"; + addOrReplaceLore(meta, prefix, lore); + } + } + + // Distilling + if (distillRuns > 0) { + if (toQuality) { + quality = ingredients.getDistillQuality(currentRecipe, distillRuns); + prefix = getQualityColor(quality); + } + updateDistillLore(prefix, meta); + } + + // Ageing + if (ageTime >= 1) { + if (toQuality) { + quality = ingredients.getAgeQuality(currentRecipe, ageTime); + prefix = getQualityColor(quality); + } + updateAgeLore(prefix, meta); + } + } + + // sets the DistillLore. Prefix is the color to be used + public void updateDistillLore(String prefix, PotionMeta meta) { + if (distillRuns > 1) { + prefix = prefix + distillRuns + "-fach "; + } + addOrReplaceLore(meta, prefix, "destilliert"); + } + + // sets the AgeLore. Prefix is the color to be used + public void updateAgeLore(String prefix, PotionMeta meta) { + if (ageTime >= 1 && ageTime < 2) { + prefix = prefix + "Ein Jahr"; + } else if (ageTime < 201) { + prefix = prefix + (int) Math.floor(ageTime) + " Jahre"; + } else { + prefix = prefix + "Hunderte Jahre"; + } + addOrReplaceLore(meta, prefix, " Fassgereift"); + } + + // Adds or replaces a line of Lore. Searches for Substring lore and replaces it public static void addOrReplaceLore(PotionMeta meta, String prefix, String lore) { if (meta.hasLore()) { List existingLore = meta.getLore(); @@ -282,6 +371,7 @@ public class Brew { meta.setLore(newLore); } + // Returns the Index of a String from the list that contains this substring public static int indexOfSubstring(List list, String substring) { for (int index = 0; index < list.size(); index++) { String string = list.get(index); @@ -292,6 +382,14 @@ public class Brew { return -1; } + // True if the PotionMeta has colored Lore + public static Boolean hasColorLore(PotionMeta meta) { + if (meta.hasLore()) { + return !meta.getLore().get(1).startsWith(P.p.color("&7")); + } + return false; + } + // gets the Color that represents a quality in Lore public static String getQualityColor(int quality) { String color; diff --git a/src/com/dre/brewery/P.java b/src/com/dre/brewery/P.java index ec4253b..15e3caa 100644 --- a/src/com/dre/brewery/P.java +++ b/src/com/dre/brewery/P.java @@ -137,6 +137,14 @@ public class P extends JavaPlugin { // various Settings autosave = config.getInt("autosave", 3); BPlayer.pukeItemId = Material.matchMaterial(config.getString("pukeItem", "SOUL_SAND")).getId(); + BPlayer.overdrinkKick = config.getBoolean("enableKickOnOverdrink", false); + BPlayer.enableHome = config.getBoolean("enableHome", false); + BPlayer.enableLoginDisallow = config.getBoolean("enableLoginDisallow", false); + BPlayer.enablePuke = config.getBoolean("enablePuke", false); + BPlayer.wakeString = config.getString("wakeString", "Ohh nein! Ich kann mich nicht erinnern, wie ich hier hergekommen bin..."); + BPlayer.homeType = config.getString("homeType", null); + Brew.colorInBarrels = config.getBoolean("colorInBarrels", false); + Brew.colorInBrewer = config.getBoolean("colorInBrewer", false); // loading recipes ConfigurationSection configSection = config.getConfigurationSection("recipes"); diff --git a/src/com/dre/brewery/listeners/InventoryListener.java b/src/com/dre/brewery/listeners/InventoryListener.java index 4dd162f..3182bd0 100644 --- a/src/com/dre/brewery/listeners/InventoryListener.java +++ b/src/com/dre/brewery/listeners/InventoryListener.java @@ -4,7 +4,10 @@ import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; import org.bukkit.event.inventory.BrewEvent; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.event.inventory.InventoryType; import org.bukkit.inventory.BrewerInventory; +import org.bukkit.inventory.meta.PotionMeta; import org.bukkit.inventory.ItemStack; import org.bukkit.Material; @@ -46,4 +49,31 @@ public class InventoryListener implements Listener { } + // convert to non colored Lore when taking out of Barrel/Brewer + @EventHandler(priority = EventPriority.HIGH) + public void onInventoryClick(InventoryClickEvent event) { + if (event.getInventory().getType() == InventoryType.BREWING) { + if (event.getSlot() > 2) { + return; + } + } else if (event.getInventory().getType() != InventoryType.CHEST) { + if (!event.getInventory().getTitle().equals("Fass")) { + return; + } + } + + ItemStack item = event.getCurrentItem(); + if (item != null) { + if (item.getTypeId() == 373) { + if (item.hasItemMeta()) { + PotionMeta meta = (PotionMeta) item.getItemMeta(); + Brew brew = Brew.get(meta); + if (brew != null) { + brew.convertLore(meta, false); + item.setItemMeta(meta); + } + } + } + } + } }