package ar.com.companeros.body; import net.minecraft.network.PacketSendListener; import net.minecraft.network.chat.Component; import net.minecraft.network.protocol.Packet; import net.minecraft.network.protocol.game.ClientboundPlayerPositionPacket; import net.minecraft.network.protocol.game.ServerboundAcceptTeleportationPacket; import net.minecraft.server.MinecraftServer; import net.minecraft.server.level.ServerPlayer; import net.minecraft.server.network.ServerGamePacketListenerImpl; /** Conserva interacciones vanilla; la sesión realiza el tick de jugador exactamente una vez. */ final class LocalPacketListener extends ServerGamePacketListenerImpl { private final MinecraftServer server; LocalPacketListener(MinecraftServer server, LocalConnection transport, ServerPlayer player) { super(server, transport, player); this.server = server; } @Override public void tick() { } @Override public void send(Packet packet, PacketSendListener completion) { super.send(packet, completion); if (packet instanceof ClientboundPlayerPositionPacket position) { // El participante local acepta la posición servidor, incluida la transición de dimensión. handleAcceptTeleportPacket(new ServerboundAcceptTeleportationPacket(position.getId())); resetPosition(); } } @Override public void disconnect(Component reason) { PlayerSessions.remove(server, player.getUUID()); } }