9
0
mirror of https://github.com/Samsuik/Sakura.git synced 2025-12-28 11:19:08 +00:00

Fix sprinting knockback delay and default extra knockback

This commit is contained in:
Samsuik
2024-05-28 21:42:37 +01:00
parent 70c53277c5
commit efc231e60f
3 changed files with 57 additions and 19 deletions

View File

@@ -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

View File

@@ -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

View File

@@ -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) {