diff --git a/leaf-server/minecraft-patches/features/0171-move-and-flush-location-while-knockback.patch b/leaf-server/minecraft-patches/features/0171-move-and-flush-location-while-knockback.patch new file mode 100644 index 00000000..1dfa2928 --- /dev/null +++ b/leaf-server/minecraft-patches/features/0171-move-and-flush-location-while-knockback.patch @@ -0,0 +1,36 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: hayanesuru +Date: Thu, 8 May 2025 04:56:30 +0900 +Subject: [PATCH] move and flush location while knockback + + +diff --git a/net/minecraft/world/entity/player/Player.java b/net/minecraft/world/entity/player/Player.java +index 477455fdfcc591a89823e88983eb12dabb078d9b..ffff3c710f6a96de9372fe07ffa69e65d392273f 100644 +--- a/net/minecraft/world/entity/player/Player.java ++++ b/net/minecraft/world/entity/player/Player.java +@@ -1415,6 +1415,25 @@ public abstract class Player extends LivingEntity { + ((ServerPlayer)target).connection.send(new ClientboundSetEntityMotionPacket(target)); + target.hurtMarked = false; + target.setDeltaMovement(deltaMovement); ++ ++ // Leaf start ++ if (org.dreeam.leaf.config.modules.gameplay.Knockback.flushKnockback) { ++ ServerPlayer targetPlayer = (ServerPlayer) target; ++ Vec3 before = targetPlayer.getDeltaMovement(); ++ targetPlayer.aiStep(); ++ targetPlayer.setDeltaMovement(before); ++ targetPlayer.connection.send(new net.minecraft.network.protocol.game.ClientboundSetEntityMotionPacket(this)); ++ targetPlayer.connection.send(net.minecraft.network.protocol.game.ClientboundEntityPositionSyncPacket.of(this)); ++ targetPlayer.connection.resumeFlushing(); ++ targetPlayer.hasImpulse = true; ++ if (this instanceof ServerPlayer player1) { ++ player1.connection.send(new net.minecraft.network.protocol.game.ClientboundSetEntityMotionPacket(targetPlayer)); ++ player1.connection.send(net.minecraft.network.protocol.game.ClientboundEntityPositionSyncPacket.of(targetPlayer)); ++ player1.connection.resumeFlushing(); ++ player1.hasImpulse = true; ++ } ++ } ++ // Leaf end + } + // CraftBukkit end + } diff --git a/leaf-server/src/main/java/org/dreeam/leaf/config/modules/gameplay/Knockback.java b/leaf-server/src/main/java/org/dreeam/leaf/config/modules/gameplay/Knockback.java index 916500e7..b0610c61 100644 --- a/leaf-server/src/main/java/org/dreeam/leaf/config/modules/gameplay/Knockback.java +++ b/leaf-server/src/main/java/org/dreeam/leaf/config/modules/gameplay/Knockback.java @@ -2,6 +2,7 @@ package org.dreeam.leaf.config.modules.gameplay; import org.dreeam.leaf.config.ConfigModules; import org.dreeam.leaf.config.EnumConfigCategory; +import org.dreeam.leaf.config.annotations.Experimental; public class Knockback extends ConfigModules { @@ -12,6 +13,8 @@ public class Knockback extends ConfigModules { public static boolean snowballCanKnockback = false; public static boolean eggCanKnockback = false; public static boolean canPlayerKnockbackZombie = true; + @Experimental + public static boolean flushKnockback = false; @Override public void onLoaded() { @@ -30,5 +33,6 @@ public class Knockback extends ConfigModules { "Make players can knockback zombie.", "使玩家可以击退僵尸." )); + flushKnockback = config.getBoolean(getBasePath() + ".flush-location-while-knockback-player", flushKnockback); } }