mirror of
https://github.com/SparklyPower/SparklyPaper.git
synced 2025-12-29 11:59:06 +00:00
This patch aims to improve upon CraftBukkit's vanish functionalities. Whenever a projectile is shot, those who cannot see the shooter will be unable to hear, see or interact with the shot entity.
366 lines
22 KiB
Diff
366 lines
22 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Breno Santos <git@breno.ooo>
|
|
Date: Wed, 30 Mar 2022 17:09:22 -0400
|
|
Subject: [PATCH] Vanish-Extensions
|
|
|
|
|
|
diff --git a/src/main/java/net/minecraft/server/level/ChunkMap.java b/src/main/java/net/minecraft/server/level/ChunkMap.java
|
|
index 6ce27675103d4b691216c6b701b6ceb821af528f..3f761acf0b7056232c76a73c7d111cc003f3f111 100644
|
|
--- a/src/main/java/net/minecraft/server/level/ChunkMap.java
|
|
+++ b/src/main/java/net/minecraft/server/level/ChunkMap.java
|
|
@@ -84,6 +84,7 @@ import net.minecraft.world.entity.EntityType;
|
|
import net.minecraft.world.entity.Mob;
|
|
import net.minecraft.world.entity.ai.village.poi.PoiManager;
|
|
import net.minecraft.world.entity.boss.EnderDragonPart;
|
|
+import net.minecraft.world.entity.projectile.Projectile; // SparklyPaper
|
|
import net.minecraft.world.level.ChunkPos;
|
|
import net.minecraft.world.level.GameRules;
|
|
import net.minecraft.world.level.chunk.ChunkAccess;
|
|
@@ -2340,6 +2341,17 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider
|
|
flag = false;
|
|
}
|
|
// CraftBukkit end
|
|
+
|
|
+ // SparklyPaper start
|
|
+ if (this.entity instanceof Projectile projectile) {
|
|
+ if (projectile.getOwner() instanceof ServerPlayer shooter) {
|
|
+ if (!player.getBukkitEntity().canSee(shooter.getBukkitEntity())) {
|
|
+ flag = false;
|
|
+ }
|
|
+ }
|
|
+ }
|
|
+ // SparklyPaper end
|
|
+
|
|
if (flag) {
|
|
if (this.seenBy.add(player.connection)) {
|
|
this.serverEntity.addPairing(player);
|
|
diff --git a/src/main/java/net/minecraft/world/entity/projectile/AbstractArrow.java b/src/main/java/net/minecraft/world/entity/projectile/AbstractArrow.java
|
|
index 53d0024daf6963ac4dab575666b0d6a74a39a958..c17e554fa59975adac8a1d2e4b1c9c0d0348f693 100644
|
|
--- a/src/main/java/net/minecraft/world/entity/projectile/AbstractArrow.java
|
|
+++ b/src/main/java/net/minecraft/world/entity/projectile/AbstractArrow.java
|
|
@@ -567,6 +567,8 @@ public abstract class AbstractArrow extends Projectile {
|
|
@Override
|
|
public void playerTouch(Player player) {
|
|
if (!this.level.isClientSide && (this.inGround || this.isNoPhysics()) && this.shakeTime <= 0) {
|
|
+ if (!canPickup(player)) return; // SparklyPaper
|
|
+
|
|
// CraftBukkit start
|
|
ItemStack itemstack = this.getPickupItem();
|
|
if (this.pickup == Pickup.ALLOWED && !itemstack.isEmpty() && player.getInventory().canHold(itemstack) > 0) {
|
|
diff --git a/src/main/java/net/minecraft/world/entity/projectile/Projectile.java b/src/main/java/net/minecraft/world/entity/projectile/Projectile.java
|
|
index ccaa97956e40c6a79371d813719f65687991ec5b..5846b901779c51ac4f24cb6998cdeeb38d258640 100644
|
|
--- a/src/main/java/net/minecraft/world/entity/projectile/Projectile.java
|
|
+++ b/src/main/java/net/minecraft/world/entity/projectile/Projectile.java
|
|
@@ -9,6 +9,10 @@ import net.minecraft.nbt.CompoundTag;
|
|
import net.minecraft.network.protocol.Packet;
|
|
import net.minecraft.network.protocol.game.ClientboundAddEntityPacket;
|
|
import net.minecraft.server.level.ServerLevel;
|
|
+// SparklyPaper start
|
|
+import net.minecraft.server.level.ServerPlayer;
|
|
+import net.minecraft.sounds.SoundEvent;
|
|
+// SparklyPaper end
|
|
import net.minecraft.util.Mth;
|
|
import net.minecraft.world.entity.Entity;
|
|
import net.minecraft.world.entity.EntityType;
|
|
@@ -234,6 +238,21 @@ public abstract class Projectile extends Entity {
|
|
}
|
|
}
|
|
|
|
+ // SparklyPaper start
|
|
+ @Override
|
|
+ public void playSound(SoundEvent sound, float volume, float pitch) {
|
|
+ ServerPlayer entityplayer = this.cachedOwner instanceof ServerPlayer player ? player : null;
|
|
+ this.level.playSound(entityplayer, this.getX(), this.getY(), this.getZ(), sound, this.getSoundSource(), volume, pitch);
|
|
+ }
|
|
+
|
|
+ protected boolean canPickup(Player player) {
|
|
+ if (player instanceof ServerPlayer serverplayer && this.tracker != null) {
|
|
+ return this.tracker.seenBy.contains(serverplayer.connection);
|
|
+ }
|
|
+ return true;
|
|
+ }
|
|
+ // SparklyPaper end
|
|
+
|
|
protected void updateRotation() {
|
|
Vec3 vec3d = this.getDeltaMovement();
|
|
double d0 = vec3d.horizontalDistance();
|
|
diff --git a/src/main/java/net/minecraft/world/item/BowItem.java b/src/main/java/net/minecraft/world/item/BowItem.java
|
|
index 08d597db1a5345a343777a01427655e6bf2c926b..43268e461446458649c146debbd23693ed26db09 100644
|
|
--- a/src/main/java/net/minecraft/world/item/BowItem.java
|
|
+++ b/src/main/java/net/minecraft/world/item/BowItem.java
|
|
@@ -1,6 +1,8 @@
|
|
package net.minecraft.world.item;
|
|
|
|
import java.util.function.Predicate;
|
|
+
|
|
+import net.minecraft.server.level.ServerPlayer; // SparklyPaper
|
|
import net.minecraft.sounds.SoundEvents;
|
|
import net.minecraft.sounds.SoundSource;
|
|
import net.minecraft.stats.Stats;
|
|
@@ -92,7 +94,10 @@ public class BowItem extends ProjectileWeaponItem implements Vanishable {
|
|
// CraftBukkit end
|
|
}
|
|
|
|
- world.playSound((Player) null, entityhuman.getX(), entityhuman.getY(), entityhuman.getZ(), SoundEvents.ARROW_SHOOT, SoundSource.PLAYERS, 1.0F, 1.0F / (world.getRandom().nextFloat() * 0.4F + 1.2F) + f * 0.5F);
|
|
+ // SparklyPaper start
|
|
+ ServerPlayer shooter = entityhuman instanceof ServerPlayer serverplayer ? serverplayer : null;
|
|
+ world.playSound(shooter, entityhuman.getX(), entityhuman.getY(), entityhuman.getZ(), SoundEvents.ARROW_SHOOT, SoundSource.PLAYERS, 1.0F, 1.0F / (world.getRandom().nextFloat() * 0.4F + 1.2F) + f * 0.5F);
|
|
+ // SparklyPaper end
|
|
if (!flag1 && !entityhuman.getAbilities().instabuild) {
|
|
itemstack1.shrink(1);
|
|
if (itemstack1.isEmpty()) {
|
|
diff --git a/src/main/java/net/minecraft/world/item/CrossbowItem.java b/src/main/java/net/minecraft/world/item/CrossbowItem.java
|
|
index c0c211c7227f4ce5d1e0e433419425e6bb13046f..20986be1c9f1fe1993f343600c832c9a6cd40952 100644
|
|
--- a/src/main/java/net/minecraft/world/item/CrossbowItem.java
|
|
+++ b/src/main/java/net/minecraft/world/item/CrossbowItem.java
|
|
@@ -101,7 +101,10 @@ public class CrossbowItem extends ProjectileWeaponItem implements Vanishable {
|
|
CrossbowItem.setCharged(stack, true);
|
|
SoundSource soundcategory = user instanceof Player ? SoundSource.PLAYERS : SoundSource.HOSTILE;
|
|
|
|
- world.playSound((Player) null, user.getX(), user.getY(), user.getZ(), SoundEvents.CROSSBOW_LOADING_END, soundcategory, 1.0F, 1.0F / (world.getRandom().nextFloat() * 0.5F + 1.0F) + 0.2F);
|
|
+ // SparklyPaper start
|
|
+ ServerPlayer shooter = user instanceof ServerPlayer serverplayer ? serverplayer : null;
|
|
+ world.playSound(shooter, user.getX(), user.getY(), user.getZ(), SoundEvents.CROSSBOW_LOADING_END, soundcategory, 1.0F, 1.0F / (world.getRandom().nextFloat() * 0.5F + 1.0F) + 0.2F);
|
|
+ // SparklyPaper end
|
|
}
|
|
|
|
}
|
|
@@ -276,7 +279,11 @@ public class CrossbowItem extends ProjectileWeaponItem implements Vanishable {
|
|
}
|
|
}
|
|
// CraftBukkit end
|
|
- world.playSound((Player) null, shooter.getX(), shooter.getY(), shooter.getZ(), SoundEvents.CROSSBOW_SHOOT, SoundSource.PLAYERS, 1.0F, soundPitch);
|
|
+
|
|
+ // SparklyPaper start
|
|
+ ServerPlayer servershooter = (shooter instanceof ServerPlayer serverplayer) ? serverplayer : null;
|
|
+ world.playSound(servershooter, shooter.getX(), shooter.getY(), shooter.getZ(), SoundEvents.CROSSBOW_SHOOT, SoundSource.PLAYERS, 1.0F, soundPitch);
|
|
+ // SparklyPaper end
|
|
}
|
|
}
|
|
|
|
@@ -354,6 +361,7 @@ public class CrossbowItem extends ProjectileWeaponItem implements Vanishable {
|
|
SoundEvent soundeffect = this.getStartSound(j);
|
|
SoundEvent soundeffect1 = j == 0 ? SoundEvents.CROSSBOW_LOADING_MIDDLE : null;
|
|
float f = (float) (stack.getUseDuration() - remainingUseTicks) / (float) CrossbowItem.getChargeDuration(stack);
|
|
+ ServerPlayer shooter = (user instanceof ServerPlayer serverplayer) ? serverplayer : null; // SparklyPaper
|
|
|
|
if (f < 0.2F) {
|
|
this.startSoundPlayed = false;
|
|
@@ -362,12 +370,12 @@ public class CrossbowItem extends ProjectileWeaponItem implements Vanishable {
|
|
|
|
if (f >= 0.2F && !this.startSoundPlayed) {
|
|
this.startSoundPlayed = true;
|
|
- world.playSound((Player) null, user.getX(), user.getY(), user.getZ(), soundeffect, SoundSource.PLAYERS, 0.5F, 1.0F);
|
|
+ world.playSound(shooter, user.getX(), user.getY(), user.getZ(), soundeffect, SoundSource.PLAYERS, 0.5F, 1.0F); // SparklyPaper
|
|
}
|
|
|
|
if (f >= 0.5F && soundeffect1 != null && !this.midLoadSoundPlayed) {
|
|
this.midLoadSoundPlayed = true;
|
|
- world.playSound((Player) null, user.getX(), user.getY(), user.getZ(), soundeffect1, SoundSource.PLAYERS, 0.5F, 1.0F);
|
|
+ world.playSound(shooter, user.getX(), user.getY(), user.getZ(), soundeffect1, SoundSource.PLAYERS, 0.5F, 1.0F); // SparklyPaper
|
|
}
|
|
}
|
|
|
|
diff --git a/src/main/java/net/minecraft/world/item/EggItem.java b/src/main/java/net/minecraft/world/item/EggItem.java
|
|
index 58cb992c5defec2f092755cbde661ff10f38bf9d..41db96663de508c67f6843f1c2217b727dce65dd 100644
|
|
--- a/src/main/java/net/minecraft/world/item/EggItem.java
|
|
+++ b/src/main/java/net/minecraft/world/item/EggItem.java
|
|
@@ -1,5 +1,6 @@
|
|
package net.minecraft.world.item;
|
|
|
|
+import net.minecraft.server.level.ServerPlayer; // SparklyPaper
|
|
import net.minecraft.sounds.SoundEvents;
|
|
import net.minecraft.sounds.SoundSource;
|
|
import net.minecraft.stats.Stats;
|
|
@@ -18,6 +19,7 @@ public class EggItem extends Item {
|
|
@Override
|
|
public InteractionResultHolder<ItemStack> use(Level world, Player user, InteractionHand hand) {
|
|
ItemStack itemstack = user.getItemInHand(hand);
|
|
+ ServerPlayer thrower = user instanceof ServerPlayer serverplayer ? serverplayer : null; // SparklyPaper
|
|
|
|
// world.playSound((EntityHuman) null, entityhuman.getX(), entityhuman.getY(), entityhuman.getZ(), SoundEffects.EGG_THROW, SoundCategory.PLAYERS, 0.5F, 0.4F / (world.getRandom().nextFloat() * 0.4F + 0.8F)); // CraftBukkit - moved down
|
|
if (!world.isClientSide) {
|
|
@@ -34,7 +36,7 @@ public class EggItem extends Item {
|
|
((net.minecraft.server.level.ServerPlayer) user).getBukkitEntity().updateInventory();
|
|
}
|
|
|
|
- world.playSound((Player) null, user.getX(), user.getY(), user.getZ(), net.minecraft.sounds.SoundEvents.EGG_THROW, net.minecraft.sounds.SoundSource.PLAYERS, 0.5F, 0.4F / (net.minecraft.world.entity.Entity.SHARED_RANDOM.nextFloat() * 0.4F + 0.8F));
|
|
+ world.playSound(thrower, user.getX(), user.getY(), user.getZ(), net.minecraft.sounds.SoundEvents.EGG_THROW, net.minecraft.sounds.SoundSource.PLAYERS, 0.5F, 0.4F / (net.minecraft.world.entity.Entity.SHARED_RANDOM.nextFloat() * 0.4F + 0.8F)); // SparklyPaper
|
|
user.awardStat(Stats.ITEM_USED.get(this));
|
|
} else {
|
|
if (user instanceof net.minecraft.server.level.ServerPlayer) {
|
|
@@ -44,7 +46,7 @@ public class EggItem extends Item {
|
|
}
|
|
// Paper end
|
|
}
|
|
- world.playSound((Player) null, user.getX(), user.getY(), user.getZ(), SoundEvents.EGG_THROW, SoundSource.PLAYERS, 0.5F, 0.4F / (world.getRandom().nextFloat() * 0.4F + 0.8F));
|
|
+ world.playSound(thrower, user.getX(), user.getY(), user.getZ(), SoundEvents.EGG_THROW, SoundSource.PLAYERS, 0.5F, 0.4F / (world.getRandom().nextFloat() * 0.4F + 0.8F)); // SparklyPaper
|
|
|
|
/* // Paper start - moved up
|
|
user.awardStat(Stats.ITEM_USED.get(this));
|
|
diff --git a/src/main/java/net/minecraft/world/item/EnderEyeItem.java b/src/main/java/net/minecraft/world/item/EnderEyeItem.java
|
|
index c624a2cb0f4c9d7e12387ece574c1f9f74528b0c..623917563b789c035e754046554afaa21b959624 100644
|
|
--- a/src/main/java/net/minecraft/world/item/EnderEyeItem.java
|
|
+++ b/src/main/java/net/minecraft/world/item/EnderEyeItem.java
|
|
@@ -114,7 +114,10 @@ public class EnderEyeItem extends Item {
|
|
CriteriaTriggers.USED_ENDER_EYE.trigger((ServerPlayer) user, blockposition);
|
|
}
|
|
|
|
- world.playSound((Player) null, user.getX(), user.getY(), user.getZ(), SoundEvents.ENDER_EYE_LAUNCH, SoundSource.NEUTRAL, 0.5F, 0.4F / (world.getRandom().nextFloat() * 0.4F + 0.8F));
|
|
+ // SparklyPaper start
|
|
+ ServerPlayer thrower = user instanceof ServerPlayer serverplayer ? serverplayer : null;
|
|
+ world.playSound(thrower, user.getX(), user.getY(), user.getZ(), SoundEvents.ENDER_EYE_LAUNCH, SoundSource.NEUTRAL, 0.5F, 0.4F / (world.getRandom().nextFloat() * 0.4F + 0.8F));
|
|
+ // SparklyPaper end
|
|
world.levelEvent((Player) null, 1003, user.blockPosition(), 0);
|
|
if (!user.getAbilities().instabuild) {
|
|
itemstack.shrink(1);
|
|
diff --git a/src/main/java/net/minecraft/world/item/EnderpearlItem.java b/src/main/java/net/minecraft/world/item/EnderpearlItem.java
|
|
index 749ab72edc0d2e9c6f1161415ab8d59d3d6ca976..9fc54fb6b97a3f413506de0c8bd9e3650000fd4d 100644
|
|
--- a/src/main/java/net/minecraft/world/item/EnderpearlItem.java
|
|
+++ b/src/main/java/net/minecraft/world/item/EnderpearlItem.java
|
|
@@ -1,5 +1,6 @@
|
|
package net.minecraft.world.item;
|
|
|
|
+import net.minecraft.server.level.ServerPlayer; // SparklyPaper
|
|
import net.minecraft.sounds.SoundEvents;
|
|
import net.minecraft.sounds.SoundSource;
|
|
import net.minecraft.stats.Stats;
|
|
@@ -34,7 +35,10 @@ public class EnderpearlItem extends Item {
|
|
((net.minecraft.server.level.ServerPlayer) user).getBukkitEntity().updateInventory();
|
|
}
|
|
|
|
- world.playSound((Player) null, user.getX(), user.getY(), user.getZ(), SoundEvents.ENDER_PEARL_THROW, SoundSource.NEUTRAL, 0.5F, 0.4F / (net.minecraft.world.entity.Entity.SHARED_RANDOM.nextFloat() * 0.4F + 0.8F));
|
|
+ // SparklyPaper start
|
|
+ ServerPlayer thrower = user instanceof ServerPlayer serverplayer ? serverplayer : null;
|
|
+ world.playSound(thrower, user.getX(), user.getY(), user.getZ(), SoundEvents.ENDER_PEARL_THROW, SoundSource.NEUTRAL, 0.5F, 0.4F / (net.minecraft.world.entity.Entity.SHARED_RANDOM.nextFloat() * 0.4F + 0.8F));
|
|
+ // SparklyPaper end
|
|
user.awardStat(Stats.ITEM_USED.get(this));
|
|
user.getCooldowns().addCooldown(this, 20);
|
|
} else {
|
|
diff --git a/src/main/java/net/minecraft/world/item/FishingRodItem.java b/src/main/java/net/minecraft/world/item/FishingRodItem.java
|
|
index 7a4ae2d69f530182f44a31eebd1c2e44ada5e44b..ecf8bdb2b8760049e30ebe35e6d43d85dd39bac8 100644
|
|
--- a/src/main/java/net/minecraft/world/item/FishingRodItem.java
|
|
+++ b/src/main/java/net/minecraft/world/item/FishingRodItem.java
|
|
@@ -1,5 +1,6 @@
|
|
package net.minecraft.world.item;
|
|
|
|
+import net.minecraft.server.level.ServerPlayer; // SparklyPaper
|
|
import net.minecraft.sounds.SoundEvents;
|
|
import net.minecraft.sounds.SoundSource;
|
|
import net.minecraft.stats.Stats;
|
|
@@ -22,6 +23,7 @@ public class FishingRodItem extends Item implements Vanishable {
|
|
|
|
@Override
|
|
public InteractionResultHolder<ItemStack> use(Level world, Player user, InteractionHand hand) {
|
|
+ ServerPlayer angler = user instanceof ServerPlayer serverplayer ? serverplayer : null; // SparklyPaper
|
|
ItemStack itemstack = user.getItemInHand(hand);
|
|
int i;
|
|
|
|
@@ -33,7 +35,7 @@ public class FishingRodItem extends Item implements Vanishable {
|
|
});
|
|
}
|
|
|
|
- world.playSound((Player) null, user.getX(), user.getY(), user.getZ(), SoundEvents.FISHING_BOBBER_RETRIEVE, SoundSource.NEUTRAL, 1.0F, 0.4F / (world.getRandom().nextFloat() * 0.4F + 0.8F));
|
|
+ world.playSound(angler, user.getX(), user.getY(), user.getZ(), SoundEvents.FISHING_BOBBER_RETRIEVE, SoundSource.NEUTRAL, 1.0F, 0.4F / (world.getRandom().nextFloat() * 0.4F + 0.8F)); // SparklyPaper
|
|
world.gameEvent(user, GameEvent.FISHING_ROD_REEL_IN, (Entity) user);
|
|
} else {
|
|
// world.playSound((EntityHuman) null, entityhuman.getX(), entityhuman.getY(), entityhuman.getZ(), SoundEffects.FISHING_BOBBER_THROW, SoundCategory.NEUTRAL, 0.5F, 0.4F / (world.getRandom().nextFloat() * 0.4F + 0.8F));
|
|
@@ -50,7 +52,7 @@ public class FishingRodItem extends Item implements Vanishable {
|
|
user.fishing = null;
|
|
return InteractionResultHolder.pass(itemstack);
|
|
}
|
|
- world.playSound((Player) null, user.getX(), user.getY(), user.getZ(), SoundEvents.FISHING_BOBBER_THROW, SoundSource.NEUTRAL, 0.5F, 0.4F / (world.getRandom().nextFloat() * 0.4F + 0.8F));
|
|
+ world.playSound(angler, user.getX(), user.getY(), user.getZ(), SoundEvents.FISHING_BOBBER_THROW, SoundSource.NEUTRAL, 0.5F, 0.4F / (world.getRandom().nextFloat() * 0.4F + 0.8F)); // SparklyPaper
|
|
world.addFreshEntity(entityfishinghook);
|
|
// CraftBukkit end
|
|
}
|
|
diff --git a/src/main/java/net/minecraft/world/item/TridentItem.java b/src/main/java/net/minecraft/world/item/TridentItem.java
|
|
index 998758be827efbcb7693ed36ab1dffc0ef0369bf..5ea01e9d85c9ed490c902d20c902546bab8b6e90 100644
|
|
--- a/src/main/java/net/minecraft/world/item/TridentItem.java
|
|
+++ b/src/main/java/net/minecraft/world/item/TridentItem.java
|
|
@@ -4,6 +4,7 @@ import com.google.common.collect.ImmutableMultimap;
|
|
import com.google.common.collect.ImmutableMultimap.Builder;
|
|
import com.google.common.collect.Multimap;
|
|
import net.minecraft.core.BlockPos;
|
|
+import net.minecraft.server.level.ServerPlayer; // SparklyPaper
|
|
import net.minecraft.sounds.SoundEvent;
|
|
import net.minecraft.sounds.SoundEvents;
|
|
import net.minecraft.sounds.SoundSource;
|
|
@@ -61,6 +62,7 @@ public class TridentItem extends Item implements Vanishable {
|
|
public void releaseUsing(ItemStack stack, Level world, LivingEntity user, int remainingUseTicks) {
|
|
if (user instanceof Player) {
|
|
Player entityhuman = (Player) user;
|
|
+ ServerPlayer thrower = user instanceof ServerPlayer serverplayer ? serverplayer : null; // SparklyPaper
|
|
int j = this.getUseDuration(stack) - remainingUseTicks;
|
|
|
|
if (j >= 10) {
|
|
@@ -96,7 +98,7 @@ public class TridentItem extends Item implements Vanishable {
|
|
entitythrowntrident.tridentItem = stack.copy(); // SPIGOT-4511 update since damage call moved
|
|
// CraftBukkit end
|
|
|
|
- world.playSound((Player) null, (Entity) entitythrowntrident, SoundEvents.TRIDENT_THROW, SoundSource.PLAYERS, 1.0F, 1.0F);
|
|
+ world.playSound(thrower, (Entity) entitythrowntrident, SoundEvents.TRIDENT_THROW, SoundSource.PLAYERS, 1.0F, 1.0F); // SparklyPaper
|
|
if (!entityhuman.getAbilities().instabuild) {
|
|
entityhuman.getInventory().removeItem(stack);
|
|
}
|
|
@@ -144,7 +146,7 @@ public class TridentItem extends Item implements Vanishable {
|
|
soundeffect = SoundEvents.TRIDENT_RIPTIDE_1;
|
|
}
|
|
|
|
- world.playSound((Player) null, (Entity) entityhuman, soundeffect, SoundSource.PLAYERS, 1.0F, 1.0F);
|
|
+ world.playSound(thrower, (Entity) entityhuman, soundeffect, SoundSource.PLAYERS, 1.0F, 1.0F); // SparklyPaper
|
|
}
|
|
|
|
}
|
|
diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java
|
|
index 160c0f37aa3aaf7598f852acf9bd444f79444c97..e2179c94b08edfb578c31111689ee3cda0193487 100644
|
|
--- a/src/main/java/net/minecraft/world/level/Level.java
|
|
+++ b/src/main/java/net/minecraft/world/level/Level.java
|
|
@@ -27,12 +27,14 @@ import net.minecraft.core.SectionPos;
|
|
import net.minecraft.core.particles.ParticleOptions;
|
|
import net.minecraft.nbt.CompoundTag;
|
|
import net.minecraft.network.protocol.Packet;
|
|
+import net.minecraft.network.protocol.game.*; // SparklyPaper
|
|
import net.minecraft.resources.ResourceKey;
|
|
import net.minecraft.resources.ResourceLocation;
|
|
import net.minecraft.server.MCUtil;
|
|
import net.minecraft.server.MinecraftServer;
|
|
import net.minecraft.server.level.ChunkHolder;
|
|
import net.minecraft.server.level.ServerLevel;
|
|
+import net.minecraft.server.level.ServerPlayer; // SparklyPaper
|
|
import net.minecraft.sounds.SoundEvent;
|
|
import net.minecraft.sounds.SoundSource;
|
|
import net.minecraft.util.Mth;
|
|
@@ -82,11 +84,7 @@ import net.minecraft.world.scores.Scoreboard;
|
|
// CraftBukkit start
|
|
import java.util.HashMap;
|
|
import java.util.Map;
|
|
-import net.minecraft.network.protocol.game.ClientboundSetBorderCenterPacket;
|
|
-import net.minecraft.network.protocol.game.ClientboundSetBorderLerpSizePacket;
|
|
-import net.minecraft.network.protocol.game.ClientboundSetBorderSizePacket;
|
|
-import net.minecraft.network.protocol.game.ClientboundSetBorderWarningDelayPacket;
|
|
-import net.minecraft.network.protocol.game.ClientboundSetBorderWarningDistancePacket;
|
|
+
|
|
import org.bukkit.Bukkit;
|
|
import org.bukkit.Location;
|
|
import org.bukkit.craftbukkit.CraftServer;
|
|
@@ -849,6 +847,18 @@ public abstract class Level implements LevelAccessor, AutoCloseable {
|
|
return !this.dimensionType().hasFixedTime() && !this.isDay();
|
|
}
|
|
|
|
+ // SparklyPaper start
|
|
+ public void playSound(@Nullable ServerPlayer player, double x, double y, double z, SoundEvent sound, SoundSource category, float volume, float pitch) {
|
|
+ Packet<?> packet = new ClientboundSoundPacket(sound, category, x, y, z, volume, pitch);
|
|
+ if (player != null) player.connection.send(packet);
|
|
+ MinecraftServer.getServer().getPlayerList().broadcast(player, x, y, z, volume > 1.0F ? (double) (16.0F * volume) : 16.0D, this.dimension(), packet);
|
|
+ }
|
|
+
|
|
+ public void playSound(@Nullable ServerPlayer player, Entity entity, SoundEvent sound, SoundSource category, float volume, float pitch) {
|
|
+ playSound(player, entity.getX(), entity.getY(), entity.getZ(), sound, category, volume, pitch);
|
|
+ }
|
|
+ // SparklyPaper end
|
|
+
|
|
@Override
|
|
public void playSound(@Nullable Player player, BlockPos pos, SoundEvent sound, SoundSource category, float volume, float pitch) {
|
|
this.playSound(player, (double) pos.getX() + 0.5D, (double) pos.getY() + 0.5D, (double) pos.getZ() + 0.5D, sound, category, volume, pitch);
|