From cea456f3e907ffdc851fa0e52bf2ab4069e8cc56 Mon Sep 17 00:00:00 2001 From: Samsuik Date: Wed, 17 Jul 2024 18:58:21 +0100 Subject: [PATCH] Fix falling tnt not swinging correctly --- .../server/0020-Specialised-Explosions.patch | 24 ++++++++++--------- .../0026-Add-maxSearch-to-getEntities.patch | 2 +- ...-Configure-cannon-physics-by-version.patch | 8 +++---- ...olid-blocks-as-full-when-moving-fast.patch | 2 +- ...60-Add-entity-travel-distance-limits.patch | 2 +- .../0075-Entity-tracking-range-modifier.patch | 2 +- 6 files changed, 21 insertions(+), 19 deletions(-) diff --git a/patches/server/0020-Specialised-Explosions.patch b/patches/server/0020-Specialised-Explosions.patch index f5d68f5..35d56b4 100644 --- a/patches/server/0020-Specialised-Explosions.patch +++ b/patches/server/0020-Specialised-Explosions.patch @@ -23,12 +23,14 @@ index c21e00812f1aaa1279834a0562d360d6b89e146c..442119e7c4670582556b067dfc03e39a 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 new file mode 100644 -index 0000000000000000000000000000000000000000..cec9432c8c6bbdb0f45b73c480fe9edb8eeb8298 +index 0000000000000000000000000000000000000000..268db3306a46cbd89bffb51f1bce8446aaed4175 --- /dev/null +++ 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; + ++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 io.papermc.paper.util.WorldUtil; +import net.minecraft.core.BlockPos; @@ -158,10 +160,10 @@ index 0000000000000000000000000000000000000000..cec9432c8c6bbdb0f45b73c480fe9edb + int maxChunkY = Mth.clamp(Mth.floor(bb.maxY) >> 4, minSection, maxSection); + 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 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) { + continue; @@ -179,7 +181,7 @@ index 0000000000000000000000000000000000000000..cec9432c8c6bbdb0f45b73c480fe9edb + Entity entity = entities[i]; + if (entity == null) break; + -+ if (entity != source && !entity.ignoreExplosion(this)) { ++ if (entity != this.source && !entity.ignoreExplosion(this)) { + this.impactEntity(entity, position, potential, radius); + } + @@ -204,7 +206,7 @@ index 0000000000000000000000000000000000000000..cec9432c8c6bbdb0f45b73c480fe9edb + + if (distanceFromBottom <= 1.0) { + 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 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 new file mode 100644 -index 0000000000000000000000000000000000000000..2e3bcb3398c6875a5e0a7f6df07646948f852ab4 +index 0000000000000000000000000000000000000000..605a0e78a19befeec902f3cb8bc84a55679e6904 --- /dev/null +++ b/src/main/java/me/samsuik/sakura/explosion/special/TntExplosion.java @@ -0,0 +1,195 @@ @@ -360,7 +362,7 @@ index 0000000000000000000000000000000000000000..2e3bcb3398c6875a5e0a7f6df0764694 + + private void updateExplosionPosition(EntityState entityState, boolean destroyedBlocks) { + // 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 + entityState.apply(this.cause); @@ -370,7 +372,7 @@ index 0000000000000000000000000000000000000000..2e3bcb3398c6875a5e0a7f6df0764694 + if (destroyedBlocks || hasMoved) { + this.cause.setFuse(100); + this.cause.tick(); -+ this.movement++; ++ this.movement += !destroyedBlocks ? 1 : 0; + 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 -index df0465e4e073af7cbcee4939175d8f8c4b280396..e11805351af06e6f4752f758a31f63cfe7a4728b 100644 +index df0465e4e073af7cbcee4939175d8f8c4b280396..a7ac1afc9db4daba86a492aea3a528806605231b 100644 --- a/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. @@ -453,7 +455,7 @@ index df0465e4e073af7cbcee4939175d8f8c4b280396..e11805351af06e6f4752f758a31f63cf } - return explosion; -+ // Sakura - return moved up into explode ++ // Sakura - specialised explosions; return moved up into explode } @Override diff --git a/patches/server/0026-Add-maxSearch-to-getEntities.patch b/patches/server/0026-Add-maxSearch-to-getEntities.patch index f40b3b7..905aa20 100644 --- a/patches/server/0026-Add-maxSearch-to-getEntities.patch +++ b/patches/server/0026-Add-maxSearch-to-getEntities.patch @@ -98,7 +98,7 @@ index a346435abac725b4e024acf4a1589a51caac8d69..8045f1abc38022e7a6d70de91ce79c1c \ 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 -index 64e134138b1e1311239fa19da2c8cda26e1ebc84..ccf8867882f37a55368d2f44a2eddb2c31a20413 100644 +index 4721b405edb561e496c9cbb04dca5d7e37bcff2e..81a4a076017527eaddfcfbe737d60257ba8a01eb 100644 --- a/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 diff --git a/patches/server/0039-Configure-cannon-physics-by-version.patch b/patches/server/0039-Configure-cannon-physics-by-version.patch index ff3cb97..7d48d3d 100644 --- a/patches/server/0039-Configure-cannon-physics-by-version.patch +++ b/patches/server/0039-Configure-cannon-physics-by-version.patch @@ -67,14 +67,14 @@ index 740dc010cfd42941a6f9a2b2c543973429fdbfa3..523cd7cfd5e883cc4758ab9ad13251c3 if (xSmaller && z != 0.0) { 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 -index cec9432c8c6bbdb0f45b73c480fe9edb8eeb8298..92e85801ccc69be589667d59f949fa0af9467f38 100644 +index 268db3306a46cbd89bffb51f1bce8446aaed4175..2167156ff6d2dec2daee4052dec87a013663bb6e 100644 --- a/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 extends Explosion { +@@ -177,9 +177,15 @@ public abstract class SpecialisedExplosion extends Explosion { if (distanceFromBottom <= 1.0) { 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 z = entity.getZ() - pos.z; double distance = Math.sqrt(x * x + y * y + z * z); @@ -88,7 +88,7 @@ index cec9432c8c6bbdb0f45b73c480fe9edb8eeb8298..92e85801ccc69be589667d59f949fa0a if (distance != 0.0D) { 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 -index 2e3bcb3398c6875a5e0a7f6df07646948f852ab4..1dd77891191845a8e47ad1c90a3ef807bf258a6a 100644 +index 605a0e78a19befeec902f3cb8bc84a55679e6904..07079e1d29cbc479dfd91956b8c6c2296959b428 100644 --- a/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 { diff --git a/patches/server/0045-Treat-solid-blocks-as-full-when-moving-fast.patch b/patches/server/0045-Treat-solid-blocks-as-full-when-moving-fast.patch index b31847e..d25dd57 100644 --- a/patches/server/0045-Treat-solid-blocks-as-full-when-moving-fast.patch +++ b/patches/server/0045-Treat-solid-blocks-as-full-when-moving-fast.patch @@ -47,7 +47,7 @@ index 523cd7cfd5e883cc4758ab9ad13251c3c38584cb..bc70364df17b9e893c1c774fed619999 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 -index 183204d645f294a74049c5cf1501250b0552839a..d398bc33522e199ca912f460d6092464348b1a1e 100644 +index 59635ea26387d3ea4c6bb5a64f32b7c5d9f1a5e2..85f1d44ba59d348d9c364ed684cc5df6a1eada29 100644 --- a/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 diff --git a/patches/server/0060-Add-entity-travel-distance-limits.patch b/patches/server/0060-Add-entity-travel-distance-limits.patch index 87317f1..bacb29b 100644 --- a/patches/server/0060-Add-entity-travel-distance-limits.patch +++ b/patches/server/0060-Add-entity-travel-distance-limits.patch @@ -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 -index e11805351af06e6f4752f758a31f63cfe7a4728b..f185f1fce6daf6677c4d7a09a9f5f08cd0ffebaf 100644 +index a7ac1afc9db4daba86a492aea3a528806605231b..21b0c3f32e1a3837f040390514a30756497c2303 100644 --- a/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. diff --git a/patches/server/0075-Entity-tracking-range-modifier.patch b/patches/server/0075-Entity-tracking-range-modifier.patch index b047044..dec686b 100644 --- a/patches/server/0075-Entity-tracking-range-modifier.patch +++ b/patches/server/0075-Entity-tracking-range-modifier.patch @@ -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 -index 6855e10e33ec09645dd770f4b9337cc7ca4f4932..5e76cc1e5a5597d84605e249b8b79d3e27a44981 100644 +index c276781231104b48de7b782b273722c25f463475..2d69e97bd3a79e62dabefd6b4c478657b4cf1e8c 100644 --- a/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