9
0
mirror of https://github.com/Samsuik/Sakura.git synced 2025-12-21 15:59:26 +00:00

Fix explosions not updating entity handle

This commit is contained in:
Samsuik
2024-08-10 17:16:54 +01:00
parent 6155b8c198
commit 2ea2f24e01
8 changed files with 43 additions and 38 deletions

View File

@@ -209,10 +209,10 @@ index 4a3690c71eda93d2542e8c039442a51882f10475..ada18c755cee73620e6c0020674dd0a5
this.guardEntityTick(this::tickNonPassenger, entity);
gameprofilerfiller.pop();
diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java
index 519632b483c5b86c98067890c0628484fd1c8eb6..a0dc1fa70590d7fc0d88f83094a6ec2c98e748e8 100644
index 519632b483c5b86c98067890c0628484fd1c8eb6..f73f1dba613f82a227f10124fe9589e178fd2e9c 100644
--- a/src/main/java/net/minecraft/world/entity/Entity.java
+++ b/src/main/java/net/minecraft/world/entity/Entity.java
@@ -604,6 +604,116 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
@@ -604,6 +604,120 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
return to.entityState() != null && to.entityState().isCurrentState(this);
}
// Sakura end - store entity data/state
@@ -318,6 +318,10 @@ index 519632b483c5b86c98067890c0628484fd1c8eb6..a0dc1fa70590d7fc0d88f83094a6ec2c
+
+ discard(null); // MERGE is appropriate here but plugins may not expect tnt or falling blocks to merge
+
+ updateEntityHandle(entity);
+ }
+
+ public void updateEntityHandle(Entity entity) {
+ // update api handle, this is so cannondebug can function
+ //noinspection ConstantValue
+ if (bukkitEntity != null) {
@@ -329,7 +333,7 @@ index 519632b483c5b86c98067890c0628484fd1c8eb6..a0dc1fa70590d7fc0d88f83094a6ec2c
public Entity(EntityType<?> type, Level world) {
this.id = Entity.ENTITY_COUNTER.incrementAndGet();
@@ -653,6 +763,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
@@ -653,6 +767,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
this.entityData = datawatcher_a.build();
this.setPos(0.0D, 0.0D, 0.0D);
this.eyeHeight = this.dimensions.eyeHeight();
@@ -337,7 +341,7 @@ index 519632b483c5b86c98067890c0628484fd1c8eb6..a0dc1fa70590d7fc0d88f83094a6ec2c
}
public boolean isColliding(BlockPos pos, BlockState state) {
@@ -2591,6 +2702,11 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
@@ -2591,6 +2706,11 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
nbttagcompound.putBoolean("Paper.FreezeLock", true);
}
// Paper end
@@ -349,7 +353,7 @@ index 519632b483c5b86c98067890c0628484fd1c8eb6..a0dc1fa70590d7fc0d88f83094a6ec2c
return nbttagcompound;
} catch (Throwable throwable) {
CrashReport crashreport = CrashReport.forThrowable(throwable, "Saving entity NBT");
@@ -2738,6 +2854,11 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
@@ -2738,6 +2858,11 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
freezeLocked = nbt.getBoolean("Paper.FreezeLock");
}
// Paper end
@@ -361,7 +365,7 @@ index 519632b483c5b86c98067890c0628484fd1c8eb6..a0dc1fa70590d7fc0d88f83094a6ec2c
} catch (Throwable throwable) {
CrashReport crashreport = CrashReport.forThrowable(throwable, "Loading entity NBT");
@@ -4949,6 +5070,11 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
@@ -4949,6 +5074,11 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
// Paper end - rewrite chunk system
CraftEventFactory.callEntityRemoveEvent(this, cause);
// CraftBukkit end

View File

@@ -229,10 +229,10 @@ index 0000000000000000000000000000000000000000..d15eb10fa203236060b90c5fc1364564
+}
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..604a2980f89764371e0410665d9be909a3ae2f9a
index 0000000000000000000000000000000000000000..6bcef992766b901db34494a4d359ba335705b689
--- /dev/null
+++ b/src/main/java/me/samsuik/sakura/explosion/special/TntExplosion.java
@@ -0,0 +1,200 @@
@@ -0,0 +1,201 @@
+package me.samsuik.sakura.explosion.special;
+
+import io.papermc.paper.util.maplist.IteratorSafeOrderedReferenceSet;
@@ -388,6 +388,7 @@ index 0000000000000000000000000000000000000000..604a2980f89764371e0410665d9be909
+ break;
+ base += foundEntity.getStacked();
+ foundEntity.discard();
+ foundEntity.updateEntityHandle(this.cause);
+ }
+
+ return base;

View File

