From 37ecf87276b93bbef1731975175de6a4f9af6e96 Mon Sep 17 00:00:00 2001 From: Sn0wStorm Date: Wed, 27 Apr 2016 21:28:42 +0200 Subject: [PATCH] Fix Potion Colors, using PotionType Workaround additional misleading effects showing in Lore by hiding all Potion Effects --- src/com/dre/brewery/BIngredients.java | 31 ++---- src/com/dre/brewery/BRecipe.java | 11 +-- src/com/dre/brewery/Brew.java | 98 +++++++++---------- .../brewery/listeners/DrinkListener1_9.java | 3 +- 4 files changed, 56 insertions(+), 87 deletions(-) diff --git a/src/com/dre/brewery/BIngredients.java b/src/com/dre/brewery/BIngredients.java index e26896c..a475a31 100644 --- a/src/com/dre/brewery/BIngredients.java +++ b/src/com/dre/brewery/BIngredients.java @@ -1,16 +1,13 @@ package com.dre.brewery; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Map; -import java.util.Set; 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; +import java.util.*; + public class BIngredients { public static Set possibleIngredients = new HashSet(); public static ArrayList recipes = new ArrayList(); @@ -83,11 +80,7 @@ public class BIngredients { Brew.addOrReplaceEffects(potionMeta, brew.getEffects(), brew.getQuality()); cookedName = cookRecipe.getName(quality); - if (P.use1_9) { - potionMeta.setMainEffect(Brew.PotionColor.valueOf(cookRecipe.getColor()).getEffect()); - } else { - potion.setDurability(Brew.PotionColor.valueOf(cookRecipe.getColor()).getColorId(false)); - } + Brew.PotionColor.valueOf(cookRecipe.getColor()).colorBrew(potionMeta, potion, false); } else { // new base potion @@ -95,22 +88,14 @@ public class BIngredients { if (state <= 1) { cookedName = P.p.languageReader.get("Brew_ThickBrew"); - if (P.use1_9) { - potionMeta.setMainEffect(Brew.PotionColor.BLUE.getEffect()); - } else { - potion.setDurability(Brew.PotionColor.BLUE.getColorId(false)); - } + Brew.PotionColor.BLUE.colorBrew(potionMeta, potion, 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); - if (P.use1_9) { - potionMeta.setMainEffect(Brew.PotionColor.CYAN.getEffect()); - } else { - potion.setDurability(Brew.PotionColor.CYAN.getColorId(true)); - } + Brew.PotionColor.CYAN.colorBrew(potionMeta, potion, true); } } } @@ -119,11 +104,7 @@ public class BIngredients { if (cookedName == null) { // if no name could be found cookedName = P.p.languageReader.get("Brew_Undefined"); - if (P.use1_9) { - potionMeta.setMainEffect(Brew.PotionColor.CYAN.getEffect()); - } else { - potion.setDurability(Brew.PotionColor.CYAN.getColorId(true)); - } + Brew.PotionColor.CYAN.colorBrew(potionMeta, potion, true); } potionMeta.setDisplayName(P.p.color("&f" + cookedName)); diff --git a/src/com/dre/brewery/BRecipe.java b/src/com/dre/brewery/BRecipe.java index d772dc9..9a7c68d 100644 --- a/src/com/dre/brewery/BRecipe.java +++ b/src/com/dre/brewery/BRecipe.java @@ -1,13 +1,14 @@ package com.dre.brewery; -import java.util.ArrayList; -import java.util.List; 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; +import java.util.ArrayList; +import java.util.List; + public class BRecipe { private String[] name; @@ -204,11 +205,7 @@ public class BRecipe { Brew brew = new Brew(uid, bIngredients, quality, distillruns, getAge(), wood, getName(5), false, false, true); - if (P.use1_9) { - potionMeta.setMainEffect(Brew.PotionColor.valueOf(getColor()).getEffect()); - } else { - potion.setDurability(Brew.PotionColor.valueOf(getColor()).getColorId(false)); - } + Brew.PotionColor.valueOf(getColor()).colorBrew(potionMeta, potion, 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 ec7d6ae..263e096 100644 --- a/src/com/dre/brewery/Brew.java +++ b/src/com/dre/brewery/Brew.java @@ -1,16 +1,20 @@ package com.dre.brewery; +import org.bukkit.Material; +import org.bukkit.configuration.ConfigurationSection; +import org.bukkit.inventory.BrewerInventory; +import org.bukkit.inventory.ItemFlag; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.PotionMeta; +import org.bukkit.potion.PotionData; +import org.bukkit.potion.PotionEffect; +import org.bukkit.potion.PotionEffectType; +import org.bukkit.potion.PotionType; + 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; public class Brew { @@ -238,6 +242,7 @@ public class Brew { } public boolean canDistill() { + if (stat) return false; if (currentRecipe != null) { return currentRecipe.getDistillRuns() > distillRuns; } else if (distillRuns >= 6) { @@ -292,17 +297,9 @@ public class Brew { 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()); + PotionColor.valueOf(currentRecipe.getColor()).colorBrew(((PotionMeta) potion.getItemMeta()), potion, false); } else { - potion.setDurability(PotionColor.valueOf(currentRecipe.getColor()).getColorId(true)); + PotionColor.valueOf(currentRecipe.getColor()).colorBrew(((PotionMeta) potion.getItemMeta()), potion, true); } } } @@ -338,21 +335,13 @@ public class Brew { 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())); - } + PotionColor.valueOf(recipe.getColor()).colorBrew(potionMeta, slotItem, 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())); - } + PotionColor.GREY.colorBrew(potionMeta, slotItem, canDistill()); } // Distill Lore @@ -394,20 +383,12 @@ public class Brew { 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())); - } + PotionColor.valueOf(recipe.getColor()).colorBrew(potionMeta, item, 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())); - } + PotionColor.GREY.colorBrew(potionMeta, item, canDistill()); } } @@ -664,25 +645,25 @@ public class Brew { } 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); + PINK(1, PotionType.REGEN), + CYAN(2, PotionType.SPEED), + ORANGE(3, PotionType.FIRE_RESISTANCE), + GREEN(4, PotionType.POISON), + BRIGHT_RED(5, PotionType.INSTANT_HEAL), + BLUE(6, PotionType.NIGHT_VISION), + BLACK(8, PotionType.WEAKNESS), + RED(9, PotionType.STRENGTH), + GREY(10, PotionType.SLOWNESS), + WATER(11, PotionType.WATER_BREATHING), + DARK_RED(12, PotionType.INSTANT_DAMAGE), + BRIGHT_GREY(14, PotionType.INVISIBILITY); private final int colorId; - private final PotionEffectType effect; + private final PotionType type; - private PotionColor(int colorId, PotionEffectType effect) { + private PotionColor(int colorId, PotionType type) { this.colorId = colorId; - this.effect = effect; + this.type = type; } // gets the Damage Value, that sets a color on the potion @@ -694,8 +675,17 @@ public class Brew { return (short) (colorId + 32); } - public PotionEffectType getEffect() { - return effect; + public PotionType getType() { + return type; + } + + public void colorBrew(PotionMeta meta, ItemStack potion, boolean destillable) { + if (P.use1_9) { + meta.setBasePotionData(new PotionData(getType())); + meta.addItemFlags(ItemFlag.HIDE_POTION_EFFECTS); + } else { + potion.setDurability(getColorId(destillable)); + } } } diff --git a/src/com/dre/brewery/listeners/DrinkListener1_9.java b/src/com/dre/brewery/listeners/DrinkListener1_9.java index ce093d4..ddaf94e 100644 --- a/src/com/dre/brewery/listeners/DrinkListener1_9.java +++ b/src/com/dre/brewery/listeners/DrinkListener1_9.java @@ -3,6 +3,7 @@ package com.dre.brewery.listeners; import com.dre.brewery.Brew; import org.bukkit.Material; import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; import org.bukkit.event.player.PlayerItemConsumeEvent; import org.bukkit.inventory.ItemStack; @@ -13,7 +14,7 @@ import org.bukkit.potion.PotionType; // Workaround to remove unwanted potion effects public class DrinkListener1_9 implements Listener { - @EventHandler + @EventHandler(ignoreCancelled = true, priority = EventPriority.MONITOR) public void onPlayerDrink(PlayerItemConsumeEvent event) { ItemStack item = event.getItem(); Brew brew = Brew.get(item);