9
0
mirror of https://github.com/Samsuik/Sakura.git synced 2025-12-23 00:39:20 +00:00

Fix explosion player velocity

The player velocity was not being talied correctly, and velocity was not
sent when explosion effects were disabled in fps settings.
This commit is contained in:
Samsuik
2024-11-14 19:45:56 +00:00
parent cf1bf8e8cb
commit 3ea93ca4d7
6 changed files with 50 additions and 25 deletions

View File

@@ -294,18 +294,30 @@ index 12109446fc76a39faee6cda042ca48b3fd3809f4..bb6a2be67394b9a6904d759b7564008d
if (flag && !player.getBukkitEntity().canSee(this.entity.getBukkitEntity())) { // Paper - only consider hits if (flag && !player.getBukkitEntity().canSee(this.entity.getBukkitEntity())) { // Paper - only consider hits
flag = false; flag = false;
diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java
index ed7b9d9a3856cf36b64e629a86c2e9bdac381eb3..5df1d01c52b527ff74778d8e4aa27b3b0b1e7a4b 100644 index ed7b9d9a3856cf36b64e629a86c2e9bdac381eb3..fae49a84af8b0e325a438f041bf415622a158091 100644
--- a/src/main/java/net/minecraft/server/level/ServerLevel.java --- a/src/main/java/net/minecraft/server/level/ServerLevel.java
+++ b/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java
@@ -1952,7 +1952,7 @@ public class ServerLevel extends Level implements WorldGenLevel { @@ -1953,7 +1953,19 @@ public class ServerLevel extends Level implements WorldGenLevel {
while (iterator.hasNext()) {
ServerPlayer entityplayer = (ServerPlayer) iterator.next(); ServerPlayer entityplayer = (ServerPlayer) iterator.next();
- if (entityplayer.distanceToSqr(x, y, z) < 4096.0D) { if (entityplayer.distanceToSqr(x, y, z) < 4096.0D) {
+ if (entityplayer.distanceToSqr(x, y, z) < 4096.0D && !entityplayer.visibility.isToggled(me.samsuik.sakura.player.visibility.Visibility.Setting.EXPLOSIONS)) { // Sakura - visibility api - entityplayer.connection.send(new ClientboundExplodePacket(x, y, z, power, explosion.getToBlow(), (Vec3) explosion.getHitPlayers().get(entityplayer), explosion.getBlockInteraction(), explosion.getSmallExplosionParticles(), explosion.getLargeExplosionParticles(), explosion.getExplosionSound()));
entityplayer.connection.send(new ClientboundExplodePacket(x, y, z, power, explosion.getToBlow(), (Vec3) explosion.getHitPlayers().get(entityplayer), explosion.getBlockInteraction(), explosion.getSmallExplosionParticles(), explosion.getLargeExplosionParticles(), explosion.getExplosionSound())); + // Sakura start - visibility api; let players toggle explosion particles
+ ParticleOptions smallParticle = explosion.getSmallExplosionParticles();
+ ParticleOptions largeParticle = explosion.getLargeExplosionParticles();
+ Vec3 position = new Vec3(x, y, z);
+ // In 1.22 and later this should be replaced with sending the motion through a PlayerPositionPacket.
+ // The problem here is SetEntityMotion is capped to 3.9 b/pt and the only other alternate mean was
+ // implemented in 1.21.3. I believe it's best to just wait on this issue and deal with this hack.
+ if (entityplayer.visibility.isToggled(me.samsuik.sakura.player.visibility.Visibility.Setting.EXPLOSIONS)) {
+ position = new Vec3(0.0, -1024.0, 0.0);
+ smallParticle = largeParticle = net.minecraft.core.particles.ParticleTypes.SMOKE;
+ }
+ entityplayer.connection.send(new ClientboundExplodePacket(position.x(), position.y(), position.z(), power, explosion.getToBlow(), (Vec3) explosion.getHitPlayers().get(entityplayer), explosion.getBlockInteraction(), smallParticle, largeParticle, explosion.getExplosionSound()));
+ // Sakura end - visibility api; let players toggle explosion particles
} }
} }
diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java
index b3781efbd3edcf102fe1bda5d6149915dc1127c6..68ea7cd8148ff4a80da761cf38e73bfa15f93b97 100644 index b3781efbd3edcf102fe1bda5d6149915dc1127c6..68ea7cd8148ff4a80da761cf38e73bfa15f93b97 100644
--- a/src/main/java/net/minecraft/server/level/ServerPlayer.java --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java

View File

@@ -23,10 +23,10 @@ index 0fd814f1d65c111266a2b20f86561839a4cef755..932f7a0d030d2d4932e6e6d4a5805e9b
if (index >= 0) { if (index >= 0) {
diff --git a/src/main/java/me/samsuik/sakura/explosion/special/SpecialisedExplosion.java b/src/main/java/me/samsuik/sakura/explosion/special/SpecialisedExplosion.java diff --git a/src/main/java/me/samsuik/sakura/explosion/special/SpecialisedExplosion.java b/src/main/java/me/samsuik/sakura/explosion/special/SpecialisedExplosion.java
new file mode 100644 new file mode 100644
index 0000000000000000000000000000000000000000..0611555b4afb461e2045585e3d81601420792c7c index 0000000000000000000000000000000000000000..8857449c2443b1c9fc97a43a5bd3f446056259c7
--- /dev/null --- /dev/null
+++ b/src/main/java/me/samsuik/sakura/explosion/special/SpecialisedExplosion.java +++ b/src/main/java/me/samsuik/sakura/explosion/special/SpecialisedExplosion.java
@@ -0,0 +1,199 @@ @@ -0,0 +1,200 @@
+package me.samsuik.sakura.explosion.special; +package me.samsuik.sakura.explosion.special;
+ +
+import io.papermc.paper.util.WorldUtil; +import io.papermc.paper.util.WorldUtil;
@@ -112,6 +112,7 @@ index 0000000000000000000000000000000000000000..0611555b4afb461e2045585e3d816014
+ +
+ if (!this.wasCanceled) { + if (!this.wasCanceled) {
+ this.level.notifyPlayersOfExplosion(this.x, this.y, this.z, this.radius(), this); + this.level.notifyPlayersOfExplosion(this.x, this.y, this.z, this.radius(), this);
+ this.getHitPlayers().clear();
+ } + }
+ +
+ this.getToBlow().clear(); + this.getToBlow().clear();
@@ -434,7 +435,7 @@ index 0000000000000000000000000000000000000000..51f6c04e2a3861369013a4fb2b193a9d
+ } + }
+} +}
diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java
index 51fa57e8b9d5c9ee563ec3608a437c69da08d32c..ec7d7f22b267ae6572e6005f10221755cbb1a480 100644 index 297ab4dde3cfef55bd9dca662f473c0652ca3b7b..6af0a91e5ae053330f80f40ea4369dff22f5d634 100644
--- a/src/main/java/net/minecraft/server/level/ServerLevel.java --- a/src/main/java/net/minecraft/server/level/ServerLevel.java
+++ b/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java
@@ -1957,6 +1957,12 @@ public class ServerLevel extends Level implements WorldGenLevel { @@ -1957,6 +1957,12 @@ public class ServerLevel extends Level implements WorldGenLevel {
@@ -450,7 +451,7 @@ index 51fa57e8b9d5c9ee563ec3608a437c69da08d32c..ec7d7f22b267ae6572e6005f10221755
Iterator iterator = this.players.iterator(); Iterator iterator = this.players.iterator();
while (iterator.hasNext()) { while (iterator.hasNext()) {
@@ -1967,7 +1973,7 @@ public class ServerLevel extends Level implements WorldGenLevel { @@ -1979,7 +1985,7 @@ public class ServerLevel extends Level implements WorldGenLevel {
} }
} }
@@ -494,7 +495,7 @@ index 284ab0a2add55394f42fc0b5e62748ba1b629531..0c8775fd29fdc811c8a3becb484abf3e
@Override @Override
diff --git a/src/main/java/net/minecraft/world/level/Explosion.java b/src/main/java/net/minecraft/world/level/Explosion.java diff --git a/src/main/java/net/minecraft/world/level/Explosion.java b/src/main/java/net/minecraft/world/level/Explosion.java
index c9cf9373d3eae4e54ae27fbb8993f858e91e98cc..5ab0de07b1da8c14b62044747bf6e4288ecc7506 100644 index c9cf9373d3eae4e54ae27fbb8993f858e91e98cc..27d17da5d560bbe97f088ecec4b95d2ad4a34bcb 100644
--- a/src/main/java/net/minecraft/world/level/Explosion.java --- a/src/main/java/net/minecraft/world/level/Explosion.java
+++ b/src/main/java/net/minecraft/world/level/Explosion.java +++ b/src/main/java/net/minecraft/world/level/Explosion.java
@@ -55,9 +55,11 @@ public class Explosion { @@ -55,9 +55,11 @@ public class Explosion {
@@ -577,7 +578,19 @@ index c9cf9373d3eae4e54ae27fbb8993f858e91e98cc..5ab0de07b1da8c14b62044747bf6e428
// use initial cache value that is most likely to be used: the source position // use initial cache value that is most likely to be used: the source position
final ExplosionBlockCache initialCache; final ExplosionBlockCache initialCache;
{ {
@@ -998,7 +1015,7 @@ public class Explosion { @@ -765,7 +782,10 @@ public class Explosion {
Player entityhuman = (Player) entity;
if (!entityhuman.isSpectator() && (!entityhuman.isCreative() || !entityhuman.getAbilities().flying) && !level.paperConfig().environment.disableExplosionKnockback) { // Paper - Option to disable explosion knockback
- this.hitPlayers.put(entityhuman, vec3d1);
+ // Sakura start - specialised explosions; tally player velocity
+ final Vec3 explosionImpact = vec3d1;
+ this.hitPlayers.compute(entityhuman, (p, v) -> v != null ? v.add(explosionImpact) : explosionImpact);
+ // Sakura end - specialised explosions; tally player velocity
}
}
}
@@ -998,7 +1018,7 @@ public class Explosion {
private BlockInteraction() {} private BlockInteraction() {}
} }
// Paper start - Optimize explosions // Paper start - Optimize explosions

View File

@@ -124,7 +124,7 @@ index a8008c7550488be34b51f4280f5569170b1ebd1d..2e5a46b9d27b930870c68dbde93d8731
public String getDescriptionId() { public String getDescriptionId() {
return this.getOrCreateDescriptionId(); return this.getOrCreateDescriptionId();
diff --git a/src/main/java/net/minecraft/world/level/Explosion.java b/src/main/java/net/minecraft/world/level/Explosion.java diff --git a/src/main/java/net/minecraft/world/level/Explosion.java b/src/main/java/net/minecraft/world/level/Explosion.java
index 985386901b4785e83fd8b85db9e05847f9165d1e..7ff26a8df45547b430ff470c32cea81697413bba 100644 index 27d17da5d560bbe97f088ecec4b95d2ad4a34bcb..e8ca758f563833c48c55eb7ec2b50a23cd66be5d 100644
--- a/src/main/java/net/minecraft/world/level/Explosion.java --- a/src/main/java/net/minecraft/world/level/Explosion.java
+++ b/src/main/java/net/minecraft/world/level/Explosion.java +++ b/src/main/java/net/minecraft/world/level/Explosion.java
@@ -261,7 +261,7 @@ public class Explosion { @@ -261,7 +261,7 @@ public class Explosion {
@@ -158,7 +158,7 @@ index 985386901b4785e83fd8b85db9e05847f9165d1e..7ff26a8df45547b430ff470c32cea816
private boolean clipsAnything(final Vec3 from, final Vec3 to, private boolean clipsAnything(final Vec3 from, final Vec3 to,
final io.papermc.paper.util.CollisionUtil.LazyEntityCollisionContext context, final io.papermc.paper.util.CollisionUtil.LazyEntityCollisionContext context,
final ExplosionBlockCache[] blockCache, final ExplosionBlockCache[] blockCache,
@@ -872,6 +887,16 @@ public class Explosion { @@ -875,6 +890,16 @@ public class Explosion {
// CraftBukkit start - TNTPrimeEvent // CraftBukkit start - TNTPrimeEvent
BlockState iblockdata = this.level.getBlockState(blockposition); BlockState iblockdata = this.level.getBlockState(blockposition);
Block block = iblockdata.getBlock(); Block block = iblockdata.getBlock();

View File

@@ -5,7 +5,7 @@ Subject: [PATCH] Configure cannon physics by version
diff --git a/src/main/java/io/papermc/paper/util/CollisionUtil.java b/src/main/java/io/papermc/paper/util/CollisionUtil.java diff --git a/src/main/java/io/papermc/paper/util/CollisionUtil.java b/src/main/java/io/papermc/paper/util/CollisionUtil.java
index 19086bbfdf3a015eafec5ca868c8d2451f554ef0..510d722fffd4bdcee2db42aefa662c49563ffa81 100644 index ae068cd14042bfab0fc3ab1a6473ec09fb1d7185..a6bc0bcd0694ee4f73d4e55c7929ac24e7cd341f 100644
--- a/src/main/java/io/papermc/paper/util/CollisionUtil.java --- a/src/main/java/io/papermc/paper/util/CollisionUtil.java
+++ b/src/main/java/io/papermc/paper/util/CollisionUtil.java +++ b/src/main/java/io/papermc/paper/util/CollisionUtil.java
@@ -1457,7 +1457,15 @@ public final class CollisionUtil { @@ -1457,7 +1457,15 @@ public final class CollisionUtil {
@@ -68,10 +68,10 @@ index 19086bbfdf3a015eafec5ca868c8d2451f554ef0..510d722fffd4bdcee2db42aefa662c49
if (xSmaller && z != 0.0) { if (xSmaller && z != 0.0) {
z = performAABBCollisionsZ(axisalignedbb, z, aabbs); z = performAABBCollisionsZ(axisalignedbb, z, aabbs);
diff --git a/src/main/java/me/samsuik/sakura/explosion/special/SpecialisedExplosion.java b/src/main/java/me/samsuik/sakura/explosion/special/SpecialisedExplosion.java diff --git a/src/main/java/me/samsuik/sakura/explosion/special/SpecialisedExplosion.java b/src/main/java/me/samsuik/sakura/explosion/special/SpecialisedExplosion.java
index 0611555b4afb461e2045585e3d81601420792c7c..ed492ba7df4ea041a1b5916a14eb2944a2b69187 100644 index 8857449c2443b1c9fc97a43a5bd3f446056259c7..1b6b535836d939fe07c509176871af4e76669760 100644
--- a/src/main/java/me/samsuik/sakura/explosion/special/SpecialisedExplosion.java --- a/src/main/java/me/samsuik/sakura/explosion/special/SpecialisedExplosion.java
+++ b/src/main/java/me/samsuik/sakura/explosion/special/SpecialisedExplosion.java +++ b/src/main/java/me/samsuik/sakura/explosion/special/SpecialisedExplosion.java
@@ -171,9 +171,15 @@ public abstract class SpecialisedExplosion<T extends Entity> extends Explosion { @@ -172,9 +172,15 @@ public abstract class SpecialisedExplosion<T extends Entity> extends Explosion {
if (distanceFromBottom <= 1.0) { if (distanceFromBottom <= 1.0) {
double x = entity.getX() - pos.x; double x = entity.getX() - pos.x;
@@ -487,7 +487,7 @@ index 2db76425a1f295ad179aacfb3abb7efb1be647d9..e7dd0c8aab980d9850a2124598f8a036
// Paper end - Option to prevent TNT from moving in water // Paper end - Option to prevent TNT from moving in water
} }
diff --git a/src/main/java/net/minecraft/world/level/Explosion.java b/src/main/java/net/minecraft/world/level/Explosion.java diff --git a/src/main/java/net/minecraft/world/level/Explosion.java b/src/main/java/net/minecraft/world/level/Explosion.java
index 82cd70506adb7d3ca97c238a7e5304b98d568941..7b4f924379f529947f3f3a5ecc0ba3d8f0d97ccd 100644 index 6761eed10948a92d686168e5784fd5f8265953e6..1582c81bbb00b8dd8fadde94a79ff091943a13c2 100644
--- a/src/main/java/net/minecraft/world/level/Explosion.java --- a/src/main/java/net/minecraft/world/level/Explosion.java
+++ b/src/main/java/net/minecraft/world/level/Explosion.java +++ b/src/main/java/net/minecraft/world/level/Explosion.java
@@ -75,6 +75,7 @@ public class Explosion { @@ -75,6 +75,7 @@ public class Explosion {
@@ -552,7 +552,7 @@ index 82cd70506adb7d3ca97c238a7e5304b98d568941..7b4f924379f529947f3f3a5ecc0ba3d8
if (d11 != 0.0D) { if (d11 != 0.0D) {
d8 /= d11; d8 /= d11;
@@ -1051,7 +1071,7 @@ public class Explosion { @@ -1054,7 +1074,7 @@ public class Explosion {
// Sakura start - replace density cache // Sakura start - replace density cache
float blockDensity = this.level.densityCache.getDensity(vec3d, entity); float blockDensity = this.level.densityCache.getDensity(vec3d, entity);
if (blockDensity == me.samsuik.sakura.explosion.density.BlockDensityCache.UNKNOWN_DENSITY) { if (blockDensity == me.samsuik.sakura.explosion.density.BlockDensityCache.UNKNOWN_DENSITY) {
@@ -561,7 +561,7 @@ index 82cd70506adb7d3ca97c238a7e5304b98d568941..7b4f924379f529947f3f3a5ecc0ba3d8
this.level.densityCache.putDensity(vec3d, entity, blockDensity); this.level.densityCache.putDensity(vec3d, entity, blockDensity);
// Sakura end - replace density cache // Sakura end - replace density cache
} }
@@ -1059,6 +1079,17 @@ public class Explosion { @@ -1062,6 +1082,17 @@ public class Explosion {
return blockDensity; return blockDensity;
} }

View File

@@ -5,10 +5,10 @@ Subject: [PATCH] Add explosions dropping items config
diff --git a/src/main/java/net/minecraft/world/level/Explosion.java b/src/main/java/net/minecraft/world/level/Explosion.java diff --git a/src/main/java/net/minecraft/world/level/Explosion.java b/src/main/java/net/minecraft/world/level/Explosion.java
index 0631bf063fed8462ebe014e733e8103bc7968ac9..035b5ea9570668fa8aaafd7b757458343fd26456 100644 index b69b7818a5613bd210ccfd259f01ce025e88a675..0152e7ea9b9aad9b443bef784a2bec5e22e66680 100644
--- a/src/main/java/net/minecraft/world/level/Explosion.java --- a/src/main/java/net/minecraft/world/level/Explosion.java
+++ b/src/main/java/net/minecraft/world/level/Explosion.java +++ b/src/main/java/net/minecraft/world/level/Explosion.java
@@ -949,6 +949,11 @@ public class Explosion { @@ -952,6 +952,11 @@ public class Explosion {
this.level.densityCache.clear(-1); this.level.densityCache.clear(-1);
} }
// Sakura end - explosion density cache // Sakura end - explosion density cache

View File

@@ -5,10 +5,10 @@ Subject: [PATCH] Set entity impulse on explosion
diff --git a/src/main/java/me/samsuik/sakura/explosion/special/SpecialisedExplosion.java b/src/main/java/me/samsuik/sakura/explosion/special/SpecialisedExplosion.java diff --git a/src/main/java/me/samsuik/sakura/explosion/special/SpecialisedExplosion.java b/src/main/java/me/samsuik/sakura/explosion/special/SpecialisedExplosion.java
index ed492ba7df4ea041a1b5916a14eb2944a2b69187..785343442849820bde71638ee50e9a0141d9f279 100644 index 1b6b535836d939fe07c509176871af4e76669760..35cddf7c87192341147734794d8580158feb1626 100644
--- a/src/main/java/me/samsuik/sakura/explosion/special/SpecialisedExplosion.java --- a/src/main/java/me/samsuik/sakura/explosion/special/SpecialisedExplosion.java
+++ b/src/main/java/me/samsuik/sakura/explosion/special/SpecialisedExplosion.java +++ b/src/main/java/me/samsuik/sakura/explosion/special/SpecialisedExplosion.java
@@ -196,6 +196,7 @@ public abstract class SpecialisedExplosion<T extends Entity> extends Explosion { @@ -197,6 +197,7 @@ public abstract class SpecialisedExplosion<T extends Entity> extends Explosion {
y *= exposure; y *= exposure;
z *= exposure; z *= exposure;
@@ -17,7 +17,7 @@ index ed492ba7df4ea041a1b5916a14eb2944a2b69187..785343442849820bde71638ee50e9a01
entity.addDeltaMovement(x, y, z); entity.addDeltaMovement(x, y, z);
} }
diff --git a/src/main/java/net/minecraft/world/level/Explosion.java b/src/main/java/net/minecraft/world/level/Explosion.java diff --git a/src/main/java/net/minecraft/world/level/Explosion.java b/src/main/java/net/minecraft/world/level/Explosion.java
index efc242015289fbf431e1223d406bd1bbd6b22f59..f961ffbdc9393abe9521a358e0cbc75087ba9af0 100644 index 7fd7149d4c370d6893318b729f93778ef02bc4b1..4960d170a273eff18d2d83cdb7c4772fa020db4f 100644
--- a/src/main/java/net/minecraft/world/level/Explosion.java --- a/src/main/java/net/minecraft/world/level/Explosion.java
+++ b/src/main/java/net/minecraft/world/level/Explosion.java +++ b/src/main/java/net/minecraft/world/level/Explosion.java
@@ -829,6 +829,7 @@ public class Explosion { @@ -829,6 +829,7 @@ public class Explosion {