diff --git a/src/me/libraryaddict/disguise/utilities/DisguiseSound.java b/src/me/libraryaddict/disguise/utilities/DisguiseSound.java index 0e758188..05667410 100644 --- a/src/me/libraryaddict/disguise/utilities/DisguiseSound.java +++ b/src/me/libraryaddict/disguise/utilities/DisguiseSound.java @@ -1,7 +1,8 @@ package me.libraryaddict.disguise.utilities; import java.util.HashMap; -import java.util.HashSet; +import java.util.Map.Entry; +import java.util.Objects; import org.bukkit.Sound; @@ -81,7 +82,11 @@ public enum DisguiseSound { PIG_ZOMBIE(Sound.ENTITY_ZOMBIE_PIG_HURT, null, Sound.ENTITY_ZOMBIE_PIG_DEATH, Sound.ENTITY_ZOMBIE_PIG_AMBIENT, Sound.ENTITY_ZOMBIE_PIG_ANGRY), - PLAYER(Sound.ENTITY_PLAYER_HURT, Sound.BLOCK_GRASS_STEP, Sound.ENTITY_PLAYER_DEATH, null), + PLAYER(Sound.ENTITY_PLAYER_HURT, new Sound[] { + Sound.BLOCK_ANVIL_STEP, Sound.BLOCK_CLOTH_STEP, Sound.BLOCK_GLASS_STEP, Sound.BLOCK_GRASS_STEP, + Sound.BLOCK_GRAVEL_STEP, Sound.BLOCK_LADDER_STEP, Sound.BLOCK_METAL_STEP, Sound.BLOCK_SAND_STEP, + Sound.BLOCK_SLIME_STEP, Sound.BLOCK_SNOW_STEP, Sound.BLOCK_STONE_STEP, Sound.BLOCK_WOOD_STEP + }, Sound.ENTITY_PLAYER_DEATH, null), RABBIT(Sound.ENTITY_RABBIT_HURT, Sound.ENTITY_RABBIT_JUMP, Sound.ENTITY_RABBIT_DEATH, Sound.ENTITY_RABBIT_AMBIENT), @@ -154,9 +159,8 @@ public enum DisguiseSound { } } - private HashSet cancelSounds = new HashSet<>(); private float damageSoundVolume = 1F; - private HashMap disguiseSounds = new HashMap<>(); + private HashMap disguiseSounds = new HashMap<>(); DisguiseSound(Object hurt, Object step, Object death, Object idle, Object... sounds) { addSound(hurt, SoundType.HURT); @@ -167,7 +171,18 @@ public enum DisguiseSound { for (Object obj : sounds) { addSound(obj, SoundType.CANCEL); } + } + DisguiseSound(Object hurt, Object[] step, Object death, Object idle, Object... sounds) { + addSound(hurt, SoundType.HURT); + for (Object obj : step) + addSound(obj, SoundType.STEP); + addSound(death, SoundType.DEATH); + addSound(idle, SoundType.IDLE); + + for (Object obj : sounds) { + addSound(obj, SoundType.CANCEL); + } } private void addSound(Object sound, SoundType type) { @@ -200,7 +215,7 @@ public enum DisguiseSound { disguiseSounds.put(SoundType.IDLE, s); break; case CANCEL: - cancelSounds.add(s); + disguiseSounds.put(s, SoundType.CANCEL); } } @@ -209,15 +224,43 @@ public enum DisguiseSound { } public String getSound(SoundType type) { - if (type == null || !disguiseSounds.containsKey(type)) { + if (type == null) { return null; } - return disguiseSounds.get(type); + if (disguiseSounds.containsKey(type)) { + return (String) disguiseSounds.get(type); + } + else if (disguiseSounds.containsValue(type)) { + for (Entry entry : disguiseSounds.entrySet()) { + if (entry.getValue() != type) + continue; + + return (String) entry.getKey(); + } + } + + return null; } - public HashSet getSoundsToCancel() { - return cancelSounds; + public SoundType getSound(String sound) { + if (sound == null) { + return null; + } + + if (disguiseSounds.containsKey(sound)) { + return (SoundType) disguiseSounds.get(sound); + } + else if (disguiseSounds.containsValue(sound)) { + for (Entry entry : disguiseSounds.entrySet()) { + if (!Objects.equals(sound, entry.getValue())) + continue; + + return (SoundType) entry.getKey(); + } + } + + return null; } /** @@ -231,36 +274,44 @@ public enum DisguiseSound { return SoundType.CANCEL; } - if (disguiseSounds.containsKey(SoundType.STEP) && disguiseSounds.get(SoundType.STEP).startsWith("step.") + /*if (disguiseSounds.containsKey(SoundType.STEP) && disguiseSounds.get(SoundType.STEP).startsWith("step.") && sound.startsWith("step.")) { return SoundType.STEP; - } + }*/ for (SoundType type : SoundType.values()) { if (!disguiseSounds.containsKey(type) || type == SoundType.DEATH || (ignoreDamage && type == SoundType.HURT)) { continue; } - String s = disguiseSounds.get(type); + Object s = disguiseSounds.get(type); if (s != null) { - if (s.equals(sound)) { + if (Objects.equals(s, sound)) { return type; } } + else { + for (Entry entry : disguiseSounds.entrySet()) { + if (!Objects.equals(sound, entry.getKey())) + continue; + + return (SoundType) entry.getValue(); + } + } } return null; } public boolean isCancelSound(String sound) { - return getSoundsToCancel().contains(sound); + return getSound(sound) == SoundType.CANCEL; } - public void removeSound(SoundType type, Sound sound) { + /* public void removeSound(SoundType type, Sound sound) { removeSound(type, ReflectionManager.getCraftSound(sound)); } - + public void removeSound(SoundType type, String sound) { if (type == SoundType.CANCEL) { cancelSounds.remove(sound); @@ -268,16 +319,16 @@ public enum DisguiseSound { else { disguiseSounds.remove(type); } - } + }*/ public void setDamageAndIdleSoundVolume(float strength) { this.damageSoundVolume = strength; } - public void setSound(SoundType type, Sound sound) { + /* public void setSound(SoundType type, Sound sound) { setSound(type, ReflectionManager.getCraftSound(sound)); } - + public void setSound(SoundType type, String sound) { if (type == SoundType.CANCEL) { cancelSounds.add(sound); @@ -285,5 +336,5 @@ public enum DisguiseSound { else { disguiseSounds.put(type, sound); } - } + }*/ }