81 lines
5.8 KiB
Diff
81 lines
5.8 KiB
Diff
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||
|
From: Brokkonaut <hannos17@gmx.de>
|
||
|
Date: Tue, 31 Oct 2017 03:26:18 +0100
|
||
|
Subject: [PATCH] Send attack SoundEffects only to players who can see the
|
||
|
attacker
|
||
|
|
||
|
|
||
|
diff --git a/src/main/java/net/minecraft/world/entity/player/EntityHuman.java b/src/main/java/net/minecraft/world/entity/player/EntityHuman.java
|
||
|
index 63e8062ae3f3407b92b72b5fccaa958c39282fb8..f9d0623a3ed5f49758cd5e97fe9f63a5b3198e58 100644
|
||
|
--- a/src/main/java/net/minecraft/world/entity/player/EntityHuman.java
|
||
|
+++ b/src/main/java/net/minecraft/world/entity/player/EntityHuman.java
|
||
|
@@ -28,6 +28,7 @@ import net.minecraft.network.chat.ChatMessage;
|
||
|
import net.minecraft.network.chat.IChatBaseComponent;
|
||
|
import net.minecraft.network.chat.IChatMutableComponent;
|
||
|
import net.minecraft.network.protocol.game.PacketPlayOutEntityVelocity;
|
||
|
+import net.minecraft.network.protocol.game.PacketPlayOutNamedSoundEffect;
|
||
|
import net.minecraft.network.syncher.DataWatcher;
|
||
|
import net.minecraft.network.syncher.DataWatcherObject;
|
||
|
import net.minecraft.network.syncher.DataWatcherRegistry;
|
||
|
@@ -1126,7 +1127,7 @@ public abstract class EntityHuman extends EntityLiving {
|
||
|
int i = b0 + EnchantmentManager.b((EntityLiving) this);
|
||
|
|
||
|
if (this.isSprinting() && flag) {
|
||
|
- this.world.playSound((EntityHuman) null, this.locX(), this.locY(), this.locZ(), SoundEffects.ENTITY_PLAYER_ATTACK_KNOCKBACK, this.getSoundCategory(), 1.0F, 1.0F);
|
||
|
+ sendSoundEffect(this, this.locX(), this.locY(), this.locZ(), SoundEffects.ENTITY_PLAYER_ATTACK_KNOCKBACK, this.getSoundCategory(), 1.0F, 1.0F); // Paper - send while respecting visibility
|
||
|
++i;
|
||
|
flag1 = true;
|
||
|
}
|
||
|
@@ -1201,7 +1202,7 @@ public abstract class EntityHuman extends EntityLiving {
|
||
|
}
|
||
|
}
|
||
|
|
||
|
- this.world.playSound((EntityHuman) null, this.locX(), this.locY(), this.locZ(), SoundEffects.ENTITY_PLAYER_ATTACK_SWEEP, this.getSoundCategory(), 1.0F, 1.0F);
|
||
|
+ sendSoundEffect(this, this.locX(), this.locY(), this.locZ(), SoundEffects.ENTITY_PLAYER_ATTACK_SWEEP, this.getSoundCategory(), 1.0F, 1.0F); // Paper - send while respecting visibility
|
||
|
this.ex();
|
||
|
}
|
||
|
|
||
|
@@ -1229,15 +1230,15 @@ public abstract class EntityHuman extends EntityLiving {
|
||
|
}
|
||
|
|
||
|
if (flag2) {
|
||
|
- this.world.playSound((EntityHuman) null, this.locX(), this.locY(), this.locZ(), SoundEffects.ENTITY_PLAYER_ATTACK_CRIT, this.getSoundCategory(), 1.0F, 1.0F);
|
||
|
+ sendSoundEffect(this, this.locX(), this.locY(), this.locZ(), SoundEffects.ENTITY_PLAYER_ATTACK_CRIT, this.getSoundCategory(), 1.0F, 1.0F); // Paper - send while respecting visibility
|
||
|
this.a(entity);
|
||
|
}
|
||
|
|
||
|
if (!flag2 && !flag3) {
|
||
|
if (flag) {
|
||
|
- this.world.playSound((EntityHuman) null, this.locX(), this.locY(), this.locZ(), SoundEffects.ENTITY_PLAYER_ATTACK_STRONG, this.getSoundCategory(), 1.0F, 1.0F);
|
||
|
+ sendSoundEffect(this, this.locX(), this.locY(), this.locZ(), SoundEffects.ENTITY_PLAYER_ATTACK_STRONG, this.getSoundCategory(), 1.0F, 1.0F); // Paper - send while respecting visibility
|
||
|
} else {
|
||
|
- this.world.playSound((EntityHuman) null, this.locX(), this.locY(), this.locZ(), SoundEffects.ENTITY_PLAYER_ATTACK_WEAK, this.getSoundCategory(), 1.0F, 1.0F);
|
||
|
+ sendSoundEffect(this, this.locX(), this.locY(), this.locZ(), SoundEffects.ENTITY_PLAYER_ATTACK_WEAK, this.getSoundCategory(), 1.0F, 1.0F); // Paper - send while respecting visibility
|
||
|
}
|
||
|
}
|
||
|
|
||
|
@@ -1289,7 +1290,7 @@ public abstract class EntityHuman extends EntityLiving {
|
||
|
|
||
|
this.applyExhaustion(world.spigotConfig.combatExhaustion, EntityExhaustionEvent.ExhaustionReason.ATTACK); // CraftBukkit - EntityExhaustionEvent // Spigot - Change to use configurable value
|
||
|
} else {
|
||
|
- this.world.playSound((EntityHuman) null, this.locX(), this.locY(), this.locZ(), SoundEffects.ENTITY_PLAYER_ATTACK_NODAMAGE, this.getSoundCategory(), 1.0F, 1.0F);
|
||
|
+ sendSoundEffect(this, this.locX(), this.locY(), this.locZ(), SoundEffects.ENTITY_PLAYER_ATTACK_NODAMAGE, this.getSoundCategory(), 1.0F, 1.0F); // Paper - send while respecting visibility
|
||
|
if (flag4) {
|
||
|
entity.extinguish();
|
||
|
}
|
||
|
@@ -1724,6 +1725,14 @@ public abstract class EntityHuman extends EntityLiving {
|
||
|
public int getExpToLevel() {
|
||
|
return this.expLevel >= 30 ? 112 + (this.expLevel - 30) * 9 : (this.expLevel >= 15 ? 37 + (this.expLevel - 15) * 5 : 7 + this.expLevel * 2);
|
||
|
}
|
||
|
+ // Paper start - send SoundEffect to everyone who can see fromEntity
|
||
|
+ private static void sendSoundEffect(EntityHuman fromEntity, double x, double y, double z, SoundEffect soundEffect, SoundCategory soundCategory, float volume, float pitch) {
|
||
|
+ fromEntity.world.playSound(fromEntity, x, y, z, soundEffect, soundCategory, volume, pitch); // This will not send the effect to the entity himself
|
||
|
+ if (fromEntity instanceof EntityPlayer) {
|
||
|
+ ((EntityPlayer) fromEntity).playerConnection.sendPacket(new PacketPlayOutNamedSoundEffect(soundEffect, soundCategory, x, y, z, volume, pitch));
|
||
|
+ }
|
||
|
+ }
|
||
|
+ // Paper end
|
||
|
|
||
|
// CraftBukkit start
|
||
|
public void applyExhaustion(float f) {
|