@@ -5,10 +5,10 @@ Subject: [PATCH] Optimise Fast Movement
diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java
index a0dc1fa70590d7fc0d88f83094a6ec2c98e748e8..e14717a39b8adb4ea4aff66c35724cea67ef14ba 100644
index f73f1dba613f82a227f10124fe9589e178fd2e9c..d4e0ec9e9dc21619e89d1bcefd358e5866e48666 100644
--- a/src/main/java/net/minecraft/world/entity/Entity.java
+++ b/src/main/java/net/minecraft/world/entity/Entity.java
@@ -1276,6 +1276,95 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
@@ -1280,6 +1280,95 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
}
// Paper end - detailed watchdog information
@@ -104,7 +104,7 @@ index a0dc1fa70590d7fc0d88f83094a6ec2c98e748e8..e14717a39b8adb4ea4aff66c35724cea
public void move(MoverType movementType, Vec3 movement) {
final Vec3 originalMovement = movement; // Paper - Expose pre-collision velocity
// Paper start - detailed watchdog information
@@ -1654,6 +1743,95 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
@@ -1658,6 +1747,95 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
return offsetFactor;
}

View File

@@ -5,10 +5,10 @@ Subject: [PATCH] isPushedByFluid API
diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java
index e689173f44a06ad320740dab2eceda5ff0e68fe2..cef9b3f34e13fb1b6b80179e12dfb1e03d66e39a 100644
index d4e0ec9e9dc21619e89d1bcefd358e5866e48666..3b100822a7c5f06e7c18269edd024570ada394eb 100644
--- a/src/main/java/net/minecraft/world/entity/Entity.java
+++ b/src/main/java/net/minecraft/world/entity/Entity.java
@@ -714,6 +714,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
@@ -718,6 +718,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
}
}
// Sakura end - cannon entity merging
@@ -16,7 +16,7 @@ index e689173f44a06ad320740dab2eceda5ff0e68fe2..cef9b3f34e13fb1b6b80179e12dfb1e0
public Entity(EntityType<?> type, Level world) {
this.id = Entity.ENTITY_COUNTER.incrementAndGet();
@@ -4305,7 +4306,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
@@ -4309,7 +4310,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
}
public boolean isPushedByFluid() {

View File

@@ -5,10 +5,10 @@ Subject: [PATCH] Optimise TNT fluid state and pushing
diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java
index cef9b3f34e13fb1b6b80179e12dfb1e03d66e39a..e8b850b0608e8d876f0f3415880e4f90ca3b9d85 100644
index 3b100822a7c5f06e7c18269edd024570ada394eb..035071ff75fe682f3cdb8b7dbf17697beb7500c3 100644
--- a/src/main/java/net/minecraft/world/entity/Entity.java
+++ b/src/main/java/net/minecraft/world/entity/Entity.java
@@ -2256,7 +2256,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
@@ -2260,7 +2260,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
return this.isInWater() || flag;
}

View File

