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

Fix falling tnt not swinging correctly

This commit is contained in:
Samsuik
2024-07-17 18:58:21 +01:00
parent 3f4b83c162
commit cea456f3e9
6 changed files with 21 additions and 19 deletions

View File

@@ -23,12 +23,14 @@ index c21e00812f1aaa1279834a0562d360d6b89e146c..442119e7c4670582556b067dfc03e39a
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..cec9432c8c6bbdb0f45b73c480fe9edb8eeb8298 index 0000000000000000000000000000000000000000..268db3306a46cbd89bffb51f1bce8446aaed4175
--- /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,203 @@ @@ -0,0 +1,205 @@
+package me.samsuik.sakura.explosion.special; +package me.samsuik.sakura.explosion.special;
+ +
+import ca.spottedleaf.moonrise.patches.chunk_system.level.entity.ChunkEntitySlices;
+import ca.spottedleaf.moonrise.patches.chunk_system.level.entity.EntityLookup;
+import ca.spottedleaf.moonrise.patches.collisions.ExplosionBlockCache; +import ca.spottedleaf.moonrise.patches.collisions.ExplosionBlockCache;
+import io.papermc.paper.util.WorldUtil; +import io.papermc.paper.util.WorldUtil;
+import net.minecraft.core.BlockPos; +import net.minecraft.core.BlockPos;
@@ -158,10 +160,10 @@ index 0000000000000000000000000000000000000000..cec9432c8c6bbdb0f45b73c480fe9edb
+ int maxChunkY = Mth.clamp(Mth.floor(bb.maxY) >> 4, minSection, maxSection); + int maxChunkY = Mth.clamp(Mth.floor(bb.maxY) >> 4, minSection, maxSection);
+ int maxChunkZ = Mth.floor(bb.maxZ) >> 4; + int maxChunkZ = Mth.floor(bb.maxZ) >> 4;
+ +
+ ca.spottedleaf.moonrise.patches.chunk_system.level.entity.EntityLookup entityLookup = this.level.moonrise$getEntityLookup(); + EntityLookup entityLookup = this.level.moonrise$getEntityLookup();
+ for (int chunkX = minChunkX; chunkX <= maxChunkX; ++chunkX) { + for (int chunkX = minChunkX; chunkX <= maxChunkX; ++chunkX) {
+ for (int chunkZ = minChunkZ; chunkZ <= maxChunkZ; ++chunkZ) { + for (int chunkZ = minChunkZ; chunkZ <= maxChunkZ; ++chunkZ) {
+ ca.spottedleaf.moonrise.patches.chunk_system.level.entity.ChunkEntitySlices chunk = entityLookup.getChunk(chunkX, chunkZ); + ChunkEntitySlices chunk = entityLookup.getChunk(chunkX, chunkZ);
+ +
+ if (chunk == null) { + if (chunk == null) {
+ continue; + continue;
@@ -179,7 +181,7 @@ index 0000000000000000000000000000000000000000..cec9432c8c6bbdb0f45b73c480fe9edb
+ Entity entity = entities[i]; + Entity entity = entities[i];
+ if (entity == null) break; + if (entity == null) break;
+ +
+ if (entity != source && !entity.ignoreExplosion(this)) { + if (entity != this.source && !entity.ignoreExplosion(this)) {
+ this.impactEntity(entity, position, potential, radius); + this.impactEntity(entity, position, potential, radius);
+ } + }
+ +
@@ -204,7 +206,7 @@ index 0000000000000000000000000000000000000000..cec9432c8c6bbdb0f45b73c480fe9edb
+ +
+ if (distanceFromBottom <= 1.0) { + if (distanceFromBottom <= 1.0) {
+ double x = entity.getX() - pos.x; + double x = entity.getX() - pos.x;
+ double y = (entity instanceof PrimedTnt ? entity.getY() : entity.getEyeY()) - this.y; + double y = (entity instanceof PrimedTnt ? entity.getY() : entity.getEyeY()) - pos.y;
+ double z = entity.getZ() - pos.z; + double z = entity.getZ() - pos.z;
+ double distance = Math.sqrt(x * x + y * y + z * z); + double distance = Math.sqrt(x * x + y * y + z * z);
+ +
@@ -232,7 +234,7 @@ index 0000000000000000000000000000000000000000..cec9432c8c6bbdb0f45b73c480fe9edb
+} +}
diff --git a/src/main/java/me/samsuik/sakura/explosion/special/TntExplosion.java b/src/main/java/me/samsuik/sakura/explosion/special/TntExplosion.java diff --git a/src/main/java/me/samsuik/sakura/explosion/special/TntExplosion.java b/src/main/java/me/samsuik/sakura/explosion/special/TntExplosion.java
new file mode 100644 new file mode 100644
index 0000000000000000000000000000000000000000..2e3bcb3398c6875a5e0a7f6df07646948f852ab4 index 0000000000000000000000000000000000000000..605a0e78a19befeec902f3cb8bc84a55679e6904
--- /dev/null --- /dev/null
+++ b/src/main/java/me/samsuik/sakura/explosion/special/TntExplosion.java +++ b/src/main/java/me/samsuik/sakura/explosion/special/TntExplosion.java
@@ -0,0 +1,195 @@ @@ -0,0 +1,195 @@
@@ -360,7 +362,7 @@ index 0000000000000000000000000000000000000000..2e3bcb3398c6875a5e0a7f6df0764694
+ +
+ private void updateExplosionPosition(EntityState entityState, boolean destroyedBlocks) { + private void updateExplosionPosition(EntityState entityState, boolean destroyedBlocks) {
+ // Before setting entity state, otherwise we might cause issues. + // Before setting entity state, otherwise we might cause issues.
+ final boolean hasMoved = !this.position.equals(this.cause.position()) && (this.movement != 1 || !this.originalPosition.equals(this.position)); + final boolean hasMoved = !this.position.equals(this.cause.position()) && (this.movement == 0 || !this.originalPosition.equals(this.position));
+ +
+ // Keep track of entity state + // Keep track of entity state
+ entityState.apply(this.cause); + entityState.apply(this.cause);
@@ -370,7 +372,7 @@ index 0000000000000000000000000000000000000000..2e3bcb3398c6875a5e0a7f6df0764694
+ if (destroyedBlocks || hasMoved) { + if (destroyedBlocks || hasMoved) {
+ this.cause.setFuse(100); + this.cause.setFuse(100);
+ this.cause.tick(); + this.cause.tick();
+ this.movement++; + this.movement += !destroyedBlocks ? 1 : 0;
+ this.recalculateExplosionPosition(); + this.recalculateExplosionPosition();
+ } + }
+ } + }
@@ -432,7 +434,7 @@ index 0000000000000000000000000000000000000000..2e3bcb3398c6875a5e0a7f6df0764694
+ } + }
+} +}
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 df0465e4e073af7cbcee4939175d8f8c4b280396..e11805351af06e6f4752f758a31f63cfe7a4728b 100644 index df0465e4e073af7cbcee4939175d8f8c4b280396..a7ac1afc9db4daba86a492aea3a528806605231b 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
@@ -1771,6 +1771,12 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. @@ -1771,6 +1771,12 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf.
@@ -453,7 +455,7 @@ index df0465e4e073af7cbcee4939175d8f8c4b280396..e11805351af06e6f4752f758a31f63cf
} }
- return explosion; - return explosion;
+ // Sakura - return moved up into explode + // Sakura - specialised explosions; return moved up into explode
} }
@Override @Override

