diff --git a/patches/server/0005-Visibility-API-and-Command.patch b/patches/server/0005-Visibility-API-and-Command.patch index c603f45..afd5480 100644 --- a/patches/server/0005-Visibility-API-and-Command.patch +++ b/patches/server/0005-Visibility-API-and-Command.patch @@ -323,18 +323,29 @@ index 5b3a886c624b36557cbfaccdc3fb05a46a4ba36a..4d3f28d86f6ef1c34f883f1f551201ac // CraftBukkit start - respect vanish API if (flag && !player.getBukkitEntity().canSee(this.entity.getBukkitEntity())) { // Paper - only consider hits diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java -index 32742470eea2ec86c0fff02aa157bfcc89530ad3..de2f6a27ae4d76bf27f127f448e0692f93b2a971 100644 +index 32742470eea2ec86c0fff02aa157bfcc89530ad3..ec76caea3ae07efc6f5debcd14b24dfed50aa04b 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java -@@ -1895,7 +1895,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe - while (iterator.hasNext()) { - ServerPlayer entityplayer = (ServerPlayer) iterator.next(); - -- if (entityplayer.distanceToSqr(vec3d) < 4096.0D) { -+ if (entityplayer.distanceToSqr(vec3d) < 4096.0D && !entityplayer.visibility.isToggled(me.samsuik.sakura.player.visibility.Visibility.Setting.EXPLOSIONS)) { // Sakura - visibility api +@@ -1898,7 +1898,18 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe + if (entityplayer.distanceToSqr(vec3d) < 4096.0D) { Optional optional = Optional.ofNullable((Vec3) serverexplosion.getHitPlayers().get(entityplayer)); - entityplayer.connection.send(new ClientboundExplodePacket(vec3d, optional, particleparam2, holder)); +- entityplayer.connection.send(new ClientboundExplodePacket(vec3d, optional, particleparam2, holder)); ++ // Sakura start - visibility api; let players toggle explosion particles ++ ParticleOptions particle = particleparam2; ++ Vec3 position = vec3d; ++ // 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); ++ particle = net.minecraft.core.particles.ParticleTypes.SMOKE; ++ } ++ entityplayer.connection.send(new ClientboundExplodePacket(position, optional, particle, holder)); ++ // 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 index cffbd3300967e5d80b5973b35a76235bb2aa1b73..ad85e5ebe00918a7fea4071351741566e4883dd0 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java @@ -548,6 +559,22 @@ index de87483600e55d88176fe25db621bbd3e464729f..5bd189fad703ac99d57258fa448dbcc1 } public PrimedTnt(Level world, double x, double y, double z, @Nullable LivingEntity igniter) { +diff --git a/src/main/java/net/minecraft/world/level/ServerExplosion.java b/src/main/java/net/minecraft/world/level/ServerExplosion.java +index bbbd451ff184be8fa13bd93d53c89a9502f9951a..7280806cd37a1aed53e304de0a03d68c18b86b09 100644 +--- a/src/main/java/net/minecraft/world/level/ServerExplosion.java ++++ b/src/main/java/net/minecraft/world/level/ServerExplosion.java +@@ -559,7 +559,10 @@ public class ServerExplosion implements 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, vec3d); ++ // Sakura start - specialised explosions; tally player velocity ++ final Vec3 explosionImpact = vec3d; ++ this.hitPlayers.compute(entityhuman, (p, v) -> v != null ? v.add(explosionImpact) : explosionImpact); ++ // Sakura end - specialised explosions; tally player velocity + } + } + diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java index 2c7ec674f55b3178b9dcba7f2bc1ff5efccb50ea..7976eb7496d57d5d1fe29c902e167d79a86bac32 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java diff --git a/patches/server/0017-Replace-explosion-density-cache.patch b/patches/server/0017-Replace-explosion-density-cache.patch index 37da091..a394f1a 100644 --- a/patches/server/0017-Replace-explosion-density-cache.patch +++ b/patches/server/0017-Replace-explosion-density-cache.patch @@ -126,7 +126,7 @@ index 0000000000000000000000000000000000000000..d7e24638f07f243502004970ab4ce646 + } +} diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index b78b642b77a5cef54044b079916fef9b22e50fcc..7aaf3794338b8208ded6549e61479010c369ad87 100644 +index 61b24eac8f17d5a433817ae2ebb3baf2599af210..3f3a7035a07efce5b8438abf989312b6df137ec8 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java @@ -1891,6 +1891,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop resourcekey, RegistryAccess iregistrycustom, Holder holder, boolean flag, boolean flag1, long i, int j, org.bukkit.generator.ChunkGenerator gen, org.bukkit.generator.BiomeProvider biomeProvider, org.bukkit.World.Environment env, java.util.function.Function paperWorldConfigCreator, java.util.function.Supplier sakuraWorldConfigCreator, java.util.concurrent.Executor executor) { // Sakura - sakura configuration files // Paper - create paper world config & Anti-Xray // Paper start - getblock optimisations - cache world height/sections diff --git a/src/main/java/net/minecraft/world/level/ServerExplosion.java b/src/main/java/net/minecraft/world/level/ServerExplosion.java -index a92be80081178cc302a7f0b646bad7daa28f7c66..10432b31acd047ac2aa8581f2ee863254ec8d1eb 100644 +index a7f64335001c7beb7f4474c9cda3c6988725f69a..c4d167ea4390c6605c99d5868d778e0b3f01f97c 100644 --- a/src/main/java/net/minecraft/world/level/ServerExplosion.java +++ b/src/main/java/net/minecraft/world/level/ServerExplosion.java @@ -297,7 +297,12 @@ public class ServerExplosion implements Explosion { @@ -185,7 +185,7 @@ index a92be80081178cc302a7f0b646bad7daa28f7c66..10432b31acd047ac2aa8581f2ee86325 ++i; } -@@ -691,6 +705,12 @@ public class ServerExplosion implements Explosion { +@@ -694,6 +708,12 @@ public class ServerExplosion implements Explosion { return; } // CraftBukkit end @@ -198,7 +198,7 @@ index a92be80081178cc302a7f0b646bad7daa28f7c66..10432b31acd047ac2aa8581f2ee86325 Iterator iterator = positions.iterator(); while (iterator.hasNext()) { -@@ -864,14 +884,12 @@ public class ServerExplosion implements Explosion { +@@ -867,14 +887,12 @@ public class ServerExplosion implements Explosion { // Paper start - Optimize explosions private float getBlockDensity(Vec3 vec3d, Entity entity) { diff --git a/patches/server/0019-Specialised-Explosions.patch b/patches/server/0019-Specialised-Explosions.patch index 1e13552..e4e5e99 100644 --- a/patches/server/0019-Specialised-Explosions.patch +++ b/patches/server/0019-Specialised-Explosions.patch @@ -23,10 +23,10 @@ index c21e00812f1aaa1279834a0562d360d6b89e146c..1e1329adde1457898a3002279b53b1bb 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..82a448a18415ff0e050d26aaa8fcfe844631768f +index 0000000000000000000000000000000000000000..ce04a5d9aaef3ca8ba8d7b988bdf0497285f90c1 --- /dev/null +++ b/src/main/java/me/samsuik/sakura/explosion/special/SpecialisedExplosion.java -@@ -0,0 +1,202 @@ +@@ -0,0 +1,203 @@ +package me.samsuik.sakura.explosion.special; + +import ca.spottedleaf.moonrise.common.util.WorldUtil; @@ -99,6 +99,7 @@ index 0000000000000000000000000000000000000000..82a448a18415ff0e050d26aaa8fcfe84 + + if (!this.wasCanceled) { + this.applyEffects.accept(this); ++ this.getHitPlayers().clear(); + } + + return !explodedPositions.isEmpty(); @@ -437,7 +438,7 @@ index 0000000000000000000000000000000000000000..ebe5f0c8c2f09920b5f5ef734e63f5e7 + } +} diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java -index 1f278f6ef7e39df676334e7e5853dec4617f6baa..a9315006379f7ab5b40cb6aba7ed82727afe3a5a 100644 +index 3b1fbd1fc480682f6a6c620432e268c4e7d283b7..264b6be15e2f9ca147cf57aa5b659e14025c9b53 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java @@ -1890,7 +1890,16 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe @@ -472,7 +473,7 @@ index 1f278f6ef7e39df676334e7e5853dec4617f6baa..a9315006379f7ab5b40cb6aba7ed8272 ParticleOptions particleparam2 = serverexplosion.isSmall() ? particleparam : particleparam1; Iterator iterator = this.players.iterator(); -@@ -1912,7 +1928,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe +@@ -1923,7 +1939,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe } } @@ -508,7 +509,7 @@ index 6b739e820af6333c1ff3a4b87154d4c00c9a5559..0a9e62dd90c6aba4ff97391d69f9a92d // Sakura end - merge cannon entities diff --git a/src/main/java/net/minecraft/world/level/ServerExplosion.java b/src/main/java/net/minecraft/world/level/ServerExplosion.java -index b07c2eb8cc3cc54e8ab72c5ed3d6d7623416e7fb..9381a6810e709194dc50651cd2518942f1d91dec 100644 +index 37c32860af0efab2e272ee1ca6e67d6b9b885cbf..59e38ee6ac0699350a7021f1d074fdfee4a5ba41 100644 --- a/src/main/java/net/minecraft/world/level/ServerExplosion.java +++ b/src/main/java/net/minecraft/world/level/ServerExplosion.java @@ -52,9 +52,9 @@ public class ServerExplosion implements Explosion { @@ -588,7 +589,7 @@ index b07c2eb8cc3cc54e8ab72c5ed3d6d7623416e7fb..9381a6810e709194dc50651cd2518942 // Paper start - collision optimisations final ObjectArrayList ret = new ObjectArrayList<>(); -@@ -682,7 +714,7 @@ public class ServerExplosion implements Explosion { +@@ -685,7 +717,7 @@ public class ServerExplosion implements Explosion { } @@ -597,7 +598,7 @@ index b07c2eb8cc3cc54e8ab72c5ed3d6d7623416e7fb..9381a6810e709194dc50651cd2518942 List list1 = new ArrayList(); Util.shuffle(positions, this.level.random); -@@ -787,14 +819,7 @@ public class ServerExplosion implements Explosion { +@@ -790,14 +822,7 @@ public class ServerExplosion implements Explosion { return; } // CraftBukkit end @@ -613,7 +614,7 @@ index b07c2eb8cc3cc54e8ab72c5ed3d6d7623416e7fb..9381a6810e709194dc50651cd2518942 this.level.gameEvent(this.source, (Holder) GameEvent.EXPLODE, this.center); List list = this.calculateExplodedPositions(); -@@ -810,13 +835,7 @@ public class ServerExplosion implements Explosion { +@@ -813,13 +838,7 @@ public class ServerExplosion implements Explosion { if (this.fire) { this.createFire(list); } @@ -628,7 +629,7 @@ index b07c2eb8cc3cc54e8ab72c5ed3d6d7623416e7fb..9381a6810e709194dc50651cd2518942 } -@@ -837,7 +856,7 @@ public class ServerExplosion implements Explosion { +@@ -840,7 +859,7 @@ public class ServerExplosion implements Explosion { } @@ -637,7 +638,7 @@ index b07c2eb8cc3cc54e8ab72c5ed3d6d7623416e7fb..9381a6810e709194dc50651cd2518942 return this.blockInteraction != Explosion.BlockInteraction.KEEP; } -@@ -904,7 +923,7 @@ public class ServerExplosion implements Explosion { +@@ -907,7 +926,7 @@ public class ServerExplosion implements Explosion { } // Paper start - Optimize explosions diff --git a/patches/server/0029-Explosion-Durable-Blocks.patch b/patches/server/0029-Explosion-Durable-Blocks.patch index 0d54542..5efcc6a 100644 --- a/patches/server/0029-Explosion-Durable-Blocks.patch +++ b/patches/server/0029-Explosion-Durable-Blocks.patch @@ -103,7 +103,7 @@ index 2d5783a6ff7a9ce6dcb6f2895ff80928e62f0cd2..0ae2d83055252146e346b06cc8360eef protected Level(WritableLevelData worlddatamutable, ResourceKey resourcekey, RegistryAccess iregistrycustom, Holder holder, boolean flag, boolean flag1, long i, int j, org.bukkit.generator.ChunkGenerator gen, org.bukkit.generator.BiomeProvider biomeProvider, org.bukkit.World.Environment env, java.util.function.Function paperWorldConfigCreator, java.util.function.Supplier sakuraWorldConfigCreator, java.util.concurrent.Executor executor) { // Sakura - sakura configuration files // Paper - create paper world config & Anti-Xray // Paper start - getblock optimisations - cache world height/sections diff --git a/src/main/java/net/minecraft/world/level/ServerExplosion.java b/src/main/java/net/minecraft/world/level/ServerExplosion.java -index 11b12c1c4eff015bc40c7e7e965badb3f3fd272e..8268f8df624a73eaf0b8baad9aa16bab2ed0f0bc 100644 +index 59e38ee6ac0699350a7021f1d074fdfee4a5ba41..ccca5d7d51cd7e4a77d87293eb66c9732fce4381 100644 --- a/src/main/java/net/minecraft/world/level/ServerExplosion.java +++ b/src/main/java/net/minecraft/world/level/ServerExplosion.java @@ -134,7 +134,7 @@ public class ServerExplosion implements Explosion { @@ -136,7 +136,7 @@ index 11b12c1c4eff015bc40c7e7e965badb3f3fd272e..8268f8df624a73eaf0b8baad9aa16bab public ServerExplosion(ServerLevel world, @Nullable Entity entity, @Nullable DamageSource damageSource, @Nullable ExplosionDamageCalculator behavior, Vec3 pos, float power, boolean createFire, Explosion.BlockInteraction destructionType) { this.level = world; -@@ -780,6 +794,16 @@ public class ServerExplosion implements Explosion { +@@ -783,6 +797,16 @@ public class ServerExplosion implements Explosion { } } // CraftBukkit end diff --git a/patches/server/0037-Configure-cannon-physics-by-version.patch b/patches/server/0037-Configure-cannon-physics-by-version.patch index 162adfd..5b9a12e 100644 --- a/patches/server/0037-Configure-cannon-physics-by-version.patch +++ b/patches/server/0037-Configure-cannon-physics-by-version.patch @@ -67,10 +67,10 @@ index 149e461fcb23b2ed7ae8dcc09837de501ba9eafb..613d2d90571546a482ba493fae5cbc7c 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 82a448a18415ff0e050d26aaa8fcfe844631768f..449fa5518a1f9013dbd41dc4bfe3ff8a57b94a30 100644 +index ce04a5d9aaef3ca8ba8d7b988bdf0497285f90c1..c916d3037bd5920ec06213a9162223a124428d6b 100644 --- a/src/main/java/me/samsuik/sakura/explosion/special/SpecialisedExplosion.java +++ b/src/main/java/me/samsuik/sakura/explosion/special/SpecialisedExplosion.java -@@ -160,9 +160,15 @@ public abstract class SpecialisedExplosion extends ServerExplo +@@ -161,9 +161,15 @@ public abstract class SpecialisedExplosion extends ServerExplo if (distanceFromBottom <= 1.0) { double x = entity.getX() - pos.x; @@ -631,7 +631,7 @@ index 0ae2d83055252146e346b06cc8360eef56d39f5c..8c41282eafc1201bf1c0d001fb4fe791 public final me.samsuik.sakura.explosion.density.BlockDensityCache densityCache = new me.samsuik.sakura.explosion.density.BlockDensityCache(); // Sakura - explosion density cache public final me.samsuik.sakura.explosion.durable.DurableBlockManager durabilityManager = new me.samsuik.sakura.explosion.durable.DurableBlockManager(); // Sakura - explosion durable blocks diff --git a/src/main/java/net/minecraft/world/level/ServerExplosion.java b/src/main/java/net/minecraft/world/level/ServerExplosion.java -index 5f2657e3baa6a9be301d36a456dd8d1135d78857..145417fd4623b5bdf6daac8fd100d6b572651153 100644 +index 85c84333614a4e0739e39cb72d8e4015ed78e7b7..bdc3ff8cbe4e5eaa9d9a34f38fdd150f7368e33b 100644 --- a/src/main/java/net/minecraft/world/level/ServerExplosion.java +++ b/src/main/java/net/minecraft/world/level/ServerExplosion.java @@ -413,6 +413,7 @@ public class ServerExplosion implements Explosion { @@ -692,7 +692,7 @@ index 5f2657e3baa6a9be301d36a456dd8d1135d78857..145417fd4623b5bdf6daac8fd100d6b5 if (d4 != 0.0D) { d1 /= d4; -@@ -958,7 +978,7 @@ public class ServerExplosion implements Explosion { +@@ -961,7 +981,7 @@ public class ServerExplosion implements Explosion { // Sakura start - replace density cache float blockDensity = this.level.densityCache.getDensity(vec3d, entity); if (blockDensity == me.samsuik.sakura.explosion.density.BlockDensityCache.UNKNOWN_DENSITY) { @@ -701,7 +701,7 @@ index 5f2657e3baa6a9be301d36a456dd8d1135d78857..145417fd4623b5bdf6daac8fd100d6b5 this.level.densityCache.putDensity(vec3d, entity, blockDensity); // Sakura end - replace density cache } -@@ -966,6 +986,16 @@ public class ServerExplosion implements Explosion { +@@ -969,6 +989,16 @@ public class ServerExplosion implements Explosion { return blockDensity; } diff --git a/patches/server/0052-Add-explosions-dropping-items-config.patch b/patches/server/0052-Add-explosions-dropping-items-config.patch index 8ec127f..9f9f6f9 100644 --- a/patches/server/0052-Add-explosions-dropping-items-config.patch +++ b/patches/server/0052-Add-explosions-dropping-items-config.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add explosions dropping items config diff --git a/src/main/java/net/minecraft/world/level/ServerExplosion.java b/src/main/java/net/minecraft/world/level/ServerExplosion.java -index 0789f37ae89b22f9e3500b25cbe27ef853950b85..ace34cc86061bb4c9b080c6e9bf912b1fe3533a6 100644 +index e857fd02a5e341a1a701da71874dbd850e3c5a5d..0dae16d140666cae7633bbfef6d1c5b979d7dc9e 100644 --- a/src/main/java/net/minecraft/world/level/ServerExplosion.java +++ b/src/main/java/net/minecraft/world/level/ServerExplosion.java -@@ -842,6 +842,12 @@ public class ServerExplosion implements Explosion { +@@ -845,6 +845,12 @@ public class ServerExplosion implements Explosion { }); } diff --git a/patches/server/0072-Set-entity-impulse-on-explosion.patch b/patches/server/0072-Set-entity-impulse-on-explosion.patch index 23b0f4d..7251b51 100644 --- a/patches/server/0072-Set-entity-impulse-on-explosion.patch +++ b/patches/server/0072-Set-entity-impulse-on-explosion.patch @@ -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 -index 449fa5518a1f9013dbd41dc4bfe3ff8a57b94a30..e4f4ae1ce4703e93664e3c2b97a8cae1e62aaebd 100644 +index c916d3037bd5920ec06213a9162223a124428d6b..fd98f36ca2fd7e0b5961fd89aa976dbfc7df93b8 100644 --- a/src/main/java/me/samsuik/sakura/explosion/special/SpecialisedExplosion.java +++ b/src/main/java/me/samsuik/sakura/explosion/special/SpecialisedExplosion.java -@@ -203,6 +203,7 @@ public abstract class SpecialisedExplosion extends ServerExplo +@@ -204,6 +204,7 @@ public abstract class SpecialisedExplosion extends ServerExplo moveZ += z; } @@ -17,7 +17,7 @@ index 449fa5518a1f9013dbd41dc4bfe3ff8a57b94a30..e4f4ae1ce4703e93664e3c2b97a8cae1 } } diff --git a/src/main/java/net/minecraft/world/level/ServerExplosion.java b/src/main/java/net/minecraft/world/level/ServerExplosion.java -index a82922cd0e648aa1154638a7ff5c616d37475f9c..4109a781b2882e24a20ec5a5ca87040ad0d99bc3 100644 +index a9a63fa9d2c45298ebd4146e0dfeea54b6431797..f4ab7d377171bf5b9ead7ffd0e6151884bcd2968 100644 --- a/src/main/java/net/minecraft/world/level/ServerExplosion.java +++ b/src/main/java/net/minecraft/world/level/ServerExplosion.java @@ -748,6 +748,7 @@ public class ServerExplosion implements Explosion {