From 4467075a3570542a94227c6e3032d497e3c976be Mon Sep 17 00:00:00 2001 From: libraryaddict Date: Wed, 24 Oct 2018 10:09:32 +1300 Subject: [PATCH] Renamed Silver to Gray, fixed colors sometimes being inaccurate #310 --- .../disguise/disguisetypes/AnimalColor.java | 94 ++++++++++++++----- .../disguisetypes/watchers/LlamaWatcher.java | 15 +-- .../disguisetypes/watchers/SheepWatcher.java | 7 +- .../watchers/ShulkerWatcher.java | 6 +- .../disguisetypes/watchers/WolfWatcher.java | 57 +++++------ .../PacketListenerClientInteract.java | 16 ++-- 6 files changed, 121 insertions(+), 74 deletions(-) diff --git a/src/main/java/me/libraryaddict/disguise/disguisetypes/AnimalColor.java b/src/main/java/me/libraryaddict/disguise/disguisetypes/AnimalColor.java index 7382c816..d509f8eb 100644 --- a/src/main/java/me/libraryaddict/disguise/disguisetypes/AnimalColor.java +++ b/src/main/java/me/libraryaddict/disguise/disguisetypes/AnimalColor.java @@ -1,35 +1,87 @@ package me.libraryaddict.disguise.disguisetypes; -public enum AnimalColor -{ - BLACK(15), BLUE(11), BROWN(12), CYAN(9), GRAY(7), GREEN(13), LIGHT_BLUE(3), LIME(5), MAGENTA(2), ORANGE(1), PINK(6), PURPLE( - 10), RED(14), SILVER(8), WHITE(0), YELLOW(4); +import org.bukkit.DyeColor; +import org.bukkit.Material; - public static AnimalColor getColor(int nmsId) - { - for (AnimalColor color : values()) - { - if (color.getId() == nmsId) - { - return color; +public enum AnimalColor { + BLACK(DyeColor.BLACK, Material.INK_SAC), + BLUE(DyeColor.BLUE, Material.LAPIS_LAZULI), + BROWN(DyeColor.BROWN, Material.COCOA_BEANS), + CYAN(DyeColor.CYAN, Material.CYAN_DYE), + GRAY(DyeColor.GRAY, Material.GRAY_DYE), + GREEN(DyeColor.GREEN, Material.CACTUS_GREEN), + LIGHT_BLUE(DyeColor.LIGHT_BLUE, Material.LIGHT_BLUE_DYE), + LIME(DyeColor.LIME, Material.LIME_DYE), + MAGENTA(DyeColor.MAGENTA, Material.MAGENTA_DYE), + ORANGE(DyeColor.ORANGE, Material.ORANGE_DYE), + PINK(DyeColor.PINK, Material.PINK_DYE), + PURPLE(DyeColor.PURPLE, Material.PURPLE_DYE), + RED(DyeColor.RED, Material.ROSE_RED), + LIGHT_GRAY(DyeColor.LIGHT_GRAY, Material.LIGHT_GRAY_DYE), + WHITE(DyeColor.WHITE, Material.BONE_MEAL), + YELLOW(DyeColor.YELLOW, Material.DANDELION_YELLOW); + + public static AnimalColor getColorByWool(int woolId) { + for (AnimalColor color : values()) { + if (woolId != color.getDyeColor().getWoolData()) { + continue; } + + return color; } return null; } - private int value; + public static AnimalColor getColorByMaterial(Material material) { + for (AnimalColor color : values()) { + if (color.getDyeMaterial() != material) { + continue; + } - AnimalColor(int newValue) - { - value = newValue; + return color; + } + + return null; } - /** - * The color ID as defined by nms internals. - */ - public int getId() - { - return value; + public static AnimalColor getColorByDye(int dyeId) { + for (AnimalColor color : values()) { + if (dyeId != color.getDyeColor().getDyeData()) { + continue; + } + + return color; + } + + return null; + } + + public static AnimalColor getColor(DyeColor dyeColor) { + for (AnimalColor color : values()) { + if (dyeColor != color.getDyeColor()) { + continue; + } + + return color; + } + + return null; + } + + private DyeColor dyeColor; + private Material material; + + AnimalColor(DyeColor color, Material material) { + dyeColor = color; + this.material = material; + } + + public Material getDyeMaterial() { + return material; + } + + public DyeColor getDyeColor() { + return dyeColor; } } diff --git a/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/LlamaWatcher.java b/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/LlamaWatcher.java index f7bbc335..0887d5fd 100644 --- a/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/LlamaWatcher.java +++ b/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/LlamaWatcher.java @@ -1,10 +1,10 @@ package me.libraryaddict.disguise.disguisetypes.watchers; -import org.bukkit.entity.Llama; - import me.libraryaddict.disguise.disguisetypes.AnimalColor; import me.libraryaddict.disguise.disguisetypes.Disguise; import me.libraryaddict.disguise.disguisetypes.MetaIndex; +import org.bukkit.DyeColor; +import org.bukkit.entity.Llama; public class LlamaWatcher extends ChestedHorseWatcher { @@ -21,13 +21,17 @@ public class LlamaWatcher extends ChestedHorseWatcher { return Llama.Color.values()[getData(MetaIndex.LLAMA_COLOR)]; } - public void setCarpet(AnimalColor color) { - setData(MetaIndex.LLAMA_CARPET, color.getId()); + public void setCarpet(DyeColor dyeColor) { + setData(MetaIndex.LLAMA_CARPET, (int) dyeColor.getWoolData()); sendData(MetaIndex.LLAMA_CARPET); } + public void setCarpet(AnimalColor color) { + setCarpet(color.getDyeColor()); + } + public AnimalColor getCarpet() { - return AnimalColor.getColor(getData(MetaIndex.LLAMA_CARPET)); + return AnimalColor.getColorByWool(getData(MetaIndex.LLAMA_CARPET)); } public void setStrength(int strength) { @@ -38,5 +42,4 @@ public class LlamaWatcher extends ChestedHorseWatcher { public int getStrength() { return getData(MetaIndex.LLAMA_STRENGTH); } - } diff --git a/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/SheepWatcher.java b/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/SheepWatcher.java index ec16766a..09b1f563 100644 --- a/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/SheepWatcher.java +++ b/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/SheepWatcher.java @@ -1,10 +1,9 @@ package me.libraryaddict.disguise.disguisetypes.watchers; -import org.bukkit.DyeColor; - import me.libraryaddict.disguise.disguisetypes.AnimalColor; import me.libraryaddict.disguise.disguisetypes.Disguise; import me.libraryaddict.disguise.disguisetypes.MetaIndex; +import org.bukkit.DyeColor; public class SheepWatcher extends AgeableWatcher { @@ -13,7 +12,7 @@ public class SheepWatcher extends AgeableWatcher { } public AnimalColor getColor() { - return AnimalColor.getColor(((int) getData(MetaIndex.SHEEP_WOOL) & 15)); + return AnimalColor.getColorByWool(((int) getData(MetaIndex.SHEEP_WOOL) & 15)); } public boolean isSheared() { @@ -21,7 +20,7 @@ public class SheepWatcher extends AgeableWatcher { } public void setColor(AnimalColor color) { - setColor(DyeColor.getByWoolData((byte) color.getId())); + setColor(color.getDyeColor()); } public void setColor(DyeColor color) { diff --git a/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/ShulkerWatcher.java b/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/ShulkerWatcher.java index 7d7b5c03..71dd234d 100644 --- a/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/ShulkerWatcher.java +++ b/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/ShulkerWatcher.java @@ -52,7 +52,11 @@ public class ShulkerWatcher extends InsentientWatcher { } public void setColor(AnimalColor color) { - setData(MetaIndex.SHULKER_COLOR, (byte) color.getId()); + setData(MetaIndex.SHULKER_COLOR, color.getDyeColor().getWoolData()); sendData(MetaIndex.SHULKER_COLOR); } + + public AnimalColor getColor() { + return AnimalColor.getColorByWool(getData(MetaIndex.SHULKER_COLOR)); + } } diff --git a/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/WolfWatcher.java b/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/WolfWatcher.java index c8271e4f..9db9aee0 100644 --- a/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/WolfWatcher.java +++ b/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/WolfWatcher.java @@ -1,85 +1,70 @@ package me.libraryaddict.disguise.disguisetypes.watchers; -import org.bukkit.DyeColor; - import me.libraryaddict.disguise.disguisetypes.AnimalColor; import me.libraryaddict.disguise.disguisetypes.Disguise; import me.libraryaddict.disguise.disguisetypes.MetaIndex; +import org.bukkit.DyeColor; -public class WolfWatcher extends TameableWatcher -{ +public class WolfWatcher extends TameableWatcher { - public WolfWatcher(Disguise disguise) - { + public WolfWatcher(Disguise disguise) { super(disguise); } - public AnimalColor getCollarColor() - { - return AnimalColor.getColor(getData(MetaIndex.WOLF_COLLAR)); + public AnimalColor getCollarColor() { + return AnimalColor.getColorByWool(getData(MetaIndex.WOLF_COLLAR)); } /** * Used for tail rotation. - * + * * @return */ - public float getDamageTaken() - { - return (float) getData(MetaIndex.WOLF_DAMAGE); + public float getDamageTaken() { + return getData(MetaIndex.WOLF_DAMAGE); } /** * Used for tail rotation. - * + * * @param damage */ - public void setDamageTaken(float damage) - { + public void setDamageTaken(float damage) { setData(MetaIndex.WOLF_DAMAGE, damage); sendData(MetaIndex.WOLF_DAMAGE); } - public boolean isBegging() - { - return (boolean) getData(MetaIndex.WOLF_BEGGING); + public boolean isBegging() { + return getData(MetaIndex.WOLF_BEGGING); } - public void setBegging(boolean begging) - { + public void setBegging(boolean begging) { setData(MetaIndex.WOLF_BEGGING, begging); sendData(MetaIndex.WOLF_BEGGING); } - public boolean isAngry() - { + public boolean isAngry() { return isTameableFlag(2); } - public void setAngry(boolean angry) - { + public void setAngry(boolean angry) { setTameableFlag(2, angry); } - public void setCollarColor(AnimalColor color) - { - setCollarColor(DyeColor.getByWoolData((byte) color.getId())); + public void setCollarColor(AnimalColor color) { + setCollarColor(color.getDyeColor()); } - public void setCollarColor(DyeColor newColor) - { - if (!isTamed()) - { + public void setCollarColor(DyeColor newColor) { + if (!isTamed()) { setTamed(true); } - if (newColor.getWoolData() == getCollarColor().getId()) - { + if (newColor == getCollarColor().getDyeColor()) { return; } - setData(MetaIndex.WOLF_COLLAR, (int) newColor.getDyeData()); + setData(MetaIndex.WOLF_COLLAR, (int) newColor.getWoolData()); sendData(MetaIndex.WOLF_COLLAR); } - } diff --git a/src/main/java/me/libraryaddict/disguise/utilities/packetlisteners/PacketListenerClientInteract.java b/src/main/java/me/libraryaddict/disguise/utilities/packetlisteners/PacketListenerClientInteract.java index bf855823..1e6c4fce 100644 --- a/src/main/java/me/libraryaddict/disguise/utilities/packetlisteners/PacketListenerClientInteract.java +++ b/src/main/java/me/libraryaddict/disguise/utilities/packetlisteners/PacketListenerClientInteract.java @@ -13,8 +13,6 @@ import me.libraryaddict.disguise.disguisetypes.Disguise; import me.libraryaddict.disguise.disguisetypes.DisguiseType; import me.libraryaddict.disguise.disguisetypes.watchers.SheepWatcher; import me.libraryaddict.disguise.disguisetypes.watchers.WolfWatcher; -import me.libraryaddict.disguise.utilities.DisguiseUtilities; -import org.bukkit.Material; import org.bukkit.entity.*; import org.bukkit.inventory.ItemStack; @@ -45,16 +43,22 @@ public class PacketListenerClientInteract extends PacketAdapter { for (ItemStack item : new ItemStack[]{observer.getInventory().getItemInMainHand(), observer.getInventory().getItemInOffHand()}) { - if (item == null || item.getType() != Material.INK_SAC) + if (item == null) { continue; + } + + AnimalColor color = AnimalColor.getColorByMaterial(item.getType()); + + if (color == null) { + continue; + } Disguise disguise = DisguiseAPI.getDisguise(observer, entity); if (disguise == null || - (disguise.getType() != DisguiseType.SHEEP && disguise.getType() != DisguiseType.WOLF)) + (disguise.getType() != DisguiseType.SHEEP && disguise.getType() != DisguiseType.WOLF)) { continue; - - AnimalColor color = AnimalColor.getColor(item.getDurability()); + } if (disguise.getType() == DisguiseType.SHEEP) { SheepWatcher watcher = (SheepWatcher) disguise.getWatcher();