View File

@@ -98,7 +98,7 @@ index a346435abac725b4e024acf4a1589a51caac8d69..8045f1abc38022e7a6d70de91ce79c1c
\ No newline at end of file \ No newline at end of file
+} +}
diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java
index 64e134138b1e1311239fa19da2c8cda26e1ebc84..ccf8867882f37a55368d2f44a2eddb2c31a20413 100644 index 4721b405edb561e496c9cbb04dca5d7e37bcff2e..81a4a076017527eaddfcfbe737d60257ba8a01eb 100644
--- a/src/main/java/net/minecraft/world/level/Level.java --- a/src/main/java/net/minecraft/world/level/Level.java
+++ b/src/main/java/net/minecraft/world/level/Level.java +++ b/src/main/java/net/minecraft/world/level/Level.java
@@ -1627,10 +1627,18 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl @@ -1627,10 +1627,18 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl

View File

@@ -67,14 +67,14 @@ index 740dc010cfd42941a6f9a2b2c543973429fdbfa3..523cd7cfd5e883cc4758ab9ad13251c3
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 cec9432c8c6bbdb0f45b73c480fe9edb8eeb8298..92e85801ccc69be589667d59f949fa0af9467f38 100644 index 268db3306a46cbd89bffb51f1bce8446aaed4175..2167156ff6d2dec2daee4052dec87a013663bb6e 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
@@ -175,9 +175,15 @@ public abstract class SpecialisedExplosion<T extends Entity> extends Explosion { @@ -177,9 +177,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;
- double y = (entity instanceof PrimedTnt ? entity.getY() : entity.getEyeY()) - this.y; - double y = (entity instanceof PrimedTnt ? entity.getY() : entity.getEyeY()) - pos.y;
+ double y = entity.getEyeY() - pos.y; // Sakura - physics version api + double y = entity.getEyeY() - pos.y; // Sakura - physics version api
double z = entity.getZ() - pos.z; double z = entity.getZ() - pos.z;
double distance = Math.sqrt(x * x + y * y + z * z); double distance = Math.sqrt(x * x + y * y + z * z);
@@ -88,7 +88,7 @@ index cec9432c8c6bbdb0f45b73c480fe9edb8eeb8298..92e85801ccc69be589667d59f949fa0a
if (distance != 0.0D) { if (distance != 0.0D) {
x /= distance; x /= distance;
diff --git a/src/main/java/me/samsuik/sakura/explosion/special/TntExplosion.java b/src/main/java/me/samsuik/sakura/explosion/special/TntExplosion.java diff --git a/src/main/java/me/samsuik/sakura/explosion/special/TntExplosion.java b/src/main/java/me/samsuik/sakura/explosion/special/TntExplosion.java
index 2e3bcb3398c6875a5e0a7f6df07646948f852ab4..1dd77891191845a8e47ad1c90a3ef807bf258a6a 100644 index 605a0e78a19befeec902f3cb8bc84a55679e6904..07079e1d29cbc479dfd91956b8c6c2296959b428 100644
--- a/src/main/java/me/samsuik/sakura/explosion/special/TntExplosion.java --- a/src/main/java/me/samsuik/sakura/explosion/special/TntExplosion.java
+++ b/src/main/java/me/samsuik/sakura/explosion/special/TntExplosion.java +++ b/src/main/java/me/samsuik/sakura/explosion/special/TntExplosion.java
@@ -39,6 +39,13 @@ public final class TntExplosion extends SpecialisedExplosion<PrimedTnt> { @@ -39,6 +39,13 @@ public final class TntExplosion extends SpecialisedExplosion<PrimedTnt> {

View File

@@ -47,7 +47,7 @@ index 523cd7cfd5e883cc4758ab9ad13251c3c38584cb..bc70364df17b9e893c1c774fed619999
blockCollision = blockData.getCollisionShape(world, mutablePos, collisionShape); blockCollision = blockData.getCollisionShape(world, mutablePos, collisionShape);
} }
diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java
index 183204d645f294a74049c5cf1501250b0552839a..d398bc33522e199ca912f460d6092464348b1a1e 100644 index 59635ea26387d3ea4c6bb5a64f32b7c5d9f1a5e2..85f1d44ba59d348d9c364ed684cc5df6a1eada29 100644
--- a/src/main/java/net/minecraft/world/entity/Entity.java --- a/src/main/java/net/minecraft/world/entity/Entity.java
+++ b/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java
@@ -565,6 +565,15 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess @@ -565,6 +565,15 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess

View File

@@ -5,7 +5,7 @@ Subject: [PATCH] Add entity travel distance limits
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 e11805351af06e6f4752f758a31f63cfe7a4728b..f185f1fce6daf6677c4d7a09a9f5f08cd0ffebaf 100644 index a7ac1afc9db4daba86a492aea3a528806605231b..21b0c3f32e1a3837f040390514a30756497c2303 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
@@ -1260,6 +1260,11 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. @@ -1260,6 +1260,11 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf.

View File

@@ -5,7 +5,7 @@ Subject: [PATCH] Entity tracking range modifier
diff --git a/src/main/java/net/minecraft/server/level/ChunkMap.java b/src/main/java/net/minecraft/server/level/ChunkMap.java diff --git a/src/main/java/net/minecraft/server/level/ChunkMap.java b/src/main/java/net/minecraft/server/level/ChunkMap.java
index 6855e10e33ec09645dd770f4b9337cc7ca4f4932..5e76cc1e5a5597d84605e249b8b79d3e27a44981 100644 index c276781231104b48de7b782b273722c25f463475..2d69e97bd3a79e62dabefd6b4c478657b4cf1e8c 100644
--- a/src/main/java/net/minecraft/server/level/ChunkMap.java --- a/src/main/java/net/minecraft/server/level/ChunkMap.java
+++ b/src/main/java/net/minecraft/server/level/ChunkMap.java +++ b/src/main/java/net/minecraft/server/level/ChunkMap.java
@@ -1298,7 +1298,10 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider @@ -1298,7 +1298,10 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider