Fix sound groups
This commit is contained in:
parent
8d75a07f52
commit
dd538b6c4c
@ -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,12 +39,8 @@ public class PacketListenerSounds extends PacketAdapter {
|
||||
return;
|
||||
}
|
||||
|
||||
if (event.getPacketType() == Server.ENTITY_STATUS) {
|
||||
handleEntityStatus(event);
|
||||
} else if (event.getPacketType() == Server.NAMED_SOUND_EFFECT) {
|
||||
handleNamedSoundEffect(event);
|
||||
}
|
||||
}
|
||||
|
||||
private void handleNamedSoundEffect(PacketEvent event) {
|
||||
StructureModifier<Object> mods = event.getPacket().getModifier();
|
||||
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user