From 714e2ffefedbf85b7127f227d164ed9a40ff4c4f Mon Sep 17 00:00:00 2001 From: Samsuik Date: Mon, 23 Jun 2025 11:04:37 +0100 Subject: [PATCH] a --- .../features/0008-Merge-Cannon-Entities.patch | 28 +++++++++---------- .../0011-Specialised-Explosions.patch | 6 ++-- ...0012-Optimise-cannon-entity-movement.patch | 6 ++-- .../0017-Configure-cannon-physics.patch | 6 ++-- .../features/0002-Merge-Cannon-Entities.patch | 28 +++++++++---------- 5 files changed, 37 insertions(+), 37 deletions(-) diff --git a/sakura-server/minecraft-patches/features/0008-Merge-Cannon-Entities.patch b/sakura-server/minecraft-patches/features/0008-Merge-Cannon-Entities.patch index 6b25ae1..aeaaf4f 100644 --- a/sakura-server/minecraft-patches/features/0008-Merge-Cannon-Entities.patch +++ b/sakura-server/minecraft-patches/features/0008-Merge-Cannon-Entities.patch @@ -85,7 +85,7 @@ index cffd3f64b253dba53eacc60c8ae82dd297f98e5b..68e2b26835a2588a047e9ea175eb8e49 if (!(this instanceof ServerPlayer) && removalReason != RemovalReason.CHANGED_DIMENSION && !alreadyRemoved) { // Players need to be special cased, because they are regularly removed from the world diff --git a/net/minecraft/world/entity/item/FallingBlockEntity.java b/net/minecraft/world/entity/item/FallingBlockEntity.java -index 45f08a65d8b423fbf69f66d695bb9d67cf0f2f23..6f0b77e77186dd394b5949977e3e1a66610bc354 100644 +index 45f08a65d8b423fbf69f66d695bb9d67cf0f2f23..3af6e04bb4dcd91de2794bbc8d3eff16def9efa8 100644 --- a/net/minecraft/world/entity/item/FallingBlockEntity.java +++ b/net/minecraft/world/entity/item/FallingBlockEntity.java @@ -50,7 +50,7 @@ import net.minecraft.world.phys.HitResult; @@ -131,7 +131,7 @@ index 45f08a65d8b423fbf69f66d695bb9d67cf0f2f23..6f0b77e77186dd394b5949977e3e1a66 + + // If you horizontal stack into a moving piston block this condition will be met. + if (!fallingBlock.isRemoved()) { -+ this.mergeData.setCount(count + 1); ++ this.mergeData.count = count + 1; + fallingBlock.storeEntityState(); + fallingBlock.entityState().apply(this); + break; @@ -144,7 +144,7 @@ index 45f08a65d8b423fbf69f66d695bb9d67cf0f2f23..6f0b77e77186dd394b5949977e3e1a66 + @Override + public @Nullable ItemEntity spawnAtLocation(ServerLevel level, net.minecraft.world.level.ItemLike item) { // may be overridden by plugins + ItemEntity itemEntity = null; -+ for (int i = 0; i < this.mergeData.getCount(); ++i) { ++ for (int i = 0; i < this.mergeData.count; ++i) { + itemEntity = super.spawnAtLocation(level, item); + } + return itemEntity; @@ -157,7 +157,7 @@ index 45f08a65d8b423fbf69f66d695bb9d67cf0f2f23..6f0b77e77186dd394b5949977e3e1a66 this.heightParity = level.sakuraConfig().cannons.mechanics.fallingBlockParity; // Sakura - configure cannon mechanics this.isFallingBlock = true; // Sakura - client visibility settings this.loadChunks = level.sakuraConfig().cannons.loadChunks; // Sakura - load chunks on movement -+ this.mergeData.setMergeLevel(level.sakuraConfig().cannons.mergeLevel); // Sakura - merge cannon entities ++ this.mergeData.mergeLevel = level.sakuraConfig().cannons.mergeLevel; // Sakura - merge cannon entities } public FallingBlockEntity(Level level, double x, double y, double z, BlockState state) { @@ -165,7 +165,7 @@ index 45f08a65d8b423fbf69f66d695bb9d67cf0f2f23..6f0b77e77186dd394b5949977e3e1a66 return; } // CraftBukkit end -+ if (this.respawnEntity()) return; // Sakura - merge cannon entities ++ if (this.tryToRespawnEntity()) return; // Sakura - merge cannon entities if (this.level().setBlock(blockPos, this.blockState, 3)) { ((ServerLevel)this.level()) .getChunkSource() @@ -173,7 +173,7 @@ index 45f08a65d8b423fbf69f66d695bb9d67cf0f2f23..6f0b77e77186dd394b5949977e3e1a66 compound.putBoolean("CancelDrop", this.cancelDrop); if (!this.autoExpire) compound.putBoolean("Paper.AutoExpire", false); // Paper - Expand FallingBlock API -+ compound.putInt("merge_count", this.mergeData.getCount()); // Sakura - merge cannon entities; save to nbt ++ compound.putInt("merge_count", this.mergeData.count); // Sakura - merge cannon entities; save to nbt } @Override @@ -181,12 +181,12 @@ index 45f08a65d8b423fbf69f66d695bb9d67cf0f2f23..6f0b77e77186dd394b5949977e3e1a66 this.blockData = compound.getCompound("TileEntityData").map(blockData -> this.level().paperConfig().entities.spawning.filterBadTileEntityNbtFromFallingBlocks && this.blockState.getBlock() instanceof net.minecraft.world.level.block.GameMasterBlock ? null : blockData).map(CompoundTag::copy).orElse(null); // Paper - Filter bad block entity nbt data from falling blocks this.cancelDrop = compound.getBooleanOr("CancelDrop", false); this.autoExpire = compound.getBooleanOr("Paper.AutoExpire", true); // Paper - Expand FallingBlock API -+ this.mergeData.setCount(compound.getIntOr("merge_count", 1)); // Sakura - merge cannon entities; load from nbt ++ this.mergeData.count = compound.getIntOr("merge_count", 1); // Sakura - merge cannon entities; load from nbt } public void setHurtsEntities(float fallDamagePerDistance, int fallDamageMax) { diff --git a/net/minecraft/world/entity/item/PrimedTnt.java b/net/minecraft/world/entity/item/PrimedTnt.java -index 0fbac85dd7b624899db3825149a5d2b167ecedaa..13fdcee0437695ae22180c6091b7aa72a1f1d087 100644 +index 0fbac85dd7b624899db3825149a5d2b167ecedaa..a1cbeb8216edda93ac6043b113314d53e9347fd6 100644 --- a/net/minecraft/world/entity/item/PrimedTnt.java +++ b/net/minecraft/world/entity/item/PrimedTnt.java @@ -35,7 +35,7 @@ import org.bukkit.event.entity.EntityRemoveEvent; @@ -243,7 +243,7 @@ index 0fbac85dd7b624899db3825149a5d2b167ecedaa..13fdcee0437695ae22180c6091b7aa72 this.blocksBuilding = true; this.isPrimedTNT = true; // Sakura - client visibility settings this.loadChunks = level.sakuraConfig().cannons.loadChunks; // Sakura - load chunks on movement -+ this.mergeData.setMergeLevel(level.sakuraConfig().cannons.mergeLevel); // Sakura - merge cannon entities ++ this.mergeData.mergeLevel = level.sakuraConfig().cannons.mergeLevel; // Sakura - merge cannon entities } public PrimedTnt(Level level, double x, double y, double z, @Nullable LivingEntity owner) { @@ -251,7 +251,7 @@ index 0fbac85dd7b624899db3825149a5d2b167ecedaa..13fdcee0437695ae22180c6091b7aa72 if (i <= 0) { // CraftBukkit start - Need to reverse the order of the explosion and the entity death so we have a location for the event //this.discard(); -+ this.respawnEntity(); // Sakura - merge cannon entities ++ this.tryToRespawnEntity(); // Sakura - merge cannon entities if (!this.level().isClientSide) { this.explode(); } @@ -259,7 +259,7 @@ index 0fbac85dd7b624899db3825149a5d2b167ecedaa..13fdcee0437695ae22180c6091b7aa72 if (this.explosionPower != 4.0F) { compound.putFloat("explosion_power", this.explosionPower); } -+ compound.putInt("merge_count", this.mergeData.getCount()); // Sakura - merge cannon entities; save to nbt ++ compound.putInt("merge_count", this.mergeData.count); // Sakura - merge cannon entities; save to nbt } @Override @@ -267,7 +267,7 @@ index 0fbac85dd7b624899db3825149a5d2b167ecedaa..13fdcee0437695ae22180c6091b7aa72 this.setFuse(compound.getShortOr("fuse", (short)80)); this.setBlockState(compound.read("block_state", BlockState.CODEC, registryOps).orElse(DEFAULT_BLOCK_STATE)); this.explosionPower = Mth.clamp(compound.getFloatOr("explosion_power", 4.0F), 0.0F, 128.0F); -+ this.mergeData.setCount(compound.getIntOr("merge_count", 1)); // Sakura - merge cannon entities; load from nbt ++ this.mergeData.count = compound.getIntOr("merge_count", 1); // Sakura - merge cannon entities; load from nbt } @Nullable @@ -310,7 +310,7 @@ index 42ee3f32fe44c1f0680c994a69201f7bd7792673..96c977df11c660ccb9a9b32e61c86508 protected abstract int getSignalForState(BlockState state); diff --git a/net/minecraft/world/level/block/WeightedPressurePlateBlock.java b/net/minecraft/world/level/block/WeightedPressurePlateBlock.java -index 5e095919828e89d12f2676b3c544842a81e047a1..94d699f1b8b1a85ea36341985666b21fcaaac761 100644 +index 5e095919828e89d12f2676b3c544842a81e047a1..e47a5010baea87ebf472ccac9ae98ede7a490b50 100644 --- a/net/minecraft/world/level/block/WeightedPressurePlateBlock.java +++ b/net/minecraft/world/level/block/WeightedPressurePlateBlock.java @@ -39,6 +39,11 @@ public class WeightedPressurePlateBlock extends BasePressurePlateBlock { @@ -330,7 +330,7 @@ index 5e095919828e89d12f2676b3c544842a81e047a1..94d699f1b8b1a85ea36341985666b21f // We only want to block turning the plate on if all events are cancelled if (!cancellable.isCancelled()) { - min++; -+ min += !entityInside && entity instanceof me.samsuik.sakura.entity.merge.MergeableEntity mergeEntity ? mergeEntity.getMergeEntityData().getCount() : 1; // Sakura - merge cannon entities ++ min += !entityInside && entity instanceof me.samsuik.sakura.entity.merge.MergeableEntity mergeEntity ? mergeEntity.getMergeEntityData().count : 1; // Sakura - merge cannon entities } } // CraftBukkit end diff --git a/sakura-server/minecraft-patches/features/0011-Specialised-Explosions.patch b/sakura-server/minecraft-patches/features/0011-Specialised-Explosions.patch index 1f26d0f..8a6c514 100644 --- a/sakura-server/minecraft-patches/features/0011-Specialised-Explosions.patch +++ b/sakura-server/minecraft-patches/features/0011-Specialised-Explosions.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Specialised Explosions diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java -index ae0b6d506f0344249bdc238fff0f5a3306d05334..919793ba79ab19e86e42a8a97711563e504c0aed 100644 +index fab973cb02218458f23e59665b4f2deb5d54da8d..b9806bdd4d49ed3fd8c17125143703b6a792b10e 100644 --- a/net/minecraft/server/level/ServerLevel.java +++ b/net/minecraft/server/level/ServerLevel.java @@ -1891,7 +1891,16 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe @@ -52,7 +52,7 @@ index ae0b6d506f0344249bdc238fff0f5a3306d05334..919793ba79ab19e86e42a8a97711563e private Explosion.BlockInteraction getDestroyType(GameRules.Key decayGameRule) { diff --git a/net/minecraft/world/entity/item/PrimedTnt.java b/net/minecraft/world/entity/item/PrimedTnt.java -index 13fdcee0437695ae22180c6091b7aa72a1f1d087..57cfc90b3193fe8603cf10c444ae9be6dce8e584 100644 +index a1cbeb8216edda93ac6043b113314d53e9347fd6..3511e852aebabed8d5f40611db4573f55ca21875 100644 --- a/net/minecraft/world/entity/item/PrimedTnt.java +++ b/net/minecraft/world/entity/item/PrimedTnt.java @@ -80,20 +80,7 @@ public class PrimedTnt extends Entity implements TraceableEntity, me.samsuik.sak @@ -73,7 +73,7 @@ index 13fdcee0437695ae22180c6091b7aa72a1f1d087..57cfc90b3193fe8603cf10c444ae9be6 - - this.tick(); - } -+ this.mergeData.setCount(count); // Sakura - specialised explosions ++ this.mergeData.count = count; // Sakura - specialised explosions } // Sakura end - merge cannon entities diff --git a/sakura-server/minecraft-patches/features/0012-Optimise-cannon-entity-movement.patch b/sakura-server/minecraft-patches/features/0012-Optimise-cannon-entity-movement.patch index f05b0af..2eea133 100644 --- a/sakura-server/minecraft-patches/features/0012-Optimise-cannon-entity-movement.patch +++ b/sakura-server/minecraft-patches/features/0012-Optimise-cannon-entity-movement.patch @@ -150,7 +150,7 @@ index 68e2b26835a2588a047e9ea175eb8e4912041976..98107921d7251e1b7fc621103a31afdf protected Vec3 collide(Vec3 movement) { final boolean xZero = movement.x == 0.0; diff --git a/net/minecraft/world/entity/item/FallingBlockEntity.java b/net/minecraft/world/entity/item/FallingBlockEntity.java -index 6f0b77e77186dd394b5949977e3e1a66610bc354..0dc8c7a74df21e10d3eec66682d5efc61b335e61 100644 +index 3af6e04bb4dcd91de2794bbc8d3eff16def9efa8..e0cee4cda2fb2d55e1da0cedc71cdc0c445108d0 100644 --- a/net/minecraft/world/entity/item/FallingBlockEntity.java +++ b/net/minecraft/world/entity/item/FallingBlockEntity.java @@ -121,6 +121,12 @@ public class FallingBlockEntity extends Entity implements me.samsuik.sakura.enti @@ -167,11 +167,11 @@ index 6f0b77e77186dd394b5949977e3e1a66610bc354..0dc8c7a74df21e10d3eec66682d5efc6 public FallingBlockEntity(EntityType entityType, Level level) { super(entityType, level); diff --git a/net/minecraft/world/entity/item/PrimedTnt.java b/net/minecraft/world/entity/item/PrimedTnt.java -index 57cfc90b3193fe8603cf10c444ae9be6dce8e584..a5fdbd843ad49a862508574c1b07a2503c019f96 100644 +index 3511e852aebabed8d5f40611db4573f55ca21875..d523cc4e7089e04d577248d26d7d4e911cd87434 100644 --- a/net/minecraft/world/entity/item/PrimedTnt.java +++ b/net/minecraft/world/entity/item/PrimedTnt.java @@ -83,6 +83,12 @@ public class PrimedTnt extends Entity implements TraceableEntity, me.samsuik.sak - this.mergeData.setCount(count); // Sakura - specialised explosions + this.mergeData.count = count; // Sakura - specialised explosions } // Sakura end - merge cannon entities + // Sakura start - optimise cannon entity movement diff --git a/sakura-server/minecraft-patches/features/0017-Configure-cannon-physics.patch b/sakura-server/minecraft-patches/features/0017-Configure-cannon-physics.patch index 089953b..7b931b4 100644 --- a/sakura-server/minecraft-patches/features/0017-Configure-cannon-physics.patch +++ b/sakura-server/minecraft-patches/features/0017-Configure-cannon-physics.patch @@ -179,7 +179,7 @@ index 98107921d7251e1b7fc621103a31afdfd3bb5af7..162062200a4ffa7bc669093779377f0d if (this.isAlive()) { BlockState blockState = this.level().getBlockState(pos); diff --git a/net/minecraft/world/entity/item/FallingBlockEntity.java b/net/minecraft/world/entity/item/FallingBlockEntity.java -index 0dc8c7a74df21e10d3eec66682d5efc61b335e61..16c22f243fcb6b5ae1b43ea112251a9b731f91c8 100644 +index e0cee4cda2fb2d55e1da0cedc71cdc0c445108d0..3b83c101fd5583f45fdd6fa20e92bc17318fad6b 100644 --- a/net/minecraft/world/entity/item/FallingBlockEntity.java +++ b/net/minecraft/world/entity/item/FallingBlockEntity.java @@ -127,6 +127,43 @@ public class FallingBlockEntity extends Entity implements me.samsuik.sakura.enti @@ -318,7 +318,7 @@ index 0dc8c7a74df21e10d3eec66682d5efc61b335e61..16c22f243fcb6b5ae1b43ea112251a9b } diff --git a/net/minecraft/world/entity/item/PrimedTnt.java b/net/minecraft/world/entity/item/PrimedTnt.java -index a5fdbd843ad49a862508574c1b07a2503c019f96..6153f82d85b73a927c5a4cf6b916c69d06edd744 100644 +index d523cc4e7089e04d577248d26d7d4e911cd87434..e37c07ca244ccf02e474632a072b583675dab608 100644 --- a/net/minecraft/world/entity/item/PrimedTnt.java +++ b/net/minecraft/world/entity/item/PrimedTnt.java @@ -89,6 +89,22 @@ public class PrimedTnt extends Entity implements TraceableEntity, me.samsuik.sak @@ -389,7 +389,7 @@ index a5fdbd843ad49a862508574c1b07a2503c019f96..6153f82d85b73a927c5a4cf6b916c69d + if (physics.before(1_9_0) ? (i < 0) : (i <= 0)) { // Sakura - configure cannon physics // CraftBukkit start - Need to reverse the order of the explosion and the entity death so we have a location for the event //this.discard(); - this.respawnEntity(); // Sakura - merge cannon entities + this.tryToRespawnEntity(); // Sakura - merge cannon entities @@ -226,13 +254,14 @@ public class PrimedTnt extends Entity implements TraceableEntity, me.samsuik.sak return; } diff --git a/sakura-server/paper-patches/features/0002-Merge-Cannon-Entities.patch b/sakura-server/paper-patches/features/0002-Merge-Cannon-Entities.patch index 65c1f84..d119122 100644 --- a/sakura-server/paper-patches/features/0002-Merge-Cannon-Entities.patch +++ b/sakura-server/paper-patches/features/0002-Merge-Cannon-Entities.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Merge Cannon Entities diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftFallingBlock.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftFallingBlock.java -index e77b06c3ef9b534a8f4f160d077cf4339ee7622d..f0efb5feea71a69ac52f4dd81266f3a48020f926 100644 +index e77b06c3ef9b534a8f4f160d077cf4339ee7622d..a33e91a5b35109415b8140721469217c336dfc00 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftFallingBlock.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftFallingBlock.java @@ -25,6 +25,27 @@ public class CraftFallingBlock extends CraftEntity implements FallingBlock { @@ -14,30 +14,30 @@ index e77b06c3ef9b534a8f4f160d077cf4339ee7622d..f0efb5feea71a69ac52f4dd81266f3a4 // Sakura end - falling block height parity api + // Sakura start - merge cannon entities + @Override -+ public final @org.jetbrains.annotations.NotNull me.samsuik.sakura.entity.merge.MergeLevel getMergeLevel() { -+ return this.getHandle().getMergeEntityData().getMergeLevel(); ++ public final me.samsuik.sakura.entity.merge.MergeLevel getMergeLevel() { ++ return this.getHandle().getMergeEntityData().mergeLevel; + } + + @Override -+ public final void setMergeLevel(@org.jetbrains.annotations.NotNull me.samsuik.sakura.entity.merge.MergeLevel level) { -+ this.getHandle().getMergeEntityData().setMergeLevel(level); ++ public final void setMergeLevel(me.samsuik.sakura.entity.merge.MergeLevel level) { ++ this.getHandle().getMergeEntityData().mergeLevel = level; + } + + @Override + public final int getStacked() { -+ return this.getHandle().getMergeEntityData().getCount(); ++ return this.getHandle().getMergeEntityData().count; + } + + @Override + public final void setStacked(int stacked) { -+ this.getHandle().getMergeEntityData().setCount(stacked); ++ this.getHandle().getMergeEntityData().count = stacked; + } + // Sakura end - merge cannon entities @Override public FallingBlockEntity getHandle() { diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftTNTPrimed.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftTNTPrimed.java -index eea78db7f12f5976077663a9ff0c0e188ffa8849..3fcee720ec174255ebd71428d8449a444d2a22ad 100644 +index eea78db7f12f5976077663a9ff0c0e188ffa8849..2e7803bd1f3411e75d8a51e03276b00469496f3b 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftTNTPrimed.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftTNTPrimed.java @@ -12,6 +12,28 @@ public class CraftTNTPrimed extends CraftEntity implements TNTPrimed { @@ -46,23 +46,23 @@ index eea78db7f12f5976077663a9ff0c0e188ffa8849..3fcee720ec174255ebd71428d8449a44 + // Sakura start - merge cannon entities + @Override -+ public final @org.jetbrains.annotations.NotNull me.samsuik.sakura.entity.merge.MergeLevel getMergeLevel() { -+ return this.getHandle().getMergeEntityData().getMergeLevel(); ++ public final me.samsuik.sakura.entity.merge.MergeLevel getMergeLevel() { ++ return this.getHandle().getMergeEntityData().mergeLevel; + } + + @Override -+ public final void setMergeLevel(@org.jetbrains.annotations.NotNull me.samsuik.sakura.entity.merge.MergeLevel level) { -+ this.getHandle().getMergeEntityData().setMergeLevel(level); ++ public final void setMergeLevel(me.samsuik.sakura.entity.merge.MergeLevel level) { ++ this.getHandle().getMergeEntityData().mergeLevel = level; + } + + @Override + public final int getStacked() { -+ return this.getHandle().getMergeEntityData().getCount(); ++ return this.getHandle().getMergeEntityData().count; + } + + @Override + public final void setStacked(int stacked) { -+ this.getHandle().getMergeEntityData().setCount(stacked); ++ this.getHandle().getMergeEntityData().count = stacked; + } + // Sakura end - merge cannon entities +