From 7a514d5378907e2fa0c95ca020fba99d96aef504 Mon Sep 17 00:00:00 2001 From: Daniel Saukel Date: Mon, 21 Mar 2016 20:35:12 +0100 Subject: [PATCH] Update to 1.9 --- pom.xml | 216 ++- resources/plugin.yml | 2 +- src/com/dre/brewery/BIngredients.java | 31 +- src/com/dre/brewery/BPlayer.java | 19 +- src/com/dre/brewery/BRecipe.java | 9 +- src/com/dre/brewery/Brew.java | 1350 +++++++++--------- src/com/dre/brewery/P.java | 72 +- src/com/dre/brewery/listeners/Compat1_9.java | 31 + 8 files changed, 886 insertions(+), 844 deletions(-) create mode 100644 src/com/dre/brewery/listeners/Compat1_9.java diff --git a/pom.xml b/pom.xml index d4ce54f..d77833b 100644 --- a/pom.xml +++ b/pom.xml @@ -1,143 +1,111 @@ - 4.0.0 + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + 4.0.0 - com.dre - brewery - 1.3.2 - Brewery + com.dre + brewery + 1.4-SNAPSHOT + Brewery - - UTF-8 - UTF-8 - + + UTF-8 + UTF-8 + - - src + + src - - - - false - ${project.basedir}/resources - - **/*.yml - - - target/** - .travis.yml - - - + + + + false + ${project.basedir}/resources + + **/*.yml + + + target/** + .travis.yml + + + - - - maven-compiler-plugin - 3.1 - - 1.6 - 1.6 - UTF-8 - - - - - - - - spigot-repo - https://hub.spigotmc.org/nexus/content/groups/public/ - - true - always - - + + + maven-compiler-plugin + 2.5.1 + + 1.7 + 1.7 + UTF-8 + + + + + + + spigot-repo + https://hub.spigotmc.org/nexus/content/groups/public/ + vault-repo http://nexus.theyeticave.net/content/repositories/pub_releases + + dre2n-repo + http://feuerstern.bplaced.net/repo/ + + + sk89q-repo + http://maven.sk89q.com/artifactory/repo/ + + + addstar-repo + http://maven.addstar.com.au/artifactory/ext-release-local/ + + true + always + + + + md_5-releases + http://repo.md-5.net/content/repositories/releases/ + + - - sk89q-repo - http://maven.sk89q.com/artifactory/repo/ - - true - always - - - - - dre-repo - http://server.die-reiche-erethons.com/maven2 - - true - always - - - - - addstar-repo - http://maven.addstar.com.au/artifactory/ext-release-local/ - - true - always - - - - - - - - - org.spigotmc - spigot-api - 1.8-R0.1-SNAPSHOT - - + + + org.bukkit + bukkit + 1.9-R0.1-SNAPSHOT + net.milkbowl.vault VaultAPI 1.5 provided - - - com.sk89q - worldguard - 6.0.0-SNAPSHOT - - - - com.dre - managerxl - 0.0.1-SNAPSHOT - compile - jar - - - - com.griefcraft - lwc - 4.4.0 - compile - jar - - - - me.ryanhamshire - griefprevention - 7.8 - compile - jar - - - - de.diddiz.LogBlock - LogBlock - 1.80 - compile - jar - - + + com.sk89q + worldguard + 6.1 + + + com.griefcraft + entitylwc + 1.7.2 + + + me.ryanhamshire + GriefPrevention + 13.9.1 + compile + + + de.diddiz + logblock + 1.94 + + diff --git a/resources/plugin.yml b/resources/plugin.yml index bb0bf5f..81f6eda 100644 --- a/resources/plugin.yml +++ b/resources/plugin.yml @@ -1,5 +1,5 @@ name: Brewery -version: 1.3.2 +version: 1.4-SNAPSHOT main: com.dre.brewery.P authors: [Milan Albrecht, Frank Baumann] softdepend: [LWC, LogBlock, WorldGuard, GriefPrevention, Vault] diff --git a/src/com/dre/brewery/BIngredients.java b/src/com/dre/brewery/BIngredients.java index 2a7874b..e26896c 100644 --- a/src/com/dre/brewery/BIngredients.java +++ b/src/com/dre/brewery/BIngredients.java @@ -1,16 +1,15 @@ package com.dre.brewery; import java.util.ArrayList; +import java.util.HashMap; import java.util.HashSet; import java.util.Map; -import java.util.HashMap; import java.util.Set; - +import org.bukkit.Material; import org.bukkit.configuration.ConfigurationSection; import org.bukkit.inventory.ItemStack; -import org.bukkit.Material; -import org.bukkit.potion.PotionEffectType; import org.bukkit.inventory.meta.PotionMeta; +import org.bukkit.potion.PotionEffectType; public class BIngredients { public static Set possibleIngredients = new HashSet(); @@ -84,7 +83,11 @@ public class BIngredients { Brew.addOrReplaceEffects(potionMeta, brew.getEffects(), brew.getQuality()); cookedName = cookRecipe.getName(quality); - potion.setDurability(Brew.PotionColor.valueOf(cookRecipe.getColor()).getColorId(false)); + if (P.use1_9) { + potionMeta.setMainEffect(Brew.PotionColor.valueOf(cookRecipe.getColor()).getEffect()); + } else { + potion.setDurability(Brew.PotionColor.valueOf(cookRecipe.getColor()).getColorId(false)); + } } else { // new base potion @@ -92,14 +95,22 @@ public class BIngredients { if (state <= 1) { cookedName = P.p.languageReader.get("Brew_ThickBrew"); - potion.setDurability(Brew.PotionColor.BLUE.getColorId(false)); + if (P.use1_9) { + potionMeta.setMainEffect(Brew.PotionColor.BLUE.getEffect()); + } else { + potion.setDurability(Brew.PotionColor.BLUE.getColorId(false)); + } } else { for (Material ingredient : materials.keySet()) { if (cookedNames.containsKey(ingredient)) { // if more than half of the ingredients is of one kind if (materials.get(ingredient) > (getIngredientsCount() / 2)) { cookedName = cookedNames.get(ingredient); - potion.setDurability(Brew.PotionColor.CYAN.getColorId(true)); + if (P.use1_9) { + potionMeta.setMainEffect(Brew.PotionColor.CYAN.getEffect()); + } else { + potion.setDurability(Brew.PotionColor.CYAN.getColorId(true)); + } } } } @@ -108,7 +119,11 @@ public class BIngredients { if (cookedName == null) { // if no name could be found cookedName = P.p.languageReader.get("Brew_Undefined"); - potion.setDurability(Brew.PotionColor.CYAN.getColorId(true)); + if (P.use1_9) { + potionMeta.setMainEffect(Brew.PotionColor.CYAN.getEffect()); + } else { + potion.setDurability(Brew.PotionColor.CYAN.getColorId(true)); + } } potionMeta.setDisplayName(P.p.color("&f" + cookedName)); diff --git a/src/com/dre/brewery/BPlayer.java b/src/com/dre/brewery/BPlayer.java index ed198a1..c577433 100644 --- a/src/com/dre/brewery/BPlayer.java +++ b/src/com/dre/brewery/BPlayer.java @@ -1,22 +1,21 @@ package com.dre.brewery; import java.util.ArrayList; -import java.util.Map; import java.util.HashMap; import java.util.Iterator; +import java.util.Map; import java.util.UUID; - +import org.bukkit.Location; +import org.bukkit.Material; import org.bukkit.OfflinePlayer; -import org.bukkit.event.player.PlayerMoveEvent; -import org.bukkit.entity.Player; +import org.bukkit.configuration.ConfigurationSection; import org.bukkit.entity.Entity; import org.bukkit.entity.Item; +import org.bukkit.entity.Player; +import org.bukkit.event.player.PlayerMoveEvent; import org.bukkit.inventory.ItemStack; -import org.bukkit.Material; -import org.bukkit.util.Vector; -import org.bukkit.Location; import org.bukkit.potion.PotionEffectType; -import org.bukkit.configuration.ConfigurationSection; +import org.bukkit.util.Vector; public class BPlayer { private static Map players = new HashMap();// Players name/uuid and BPlayer @@ -339,10 +338,6 @@ public class BPlayer { Location home = null; if (homeType.equalsIgnoreCase("bed")) { home = player.getBedSpawnLocation(); - } else if (homeType.equalsIgnoreCase("ManagerXL")) { - if (com.dre.managerxl.MPlayer.get(player.getName()) != null) { - home = com.dre.managerxl.MPlayer.get(player.getName()).getHome(); - } } else if (homeType.startsWith("cmd: ")) { player.performCommand(homeType.substring(5)); } else if (homeType.startsWith("cmd:")) { diff --git a/src/com/dre/brewery/BRecipe.java b/src/com/dre/brewery/BRecipe.java index 320a832..d772dc9 100644 --- a/src/com/dre/brewery/BRecipe.java +++ b/src/com/dre/brewery/BRecipe.java @@ -2,9 +2,8 @@ package com.dre.brewery; import java.util.ArrayList; import java.util.List; - -import org.bukkit.configuration.ConfigurationSection; import org.bukkit.Material; +import org.bukkit.configuration.ConfigurationSection; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.PotionMeta; import org.bukkit.potion.PotionEffectType; @@ -205,7 +204,11 @@ public class BRecipe { Brew brew = new Brew(uid, bIngredients, quality, distillruns, getAge(), wood, getName(5), false, false, true); - potion.setDurability(Brew.PotionColor.valueOf(getColor()).getColorId(false)); + if (P.use1_9) { + potionMeta.setMainEffect(Brew.PotionColor.valueOf(getColor()).getEffect()); + } else { + potion.setDurability(Brew.PotionColor.valueOf(getColor()).getColorId(false)); + } potionMeta.setDisplayName(P.p.color("&f" + getName(quality))); // This effect stores the UID in its Duration potionMeta.addCustomEffect((PotionEffectType.REGENERATION).createEffect((uid * 4), 0), true); diff --git a/src/com/dre/brewery/Brew.java b/src/com/dre/brewery/Brew.java index 546f131..435932a 100644 --- a/src/com/dre/brewery/Brew.java +++ b/src/com/dre/brewery/Brew.java @@ -1,677 +1,699 @@ package com.dre.brewery; -import java.util.Map; -import java.util.HashMap; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; - +import java.util.Map; import org.bukkit.Material; import org.bukkit.configuration.ConfigurationSection; +import org.bukkit.inventory.BrewerInventory; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.PotionMeta; import org.bukkit.potion.PotionEffect; import org.bukkit.potion.PotionEffectType; -import org.bukkit.inventory.BrewerInventory; public class Brew { - // 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 - - private BIngredients ingredients; - private int quality; - private int distillRuns; - private float ageTime; - private float wood; - private BRecipe currentRecipe; - private boolean unlabeled; - private boolean persistent; - private boolean stat; // static potions should not be changed - - public Brew(int uid, BIngredients ingredients) { - this.ingredients = ingredients; - potions.put(uid, this); - } - - // quality already set - public Brew(int uid, int quality, BRecipe recipe, BIngredients ingredients) { - this.ingredients = ingredients; - this.quality = quality; - this.currentRecipe = recipe; - potions.put(uid, this); - } - - // loading from file - public Brew(int uid, BIngredients ingredients, int quality, int distillRuns, float ageTime, float wood, String recipe, boolean unlabeled, boolean persistent, boolean stat) { - potions.put(uid, this); - this.ingredients = ingredients; - this.quality = quality; - this.distillRuns = distillRuns; - this.ageTime = ageTime; - this.wood = wood; - this.unlabeled = unlabeled; - this.persistent = persistent; - this.stat = stat; - setRecipeFromString(recipe); - } - - // returns a Brew by its UID - public static Brew get(int uid) { - if (uid < -1) { - if (!potions.containsKey(uid)) { - P.p.errorLog("Database failure! unable to find UID " + uid + " of a custom Potion!"); - return null;// throw some exception? - } - } else { - return null; - } - return potions.get(uid); - } - - // returns a Brew by PotionMeta - public static Brew get(PotionMeta meta) { - return get(getUID(meta)); - } - - // returns a Brew by ItemStack - public static Brew get(ItemStack item) { - if (item.getType() == Material.POTION) { - 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) { - return getUID((PotionMeta) item.getItemMeta()); - } - - // returns UID of custom Potion meta - public static int getUID(PotionMeta potionMeta) { - if (potionMeta.hasCustomEffect(PotionEffectType.REGENERATION)) { - for (PotionEffect effect : potionMeta.getCustomEffects()) { - if (effect.getType().equals(PotionEffectType.REGENERATION)) { - if (effect.getDuration() < -1) { - return effect.getDuration(); - } - } - } - } - return 0; - } - - // generate an UID - public static int generateUID() { - int uid = -2; - while (potions.containsKey(uid)) { - uid -= 1; - } - return uid; - } - - //returns the recipe with the given name, recalculates if not found - public boolean setRecipeFromString(String name) { - currentRecipe = null; - if (name != null && !name.equals("")) { - for (BRecipe recipe : BIngredients.recipes) { - if (recipe.getName(5).equalsIgnoreCase(name)) { - currentRecipe = recipe; - return true; - } - } - - if (quality > 0) { - currentRecipe = ingredients.getBestRecipe(wood, ageTime, distillRuns > 0); - if (currentRecipe != null) { - if (!stat) { - this.quality = calcQuality(); - } - P.p.log("Brew was made from Recipe: '" + name + "' which could not be found. '" + currentRecipe.getName(5) + "' used instead!"); - return true; - } else { - P.p.errorLog("Brew was made from Recipe: '" + name + "' which could not be found!"); - } - } - } - return false; - } - - public boolean reloadRecipe() { - if (currentRecipe != null) { - return setRecipeFromString(currentRecipe.getName(5)); - } - return true; - } - - // Copy a Brew with a new unique ID and return its item - public ItemStack copy(ItemStack item) { - ItemStack copy = item.clone(); - int uid = generateUID(); - clone(uid); - PotionMeta meta = (PotionMeta) copy.getItemMeta(); - meta.addCustomEffect((PotionEffectType.REGENERATION).createEffect((uid * 4), 0), true); - copy.setItemMeta(meta); - return copy; - } - - // Clones this instance with a new unique ID - public Brew clone(int uid) { - Brew brew = new Brew(uid, quality, currentRecipe, ingredients); - brew.distillRuns = distillRuns; - brew.ageTime = ageTime; - brew.unlabeled = unlabeled; - if (!brew.persistent) { - brew.stat = stat; - } - 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) { - // Give bad potions some alc - int badAlc = 0; - if (distillRuns > 1) { - badAlc = distillRuns; - } - if (ageTime > 10) { - badAlc += 5; - } else if (ageTime > 2) { - badAlc += 3; - } - if (currentRecipe != null) { - return badAlc; - } else { - return badAlc / 2; - } - } - - if (currentRecipe != null) { - int alc = currentRecipe.getAlcohol(); - if (currentRecipe.needsDistilling()) { - if (distillRuns == 0) { - return 0; - } - // bad quality can decrease alc by up to 40% - alc *= 1 - ((float) (10 - quality) * 0.04); - // distillable Potions should have half alc after one and full alc after all needed distills - alc /= 2; - alc *= 1.0F + ((float) distillRuns / currentRecipe.getDistillRuns()) ; - } else { - // quality decides 10% - 100% - alc *= ((float) quality / 10.0); - } - if (alc > 0) { - return alc; - } - } - return 0; - } - - // calculating quality - public int calcQuality() { - // calculate quality from all of the factors - float quality = ingredients.getIngredientQuality(currentRecipe) + ingredients.getCookingQuality(currentRecipe, distillRuns > 0); - if (currentRecipe.needsToAge() || ageTime > 0.5) { - quality += ingredients.getWoodQuality(currentRecipe, wood) + ingredients.getAgeQuality(currentRecipe, ageTime); - quality /= 4; - } else { - quality /= 2; - } - return Math.round(quality); - } - - public int getQuality() { - return quality; - } - - public boolean canDistill() { - if (currentRecipe != null) { - return currentRecipe.getDistillRuns() > distillRuns; - } else if (distillRuns >= 6) { - return false; - } - return true; - } - - // return special effect - public ArrayList getEffects() { - if (currentRecipe != null && quality > 0) { - return currentRecipe.getEffects(); - } - return null; - } - - // Set unlabeled to true to hide the numbers in Lore - public void unLabel(ItemStack item) { - PotionMeta meta = (PotionMeta) item.getItemMeta(); - if (meta.hasLore()) { - if (distillRuns > 0) { - addOrReplaceLore(meta, P.p.color("&7"), P.p.languageReader.get("Brew_Distilled")); - } - if (ageTime >= 1) { - addOrReplaceLore(meta, P.p.color("&7"), P.p.languageReader.get("Brew_BarrelRiped")); - } - item.setItemMeta(meta); - } - 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; - } - - public boolean isStatic() { - return stat; - } - - // Set the Static flag, so potion is unchangeable - public void setStatic(boolean stat, ItemStack potion) { - this.stat = stat; - if (currentRecipe != null && canDistill()) { - if (stat) { - potion.setDurability(PotionColor.valueOf(currentRecipe.getColor()).getColorId(false)); - } else { - potion.setDurability(PotionColor.valueOf(currentRecipe.getColor()).getColorId(true)); - } - } - } - - // Distilling section --------------- - - // distill all custom potions in the brewer - public static void distillAll(BrewerInventory inv, Boolean[] contents) { - int slot = 0; - while (slot < 3) { - if (contents[slot]) { - ItemStack slotItem = inv.getItem(slot); - PotionMeta potionMeta = (PotionMeta) slotItem.getItemMeta(); - Brew brew = get(potionMeta); - brew.distillSlot(slotItem, potionMeta); - } - slot++; - } - } - - // distill custom potion in given slot - public void distillSlot(ItemStack slotItem, PotionMeta potionMeta) { - if (stat) { - return; - } - - distillRuns += 1; - BRecipe recipe = ingredients.getdistillRecipe(wood, ageTime); - if (recipe != null) { - // distillRuns will have an effect on the amount of alcohol, not the quality - currentRecipe = recipe; - quality = calcQuality(); - - addOrReplaceEffects(potionMeta, getEffects(), quality); - potionMeta.setDisplayName(P.p.color("&f" + recipe.getName(quality))); - slotItem.setDurability(PotionColor.valueOf(recipe.getColor()).getColorId(canDistill())); - } else { - quality = 0; - removeEffects(potionMeta); - potionMeta.setDisplayName(P.p.color("&f" + P.p.languageReader.get("Brew_DistillUndefined"))); - slotItem.setDurability(PotionColor.GREY.getColorId(canDistill())); - } - - // Distill Lore - if (currentRecipe != null) { - if (colorInBrewer != hasColorLore(potionMeta)) { - convertLore(potionMeta, colorInBrewer); - } - } - String prefix = P.p.color("&7"); - if (colorInBrewer && currentRecipe != null) { - prefix = getQualityColor(ingredients.getDistillQuality(recipe, distillRuns)); - } - updateDistillLore(prefix, potionMeta); - - slotItem.setItemMeta(potionMeta); - } - - // Ageing Section ------------------ - - public void age(ItemStack item, float time, byte woodType) { - if (stat) { - return; - } - - PotionMeta potionMeta = (PotionMeta) item.getItemMeta(); - ageTime += time; - - // if younger than half a day, it shouldnt get aged form - if (ageTime > 0.5) { - if (wood == 0) { - wood = woodType; - } else { - if (wood != woodType) { - woodShift(time, woodType); - } - } - BRecipe recipe = ingredients.getAgeRecipe(wood, ageTime, distillRuns > 0); - if (recipe != null) { - currentRecipe = recipe; - quality = calcQuality(); - - addOrReplaceEffects(potionMeta, getEffects(), quality); - potionMeta.setDisplayName(P.p.color("&f" + recipe.getName(quality))); - item.setDurability(PotionColor.valueOf(recipe.getColor()).getColorId(canDistill())); - } else { - quality = 0; - removeEffects(potionMeta); - potionMeta.setDisplayName(P.p.color("&f" + P.p.languageReader.get("Brew_BadPotion"))); - item.setDurability(PotionColor.GREY.getColorId(canDistill())); - } - } - - // Lore - if (currentRecipe != null) { - if (colorInBarrels != hasColorLore(potionMeta)) { - convertLore(potionMeta, colorInBarrels); - } - } - if (ageTime >= 1) { - String prefix = P.p.color("&7"); - if (colorInBarrels && currentRecipe != null) { - prefix = getQualityColor(ingredients.getAgeQuality(currentRecipe, ageTime)); - } - updateAgeLore(prefix, potionMeta); - } - if (ageTime > 0.5) { - if (colorInBarrels && !unlabeled && currentRecipe != null) { - updateWoodLore(potionMeta); - } - } - item.setItemMeta(potionMeta); - } - - // Slowly shift the wood of the Brew to the new Type - public void woodShift(float time, byte to) { - byte factor = 1; - if (ageTime > 5) { - factor = 2; - } else if (ageTime > 10) { - factor = 2; - factor += Math.round(ageTime / 10); - } - if (wood > to) { - wood -= time / factor; - if (wood < to) { - wood = to; - } - } else { - wood += time / factor; - if (wood > to) { - wood = to; - } - } - } - - // Lore ----------- - - // Converts to/from qualitycolored Lore - public void convertLore(PotionMeta meta, Boolean toQuality) { - if (currentRecipe == null) { - return; - } - meta.setLore(null); - int quality; - String prefix = P.p.color("&7"); - String lore; - - // Ingredients - if (toQuality && !unlabeled) { - quality = ingredients.getIngredientQuality(currentRecipe); - prefix = getQualityColor(quality); - lore = P.p.languageReader.get("Brew_Ingredients"); - addOrReplaceLore(meta, prefix, lore); - } - - // Cooking - if (toQuality && !unlabeled) { - if (distillRuns > 0 == currentRecipe.needsDistilling()) { - quality = ingredients.getCookingQuality(currentRecipe, distillRuns > 0); - prefix = getQualityColor(quality) + ingredients.getCookedTime() + " " + P.p.languageReader.get("Brew_minute"); - if (ingredients.getCookedTime() > 1) { - prefix = prefix + P.p.languageReader.get("Brew_MinutePluralPostfix"); - } - lore = " " + P.p.languageReader.get("Brew_fermented"); - 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); - } - - // WoodType - if (toQuality && !unlabeled) { - if (ageTime > 0.5) { - updateWoodLore(meta); - } - } - } - - // sets the DistillLore. Prefix is the color to be used - public void updateDistillLore(String prefix, PotionMeta meta) { - if (!unlabeled) { - if (distillRuns > 1) { - prefix = prefix + distillRuns + P.p.languageReader.get("Brew_-times") + " "; - } - } - addOrReplaceLore(meta, prefix, P.p.languageReader.get("Brew_Distilled")); - } - - // sets the AgeLore. Prefix is the color to be used - public void updateAgeLore(String prefix, PotionMeta meta) { - if (!unlabeled) { - if (ageTime >= 1 && ageTime < 2) { - prefix = prefix + P.p.languageReader.get("Brew_OneYear") + " "; - } else if (ageTime < 201) { - prefix = prefix + (int) Math.floor(ageTime) + " " + P.p.languageReader.get("Brew_Years") + " "; - } else { - prefix = prefix + P.p.languageReader.get("Brew_HundredsOfYears") + " "; - } - } - addOrReplaceLore(meta, prefix, P.p.languageReader.get("Brew_BarrelRiped")); - } - - // updates/sets the color on WoodLore - public void updateWoodLore(PotionMeta meta) { - if (currentRecipe.getWood() > 0) { - int quality = ingredients.getWoodQuality(currentRecipe, wood); - addOrReplaceLore(meta, getQualityColor(quality), P.p.languageReader.get("Brew_Woodtype")); - } else { - if (meta.hasLore()) { - List existingLore = meta.getLore(); - int index = indexOfSubstring(existingLore, P.p.languageReader.get("Brew_Woodtype")); - if (index > -1) { - existingLore.remove(index); - meta.setLore(existingLore); - } - } - } - } - - // 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(); - int index = indexOfSubstring(existingLore, lore); - if (index > -1) { - existingLore.set(index, prefix + lore); - } else { - existingLore.add(prefix + lore); - } - meta.setLore(existingLore); - return; - } - List newLore = new ArrayList(); - newLore.add(""); - newLore.add(prefix + lore); - meta.setLore(newLore); - } - - // Adds the Effect names to the Items description - public static void addOrReplaceEffects(PotionMeta meta, ArrayList effects, int quality) { - if (effects != null) { - for (BEffect effect : effects) { - if (!effect.isHidden()) { - effect.writeInto(meta, quality); - } - } - } - } - - // Removes all effects except regeneration which stores data - public static void removeEffects(PotionMeta meta) { - if (meta.hasCustomEffects()) { - for (PotionEffect effect : meta.getCustomEffects()) { - PotionEffectType type = effect.getType(); - if (!type.equals(PotionEffectType.REGENERATION)) { - meta.removeCustomEffect(type); - } - } - } - } - - // 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); - if (string.contains(substring)) { - return index; - } - } - return -1; - } - - // True if the PotionMeta has colored Lore - public static Boolean hasColorLore(PotionMeta meta) { - return meta.hasLore() && !meta.getLore().get(1).startsWith(P.p.color("&7")); - } - - // gets the Color that represents a quality in Lore - public static String getQualityColor(int quality) { - String color; - if (quality > 8) { - color = "&a"; - } else if (quality > 6) { - color = "&e"; - } else if (quality > 4) { - color = "&6"; - } else if (quality > 2) { - color = "&c"; - } else { - color = "&4"; - } - return P.p.color(color); - } - - // Saves all data - public static void save(ConfigurationSection config) { - for (Map.Entry entry : potions.entrySet()) { - int uid = entry.getKey(); - Brew brew = entry.getValue(); - ConfigurationSection idConfig = config.createSection("" + uid); - // not saving unneccessary data - if (brew.quality != 0) { - idConfig.set("quality", brew.quality); - } - if (brew.distillRuns != 0) { - idConfig.set("distillRuns", brew.distillRuns); - } - if (brew.ageTime != 0) { - idConfig.set("ageTime", brew.ageTime); - } - if (brew.wood != -1) { - idConfig.set("wood", brew.wood); - } - if (brew.currentRecipe != null) { - idConfig.set("recipe", brew.currentRecipe.getName(5)); - } - if (brew.unlabeled) { - idConfig.set("unlabeled", true); - } - if (brew.persistent) { - idConfig.set("persist", true); - } - if (brew.stat) { - idConfig.set("stat", true); - } - // save the ingredients - idConfig.set("ingId", brew.ingredients.save(config.getParent())); - } - } - - public static enum PotionColor { - PINK(1), - CYAN(2), - ORANGE(3), - GREEN(4), - BRIGHT_RED(5), - BLUE(6), - BLACK(8), - RED(9), - GREY(10), - WATER(11), - DARK_RED(12), - BRIGHT_GREY(14); - - private final int colorId; - - private PotionColor(int colorId) { - this.colorId = colorId; - } - - // gets the Damage Value, that sets a color on the potion - // offset +32 is not accepted by brewer, so not further destillable - public short getColorId(boolean destillable) { - if (destillable) { - return (short) (colorId + 64); - } - return (short) (colorId + 32); - } - } - -} \ No newline at end of file + // 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 + + private BIngredients ingredients; + private int quality; + private int distillRuns; + private float ageTime; + private float wood; + private BRecipe currentRecipe; + private boolean unlabeled; + private boolean persistent; + private boolean stat; // static potions should not be changed + + public Brew(int uid, BIngredients ingredients) { + this.ingredients = ingredients; + potions.put(uid, this); + } + + // quality already set + public Brew(int uid, int quality, BRecipe recipe, BIngredients ingredients) { + this.ingredients = ingredients; + this.quality = quality; + this.currentRecipe = recipe; + potions.put(uid, this); + } + + // loading from file + public Brew(int uid, BIngredients ingredients, int quality, int distillRuns, float ageTime, float wood, String recipe, boolean unlabeled, boolean persistent, boolean stat) { + potions.put(uid, this); + this.ingredients = ingredients; + this.quality = quality; + this.distillRuns = distillRuns; + this.ageTime = ageTime; + this.wood = wood; + this.unlabeled = unlabeled; + this.persistent = persistent; + this.stat = stat; + setRecipeFromString(recipe); + } + + // returns a Brew by its UID + public static Brew get(int uid) { + if (uid < -1) { + if (!potions.containsKey(uid)) { + P.p.errorLog("Database failure! unable to find UID " + uid + " of a custom Potion!"); + return null;// throw some exception? + } + } else { + return null; + } + return potions.get(uid); + } + + // returns a Brew by PotionMeta + public static Brew get(PotionMeta meta) { + return get(getUID(meta)); + } + + // returns a Brew by ItemStack + public static Brew get(ItemStack item) { + if (item.getType() == Material.POTION) { + 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) { + return getUID((PotionMeta) item.getItemMeta()); + } + + // returns UID of custom Potion meta + public static int getUID(PotionMeta potionMeta) { + if (potionMeta.hasCustomEffect(PotionEffectType.REGENERATION)) { + for (PotionEffect effect : potionMeta.getCustomEffects()) { + if (effect.getType().equals(PotionEffectType.REGENERATION)) { + if (effect.getDuration() < -1) { + return effect.getDuration(); + } + } + } + } + return 0; + } + + // generate an UID + public static int generateUID() { + int uid = -2; + while (potions.containsKey(uid)) { + uid -= 1; + } + return uid; + } + + //returns the recipe with the given name, recalculates if not found + public boolean setRecipeFromString(String name) { + currentRecipe = null; + if (name != null && !name.equals("")) { + for (BRecipe recipe : BIngredients.recipes) { + if (recipe.getName(5).equalsIgnoreCase(name)) { + currentRecipe = recipe; + return true; + } + } + + if (quality > 0) { + currentRecipe = ingredients.getBestRecipe(wood, ageTime, distillRuns > 0); + if (currentRecipe != null) { + if (!stat) { + this.quality = calcQuality(); + } + P.p.log("Brew was made from Recipe: '" + name + "' which could not be found. '" + currentRecipe.getName(5) + "' used instead!"); + return true; + } else { + P.p.errorLog("Brew was made from Recipe: '" + name + "' which could not be found!"); + } + } + } + return false; + } + + public boolean reloadRecipe() { + if (currentRecipe != null) { + return setRecipeFromString(currentRecipe.getName(5)); + } + return true; + } + + // Copy a Brew with a new unique ID and return its item + public ItemStack copy(ItemStack item) { + ItemStack copy = item.clone(); + int uid = generateUID(); + clone(uid); + PotionMeta meta = (PotionMeta) copy.getItemMeta(); + meta.addCustomEffect((PotionEffectType.REGENERATION).createEffect((uid * 4), 0), true); + copy.setItemMeta(meta); + return copy; + } + + // Clones this instance with a new unique ID + public Brew clone(int uid) { + Brew brew = new Brew(uid, quality, currentRecipe, ingredients); + brew.distillRuns = distillRuns; + brew.ageTime = ageTime; + brew.unlabeled = unlabeled; + if (!brew.persistent) { + brew.stat = stat; + } + 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) { + // Give bad potions some alc + int badAlc = 0; + if (distillRuns > 1) { + badAlc = distillRuns; + } + if (ageTime > 10) { + badAlc += 5; + } else if (ageTime > 2) { + badAlc += 3; + } + if (currentRecipe != null) { + return badAlc; + } else { + return badAlc / 2; + } + } + + if (currentRecipe != null) { + int alc = currentRecipe.getAlcohol(); + if (currentRecipe.needsDistilling()) { + if (distillRuns == 0) { + return 0; + } + // bad quality can decrease alc by up to 40% + alc *= 1 - ((float) (10 - quality) * 0.04); + // distillable Potions should have half alc after one and full alc after all needed distills + alc /= 2; + alc *= 1.0F + ((float) distillRuns / currentRecipe.getDistillRuns()); + } else { + // quality decides 10% - 100% + alc *= ((float) quality / 10.0); + } + if (alc > 0) { + return alc; + } + } + return 0; + } + + // calculating quality + public int calcQuality() { + // calculate quality from all of the factors + float quality = ingredients.getIngredientQuality(currentRecipe) + ingredients.getCookingQuality(currentRecipe, distillRuns > 0); + if (currentRecipe.needsToAge() || ageTime > 0.5) { + quality += ingredients.getWoodQuality(currentRecipe, wood) + ingredients.getAgeQuality(currentRecipe, ageTime); + quality /= 4; + } else { + quality /= 2; + } + return Math.round(quality); + } + + public int getQuality() { + return quality; + } + + public boolean canDistill() { + if (currentRecipe != null) { + return currentRecipe.getDistillRuns() > distillRuns; + } else if (distillRuns >= 6) { + return false; + } + return true; + } + + // return special effect + public ArrayList getEffects() { + if (currentRecipe != null && quality > 0) { + return currentRecipe.getEffects(); + } + return null; + } + + // Set unlabeled to true to hide the numbers in Lore + public void unLabel(ItemStack item) { + PotionMeta meta = (PotionMeta) item.getItemMeta(); + if (meta.hasLore()) { + if (distillRuns > 0) { + addOrReplaceLore(meta, P.p.color("&7"), P.p.languageReader.get("Brew_Distilled")); + } + if (ageTime >= 1) { + addOrReplaceLore(meta, P.p.color("&7"), P.p.languageReader.get("Brew_BarrelRiped")); + } + item.setItemMeta(meta); + } + 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; + } + + public boolean isStatic() { + return stat; + } + + // Set the Static flag, so potion is unchangeable + public void setStatic(boolean stat, ItemStack potion) { + this.stat = stat; + if (currentRecipe != null && canDistill()) { + if (stat) { + if (P.use1_9) { + PotionMeta potionMeta = (PotionMeta) potion.getItemMeta(); + potionMeta.setMainEffect(PotionColor.valueOf(currentRecipe.getColor()).getEffect()); + } else { + potion.setDurability(PotionColor.valueOf(currentRecipe.getColor()).getColorId(false)); + } + } else if (P.use1_9) { + PotionMeta potionMeta = (PotionMeta) potion.getItemMeta(); + potionMeta.setMainEffect(PotionColor.valueOf(currentRecipe.getColor()).getEffect()); + } else { + potion.setDurability(PotionColor.valueOf(currentRecipe.getColor()).getColorId(true)); + } + } + } + + // Distilling section --------------- + // distill all custom potions in the brewer + public static void distillAll(BrewerInventory inv, Boolean[] contents) { + int slot = 0; + while (slot < 3) { + if (contents[slot]) { + ItemStack slotItem = inv.getItem(slot); + PotionMeta potionMeta = (PotionMeta) slotItem.getItemMeta(); + Brew brew = get(potionMeta); + brew.distillSlot(slotItem, potionMeta); + } + slot++; + } + } + + // distill custom potion in given slot + public void distillSlot(ItemStack slotItem, PotionMeta potionMeta) { + if (stat) { + return; + } + + distillRuns += 1; + BRecipe recipe = ingredients.getdistillRecipe(wood, ageTime); + if (recipe != null) { + // distillRuns will have an effect on the amount of alcohol, not the quality + currentRecipe = recipe; + quality = calcQuality(); + + addOrReplaceEffects(potionMeta, getEffects(), quality); + potionMeta.setDisplayName(P.p.color("&f" + recipe.getName(quality))); + if (P.use1_9) { + potionMeta.setMainEffect(PotionColor.valueOf(recipe.getColor()).getEffect()); + } else { + slotItem.setDurability(PotionColor.valueOf(recipe.getColor()).getColorId(canDistill())); + } + + } else { + quality = 0; + removeEffects(potionMeta); + potionMeta.setDisplayName(P.p.color("&f" + P.p.languageReader.get("Brew_DistillUndefined"))); + if (P.use1_9) { + potionMeta.setMainEffect(PotionColor.GREY.getEffect()); + } else { + slotItem.setDurability(PotionColor.GREY.getColorId(canDistill())); + } + } + + // Distill Lore + if (currentRecipe != null) { + if (colorInBrewer != hasColorLore(potionMeta)) { + convertLore(potionMeta, colorInBrewer); + } + } + String prefix = P.p.color("&7"); + if (colorInBrewer && currentRecipe != null) { + prefix = getQualityColor(ingredients.getDistillQuality(recipe, distillRuns)); + } + updateDistillLore(prefix, potionMeta); + + slotItem.setItemMeta(potionMeta); + } + + // Ageing Section ------------------ + public void age(ItemStack item, float time, byte woodType) { + if (stat) { + return; + } + + PotionMeta potionMeta = (PotionMeta) item.getItemMeta(); + ageTime += time; + + // if younger than half a day, it shouldnt get aged form + if (ageTime > 0.5) { + if (wood == 0) { + wood = woodType; + } else if (wood != woodType) { + woodShift(time, woodType); + } + BRecipe recipe = ingredients.getAgeRecipe(wood, ageTime, distillRuns > 0); + if (recipe != null) { + currentRecipe = recipe; + quality = calcQuality(); + + addOrReplaceEffects(potionMeta, getEffects(), quality); + potionMeta.setDisplayName(P.p.color("&f" + recipe.getName(quality))); + if (P.use1_9) { + potionMeta.setMainEffect(PotionColor.valueOf(recipe.getColor()).getEffect()); + } else { + item.setDurability(PotionColor.valueOf(recipe.getColor()).getColorId(canDistill())); + } + } else { + quality = 0; + removeEffects(potionMeta); + potionMeta.setDisplayName(P.p.color("&f" + P.p.languageReader.get("Brew_BadPotion"))); + if (P.use1_9) { + potionMeta.setMainEffect(PotionColor.GREY.getEffect()); + } else { + item.setDurability(PotionColor.GREY.getColorId(canDistill())); + } + } + } + + // Lore + if (currentRecipe != null) { + if (colorInBarrels != hasColorLore(potionMeta)) { + convertLore(potionMeta, colorInBarrels); + } + } + if (ageTime >= 1) { + String prefix = P.p.color("&7"); + if (colorInBarrels && currentRecipe != null) { + prefix = getQualityColor(ingredients.getAgeQuality(currentRecipe, ageTime)); + } + updateAgeLore(prefix, potionMeta); + } + if (ageTime > 0.5) { + if (colorInBarrels && !unlabeled && currentRecipe != null) { + updateWoodLore(potionMeta); + } + } + item.setItemMeta(potionMeta); + } + + // Slowly shift the wood of the Brew to the new Type + public void woodShift(float time, byte to) { + byte factor = 1; + if (ageTime > 5) { + factor = 2; + } else if (ageTime > 10) { + factor = 2; + factor += Math.round(ageTime / 10); + } + if (wood > to) { + wood -= time / factor; + if (wood < to) { + wood = to; + } + } else { + wood += time / factor; + if (wood > to) { + wood = to; + } + } + } + + // Lore ----------- + // Converts to/from qualitycolored Lore + public void convertLore(PotionMeta meta, Boolean toQuality) { + if (currentRecipe == null) { + return; + } + meta.setLore(null); + int quality; + String prefix = P.p.color("&7"); + String lore; + + // Ingredients + if (toQuality && !unlabeled) { + quality = ingredients.getIngredientQuality(currentRecipe); + prefix = getQualityColor(quality); + lore = P.p.languageReader.get("Brew_Ingredients"); + addOrReplaceLore(meta, prefix, lore); + } + + // Cooking + if (toQuality && !unlabeled) { + if (distillRuns > 0 == currentRecipe.needsDistilling()) { + quality = ingredients.getCookingQuality(currentRecipe, distillRuns > 0); + prefix = getQualityColor(quality) + ingredients.getCookedTime() + " " + P.p.languageReader.get("Brew_minute"); + if (ingredients.getCookedTime() > 1) { + prefix = prefix + P.p.languageReader.get("Brew_MinutePluralPostfix"); + } + lore = " " + P.p.languageReader.get("Brew_fermented"); + 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); + } + + // WoodType + if (toQuality && !unlabeled) { + if (ageTime > 0.5) { + updateWoodLore(meta); + } + } + } + + // sets the DistillLore. Prefix is the color to be used + public void updateDistillLore(String prefix, PotionMeta meta) { + if (!unlabeled) { + if (distillRuns > 1) { + prefix = prefix + distillRuns + P.p.languageReader.get("Brew_-times") + " "; + } + } + addOrReplaceLore(meta, prefix, P.p.languageReader.get("Brew_Distilled")); + } + + // sets the AgeLore. Prefix is the color to be used + public void updateAgeLore(String prefix, PotionMeta meta) { + if (!unlabeled) { + if (ageTime >= 1 && ageTime < 2) { + prefix = prefix + P.p.languageReader.get("Brew_OneYear") + " "; + } else if (ageTime < 201) { + prefix = prefix + (int) Math.floor(ageTime) + " " + P.p.languageReader.get("Brew_Years") + " "; + } else { + prefix = prefix + P.p.languageReader.get("Brew_HundredsOfYears") + " "; + } + } + addOrReplaceLore(meta, prefix, P.p.languageReader.get("Brew_BarrelRiped")); + } + + // updates/sets the color on WoodLore + public void updateWoodLore(PotionMeta meta) { + if (currentRecipe.getWood() > 0) { + int quality = ingredients.getWoodQuality(currentRecipe, wood); + addOrReplaceLore(meta, getQualityColor(quality), P.p.languageReader.get("Brew_Woodtype")); + } else if (meta.hasLore()) { + List existingLore = meta.getLore(); + int index = indexOfSubstring(existingLore, P.p.languageReader.get("Brew_Woodtype")); + if (index > -1) { + existingLore.remove(index); + meta.setLore(existingLore); + } + } + } + + // 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(); + int index = indexOfSubstring(existingLore, lore); + if (index > -1) { + existingLore.set(index, prefix + lore); + } else { + existingLore.add(prefix + lore); + } + meta.setLore(existingLore); + return; + } + List newLore = new ArrayList(); + newLore.add(""); + newLore.add(prefix + lore); + meta.setLore(newLore); + } + + // Adds the Effect names to the Items description + public static void addOrReplaceEffects(PotionMeta meta, ArrayList effects, int quality) { + if (effects != null) { + for (BEffect effect : effects) { + if (!effect.isHidden()) { + effect.writeInto(meta, quality); + } + } + } + } + + // Removes all effects except regeneration which stores data + public static void removeEffects(PotionMeta meta) { + if (meta.hasCustomEffects()) { + for (PotionEffect effect : meta.getCustomEffects()) { + PotionEffectType type = effect.getType(); + if (!type.equals(PotionEffectType.REGENERATION)) { + meta.removeCustomEffect(type); + } + } + } + } + + // 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); + if (string.contains(substring)) { + return index; + } + } + return -1; + } + + // True if the PotionMeta has colored Lore + public static Boolean hasColorLore(PotionMeta meta) { + return meta.hasLore() && !meta.getLore().get(1).startsWith(P.p.color("&7")); + } + + // gets the Color that represents a quality in Lore + public static String getQualityColor(int quality) { + String color; + if (quality > 8) { + color = "&a"; + } else if (quality > 6) { + color = "&e"; + } else if (quality > 4) { + color = "&6"; + } else if (quality > 2) { + color = "&c"; + } else { + color = "&4"; + } + return P.p.color(color); + } + + // Saves all data + public static void save(ConfigurationSection config) { + for (Map.Entry entry : potions.entrySet()) { + int uid = entry.getKey(); + Brew brew = entry.getValue(); + ConfigurationSection idConfig = config.createSection("" + uid); + // not saving unneccessary data + if (brew.quality != 0) { + idConfig.set("quality", brew.quality); + } + if (brew.distillRuns != 0) { + idConfig.set("distillRuns", brew.distillRuns); + } + if (brew.ageTime != 0) { + idConfig.set("ageTime", brew.ageTime); + } + if (brew.wood != -1) { + idConfig.set("wood", brew.wood); + } + if (brew.currentRecipe != null) { + idConfig.set("recipe", brew.currentRecipe.getName(5)); + } + if (brew.unlabeled) { + idConfig.set("unlabeled", true); + } + if (brew.persistent) { + idConfig.set("persist", true); + } + if (brew.stat) { + idConfig.set("stat", true); + } + // save the ingredients + idConfig.set("ingId", brew.ingredients.save(config.getParent())); + } + } + + public static enum PotionColor { + PINK(1, PotionEffectType.REGENERATION), + CYAN(2, PotionEffectType.SPEED), + ORANGE(3, PotionEffectType.FIRE_RESISTANCE), + GREEN(4, PotionEffectType.POISON), + BRIGHT_RED(5, PotionEffectType.HEAL), + BLUE(6, PotionEffectType.NIGHT_VISION), + BLACK(8, PotionEffectType.WEAKNESS), + RED(9, PotionEffectType.INCREASE_DAMAGE), + GREY(10, PotionEffectType.SLOW), + WATER(11, PotionEffectType.WATER_BREATHING), + DARK_RED(12, PotionEffectType.HARM), + BRIGHT_GREY(14, PotionEffectType.INVISIBILITY); + + private final int colorId; + private final PotionEffectType effect; + + private PotionColor(int colorId, PotionEffectType effect) { + this.colorId = colorId; + this.effect = effect; + } + + // gets the Damage Value, that sets a color on the potion + // offset +32 is not accepted by brewer, so not further destillable + public short getColorId(boolean destillable) { + if (destillable) { + return (short) (colorId + 64); + } + return (short) (colorId + 32); + } + + public PotionEffectType getEffect() { + return effect; + } + + } + +} diff --git a/src/com/dre/brewery/P.java b/src/com/dre/brewery/P.java index c69fabb..f71d447 100644 --- a/src/com/dre/brewery/P.java +++ b/src/com/dre/brewery/P.java @@ -1,46 +1,44 @@ package com.dre.brewery; -import java.io.FileOutputStream; -import java.io.InputStream; -import java.io.OutputStream; -import java.util.Map; -import java.util.List; -import java.util.ArrayList; -import java.util.ListIterator; -import java.util.HashMap; -import java.io.IOException; -import java.io.File; -import java.util.UUID; - -import org.bukkit.entity.Player; -import org.bukkit.inventory.ItemStack; -import org.bukkit.plugin.java.JavaPlugin; -import org.bukkit.configuration.file.FileConfiguration; -import org.bukkit.configuration.file.YamlConfiguration; -import org.bukkit.configuration.ConfigurationSection; - +import com.dre.brewery.filedata.*; +import com.dre.brewery.integration.LogBlockBarrel; import com.dre.brewery.integration.WGBarrel; import com.dre.brewery.integration.WGBarrelNew; import com.dre.brewery.integration.WGBarrelOld; -import org.apache.commons.lang.math.NumberUtils; -import org.bukkit.event.HandlerList; -import org.bukkit.Bukkit; -import org.bukkit.World; -import org.bukkit.Location; -import org.bukkit.command.CommandSender; -import org.bukkit.ChatColor; -import org.bukkit.Material; -import org.bukkit.block.Block; - import com.dre.brewery.listeners.*; -import com.dre.brewery.filedata.*; -import com.dre.brewery.integration.LogBlockBarrel; +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.ListIterator; +import java.util.Map; +import java.util.UUID; +import org.apache.commons.lang.math.NumberUtils; +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.World; +import org.bukkit.block.Block; +import org.bukkit.command.CommandSender; +import org.bukkit.configuration.ConfigurationSection; +import org.bukkit.configuration.file.FileConfiguration; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.entity.Player; +import org.bukkit.event.HandlerList; +import org.bukkit.inventory.ItemStack; +import org.bukkit.plugin.java.JavaPlugin; public class P extends JavaPlugin { public static P p; public static String configVersion = "1.3.1"; public static boolean debug; public static boolean useUUID; + public static boolean use1_9; public static boolean updateCheck; // Third Party Enabled @@ -57,6 +55,7 @@ public class P extends JavaPlugin { public EntityListener entityListener; public InventoryListener inventoryListener; public WorldListener worldListener; + public Compat1_9 compat1_9; // Language public String language; @@ -68,7 +67,12 @@ public class P extends JavaPlugin { // Version check String v = Bukkit.getBukkitVersion(); - useUUID = !v.matches(".*1\\.[1-6].*") && !v.matches(".*1\\.7\\.[0-5].*"); + useUUID = !v.matches(".*1\\.[0-6].*") && !v.matches(".*1\\.7\\.[0-5].*"); + use1_9 = !v.matches(".*1\\.[0-8].*"); + if (use1_9) { + log("&cExperimental support for Bukkit 1.9 enabled."); + log("&cPlease note that the changes of 1.9 make a build of Brewery with the same quality as for older versions impossible."); + } // load the Config try { @@ -94,6 +98,7 @@ public class P extends JavaPlugin { entityListener = new EntityListener(); inventoryListener = new InventoryListener(); worldListener = new WorldListener(); + compat1_9 = new Compat1_9(); getCommand("Brewery").setExecutor(new CommandListener()); p.getServer().getPluginManager().registerEvents(blockListener, p); @@ -101,6 +106,9 @@ public class P extends JavaPlugin { p.getServer().getPluginManager().registerEvents(entityListener, p); p.getServer().getPluginManager().registerEvents(inventoryListener, p); p.getServer().getPluginManager().registerEvents(worldListener, p); + if (use1_9) { + p.getServer().getPluginManager().registerEvents(compat1_9, p); + } // Heartbeat p.getServer().getScheduler().runTaskTimer(p, new BreweryRunnable(), 650, 1200); diff --git a/src/com/dre/brewery/listeners/Compat1_9.java b/src/com/dre/brewery/listeners/Compat1_9.java new file mode 100644 index 0000000..bc8686b --- /dev/null +++ b/src/com/dre/brewery/listeners/Compat1_9.java @@ -0,0 +1,31 @@ +package com.dre.brewery.listeners; + +import com.dre.brewery.Brew; +import org.bukkit.Material; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerItemConsumeEvent; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.PotionMeta; + +// Workaround to remove unwanted potion effects +public class Compat1_9 implements Listener { + + @EventHandler + public void onPlayerDrink(PlayerItemConsumeEvent event) { + ItemStack item = event.getItem(); + Brew brew = Brew.get(item); + if (brew == null) { + return; + } + + if (item.getType() == Material.POTION) { + try { + PotionMeta meta = (PotionMeta) item.getItemMeta(); + meta.setMainEffect(null); + item.setItemMeta(meta); + } catch (Exception exception) {} + } + } + +}