Volver al índice
src/main/java/ar/com/companeros/body/LocalPacketListener.java
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());
}
}