Fix sound groups
This commit is contained in:
		| @@ -1,7 +1,6 @@ | ||||
| package me.libraryaddict.disguise.utilities.packets.packetlisteners; | ||||
|  | ||||
| import com.comphenix.protocol.PacketType.Play.Server; | ||||
| import com.comphenix.protocol.ProtocolLibrary; | ||||
| import com.comphenix.protocol.events.ListenerPriority; | ||||
| import com.comphenix.protocol.events.PacketAdapter; | ||||
| import com.comphenix.protocol.events.PacketContainer; | ||||
| @@ -9,7 +8,6 @@ import com.comphenix.protocol.events.PacketEvent; | ||||
| import com.comphenix.protocol.reflect.StructureModifier; | ||||
| import me.libraryaddict.disguise.LibsDisguises; | ||||
| import me.libraryaddict.disguise.disguisetypes.Disguise; | ||||
| import me.libraryaddict.disguise.disguisetypes.DisguiseType; | ||||
| import me.libraryaddict.disguise.disguisetypes.MobDisguise; | ||||
| import me.libraryaddict.disguise.disguisetypes.TargetedDisguise; | ||||
| import me.libraryaddict.disguise.utilities.DisguiseUtilities; | ||||
| @@ -21,7 +19,6 @@ import org.bukkit.entity.Entity; | ||||
| import org.bukkit.entity.LivingEntity; | ||||
| import org.bukkit.entity.Player; | ||||
|  | ||||
| import java.lang.reflect.InvocationTargetException; | ||||
| import java.util.Set; | ||||
|  | ||||
| public class PacketListenerSounds extends PacketAdapter { | ||||
| @@ -33,7 +30,7 @@ public class PacketListenerSounds extends PacketAdapter { | ||||
|     private static boolean cancelSound; | ||||
|  | ||||
|     public PacketListenerSounds(LibsDisguises plugin) { | ||||
|         super(plugin, ListenerPriority.NORMAL, Server.NAMED_SOUND_EFFECT, Server.ENTITY_STATUS); | ||||
|         super(plugin, ListenerPriority.NORMAL, Server.NAMED_SOUND_EFFECT); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
| @@ -42,11 +39,7 @@ public class PacketListenerSounds extends PacketAdapter { | ||||
|             return; | ||||
|         } | ||||
|  | ||||
|         if (event.getPacketType() == Server.ENTITY_STATUS) { | ||||
|             handleEntityStatus(event); | ||||
|         } else if (event.getPacketType() == Server.NAMED_SOUND_EFFECT) { | ||||
|             handleNamedSoundEffect(event); | ||||
|         } | ||||
|         handleNamedSoundEffect(event); | ||||
|     } | ||||
|  | ||||
|     private void handleNamedSoundEffect(PacketEvent event) { | ||||
| @@ -118,13 +111,15 @@ public class PacketListenerSounds extends PacketAdapter { | ||||
|             return; | ||||
|         } | ||||
|  | ||||
|         Object sound = null; | ||||
|         SoundGroup disguiseSound = SoundGroup.getGroup(disguise); | ||||
|  | ||||
|         if (disguiseSound != null) { | ||||
|             sound = disguiseSound.getSound(soundType); | ||||
|         if (disguiseSound == null) { | ||||
|             event.setCancelled(true); | ||||
|             return; | ||||
|         } | ||||
|  | ||||
|         Object sound = disguiseSound.getSound(soundType); | ||||
|  | ||||
|         if (sound == null) { | ||||
|             event.setCancelled(true); | ||||
|             return; | ||||
| @@ -134,7 +129,7 @@ public class PacketListenerSounds extends PacketAdapter { | ||||
|         float volume = (float) mods.read(5); | ||||
|         float pitch = (float) mods.read(6); | ||||
|  | ||||
|         // If the volume is the default | ||||
|         // If the volume is the default, set it to what the real disguise sound group expects | ||||
|         if (volume == soundGroup.getDamageAndIdleSoundVolume()) { | ||||
|             volume = disguiseSound.getDamageAndIdleSoundVolume(); | ||||
|         } | ||||
| @@ -170,105 +165,4 @@ public class PacketListenerSounds extends PacketAdapter { | ||||
|  | ||||
|         event.setPacket(newPacket); | ||||
|     } | ||||
|  | ||||
|     private void handleEntityStatus(PacketEvent event) { | ||||
|         StructureModifier<Object> mods = event.getPacket().getModifier(); | ||||
|         Player observer = event.getPlayer(); | ||||
|  | ||||
|         if ((byte) mods.read(1) != 2) { | ||||
|             return; | ||||
|         } | ||||
|  | ||||
|         // It made a damage animation | ||||
|         Disguise disguise = DisguiseUtilities.getDisguise(observer, event.getPacket().getIntegers().read(0)); | ||||
|  | ||||
|         if (disguise == null) { | ||||
|             return; | ||||
|         } | ||||
|  | ||||
|         Entity entity = disguise.getEntity(); | ||||
|  | ||||
|         if (disguise instanceof TargetedDisguise) { | ||||
|             Set<TargetedDisguise> discs = DisguiseUtilities.getDisguises().get(entity.getEntityId()); | ||||
|  | ||||
|             for (TargetedDisguise targetedDisguise : discs) { | ||||
|                 if (targetedDisguise != disguise) { | ||||
|                     continue; | ||||
|                 } | ||||
|  | ||||
|                 if (!targetedDisguise.canSee(observer)) { | ||||
|                     return; | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         SoundType soundType = SoundType.HURT; | ||||
|  | ||||
|         if (entity instanceof LivingEntity && ((LivingEntity) entity).getHealth() <= 0) { | ||||
|             soundType = SoundType.DEATH; | ||||
|         } | ||||
|  | ||||
|         if (entity == event.getPlayer() && !disguise.getType().isPlayer()) { | ||||
|             if (!disguise.isSelfDisguiseSoundsReplaced()) { | ||||
|                 cancelSound = !cancelSound; | ||||
|  | ||||
|                 if (cancelSound) { | ||||
|                     return; | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         SoundGroup entitySoundGroup = SoundGroup.getGroup(entity.getType().name()); | ||||
|  | ||||
|         if (entitySoundGroup == null) { | ||||
|             return; | ||||
|         } | ||||
|  | ||||
|         Object sound = entitySoundGroup.getSound(soundType); | ||||
|  | ||||
|         if (sound == null) { | ||||
|             return; | ||||
|         } | ||||
|  | ||||
|         SoundGroup disSound = SoundGroup.getGroup(disguise); | ||||
|         SoundGroup expectedGroup = SoundGroup.getGroup(disguise.getType().name()); | ||||
|  | ||||
|         if (disSound == null || disSound == expectedGroup) { | ||||
|             return; | ||||
|         } | ||||
|  | ||||
|         Location loc = entity.getLocation(); | ||||
|         PacketContainer packet = | ||||
|             new PacketContainer(sound.getClass().getSimpleName().equals("MinecraftKey") ? Server.CUSTOM_SOUND_EFFECT : Server.NAMED_SOUND_EFFECT); | ||||
|  | ||||
|         mods = packet.getModifier(); | ||||
|  | ||||
|         mods.write(0, sound); | ||||
|         mods.write(1, ReflectionManager.getSoundCategory(disguise.getType())); // Meh | ||||
|         mods.write(2, (int) (loc.getX() * 8D)); | ||||
|         mods.write(3, (int) (loc.getY() * 8D)); | ||||
|         mods.write(4, (int) (loc.getZ() * 8D)); | ||||
|         mods.write(5, disSound.getDamageAndIdleSoundVolume()); | ||||
|  | ||||
|         float pitch; | ||||
|  | ||||
|         if (disguise instanceof MobDisguise && !((MobDisguise) disguise).isAdult()) { | ||||
|             pitch = (DisguiseUtilities.random.nextFloat() - DisguiseUtilities.random.nextFloat()) * 0.2F + 1.4F; | ||||
|         } else { | ||||
|             pitch = (DisguiseUtilities.random.nextFloat() - DisguiseUtilities.random.nextFloat()) * 0.2F + 1.0F; | ||||
|         } | ||||
|  | ||||
|         if (disguise.getType() == DisguiseType.BAT) { | ||||
|             pitch *= 0.95F; | ||||
|         } | ||||
|  | ||||
|         mods.write(6, pitch); | ||||
|  | ||||
|         event.setCancelled(true); | ||||
|         try { | ||||
|             ProtocolLibrary.getProtocolManager().sendServerPacket(observer, packet, false); | ||||
|         } catch (InvocationTargetException e) { | ||||
|             e.printStackTrace(); | ||||
|         } | ||||
|     } | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user