@@ -89,7 +89,7 @@ index d15eb10fa203236060b90c5fc1364564dec8753f..d67f9d241f6070a2c391df52146d4843
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 1690428df289ac55a5a6eaf406a7accc3e6143af..3fd2633601baed389ca1f503022ecc14109241d9 100644
index 6bcef992766b901db34494a4d359ba335705b689..f25cbe7a1b79a6ac346a665074dce3239127b181 100644
--- a/src/main/java/me/samsuik/sakura/explosion/special/TntExplosion.java
+++ b/src/main/java/me/samsuik/sakura/explosion/special/TntExplosion.java
@@ -37,6 +37,13 @@ public final class TntExplosion extends SpecialisedExplosion<PrimedTnt> {
@@ -107,7 +107,7 @@ index 1690428df289ac55a5a6eaf406a7accc3e6143af..3fd2633601baed389ca1f503022ecc14
protected void startExplosion() {
for (int i = this.calculateExplosionPotential() - 1; i >= 0; --i) {
diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java
index 50ae421b40681366523932a2cd445592ec067897..df083dd2f9af19c768b23727852194e68a53fd7d 100644
index 035071ff75fe682f3cdb8b7dbf17697beb7500c3..b336fe34b8d3e54dd300509812a6c4886105b299 100644
--- a/src/main/java/net/minecraft/world/entity/Entity.java
+++ b/src/main/java/net/minecraft/world/entity/Entity.java
@@ -381,7 +381,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
@@ -119,7 +119,7 @@ index 50ae421b40681366523932a2cd445592ec067897..df083dd2f9af19c768b23727852194e6
public boolean isInPowderSnow;
public boolean wasInPowderSnow;
public boolean wasOnFire;
@@ -715,6 +715,13 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
@@ -719,6 +719,13 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
}
// Sakura end - cannon entity merging
public boolean pushedByFluid = true; // Sakura - entity pushed by fluid api
@@ -133,7 +133,7 @@ index 50ae421b40681366523932a2cd445592ec067897..df083dd2f9af19c768b23727852194e6
public Entity(EntityType<?> type, Level world) {
this.id = Entity.ENTITY_COUNTER.incrementAndGet();
@@ -1222,7 +1229,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
@@ -1226,7 +1233,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
}
protected void checkSupportingBlock(boolean onGround, @Nullable Vec3 movement) {
@@ -142,7 +142,7 @@ index 50ae421b40681366523932a2cd445592ec067897..df083dd2f9af19c768b23727852194e6
AABB axisalignedbb = this.getBoundingBox();
AABB axisalignedbb1 = new AABB(axisalignedbb.minX, axisalignedbb.minY - 1.0E-6D, axisalignedbb.minZ, axisalignedbb.maxX, axisalignedbb.minY, axisalignedbb.maxZ);
Optional<BlockPos> optional = this.level.findSupportingBlock(this, axisalignedbb1);
@@ -1284,7 +1291,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
@@ -1288,7 +1295,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
if (this.noPhysics) {
this.setPos(this.getX() + movement.x, this.getY() + movement.y, this.getZ() + movement.z);
} else {
@@ -151,7 +151,7 @@ index 50ae421b40681366523932a2cd445592ec067897..df083dd2f9af19c768b23727852194e6
movement = this.limitPistonMovement(movement);
if (movement.equals(Vec3.ZERO)) {
return;
@@ -1302,10 +1309,10 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
@@ -1306,10 +1313,10 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
Vec3 vec3d1 = this.collideScan(movement);
double d0 = vec3d1.lengthSqr();
@@ -164,7 +164,7 @@ index 50ae421b40681366523932a2cd445592ec067897..df083dd2f9af19c768b23727852194e6
BlockHitResult movingobjectpositionblock = this.level().clip(new ClipContext(this.position(), this.position().add(vec3d1), ClipContext.Block.FALLDAMAGE_RESETTING, ClipContext.Fluid.WATER, this));
if (movingobjectpositionblock.getType() != HitResult.Type.MISS) {
@@ -1341,6 +1348,12 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
@@ -1345,6 +1352,12 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
if (this.horizontalCollision) {
Vec3 vec3d2 = this.getDeltaMovement();
@@ -177,7 +177,7 @@ index 50ae421b40681366523932a2cd445592ec067897..df083dd2f9af19c768b23727852194e6
this.setDeltaMovement(flag ? 0.0D : vec3d2.x, vec3d2.y, flag1 ? 0.0D : vec3d2.z);
}
@@ -1382,7 +1395,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
@@ -1386,7 +1399,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
this.setPos(this.getX() + movement.x, this.getY() + movement.y, this.getZ() + movement.z);
} else {
this.wasOnFire = this.isOnFire();
@@ -186,7 +186,7 @@ index 50ae421b40681366523932a2cd445592ec067897..df083dd2f9af19c768b23727852194e6
this.activatedTick = Math.max(this.activatedTick, MinecraftServer.currentTick + 20); // Paper
this.activatedImmunityTick = Math.max(this.activatedImmunityTick, MinecraftServer.currentTick + 20); // Paper
movement = this.limitPistonMovement(movement);
@@ -1409,8 +1422,8 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
@@ -1413,8 +1426,8 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
Vec3 vec3d1 = this.collide(movement);
double d0 = vec3d1.lengthSqr();
@@ -197,7 +197,7 @@ index 50ae421b40681366523932a2cd445592ec067897..df083dd2f9af19c768b23727852194e6
BlockHitResult movingobjectpositionblock = this.level().clip(new ClipContext(this.position(), this.position().add(vec3d1), ClipContext.Block.FALLDAMAGE_RESETTING, ClipContext.Fluid.WATER, this));
if (movingobjectpositionblock.getType() != HitResult.Type.MISS) {
@@ -1446,6 +1459,12 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
@@ -1450,6 +1463,12 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
if (this.horizontalCollision) {
Vec3 vec3d2 = this.getDeltaMovement();
@@ -210,7 +210,7 @@ index 50ae421b40681366523932a2cd445592ec067897..df083dd2f9af19c768b23727852194e6
this.setDeltaMovement(flag ? 0.0D : vec3d2.x, vec3d2.y, flag1 ? 0.0D : vec3d2.z);
}
@@ -1760,7 +1779,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
@@ -1764,7 +1783,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
} else {
final AABB bb = currBoundingBox.expandTowards(movement.x, movement.y, movement.z);
collectCollisions(bb, potentialCollisionsVoxel, potentialCollisionsBB);
@@ -219,7 +219,7 @@ index 50ae421b40681366523932a2cd445592ec067897..df083dd2f9af19c768b23727852194e6
}
}
@@ -1769,7 +1788,10 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
@@ -1773,7 +1792,10 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
double y = movement.y;
double z = movement.z;
@@ -231,7 +231,7 @@ index 50ae421b40681366523932a2cd445592ec067897..df083dd2f9af19c768b23727852194e6
if (y != 0.0) {
y = scanY(currBoundingBox, y, voxelList, bbList);
@@ -1885,7 +1907,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
@@ -1889,7 +1911,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
return movement;
}
@@ -240,7 +240,7 @@ index 50ae421b40681366523932a2cd445592ec067897..df083dd2f9af19c768b23727852194e6
if (stepHeight > 0.0
&& (onGround || (limitedMoveVector.y != movement.y && movement.y < 0.0))
@@ -2001,8 +2023,11 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
@@ -2005,8 +2027,11 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
protected void checkInsideBlocks() {
AABB axisalignedbb = this.getBoundingBox();
@@ -481,7 +481,7 @@ index df2a37e57012333a618937e61cb5a99c3ef4a0f9..62d40333c42f673479db5e6312343161
// 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
index 0a612539f0fc1b447396a8146312cafa6569174f..86f493c8e8ba8e5fcd986ca8e151a4bdcc3ac4b6 100644
index e0a9284bc0760306f1b295f35433f98c628b288a..6932856c7c9c41b6c7979c042db47f799c2f16cc 100644
--- a/src/main/java/net/minecraft/world/level/Explosion.java
+++ b/src/main/java/net/minecraft/world/level/Explosion.java
@@ -76,6 +76,7 @@ public class Explosion {

View File

@@ -5,10 +5,10 @@ Subject: [PATCH] Optimise check inside blocks and fluids
diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java
index b4977a8b97f5417883cf3ffab5f89d98a6a6079b..894604b23d7f3749cbaa767705f63b21beea4fde 100644
index b7f14516d3bb1356de709d528eca3aee1bb212ff..002331795d5b52e888ed6eb5bea6109f1e11a983 100644
--- a/src/main/java/net/minecraft/world/entity/Entity.java
+++ b/src/main/java/net/minecraft/world/entity/Entity.java
@@ -2037,18 +2037,37 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
@@ -2041,18 +2041,37 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
BlockPos blockposition1 = BlockPos.containing(axisalignedbb.maxX - offset, axisalignedbb.maxY - offset, axisalignedbb.maxZ - offset);
// Sakura end
@@ -50,7 +50,7 @@ index b4977a8b97f5417883cf3ffab5f89d98a6a6079b..894604b23d7f3749cbaa767705f63b21
try {
iblockdata.entityInside(this.level(), blockposition_mutableblockposition, this);
@@ -4857,7 +4876,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
@@ -4861,7 +4880,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
}
public boolean updateFluidHeightAndDoFluidPushing(TagKey<Fluid> tag, double speed) {
@@ -59,7 +59,7 @@ index b4977a8b97f5417883cf3ffab5f89d98a6a6079b..894604b23d7f3749cbaa767705f63b21
return false;
} else {
AABB axisalignedbb = this.getBoundingBox().deflate(0.001D);
@@ -4874,11 +4893,30 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
@@ -4878,11 +4897,30 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
int k1 = 0;
BlockPos.MutableBlockPos blockposition_mutableblockposition = new BlockPos.MutableBlockPos();

View File

@@ -21,10 +21,10 @@ index 00259cc930a0b1db38c3abbb5fcf7430d5f50079..8eafe75e69f5b448feea8354edacdb9f
} else { entity.inactiveTick(); } // Paper - EAR 2
this.getProfiler().pop();
diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java
index 894604b23d7f3749cbaa767705f63b21beea4fde..24f86d6adbaf295a42a7740ac17b59de95a22431 100644
index 002331795d5b52e888ed6eb5bea6109f1e11a983..0a57c6ea61572096070819812e47be0b0d936945 100644
--- a/src/main/java/net/minecraft/world/entity/Entity.java
+++ b/src/main/java/net/minecraft/world/entity/Entity.java
@@ -730,6 +730,19 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
@@ -734,6 +734,19 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
return this.physics;
}
// Sakura end - physics version api
@@ -44,7 +44,7 @@ index 894604b23d7f3749cbaa767705f63b21beea4fde..24f86d6adbaf295a42a7740ac17b59de
public Entity(EntityType<?> type, Level world) {
this.id = Entity.ENTITY_COUNTER.incrementAndGet();
@@ -780,6 +793,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
@@ -784,6 +797,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
this.setPos(0.0D, 0.0D, 0.0D);
this.eyeHeight = this.dimensions.eyeHeight();
this.mergeLevel = level.sakuraConfig().cannons.mergeLevel; // Sakura