From efc231e60fa9b5aa37af38011e4964da3a4352ff Mon Sep 17 00:00:00 2001 From: Samsuik Date: Tue, 28 May 2024 21:42:37 +0100 Subject: [PATCH] Fix sprinting knockback delay and default extra knockback --- .../0003-Sakura-Configuration-Files.patch | 52 +++++++++++++++---- .../0030-Configure-Entity-Knockback.patch | 20 ++++--- ...player-poses-shrinking-collision-box.patch | 4 +- 3 files changed, 57 insertions(+), 19 deletions(-) diff --git a/patches/server/0003-Sakura-Configuration-Files.patch b/patches/server/0003-Sakura-Configuration-Files.patch index 2ccb2d2..2c74ed5 100644 --- a/patches/server/0003-Sakura-Configuration-Files.patch +++ b/patches/server/0003-Sakura-Configuration-Files.patch @@ -388,10 +388,10 @@ index 0000000000000000000000000000000000000000..5296d4e0a1041932e36562f42fbf3e1d +} diff --git a/src/main/java/me/samsuik/sakura/configuration/SakuraConfigurations.java b/src/main/java/me/samsuik/sakura/configuration/SakuraConfigurations.java new file mode 100644 -index 0000000000000000000000000000000000000000..b5c2471a2982f5a5ab64620e906766460498095c +index 0000000000000000000000000000000000000000..dd5a70f70c2e7bdc30b8f5655b0b7a082c1b472b --- /dev/null +++ b/src/main/java/me/samsuik/sakura/configuration/SakuraConfigurations.java -@@ -0,0 +1,255 @@ +@@ -0,0 +1,253 @@ +package me.samsuik.sakura.configuration; + +import com.google.common.collect.Table; @@ -415,10 +415,7 @@ index 0000000000000000000000000000000000000000..b5c2471a2982f5a5ab64620e90676646 +import it.unimi.dsi.fastutil.objects.Reference2IntOpenHashMap; +import it.unimi.dsi.fastutil.objects.Reference2LongMap; +import it.unimi.dsi.fastutil.objects.Reference2LongOpenHashMap; -+import me.samsuik.sakura.configuration.transformation.world.V3_RenameKnockback; -+import me.samsuik.sakura.configuration.transformation.world.V2_VerticalKnockbackUseDefault; -+import me.samsuik.sakura.configuration.transformation.world.V4_RenameNonStrictMergeLevel; -+import me.samsuik.sakura.configuration.transformation.world.V5_CombineLoadChunksOptions; ++import me.samsuik.sakura.configuration.transformation.world.*; +import net.minecraft.core.RegistryAccess; +import net.minecraft.core.registries.Registries; +import net.minecraft.resources.ResourceLocation; @@ -583,6 +580,7 @@ index 0000000000000000000000000000000000000000..b5c2471a2982f5a5ab64620e90676646 + V3_RenameKnockback.apply(versionedBuilder); + V4_RenameNonStrictMergeLevel.apply(versionedBuilder); + V5_CombineLoadChunksOptions.apply(versionedBuilder); ++ V6_FixIncorrectExtraKnockback.apply(versionedBuilder); + // ADD FUTURE VERSIONED TRANSFORMS TO versionedBuilder HERE + versionedBuilder.build().apply(node); + } @@ -649,7 +647,7 @@ index 0000000000000000000000000000000000000000..b5c2471a2982f5a5ab64620e90676646 +} diff --git a/src/main/java/me/samsuik/sakura/configuration/WorldConfiguration.java b/src/main/java/me/samsuik/sakura/configuration/WorldConfiguration.java new file mode 100644 -index 0000000000000000000000000000000000000000..f9fe1024c3e5681abe9823d71582d83b50d3c6b0 +index 0000000000000000000000000000000000000000..bfac7683f768fbd27ba7f45cdbf964f1dcd0c174 --- /dev/null +++ b/src/main/java/me/samsuik/sakura/configuration/WorldConfiguration.java @@ -0,0 +1,204 @@ @@ -684,7 +682,7 @@ index 0000000000000000000000000000000000000000..f9fe1024c3e5681abe9823d71582d83b +public class WorldConfiguration extends ConfigurationPart { + + private static final Logger LOGGER = LogUtils.getClassLogger(); -+ static final int CURRENT_VERSION = 5; // (when you change the version, change the comment, so it conflicts on rebases): rename filter bad nbt from spawn eggs ++ static final int CURRENT_VERSION = 6; // (when you change the version, change the comment, so it conflicts on rebases): rename filter bad nbt from spawn eggs + + private transient final ResourceLocation worldKey; + WorldConfiguration(ResourceLocation worldKey) { @@ -787,7 +785,7 @@ index 0000000000000000000000000000000000000000..f9fe1024c3e5681abe9823d71582d83b + public Sprinting sprinting = new Sprinting(); + public class Sprinting extends ConfigurationPart { + public boolean requireFullAttack = true; -+ public double extraKnockback = 1.0; ++ public double extraKnockback = 0.5; + @Comment("Delay between extra knockback hits in milliseconds") + public IntOr.Default knockbackDelay = IntOr.Default.USE_DEFAULT; + } @@ -1018,6 +1016,42 @@ index 0000000000000000000000000000000000000000..3d647a3db0862232f158d823da9a797d + return null; + } +} +diff --git a/src/main/java/me/samsuik/sakura/configuration/transformation/world/V6_FixIncorrectExtraKnockback.java b/src/main/java/me/samsuik/sakura/configuration/transformation/world/V6_FixIncorrectExtraKnockback.java +new file mode 100644 +index 0000000000000000000000000000000000000000..f9fdf1a87420c78136deccf8822f5cf177b41aed +--- /dev/null ++++ b/src/main/java/me/samsuik/sakura/configuration/transformation/world/V6_FixIncorrectExtraKnockback.java +@@ -0,0 +1,30 @@ ++package me.samsuik.sakura.configuration.transformation.world; ++ ++import org.checkerframework.checker.nullness.qual.Nullable; ++import org.spongepowered.configurate.ConfigurateException; ++import org.spongepowered.configurate.ConfigurationNode; ++import org.spongepowered.configurate.NodePath; ++import org.spongepowered.configurate.transformation.ConfigurationTransformation; ++import org.spongepowered.configurate.transformation.TransformAction; ++ ++import static org.spongepowered.configurate.NodePath.path; ++ ++public final class V6_FixIncorrectExtraKnockback implements TransformAction { ++ private static final int VERSION = 6; ++ private static final NodePath PATH = path("players", "knockback", "sprinting", "extra-knockback"); ++ private static final V6_FixIncorrectExtraKnockback INSTANCE = new V6_FixIncorrectExtraKnockback(); ++ ++ private V6_FixIncorrectExtraKnockback() {} ++ ++ public static void apply(ConfigurationTransformation.VersionedBuilder builder) { ++ builder.addVersion(VERSION, ConfigurationTransformation.builder().addAction(PATH, INSTANCE).build()); ++ } ++ ++ @Override ++ public Object @Nullable [] visitPath(NodePath path, ConfigurationNode value) throws ConfigurateException { ++ if (value.getDouble() == 1.0) { ++ value.set(0.5); ++ } ++ return null; ++ } ++} diff --git a/src/main/java/me/samsuik/sakura/explosion/durable/DurableMaterial.java b/src/main/java/me/samsuik/sakura/explosion/durable/DurableMaterial.java new file mode 100644 index 0000000000000000000000000000000000000000..4024f9738e039ffffd560a07a2210f758879d3c0 diff --git a/patches/server/0030-Configure-Entity-Knockback.patch b/patches/server/0030-Configure-Entity-Knockback.patch index b1557ea..5e2ef59 100644 --- a/patches/server/0030-Configure-Entity-Knockback.patch +++ b/patches/server/0030-Configure-Entity-Knockback.patch @@ -56,7 +56,7 @@ index 6162631e863dd15c7fdb70dbde2f85d273c7020b..e75322367764805443f9a9f5639d804b return; } 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 74dcfabdc66ef289b8d6a5c6606579b5321af1db..94577ca6de11d23d2a2561b645212a7717088974 100644 +index 74dcfabdc66ef289b8d6a5c6606579b5321af1db..7a48140d6f16ab56550f70a6d5aef53c2f71401b 100644 --- a/src/main/java/net/minecraft/world/entity/player/Player.java +++ b/src/main/java/net/minecraft/world/entity/player/Player.java @@ -183,6 +183,7 @@ public abstract class Player extends LivingEntity { @@ -76,18 +76,22 @@ index 74dcfabdc66ef289b8d6a5c6606579b5321af1db..94577ca6de11d23d2a2561b645212a77 sendSoundEffect(this, this.getX(), this.getY(), this.getZ(), SoundEvents.PLAYER_ATTACK_KNOCKBACK, this.getSoundSource(), 1.0F, 1.0F); // Paper - send while respecting visibility ++i; flag1 = true; -@@ -1324,10 +1325,20 @@ public abstract class Player extends LivingEntity { +@@ -1324,10 +1325,24 @@ public abstract class Player extends LivingEntity { if (flag5) { if (i > 0) { + // Sakura start - configure extra sprinting knockback + float extraKnockback = (float) i * 0.5F; + long millis = System.currentTimeMillis(); -+ long sinceLastKnockback = millis - lastSprintKnockback; -+ -+ if (flag1 && sinceLastKnockback >= level().sakuraConfig().players.knockback.sprinting.knockbackDelay.value().orElse(0)) { -+ extraKnockback += -0.5F + (float) level().sakuraConfig().players.knockback.sprinting.extraKnockback; -+ lastSprintKnockback = millis; ++ long sinceLastKnockback = millis - this.lastSprintKnockback; ++ if (flag1) { // attackHasExtraKnockback ++ double knockbackToApply = 0.0; ++ if (sinceLastKnockback >= this.level().sakuraConfig().players.knockback.sprinting.knockbackDelay.value().orElse(0)) { ++ knockbackToApply = this.level().sakuraConfig().players.knockback.sprinting.extraKnockback; ++ this.lastSprintKnockback = millis; ++ } ++ // -0.5 is to negate the vanilla sprinting knockback ++ extraKnockback += -0.5F + (float) knockbackToApply; + } 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 @@ -99,7 +103,7 @@ index 74dcfabdc66ef289b8d6a5c6606579b5321af1db..94577ca6de11d23d2a2561b645212a77 } this.setDeltaMovement(this.getDeltaMovement().multiply(0.6D, 1.0D, 0.6D)); -@@ -1349,7 +1360,7 @@ public abstract class Player extends LivingEntity { +@@ -1349,7 +1364,7 @@ public abstract class Player extends LivingEntity { 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 diff --git a/patches/server/0066-Disable-player-poses-shrinking-collision-box.patch b/patches/server/0066-Disable-player-poses-shrinking-collision-box.patch index a1c9175..2b53544 100644 --- a/patches/server/0066-Disable-player-poses-shrinking-collision-box.patch +++ b/patches/server/0066-Disable-player-poses-shrinking-collision-box.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Disable player poses shrinking collision box 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 127b83d92719fb5149d936125423a509779e577d..b0dd1e699e743ed9fa7bd7499d81d813be89d3f2 100644 +index 8b5d3c429dc2676d7db33faac691a9c8f7b68f5d..2315976d480f2a8eef3e222df4f1550453dda7d4 100644 --- a/src/main/java/net/minecraft/world/entity/player/Player.java +++ b/src/main/java/net/minecraft/world/entity/player/Player.java -@@ -2243,7 +2243,13 @@ public abstract class Player extends LivingEntity { +@@ -2247,7 +2247,13 @@ public abstract class Player extends LivingEntity { @Override public EntityDimensions getDimensions(Pose pose) {