diff --git a/pom.xml b/pom.xml
index 594b2d5b..9f3d5d1a 100644
--- a/pom.xml
+++ b/pom.xml
@@ -3,7 +3,7 @@
4.0.0
LibsDisguises
LibsDisguises
- 9.0.5-SNAPSHOT
+ 9.0.6
src
diff --git a/src/me/libraryaddict/disguise/utilities/packetlisteners/PacketListenerSounds.java b/src/me/libraryaddict/disguise/utilities/packetlisteners/PacketListenerSounds.java
index 5aaf7585..2ee30f41 100644
--- a/src/me/libraryaddict/disguise/utilities/packetlisteners/PacketListenerSounds.java
+++ b/src/me/libraryaddict/disguise/utilities/packetlisteners/PacketListenerSounds.java
@@ -16,7 +16,6 @@ import com.comphenix.protocol.events.PacketAdapter;
import com.comphenix.protocol.events.PacketContainer;
import com.comphenix.protocol.events.PacketEvent;
import com.comphenix.protocol.reflect.StructureModifier;
-
import me.libraryaddict.disguise.DisguiseAPI;
import me.libraryaddict.disguise.LibsDisguises;
import me.libraryaddict.disguise.disguisetypes.Disguise;
@@ -47,6 +46,7 @@ public class PacketListenerSounds extends PacketAdapter
{
return;
}
+
if (event.isAsync())
{
return;
@@ -63,19 +63,28 @@ public class PacketListenerSounds extends PacketAdapter
if (event.getPacketType() == Server.NAMED_SOUND_EFFECT)
{
- Object soundEffect = mods.read(0);
-
SoundType soundType = null;
- Location soundLoc = new Location(observer.getWorld(), ((Integer) mods.read(2)) / 8D, ((Integer) mods.read(3)) / 8D,
- ((Integer) mods.read(4)) / 8D);
+ int[] soundCords = new int[]
+ {
+ (Integer) mods.read(2), (Integer) mods.read(3), (Integer) mods.read(4)
+ };
+
+ int chunkX = (int) Math.floor((soundCords[0] / 8D) / 16D);
+ int chunkZ = (int) Math.floor((soundCords[2] / 8D) / 16D);
+
+ if (!observer.getWorld().isChunkLoaded(chunkX, chunkZ))
+ {
+ return;
+ }
Entity disguisedEntity = null;
DisguiseSound entitySound = null;
Disguise disguise = null;
- Entity[] entities = soundLoc.getChunk().getEntities();
+ String soundEffect = ReflectionManager.convertSoundEffectToString(mods.read(0));
+ Entity[] entities = observer.getWorld().getChunkAt(chunkX, chunkZ).getEntities();
for (Entity entity : entities)
{
@@ -85,198 +94,197 @@ public class PacketListenerSounds extends PacketAdapter
{
Location loc = entity.getLocation();
- loc = new Location(observer.getWorld(), ((int) (loc.getX() * 8)) / 8D, ((int) (loc.getY() * 8)) / 8D,
- ((int) (loc.getZ() * 8)) / 8D);
-
- if (loc.equals(soundLoc))
- {
- entitySound = DisguiseSound.getType(entity.getType().name());
-
- if (entitySound != null)
+ int[] entCords = new int[]
{
- Object obj = null;
+ (int) (loc.getX() * 8), (int) (loc.getY() * 8), (int) (loc.getZ() * 8)
+ };
- if (entity instanceof LivingEntity)
+ if (soundCords[0] != entCords[0] || soundCords[1] != entCords[1] || soundCords[2] != entCords[2])
+ {
+ continue;
+ }
+
+ entitySound = DisguiseSound.getType(entity.getType().name());
+
+ if (entitySound == null)
+ {
+ continue;
+ }
+
+ Object obj = null;
+
+ if (entity instanceof LivingEntity)
+ {
+ try
+ {
+ // Use reflection so that this works for either int or double methods
+ obj = LivingEntity.class.getMethod("getHealth").invoke(entity);
+
+ if (obj instanceof Double ? (Double) obj == 0 : (Integer) obj == 0)
{
- try
- {
- // Use reflection so that this works for either int or double methods
- obj = LivingEntity.class.getMethod("getHealth").invoke(entity);
-
- if (obj instanceof Double ? (Double) obj == 0 : (Integer) obj == 0)
- {
- soundType = SoundType.DEATH;
- }
- else
- {
- obj = null;
- }
- }
- catch (Exception e)
- {
- e.printStackTrace();
- }
+ soundType = SoundType.DEATH;
}
-
- if (obj == null)
+ else
{
- boolean hasInvun = false;
-
- Object nmsEntity = ReflectionManager.getNmsEntity(entity);
-
- try
- {
- if (entity instanceof LivingEntity)
- {
- hasInvun = ReflectionManager.getNmsField("Entity", "noDamageTicks")
- .getInt(nmsEntity) == ReflectionManager
- .getNmsField("EntityLiving", "maxNoDamageTicks").getInt(nmsEntity);
- }
- else
- {
- Class clazz = ReflectionManager.getNmsClass("DamageSource");
-
- hasInvun = (Boolean) ReflectionManager.getNmsMethod("Entity", "isInvulnerable", clazz)
- .invoke(nmsEntity, ReflectionManager.getNmsField(clazz, "GENERIC"));
- }
- }
- catch (Exception ex)
- {
- ex.printStackTrace();
- }
-
- soundType = entitySound.getType(ReflectionManager.convertSoundEffectToString(soundEffect),
- !hasInvun);
- }
-
- if (soundType != null)
- {
- disguise = entityDisguise;
- disguisedEntity = entity;
- break;
+ obj = null;
}
}
+ catch (Exception e)
+ {
+ e.printStackTrace();
+ }
+ }
+
+ if (obj == null)
+ {
+ boolean hasInvun = false;
+
+ Object nmsEntity = ReflectionManager.getNmsEntity(entity);
+
+ try
+ {
+ if (entity instanceof LivingEntity)
+ {
+ hasInvun = ReflectionManager.getNmsField("Entity", "noDamageTicks")
+ .getInt(nmsEntity) == ReflectionManager.getNmsField("EntityLiving", "maxNoDamageTicks")
+ .getInt(nmsEntity);
+ }
+ else
+ {
+ Class clazz = ReflectionManager.getNmsClass("DamageSource");
+
+ hasInvun = (Boolean) ReflectionManager.getNmsMethod("Entity", "isInvulnerable", clazz)
+ .invoke(nmsEntity, ReflectionManager.getNmsField(clazz, "GENERIC"));
+ }
+ }
+ catch (Exception ex)
+ {
+ ex.printStackTrace();
+ }
+
+ soundType = entitySound.getType(soundEffect, !hasInvun);
+ }
+
+ if (soundType != null)
+ {
+ disguise = entityDisguise;
+ disguisedEntity = entity;
+ break;
}
}
}
- if (disguise != null)
+ if (disguise != null && disguise.isSoundsReplaced()
+ && (disguise.isSelfDisguiseSoundsReplaced() || disguisedEntity != observer))
{
- if (disguise.isSelfDisguiseSoundsReplaced() || disguisedEntity != event.getPlayer())
+ String sound = null;
+
+ DisguiseSound dSound = DisguiseSound.getType(disguise.getType().name());
+
+ if (dSound != null)
+ sound = dSound.getSound(soundType);
+
+ if (sound == null)
{
- if (disguise.isSoundsReplaced())
+ event.setCancelled(true);
+ }
+ else
+ {
+ if (sound.equals("step.grass"))
{
- String sound = null;
-
- DisguiseSound dSound = DisguiseSound.getType(disguise.getType().name());
-
- if (dSound != null)
- sound = dSound.getSound(soundType);
-
- if (sound == null)
+ try
{
- event.setCancelled(true);
- }
- else
- {
- if (sound.equals("step.grass"))
+ int typeId = observer.getWorld().getBlockTypeIdAt((int) Math.floor(soundCords[0] / 8D),
+ (int) Math.floor(soundCords[1] / 8D), (int) Math.floor(soundCords[2] / 8D));
+
+ Object block = ReflectionManager.getNmsMethod("RegistryMaterials", "getId", int.class)
+ .invoke(ReflectionManager.getNmsField("Block", "REGISTRY").get(null), typeId);
+
+ if (block != null)
{
- try
- {
- int typeId = soundLoc.getWorld().getBlockTypeIdAt(soundLoc.getBlockX(),
- soundLoc.getBlockY() - 1, soundLoc.getBlockZ());
+ Object step = ReflectionManager.getNmsField("Block", "stepSound").get(block);
- Object block = ReflectionManager.getNmsMethod("RegistryMaterials", "getId", int.class)
- .invoke(ReflectionManager.getNmsField("Block", "REGISTRY").get(null), typeId);
-
- if (block != null)
- {
- Object step = ReflectionManager.getNmsField("Block", "stepSound").get(block);
-
- mods.write(0,
- ReflectionManager.getNmsMethod(step.getClass(), "d").invoke(step));
- mods.write(1, ReflectionManager.getSoundCategory(disguise.getType()));
- }
- }
- catch (Exception ex)
- {
- ex.printStackTrace();
- }
- // There is no else statement. Because seriously. This should never be null. Unless
- // someone is
- // sending fake sounds. In which case. Why cancel it.
- }
- else
- {
- mods.write(0, ReflectionManager.getCraftSoundEffect(sound));
+ mods.write(0, ReflectionManager.getNmsMethod(step.getClass(), "d").invoke(step));
mods.write(1, ReflectionManager.getSoundCategory(disguise.getType()));
+ }
+ }
+ catch (Exception ex)
+ {
+ ex.printStackTrace();
+ }
+ // There is no else statement. Because seriously. This should never be null. Unless
+ // someone is
+ // 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)
+ // Time to change the pitch and volume
+ if (soundType == SoundType.HURT || soundType == SoundType.DEATH || soundType == SoundType.IDLE)
+ {
+ // If the volume is the default
+ if (mods.read(5).equals(entitySound.getDamageAndIdleSoundVolume()))
+ {
+ mods.write(5, dSound.getDamageAndIdleSoundVolume());
+ }
+
+ // Here I assume its the default pitch as I can't calculate if its real.
+ if (disguise instanceof MobDisguise && disguisedEntity instanceof LivingEntity
+ && ((MobDisguise) disguise).doesDisguiseAge())
+ {
+ boolean baby = false;
+
+ if (disguisedEntity instanceof Zombie)
{
- // If the volume is the default
- if (mods.read(5).equals(entitySound.getDamageAndIdleSoundVolume()))
+ baby = ((Zombie) disguisedEntity).isBaby();
+ }
+ else if (disguisedEntity instanceof Ageable)
+ {
+ baby = !((Ageable) disguisedEntity).isAdult();
+ }
+
+ if (((MobDisguise) disguise).isAdult() == baby)
+ {
+ float pitch = (Integer) mods.read(6);
+
+ if (baby)
{
- mods.write(5, dSound.getDamageAndIdleSoundVolume());
+ // If the pitch is not the expected
+ if (pitch > 97 || pitch < 111)
+ return;
+
+ pitch = (DisguiseUtilities.random.nextFloat() - DisguiseUtilities.random.nextFloat())
+ * 0.2F + 1.5F;
+ // Min = 1.5
+ // Cap = 97.5
+ // Max = 1.7
+ // Cap = 110.5
+ }
+ else
+ {
+ // If the pitch is not the expected
+ if (pitch >= 63 || pitch <= 76)
+ return;
+
+ pitch = (DisguiseUtilities.random.nextFloat() - DisguiseUtilities.random.nextFloat())
+ * 0.2F + 1.0F;
+ // Min = 1
+ // Cap = 63
+ // Max = 1.2
+ // Cap = 75.6
}
- // Here I assume its the default pitch as I can't calculate if its real.
- if (disguise instanceof MobDisguise && disguisedEntity instanceof LivingEntity
- && ((MobDisguise) disguise).doesDisguiseAge())
- {
- boolean baby = false;
+ pitch *= 63;
- if (disguisedEntity instanceof Zombie)
- {
- baby = ((Zombie) disguisedEntity).isBaby();
- }
- else if (disguisedEntity instanceof Ageable)
- {
- baby = !((Ageable) disguisedEntity).isAdult();
- }
+ if (pitch < 0)
+ pitch = 0;
- if (((MobDisguise) disguise).isAdult() == baby)
- {
- float pitch = (Integer) mods.read(6);
+ if (pitch > 255)
+ pitch = 255;
- if (baby)
- {
- // If the pitch is not the expected
- if (pitch > 97 || pitch < 111)
- return;
-
- pitch = (DisguiseUtilities.random.nextFloat()
- - DisguiseUtilities.random.nextFloat()) * 0.2F + 1.5F;
- // Min = 1.5
- // Cap = 97.5
- // Max = 1.7
- // Cap = 110.5
- }
- else
- {
- // If the pitch is not the expected
- if (pitch >= 63 || pitch <= 76)
- return;
-
- pitch = (DisguiseUtilities.random.nextFloat()
- - DisguiseUtilities.random.nextFloat()) * 0.2F + 1.0F;
- // Min = 1
- // Cap = 63
- // Max = 1.2
- // Cap = 75.6
- }
-
- pitch *= 63;
-
- if (pitch < 0)
- pitch = 0;
-
- if (pitch > 255)
- pitch = 255;
-
- mods.write(6, (int) pitch);
- }
- }
+ mods.write(6, (int) pitch);
}
}
}