package net.ME1312.SubServers.Velocity.Network.Packet; import net.ME1312.Galaxi.Library.Map.ObjectMap; import net.ME1312.SubData.Client.Protocol.PacketObjectIn; import net.ME1312.SubData.Client.Protocol.PacketObjectOut; import net.ME1312.SubData.Client.SubDataSender; import net.ME1312.SubServers.Velocity.ExProxy; import com.velocitypowered.api.proxy.Player; import com.velocitypowered.api.proxy.server.RegisteredServer; import java.util.List; import java.util.Optional; import java.util.UUID; /** * Transfer External Player Packet */ public class PacketExTransferPlayer implements PacketObjectIn, PacketObjectOut { private ExProxy plugin; private int response; private UUID tracker; /** * New PacketExTransferPlayer (In) */ public PacketExTransferPlayer(ExProxy plugin) { this.plugin = plugin; } /** * New PacketExTransferPlayer (Out) * * @param response Response ID * @param tracker Receiver ID */ public PacketExTransferPlayer(int response, UUID tracker) { this.response = response; this.tracker = tracker; } @Override public ObjectMap send(SubDataSender client) { ObjectMap json = new ObjectMap(); if (tracker != null) json.set(0x0000, tracker); json.set(0x0001, response); return json; } @Override public void receive(SubDataSender client, ObjectMap data) { UUID tracker = (data.contains(0x0000)?data.getUUID(0x0000):null); List ids = data.getUUIDList(0x0001); try { Optional server = ExProxy.getInstance().getServer(data.getString(0x0002).toLowerCase()); if (server.isPresent()) { int failures = 0; for (UUID id : ids) { Optional local = ExProxy.getInstance().getPlayer(id); if (local.isPresent()) { local.get().createConnectionRequest(server.get()).fireAndForget(); } else { ++failures; } } client.sendPacket(new PacketExTransferPlayer(failures, tracker)); } else { client.sendPacket(new PacketExTransferPlayer(ids.size(), tracker)); } } catch (Throwable e) { client.sendPacket(new PacketExTransferPlayer(ids.size(), tracker)); e.printStackTrace(); } } @Override public int version() { return 0x0001; } }