Skip to content

Commit 204c8b7

Browse files
committed
Fix lag caused by Forge vehicle resync patch
This patch previously set the player to the entity's position, which is not always correct for entities that position the player at an offset (e.g. boats with two entities). Move the player using positionRider() instead Original PR: MinecraftForge/MinecraftForge#5160
1 parent d877ab4 commit 204c8b7

File tree

1 file changed

+28
-0
lines changed

1 file changed

+28
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package org.embeddedt.modernfix.forge.mixin.bugfix.forge_vehicle_packets;
2+
3+
import net.minecraft.network.protocol.game.ServerboundMoveVehiclePacket;
4+
import net.minecraft.server.level.ServerPlayer;
5+
import net.minecraft.server.network.ServerGamePacketListenerImpl;
6+
import net.minecraft.world.phys.Vec3;
7+
import org.spongepowered.asm.mixin.Mixin;
8+
import org.spongepowered.asm.mixin.Shadow;
9+
import org.spongepowered.asm.mixin.injection.At;
10+
import org.spongepowered.asm.mixin.injection.Redirect;
11+
12+
@Mixin(ServerGamePacketListenerImpl.class)
13+
public class ServerGamePacketListenerImplMixin {
14+
@Shadow public ServerPlayer player;
15+
16+
@Redirect(method = "handleMoveVehicle", at = @At(value = "INVOKE", target = "Lnet/minecraft/server/level/ServerPlayer;absMoveTo(DDDFF)V"))
17+
private void movePlayerUsingPositionRider(ServerPlayer player, double x, double y, double z, float yRot, float xRot, ServerboundMoveVehiclePacket packet) {
18+
if(player == this.player) {
19+
// use positionRider
20+
Vec3 oldPos = this.player.position();
21+
this.player.getRootVehicle().positionRider(this.player);
22+
this.player.xo = oldPos.x;
23+
this.player.yo = oldPos.y;
24+
this.player.zo = oldPos.z;
25+
} else
26+
player.absMoveTo(x, y, z, yRot, xRot);
27+
}
28+
}

0 commit comments

Comments
 (0)