diff --git a/gradle.properties b/gradle.properties index bad17d4..c2e2428 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,7 +2,7 @@ group=me.samsuik.sakura version=1.20.6-R0.1-SNAPSHOT mcVersion=1.20.6 -paperRef=9d6f2cced75c1a433c508ab531a61872bce73854 +paperRef=bd5867a96f792f0eb32c1d249bb4bbc1d8338d14 org.gradle.jvmargs=-Xmx2G diff --git a/patches/server/0005-Visibility-API-and-Command.patch b/patches/server/0005-Visibility-API-and-Command.patch index f0b128d..22ddf63 100644 --- a/patches/server/0005-Visibility-API-and-Command.patch +++ b/patches/server/0005-Visibility-API-and-Command.patch @@ -469,10 +469,10 @@ index 308aef9c4933b2bcdd622a34b68efab4a220fe4d..2aee1167e7c4f47f3fe82d135904beac throw new ReportedException(crashreport); } diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index c450447585af4c8cdc87abe871c229ff895c3e53..c9c08726e5c899f4cce696b9b5a58e43abccc729 100644 +index 4ae88bfcead40cd05f9514a48a922a37767cb3cf..e675c47bf6630ccb843120902a10b9dc3952f5c7 100644 --- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -@@ -3181,6 +3181,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -3174,6 +3174,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl event.setCancelled(cancelled); AbstractContainerMenu oldContainer = this.player.containerMenu; // SPIGOT-1224 @@ -481,7 +481,7 @@ index c450447585af4c8cdc87abe871c229ff895c3e53..c9c08726e5c899f4cce696b9b5a58e43 if (this.player.containerMenu != oldContainer) { return; diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 4ee843dfd826772c9157ca421d8fe1f36f814b51..ceccde57cb346810e0837157624c0ab6d4322252 100644 +index 7ef9f67d27cc240191dd5d07e8dcf5fbdebe1049..c33e325d7eb4584986de338f966a79e868ef300e 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java @@ -568,6 +568,10 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess diff --git a/patches/server/0007-Reduce-deltaMovement-Allocations.patch b/patches/server/0007-Reduce-deltaMovement-Allocations.patch index 1ce8b10..dd99e7d 100644 --- a/patches/server/0007-Reduce-deltaMovement-Allocations.patch +++ b/patches/server/0007-Reduce-deltaMovement-Allocations.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Reduce deltaMovement Allocations diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index ceccde57cb346810e0837157624c0ab6d4322252..a2104fae2b288f4cbd9e810d73bf986be0b7b969 100644 +index c33e325d7eb4584986de338f966a79e868ef300e..29e609be885944dbb4868e34e7eb83b8a136619c 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java @@ -1294,7 +1294,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess @@ -205,34 +205,31 @@ index dace8dc0c051ce9355d878154466ee3a548a3832..fda88328472130df8317a84fc726a73c int i = this.getFuse() - 1; diff --git a/src/main/java/net/minecraft/world/level/Explosion.java b/src/main/java/net/minecraft/world/level/Explosion.java -index b9f98803bc05f6adf2c026ae91f2bd5e86734052..4a96a506a90d171f374c4ba7fb15054b23f3acb8 100644 +index 37896ccb5eea0ec4e301ca97092c8ccef3aa1da5..6565709b2c8467db919c04faf4a854ccc3f00973 100644 --- a/src/main/java/net/minecraft/world/level/Explosion.java +++ b/src/main/java/net/minecraft/world/level/Explosion.java -@@ -618,10 +618,11 @@ public class Explosion { +@@ -618,7 +618,7 @@ public class Explosion { d8 *= d13; d9 *= d13; d10 *= d13; - Vec3 vec3d1 = new Vec3(d8, d9, d10); -+ Vec3 vec3d1 = null; // Sakura - move allocation below living entity condition ++ Vec3 vec3d1 = null; // Sakura - move allocation into living entity condition // CraftBukkit start - Call EntityKnockbackEvent if (entity instanceof LivingEntity) { -+ vec3d1 = new Vec3(d8, d9, d10); // Sakura - reduce deltaMovement allocations - Vec3 result = entity.getDeltaMovement().add(vec3d1); - org.bukkit.event.entity.EntityKnockbackEvent event = CraftEventFactory.callEntityKnockbackEvent((org.bukkit.craftbukkit.entity.CraftLivingEntity) entity.getBukkitEntity(), this.source, org.bukkit.event.entity.EntityKnockbackEvent.KnockbackCause.EXPLOSION, d13, vec3d1, result.x, result.y, result.z); - -@@ -639,9 +640,13 @@ public class Explosion { - vec3d1 = org.bukkit.craftbukkit.util.CraftVector.toNMS(paperEvent.getAcceleration()); - } - // Paper end - call EntityKnockbackByEntityEvent for explosions +@@ -626,9 +626,14 @@ public class Explosion { + io.papermc.paper.event.entity.EntityKnockbackEvent event = CraftEventFactory.callEntityKnockbackEvent((org.bukkit.craftbukkit.entity.CraftLivingEntity) entity.getBukkitEntity(), this.damageSource.getEntity() != null ? this.damageSource.getEntity() : this.source, io.papermc.paper.event.entity.EntityKnockbackEvent.Cause.EXPLOSION, d13, vec3d1); + vec3d1 = event.isCancelled() ? Vec3.ZERO : org.bukkit.craftbukkit.util.CraftVector.toNMS(event.getKnockback()); + // Paper end - knockback events + // Sakura start - reduce deltaMovement allocations -+ entity.setDeltaMovement(entity.getDeltaMovement().add(vec3d1)); ++ entity.addDeltaMovement(vec3d1.x(), vec3d1.y(), vec3d1.z()); + } else { + entity.addDeltaMovement(d8, d9, d10); + // Sakura end - reduce deltaMovement allocations } // CraftBukkit end - entity.setDeltaMovement(entity.getDeltaMovement().add(vec3d1)); ++ // Sakura - moved up if (entity instanceof Player) { Player entityhuman = (Player) entity; diff --git a/patches/server/0016-Optimise-paper-explosions.patch b/patches/server/0016-Optimise-paper-explosions.patch index 39eb000..29a0ee2 100644 --- a/patches/server/0016-Optimise-paper-explosions.patch +++ b/patches/server/0016-Optimise-paper-explosions.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Optimise paper explosions diff --git a/src/main/java/net/minecraft/world/level/Explosion.java b/src/main/java/net/minecraft/world/level/Explosion.java -index 482609cb5395e626f7fc5890a6db3570c6a07166..0a9683c2005ab85708bfb6bbb051f68bed133918 100644 +index 6565709b2c8467db919c04faf4a854ccc3f00973..63a3da501f054308fbcd20fd02808315a4d5faa3 100644 --- a/src/main/java/net/minecraft/world/level/Explosion.java +++ b/src/main/java/net/minecraft/world/level/Explosion.java @@ -112,6 +112,41 @@ public class Explosion { @@ -191,16 +191,7 @@ index 482609cb5395e626f7fc5890a6db3570c6a07166..0a9683c2005ab85708bfb6bbb051f68b } // CraftBukkit end } -@@ -635,7 +724,7 @@ public class Explosion { - final org.bukkit.entity.Entity hitBy = this.damageSource.getEntity() != null ? this.damageSource.getEntity().getBukkitEntity() : this.source.getBukkitEntity(); - com.destroystokyo.paper.event.entity.EntityKnockbackByEntityEvent paperEvent = new com.destroystokyo.paper.event.entity.EntityKnockbackByEntityEvent(((LivingEntity) entity).getBukkitLivingEntity(), hitBy, (float) event.getForce(), org.bukkit.craftbukkit.util.CraftVector.toBukkit(vec3d1)); - if (!paperEvent.callEvent()) { -- continue; -+ return; // Sakura - optimise paper explosions - } - vec3d1 = org.bukkit.craftbukkit.util.CraftVector.toNMS(paperEvent.getAcceleration()); - } -@@ -659,8 +748,12 @@ public class Explosion { +@@ -646,8 +735,12 @@ public class Explosion { } } } diff --git a/patches/server/0019-Replace-explosion-density-cache.patch b/patches/server/0019-Replace-explosion-density-cache.patch index abf554c..243044e 100644 --- a/patches/server/0019-Replace-explosion-density-cache.patch +++ b/patches/server/0019-Replace-explosion-density-cache.patch @@ -141,7 +141,7 @@ index 054783956aa6179f9f0813393b7a9afa41a6d54a..6cf33610cb6740ad3192d0180cccf17b this.isIteratingOverLevels = false; // Paper - Throw exception on world create while being ticked diff --git a/src/main/java/net/minecraft/world/level/Explosion.java b/src/main/java/net/minecraft/world/level/Explosion.java -index bdf946277fc07523d31ef8388181e278fd3a786c..627a319faf6d5272fea40cea27f02c09c937f868 100644 +index 63a3da501f054308fbcd20fd02808315a4d5faa3..b56ca710b1f2568d71e5dd8dbd6093c945fa4bee 100644 --- a/src/main/java/net/minecraft/world/level/Explosion.java +++ b/src/main/java/net/minecraft/world/level/Explosion.java @@ -401,7 +401,12 @@ public class Explosion { @@ -176,7 +176,7 @@ index bdf946277fc07523d31ef8388181e278fd3a786c..627a319faf6d5272fea40cea27f02c09 ++i; } -@@ -849,6 +863,11 @@ public class Explosion { +@@ -836,6 +850,11 @@ public class Explosion { }); } @@ -188,7 +188,7 @@ index bdf946277fc07523d31ef8388181e278fd3a786c..627a319faf6d5272fea40cea27f02c09 Iterator iterator = list.iterator(); while (iterator.hasNext()) { -@@ -973,14 +992,12 @@ public class Explosion { +@@ -960,14 +979,12 @@ public class Explosion { } // Paper start - Optimize explosions private float getBlockDensity(Vec3 vec3d, Entity entity, ExplosionBlockCache[] blockCache, BlockPos.MutableBlockPos blockPos) { // Paper - optimise explosions diff --git a/patches/server/0021-Specialised-Explosions.patch b/patches/server/0021-Specialised-Explosions.patch index c5f0e81..801eac9 100644 --- a/patches/server/0021-Specialised-Explosions.patch +++ b/patches/server/0021-Specialised-Explosions.patch @@ -481,7 +481,7 @@ index dc9d72bc033735dd83d7b0f3fe79d0a51b9661ab..6cfa54da058939003576025cb0512e0b @Override diff --git a/src/main/java/net/minecraft/world/level/Explosion.java b/src/main/java/net/minecraft/world/level/Explosion.java -index d74a44ce3705d72cd7168ed4e9630ed580d5a967..ba2588188e15806052d52dca62547c8a6d3a2152 100644 +index 45a45062c8ddc19908fce3106d99adb421977b12..b63cf98e58386c141ae869fe8f8386206608eb12 100644 --- a/src/main/java/net/minecraft/world/level/Explosion.java +++ b/src/main/java/net/minecraft/world/level/Explosion.java @@ -56,9 +56,11 @@ public class Explosion { @@ -564,7 +564,7 @@ index d74a44ce3705d72cd7168ed4e9630ed580d5a967..ba2588188e15806052d52dca62547c8a // use initial cache value that is most likely to be used: the source position final ExplosionBlockCache initialCache; { -@@ -1006,7 +1023,7 @@ public class Explosion { +@@ -993,7 +1010,7 @@ public class Explosion { private BlockInteraction() {} } // Paper start - Optimize explosions diff --git a/patches/server/0028-Optimise-LivingEntity-pushEntities.patch b/patches/server/0028-Optimise-LivingEntity-pushEntities.patch index b27087b..c5e8afb 100644 --- a/patches/server/0028-Optimise-LivingEntity-pushEntities.patch +++ b/patches/server/0028-Optimise-LivingEntity-pushEntities.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Optimise LivingEntity#pushEntities diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index 6e043457a29a890bcefd27fc5bb07c1a7e4e30f7..361b6fd6cae71a5c079c9dd9d8224f10c30cbf80 100644 +index ce01fe82dc1eaaf06ca317ddbc62b7d1b87a48b2..ba612c35d74be6b31495c17dbb8cf13ef28b526b 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java -@@ -3570,7 +3570,11 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -3560,7 +3560,11 @@ public abstract class LivingEntity extends Entity implements Attackable { return; } // Paper end - don't run getEntities if we're not going to use its result diff --git a/patches/server/0030-Configure-Entity-Knockback.patch b/patches/server/0030-Configure-Entity-Knockback.patch index 2997ca7..ad1926c 100644 --- a/patches/server/0030-Configure-Entity-Knockback.patch +++ b/patches/server/0030-Configure-Entity-Knockback.patch @@ -5,15 +5,15 @@ Subject: [PATCH] Configure Entity Knockback diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index 52302b84fe4ea59fbc7f485401fe932c19f7ebfa..1486f0a6afe2c862aa2792ca3cb0773ebdeee98d 100644 +index ba612c35d74be6b31495c17dbb8cf13ef28b526b..be9484d75e5c42ce784f7654e2db7b8848e124f6 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java @@ -1568,7 +1568,7 @@ public abstract class LivingEntity extends Entity implements Attackable { d0 = (Math.random() - Math.random()) * 0.01D; } -- this.knockback(0.4000000059604645D, d0, d1, entity1, entity1 == null ? EntityKnockbackEvent.KnockbackCause.DAMAGE : EntityKnockbackEvent.KnockbackCause.ENTITY_ATTACK); // CraftBukkit -+ this.knockback((float) level().sakuraConfig().players.knockback.baseKnockback, d0, d1, entity1, entity1 == null ? EntityKnockbackEvent.KnockbackCause.DAMAGE : EntityKnockbackEvent.KnockbackCause.ENTITY_ATTACK); // Sakura - configure entity knockback // CraftBukkit +- this.knockback(0.4000000059604645D, d0, d1, entity1, entity1 == null ? io.papermc.paper.event.entity.EntityKnockbackEvent.Cause.DAMAGE : io.papermc.paper.event.entity.EntityKnockbackEvent.Cause.ENTITY_ATTACK); // CraftBukkit // Paper - knockback events ++ this.knockback((float) this.level().sakuraConfig().players.knockback.baseKnockback, d0, d1, entity1, entity1 == null ? io.papermc.paper.event.entity.EntityKnockbackEvent.Cause.DAMAGE : io.papermc.paper.event.entity.EntityKnockbackEvent.Cause.ENTITY_ATTACK); // CraftBukkit // Paper - knockback events // Sakura - configure entity knockback if (!flag) { this.indicateDamage(d0, d1); } @@ -21,42 +21,42 @@ index 52302b84fe4ea59fbc7f485401fe932c19f7ebfa..1486f0a6afe2c862aa2792ca3cb0773e } protected void blockedByShield(LivingEntity target) { -- target.knockback(0.5D, target.getX() - this.getX(), target.getZ() - this.getZ(), this, EntityKnockbackEvent.KnockbackCause.SHIELD_BLOCK); // CraftBukkit // Paper - fix attacker -+ target.knockback((float) level().sakuraConfig().players.knockback.shieldHitKnockback, target.getX() - this.getX(), target.getZ() - this.getZ(), this, EntityKnockbackEvent.KnockbackCause.SHIELD_BLOCK); // Sakura - configure entity knockback // CraftBukkit // Paper - fix attacker +- target.knockback(0.5D, target.getX() - this.getX(), target.getZ() - this.getZ(), this, io.papermc.paper.event.entity.EntityKnockbackEvent.Cause.SHIELD_BLOCK); // CraftBukkit // Paper - fix attacker & knockback events ++ target.knockback((float) this.level().sakuraConfig().players.knockback.shieldHitKnockback, target.getX() - this.getX(), target.getZ() - this.getZ(), this, io.papermc.paper.event.entity.EntityKnockbackEvent.Cause.SHIELD_BLOCK); // CraftBukkit // Paper - fix attacker & knockback events // Sakura - configure entity knockback } private boolean checkTotemDeathProtection(DamageSource source) { -@@ -1940,13 +1940,26 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -1940,14 +1940,26 @@ public abstract class LivingEntity extends Entity implements Attackable { } - public void knockback(double d0, double d1, double d2, @Nullable Entity attacker, EntityKnockbackEvent.KnockbackCause cause) { // Paper - add nullable to attacker param + public void knockback(double d0, double d1, double d2, @Nullable Entity attacker, io.papermc.paper.event.entity.EntityKnockbackEvent.Cause cause) { // Paper - knockback events - d0 *= 1.0D - this.getAttributeValue(Attributes.KNOCKBACK_RESISTANCE); -+ d0 *= 1.0D - this.getAttributeValue(Attributes.KNOCKBACK_RESISTANCE) * level().sakuraConfig().players.knockback.knockbackResistanceModifier; // Sakura - configure entity knockback ++ d0 *= 1.0D - this.getAttributeValue(Attributes.KNOCKBACK_RESISTANCE) * this.level().sakuraConfig().players.knockback.knockbackResistanceModifier; // Sakura - configure entity knockback if (true || d0 > 0.0D) { // CraftBukkit - Call event even when force is 0 //this.hasImpulse = true; // CraftBukkit - Move down Vec3 vec3d = this.getDeltaMovement(); Vec3 vec3d1 = (new Vec3(d1, 0.0D, d2)).normalize().scale(d0); - -- EntityKnockbackEvent event = CraftEventFactory.callEntityKnockbackEvent((org.bukkit.craftbukkit.entity.CraftLivingEntity) this.getBukkitEntity(), attacker, cause, d0, vec3d1, vec3d.x / 2.0D - vec3d1.x, this.onGround() ? Math.min(0.4D, vec3d.y / 2.0D + d0) : vec3d.y, vec3d.z / 2.0D - vec3d1.z); + // Sakura start - configure entity knockback + double velocityX = vec3d.x / 2.0D - vec3d1.x; -+ double velocityY = vec3d.y / 2.0D + level().sakuraConfig().players.knockback.knockbackVertical.or(d0); ++ double velocityY = vec3d.y / 2.0D + this.level().sakuraConfig().players.knockback.knockbackVertical.or(d0); + double velocityZ = vec3d.z / 2.0D - vec3d1.z; + + // this.onGround() ? Math.min(0.4D, vec3d.y / 2.0D + d0) : vec3d.y -+ if (!level().sakuraConfig().players.knockback.verticalKnockbackRequireGround || this.onGround()) { -+ velocityY = Math.min(level().sakuraConfig().players.knockback.knockbackVerticalLimit, velocityY); ++ if (!this.level().sakuraConfig().players.knockback.verticalKnockbackRequireGround || this.onGround()) { ++ velocityY = Math.min(this.level().sakuraConfig().players.knockback.knockbackVerticalLimit, velocityY); + } else { + velocityY = vec3d.y; + } -+ -+ EntityKnockbackEvent event = CraftEventFactory.callEntityKnockbackEvent((org.bukkit.craftbukkit.entity.CraftLivingEntity) this.getBukkitEntity(), attacker, cause, d0, vec3d1, velocityX, velocityY, velocityZ); + // Sakura end - configure entity knockback - if (event.isCancelled()) { - return; - } + + // Paper start - knockback events +- Vec3 finalVelocity = new Vec3(vec3d.x / 2.0D - vec3d1.x, this.onGround() ? Math.min(0.4D, vec3d.y / 2.0D + d0) : vec3d.y, vec3d.z / 2.0D - vec3d1.z); ++ Vec3 finalVelocity = new Vec3(velocityX, velocityY, velocityZ); // Sakura - configure entity knockback + Vec3 diff = finalVelocity.subtract(vec3d); + io.papermc.paper.event.entity.EntityKnockbackEvent event = CraftEventFactory.callEntityKnockbackEvent((org.bukkit.craftbukkit.entity.CraftLivingEntity) this.getBukkitEntity(), attacker, cause, d0, diff); + // Paper end - knockback events diff --git a/src/main/java/net/minecraft/world/entity/player/Player.java b/src/main/java/net/minecraft/world/entity/player/Player.java -index 74130ccef989757b81507f084cc30a0e593ecaf3..898c3e44f36462acab9068c9665d08a345ee1b81 100644 +index c34de2a7303746ae236b7e81d87e7af42242baa7..3e0958f7b71fd7693d8f10d9b52144c32a039a0b 100644 --- a/src/main/java/net/minecraft/world/entity/player/Player.java +++ b/src/main/java/net/minecraft/world/entity/player/Player.java @@ -195,6 +195,7 @@ public abstract class Player extends LivingEntity { @@ -81,7 +81,7 @@ index 74130ccef989757b81507f084cc30a0e593ecaf3..898c3e44f36462acab9068c9665d08a3 if (flag5) { if (i > 0) { - if (target instanceof LivingEntity) { -- ((LivingEntity) target).knockback((double) ((float) i * 0.5F), (double) Mth.sin(this.getYRot() * 0.017453292F), (double) (-Mth.cos(this.getYRot() * 0.017453292F)), this, EntityKnockbackEvent.KnockbackCause.ENTITY_ATTACK); // CraftBukkit +- ((LivingEntity) target).knockback((double) ((float) i * 0.5F), (double) Mth.sin(this.getYRot() * 0.017453292F), (double) (-Mth.cos(this.getYRot() * 0.017453292F)), this, io.papermc.paper.event.entity.EntityKnockbackEvent.Cause.ENTITY_ATTACK); // CraftBukkit // Paper - knockback events + // Sakura start - configure extra sprinting knockback + float extraKnockback = (float) i * 0.5F; + long millis = System.currentTimeMillis(); @@ -98,7 +98,7 @@ index 74130ccef989757b81507f084cc30a0e593ecaf3..898c3e44f36462acab9068c9665d08a3 + if (extraKnockback == 0.0) { + // required + } else if (target instanceof LivingEntity) { -+ ((LivingEntity) target).knockback((double) (extraKnockback), (double) Mth.sin(this.getYRot() * 0.017453292F), (double) (-Mth.cos(this.getYRot() * 0.017453292F)), this, EntityKnockbackEvent.KnockbackCause.ENTITY_ATTACK); // CraftBukkit ++ ((LivingEntity) target).knockback((double) (extraKnockback), (double) Mth.sin(this.getYRot() * 0.017453292F), (double) (-Mth.cos(this.getYRot() * 0.017453292F)), this, io.papermc.paper.event.entity.EntityKnockbackEvent.Cause.ENTITY_ATTACK); // CraftBukkit // Paper - knockback events } else { - target.push((double) (-Mth.sin(this.getYRot() * 0.017453292F) * (float) i * 0.5F), 0.1D, (double) (Mth.cos(this.getYRot() * 0.017453292F) * (float) i * 0.5F), this); // Paper - Add EntityKnockbackByEntityEvent and EntityPushedByEntityAttackEvent + target.push((double) (-Mth.sin(this.getYRot() * 0.017453292F) * extraKnockback), 0.1D, (double) (Mth.cos(this.getYRot() * 0.017453292F) * extraKnockback), this); // Paper - Add EntityKnockbackByEntityEvent and EntityPushedByEntityAttackEvent @@ -110,13 +110,13 @@ index 74130ccef989757b81507f084cc30a0e593ecaf3..898c3e44f36462acab9068c9665d08a3 if (entityliving != this && entityliving != target && !this.isAlliedTo((Entity) entityliving) && (!(entityliving instanceof ArmorStand) || !((ArmorStand) entityliving).isMarker()) && this.distanceToSqr((Entity) entityliving) < 9.0D) { // CraftBukkit start - Only apply knockback if the damage hits if (entityliving.hurt(this.damageSources().playerAttack(this).sweep().critical(flag2), f4)) { // Paper - add critical damage API -- entityliving.knockback(0.4000000059604645D, (double) Mth.sin(this.getYRot() * 0.017453292F), (double) (-Mth.cos(this.getYRot() * 0.017453292F)), this, EntityKnockbackEvent.KnockbackCause.SWEEP_ATTACK); // CraftBukkit -+ entityliving.knockback((float) this.level().sakuraConfig().players.knockback.sweepingEdgeKnockback, (double) Mth.sin(this.getYRot() * 0.017453292F), (double) (-Mth.cos(this.getYRot() * 0.017453292F)), this, EntityKnockbackEvent.KnockbackCause.SWEEP_ATTACK); // Sakura - configure entity knockback // CraftBukkit +- entityliving.knockback(0.4000000059604645D, (double) Mth.sin(this.getYRot() * 0.017453292F), (double) (-Mth.cos(this.getYRot() * 0.017453292F)), this, io.papermc.paper.event.entity.EntityKnockbackEvent.Cause.SWEEP_ATTACK); // CraftBukkit // Paper - knockback events ++ entityliving.knockback((float) this.level().sakuraConfig().players.knockback.sweepingEdgeKnockback, (double) Mth.sin(this.getYRot() * 0.017453292F), (double) (-Mth.cos(this.getYRot() * 0.017453292F)), this, io.papermc.paper.event.entity.EntityKnockbackEvent.Cause.SWEEP_ATTACK); // CraftBukkit // Paper - knockback events // Sakura - configure entity knockback } // CraftBukkit end } diff --git a/src/main/java/net/minecraft/world/entity/projectile/FishingHook.java b/src/main/java/net/minecraft/world/entity/projectile/FishingHook.java -index 882de08963c72614a3d26cd917916e42b7136042..a58dea66af79b15d78407e4b4b19dfcece011ba6 100644 +index 7dd5e0b935d98d552c916f8412569ff4aa0e9b04..d9deb1b47b2430936d74e782cfc4a6ac32a16c91 100644 --- a/src/main/java/net/minecraft/world/entity/projectile/FishingHook.java +++ b/src/main/java/net/minecraft/world/entity/projectile/FishingHook.java @@ -298,6 +298,12 @@ public class FishingHook extends Projectile { diff --git a/patches/server/0031-Explosion-Durable-Blocks.patch b/patches/server/0031-Explosion-Durable-Blocks.patch index 5cc936a..aaf4ca4 100644 --- a/patches/server/0031-Explosion-Durable-Blocks.patch +++ b/patches/server/0031-Explosion-Durable-Blocks.patch @@ -124,7 +124,7 @@ index a8008c7550488be34b51f4280f5569170b1ebd1d..2e5a46b9d27b930870c68dbde93d8731 public String getDescriptionId() { return this.getOrCreateDescriptionId(); diff --git a/src/main/java/net/minecraft/world/level/Explosion.java b/src/main/java/net/minecraft/world/level/Explosion.java -index ba2588188e15806052d52dca62547c8a6d3a2152..473573e37ac5ecff2655126a08011aff66997019 100644 +index b63cf98e58386c141ae869fe8f8386206608eb12..456d688490c9f05c2153241bd4336f5266c2e30a 100644 --- a/src/main/java/net/minecraft/world/level/Explosion.java +++ b/src/main/java/net/minecraft/world/level/Explosion.java @@ -262,7 +262,7 @@ public class Explosion { @@ -158,7 +158,7 @@ index ba2588188e15806052d52dca62547c8a6d3a2152..473573e37ac5ecff2655126a08011aff private boolean clipsAnything(final Vec3 from, final Vec3 to, final io.papermc.paper.util.CollisionUtil.LazyEntityCollisionContext context, final ExplosionBlockCache[] blockCache, -@@ -880,6 +895,16 @@ public class Explosion { +@@ -867,6 +882,16 @@ public class Explosion { // CraftBukkit start - TNTPrimeEvent BlockState iblockdata = this.level.getBlockState(blockposition); Block block = iblockdata.getBlock(); diff --git a/patches/server/0040-Option-to-configure-entity-water-sensitivity.patch b/patches/server/0040-Option-to-configure-entity-water-sensitivity.patch index 4c6d7fd..53fd487 100644 --- a/patches/server/0040-Option-to-configure-entity-water-sensitivity.patch +++ b/patches/server/0040-Option-to-configure-entity-water-sensitivity.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Option to configure entity water sensitivity diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index 1766a599850a674a00ba26afe231c0982a6cb653..1b11b7196517018c1fb4d9b77704a86feb3440b5 100644 +index be9484d75e5c42ce784f7654e2db7b8848e124f6..cd38d1a5ac545aa3ef33f6cb54301d6f9a301bc3 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java -@@ -3520,7 +3520,7 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -3509,7 +3509,7 @@ public abstract class LivingEntity extends Entity implements Attackable { } } // Paper end - Add EntityMoveEvent diff --git a/patches/server/0041-Configure-cannon-physics-by-version.patch b/patches/server/0041-Configure-cannon-physics-by-version.patch index dccbaa5..2cd19ab 100644 --- a/patches/server/0041-Configure-cannon-physics-by-version.patch +++ b/patches/server/0041-Configure-cannon-physics-by-version.patch @@ -107,7 +107,7 @@ index 13d87b08b1e12f7b5a6f59f545a4620cacae22ba..4ad106f15b73ce0657a34a17a3341bf3 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 e8b850b0608e8d876f0f3415880e4f90ca3b9d85..8c508df03a80d7f8fbb1bc50067f84090457511f 100644 +index 50ae421b40681366523932a2cd445592ec067897..df083dd2f9af19c768b23727852194e68a53fd7d 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 @@ -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 a0b818a52a54fca9eb433d361149e3ab1ce5835b..a636dd7776c378b450ed0fab91e748f423671a9b 100644 +index c224602754222bba4d4681fb709aeab33d7857e7..87343afd9fc0d57be6af1dc11d667be688fb3960 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 { @@ -546,7 +546,7 @@ index a0b818a52a54fca9eb433d361149e3ab1ce5835b..a636dd7776c378b450ed0fab91e748f4 if (d11 != 0.0D) { d8 /= d11; -@@ -1058,7 +1078,7 @@ public class Explosion { +@@ -1045,7 +1065,7 @@ public class Explosion { // Sakura start - replace density cache float blockDensity = this.level.densityCache.getDensity(vec3d, entity); if (blockDensity == me.samsuik.sakura.explosion.density.BlockDensityCache.UNKNOWN_DENSITY) { @@ -555,7 +555,7 @@ index a0b818a52a54fca9eb433d361149e3ab1ce5835b..a636dd7776c378b450ed0fab91e748f4 this.level.densityCache.putDensity(vec3d, entity, blockDensity); // Sakura end - replace density cache } -@@ -1066,6 +1086,17 @@ public class Explosion { +@@ -1053,6 +1073,17 @@ public class Explosion { return blockDensity; } diff --git a/patches/server/0057-Add-explosions-dropping-items-config.patch b/patches/server/0057-Add-explosions-dropping-items-config.patch index a62a863..7b34e5c 100644 --- a/patches/server/0057-Add-explosions-dropping-items-config.patch +++ b/patches/server/0057-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/Explosion.java b/src/main/java/net/minecraft/world/level/Explosion.java -index fd53dff917b65b94eceb5796fc80b1a490454cc2..a5ea2a84098e5cef7c82bfb437b6e630727a25c4 100644 +index 2db4da910c67c2ebe8dde88faf775138df1510b9..fe1613301795c46e92494eaa61d0c5ea51a8289e 100644 --- a/src/main/java/net/minecraft/world/level/Explosion.java +++ b/src/main/java/net/minecraft/world/level/Explosion.java -@@ -951,6 +951,11 @@ public class Explosion { +@@ -938,6 +938,11 @@ public class Explosion { this.level.densityCache.clear(-1); } // Sakura end - explosion density cache diff --git a/patches/server/0070-Legacy-player-combat-mechanics.patch b/patches/server/0070-Legacy-player-combat-mechanics.patch index a20b514..a203417 100644 --- a/patches/server/0070-Legacy-player-combat-mechanics.patch +++ b/patches/server/0070-Legacy-player-combat-mechanics.patch @@ -50,7 +50,7 @@ index 0000000000000000000000000000000000000000..b1c55ef758f61914e6df9b2c8096bce6 + } +} diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index 629d1190a6becabaa46210dfcb2eb45673847e6f..82f430eb1f2b43ccf7f621e119d58190964c1806 100644 +index 911a72456f90d9ba49fb10443a2c59d35f292d72..ed1cd8624df04419031bb55c03d31d8c002dfbc7 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java @@ -287,6 +287,72 @@ public abstract class LivingEntity extends Entity implements Attackable { @@ -126,7 +126,7 @@ index 629d1190a6becabaa46210dfcb2eb45673847e6f..82f430eb1f2b43ccf7f621e119d58190 protected LivingEntity(EntityType type, Level world) { super(type, world); -@@ -2198,7 +2264,16 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -2187,7 +2253,16 @@ public abstract class LivingEntity extends Entity implements Attackable { protected float getDamageAfterArmorAbsorb(DamageSource source, float amount) { if (!source.is(DamageTypeTags.BYPASSES_ARMOR)) { // this.hurtArmor(damagesource, f); // CraftBukkit - Moved into actuallyHurt(DamageSource, float) @@ -143,7 +143,7 @@ index 629d1190a6becabaa46210dfcb2eb45673847e6f..82f430eb1f2b43ccf7f621e119d58190 } return amount; -@@ -3294,6 +3369,12 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -3283,6 +3358,12 @@ public abstract class LivingEntity extends Entity implements Attackable { }); } @@ -157,7 +157,7 @@ index 629d1190a6becabaa46210dfcb2eb45673847e6f..82f430eb1f2b43ccf7f621e119d58190 } diff --git a/src/main/java/net/minecraft/world/entity/player/Player.java b/src/main/java/net/minecraft/world/entity/player/Player.java -index 70e3c8b1082d16cdbb9a4c179c53dafcc59ac1ed..951fa13dfe333e1e4aa467897d45bbe56d67f6b0 100644 +index 4e8a41dc9e27244b19e1d45b58ad8363801c5b72..fcc2523e330f1d275f320006374406969cd817fa 100644 --- a/src/main/java/net/minecraft/world/entity/player/Player.java +++ b/src/main/java/net/minecraft/world/entity/player/Player.java @@ -1267,12 +1267,18 @@ public abstract class Player extends LivingEntity { diff --git a/patches/server/0072-Change-shields-to-reduce-damage.patch b/patches/server/0072-Change-shields-to-reduce-damage.patch index 4543f28..239122b 100644 --- a/patches/server/0072-Change-shields-to-reduce-damage.patch +++ b/patches/server/0072-Change-shields-to-reduce-damage.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Change shields to reduce damage diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index 82f430eb1f2b43ccf7f621e119d58190964c1806..a41e63a7672ae526062a86f03ddda82bee4e1fdb 100644 +index ed1cd8624df04419031bb55c03d31d8c002dfbc7..c9f23149df9bb0a2a73abb6e16ff9673562d60eb 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java -@@ -2340,7 +2340,13 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -2329,7 +2329,13 @@ public abstract class LivingEntity extends Entity implements Attackable { Function blocking = new Function() { @Override public Double apply(Double f) { diff --git a/patches/server/0073-Old-enchanted-golden-apples.patch b/patches/server/0073-Old-enchanted-golden-apples.patch index 15afbff..5011ad8 100644 --- a/patches/server/0073-Old-enchanted-golden-apples.patch +++ b/patches/server/0073-Old-enchanted-golden-apples.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Old enchanted golden apples diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index a41e63a7672ae526062a86f03ddda82bee4e1fdb..78fb078bad84a984624ee17d0b060fd9d3cfb146 100644 +index c9f23149df9bb0a2a73abb6e16ff9673562d60eb..f917b484f73ed44a6ad7be6aa049e18a13520594 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java -@@ -4498,6 +4498,11 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -4487,6 +4487,11 @@ public abstract class LivingEntity extends Entity implements Attackable { public ItemStack eat(Level world, ItemStack stack) { FoodProperties foodinfo = (FoodProperties) stack.get(DataComponents.FOOD); diff --git a/patches/server/0075-Add-option-for-fishing-hooks-pulling-entities.patch b/patches/server/0075-Add-option-for-fishing-hooks-pulling-entities.patch index c128738..50d58d5 100644 --- a/patches/server/0075-Add-option-for-fishing-hooks-pulling-entities.patch +++ b/patches/server/0075-Add-option-for-fishing-hooks-pulling-entities.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add option for fishing hooks pulling entities diff --git a/src/main/java/net/minecraft/world/entity/projectile/FishingHook.java b/src/main/java/net/minecraft/world/entity/projectile/FishingHook.java -index a58dea66af79b15d78407e4b4b19dfcece011ba6..92d381b0e824f734b0b6b186fa4c8601ab433241 100644 +index d9deb1b47b2430936d74e782cfc4a6ac32a16c91..218b6a72a76b8acfd55952265b34fefafbce3cc3 100644 --- a/src/main/java/net/minecraft/world/entity/projectile/FishingHook.java +++ b/src/main/java/net/minecraft/world/entity/projectile/FishingHook.java -@@ -601,7 +601,7 @@ public class FishingHook extends Projectile { +@@ -615,7 +615,7 @@ public class FishingHook extends Projectile { public void pullEntity(Entity entity) { Entity entity1 = this.getOwner();