diff --git a/src/main/java/me/libraryaddict/disguise/utilities/DisguiseSound.java b/src/main/java/me/libraryaddict/disguise/utilities/DisguiseSound.java index 82a3a561..f1d97b16 100644 --- a/src/main/java/me/libraryaddict/disguise/utilities/DisguiseSound.java +++ b/src/main/java/me/libraryaddict/disguise/utilities/DisguiseSound.java @@ -78,7 +78,6 @@ public enum DisguiseSound { } public static DisguiseSound getType(String name) { - //TODO: FIX the disguise sounds try { return valueOf(name); } catch (Exception ex) { diff --git a/src/main/java/me/libraryaddict/disguise/utilities/PacketsManager.java b/src/main/java/me/libraryaddict/disguise/utilities/PacketsManager.java index 6ffd10cd..9a812884 100644 --- a/src/main/java/me/libraryaddict/disguise/utilities/PacketsManager.java +++ b/src/main/java/me/libraryaddict/disguise/utilities/PacketsManager.java @@ -609,6 +609,7 @@ public class PacketsManager { if (block != null) { Object step = ReflectionManager.getNmsField("Block", "stepSound").get(block); mods.write(0, ReflectionManager.getNmsMethod(step.getClass(), "getStepSound").invoke(step)); + mods.write(1, ReflectionManager.getSoundCategory(disguise.getType())); } } catch (Exception ex) { ex.printStackTrace(); @@ -618,6 +619,7 @@ public class PacketsManager { // sending fake sounds. In which case. Why cancel it. } else { mods.write(0, ReflectionManager.getCraftSoundEffect(sound)); + mods.write(1, ReflectionManager.getSoundCategory(disguise.getType())); // Time to change the pitch and volume if (soundType == SoundType.HURT || soundType == SoundType.DEATH || soundType == SoundType.IDLE) { @@ -713,7 +715,7 @@ public class PacketsManager { mods = packet.getModifier(); Object craftSoundEffect = ReflectionManager.getCraftSoundEffect(sound); mods.write(0, craftSoundEffect); - mods.write(1, ReflectionManager.getSoundCategory("master")); //Meh + mods.write(1, ReflectionManager.getSoundCategory(disguise.getType())); mods.write(2, (int) (loc.getX() * 8D)); mods.write(3, (int) (loc.getY() * 8D)); mods.write(4, (int) (loc.getZ() * 8D)); @@ -1103,15 +1105,14 @@ public class PacketsManager { } public static void setHearDisguisesListener(boolean enabled) { - //TODO: FIX SOUNDS -// if (soundsListenerEnabled != enabled) { -// soundsListenerEnabled = enabled; -// if (soundsListenerEnabled) { -// ProtocolLibrary.getProtocolManager().addPacketListener(soundsListener); -// } else { -// ProtocolLibrary.getProtocolManager().removePacketListener(soundsListener); -// } -// } + if (soundsListenerEnabled != enabled) { + soundsListenerEnabled = enabled; + if (soundsListenerEnabled) { + ProtocolLibrary.getProtocolManager().addPacketListener(soundsListener); + } else { + ProtocolLibrary.getProtocolManager().removePacketListener(soundsListener); + } + } } public static void setInventoryListenerEnabled(boolean enabled) { diff --git a/src/main/java/me/libraryaddict/disguise/utilities/ReflectionManager.java b/src/main/java/me/libraryaddict/disguise/utilities/ReflectionManager.java index 01afdabc..74deb966 100644 --- a/src/main/java/me/libraryaddict/disguise/utilities/ReflectionManager.java +++ b/src/main/java/me/libraryaddict/disguise/utilities/ReflectionManager.java @@ -7,6 +7,7 @@ import com.comphenix.protocol.wrappers.WrappedDataWatcher.WrappedDataWatcherObje import com.comphenix.protocol.wrappers.WrappedGameProfile; import com.google.common.collect.ImmutableMap; import com.mojang.authlib.GameProfile; +import me.libraryaddict.disguise.disguisetypes.DisguiseType; import org.apache.commons.lang3.tuple.ImmutablePair; import org.apache.commons.lang3.tuple.Pair; import org.bukkit.Art; @@ -15,9 +16,7 @@ import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.Sound; import org.bukkit.World; -import org.bukkit.entity.Entity; -import org.bukkit.entity.LivingEntity; -import org.bukkit.entity.Player; +import org.bukkit.entity.*; import org.bukkit.inventory.EntityEquipment; import org.bukkit.inventory.EquipmentSlot; import org.bukkit.inventory.ItemStack; @@ -530,16 +529,24 @@ public class ReflectionManager { Class clazz = getNmsClass("SoundCategory"); Enum[] enums = clazz != null ? (Enum[]) clazz.getEnumConstants() : null; for (Enum anEnum : enums != null ? enums : new Enum[0]) { - if (anEnum.name().equals("MASTER")) return anEnum; + if (anEnum.name().equals(category.toUpperCase())) return anEnum; } } - return null; + return invoke; } catch (Exception e) { e.printStackTrace(); return null; } } + public static Enum getSoundCategory(DisguiseType disguiseType) { + if (disguiseType == DisguiseType.PLAYER) return getSoundCategory("player"); + Class entityClass = disguiseType.getEntityType().getEntityClass(); + if (Monster.class.isAssignableFrom(entityClass)) return getSoundCategory("hostile"); + if (Ambient.class.isAssignableFrom(entityClass)) return getSoundCategory("ambient"); + return getSoundCategory("neutral"); + } + /** * Creates the NMS object EnumItemSlot from an EquipmentSlot. *