diff --git a/patches/server/Make-interaction-leniency-distance-configurable.patch b/patches/server/Make-interaction-leniency-distance-configurable.patch new file mode 100644 index 000000000..b2afb5d25 --- /dev/null +++ b/patches/server/Make-interaction-leniency-distance-configurable.patch @@ -0,0 +1,26 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Newwind +Date: Thu, 25 Jul 2024 13:00:37 +0200 +Subject: [PATCH] Make interaction leniency distance configurable + +The server validates incoming interaction packets by ensuring the player +sending them is inside their interaction range. For this, the server adds +a magic value, by default 1.0, to the original interaction range to +account for latency issues. + +This value however may be too low in high latency environments. +The patch exposes a new configuration option to configure said value. + +diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644 +--- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java ++++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +@@ -0,0 +0,0 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl + + AABB axisalignedbb = entity.getBoundingBox(); + +- if (this.player.canInteractWithEntity(axisalignedbb, 1.0D)) { ++ if (this.player.canInteractWithEntity(axisalignedbb, io.papermc.paper.configuration.GlobalConfiguration.get().misc.clientInteractionLeniencyDistance.or(1.0D))) { // Paper - configurable lenience value for interact range + packet.dispatch(new ServerboundInteractPacket.Handler() { + private void performInteraction(InteractionHand enumhand, ServerGamePacketListenerImpl.EntityInteraction playerconnection_a, PlayerInteractEntityEvent event) { // CraftBukkit + ItemStack itemstack = ServerGamePacketListenerImpl.this.player.getItemInHand(enumhand); diff --git a/patches/server/Paper-config-files.patch b/patches/server/Paper-config-files.patch index 46a61b8d8..b1c9a05e6 100644 --- a/patches/server/Paper-config-files.patch +++ b/patches/server/Paper-config-files.patch @@ -496,6 +496,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 +import co.aikar.timings.MinecraftTimings; +import com.mojang.logging.LogUtils; +import io.papermc.paper.configuration.constraint.Constraints; ++import io.papermc.paper.configuration.type.number.DoubleOr; +import io.papermc.paper.configuration.type.number.IntOr; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; @@ -800,6 +801,8 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 + public boolean useDimensionTypeForCustomSpawners = false; + public boolean strictAdvancementDimensionCheck = false; + public IntOr.Default compressionLevel = IntOr.Default.USE_DEFAULT; ++ @Comment("Defines the leniency distance added on the server to the interaction range of a player when validating interact packets.") ++ public DoubleOr.Default clientInteractionLeniencyDistance = DoubleOr.Default.USE_DEFAULT; + } + + public BlockUpdates blockUpdates; @@ -1050,6 +1053,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 + .serializers(builder -> builder + .register(new PacketClassSerializer()) + .register(IntOr.Default.SERIALIZER) ++ .register(DoubleOr.Default.SERIALIZER) + ); + } +