package net.ME1312.SubServers.Client.Common.Network.Packet; import net.ME1312.Galaxi.Library.Map.ObjectMap; import net.ME1312.Galaxi.Library.Util; import net.ME1312.SubData.Client.Protocol.PacketObjectIn; import net.ME1312.SubData.Client.Protocol.PacketObjectOut; import net.ME1312.SubData.Client.SubDataSender; import java.util.*; import java.util.function.Consumer; /** * Download Player Info Packet */ public class PacketDownloadPlayerInfo implements PacketObjectIn, PacketObjectOut { private static HashMap>[]> callbacks = new HashMap>[]>(); private Collection names; private Collection ids; private UUID tracker; /** * New PacketDownloadPlayerInfo (In) */ public PacketDownloadPlayerInfo() {} /** * New PacketDownloadPlayerInfo (Out) * * @param players Player Names (or null for all) * @param callback Callbacks */ @SafeVarargs public PacketDownloadPlayerInfo(Collection players, Consumer>... callback) { Util.nullpo((Object) callback); this.names = players; this.tracker = Util.getNew(callbacks.keySet(), UUID::randomUUID); callbacks.put(tracker, callback); } /** * New PacketDownloadPlayerInfo (Out) * * @param players Player IDs (or null for all) * @param callback Callbacks */ @SafeVarargs public PacketDownloadPlayerInfo(List players, Consumer>... callback) { Util.nullpo((Object) callback); this.ids = players; this.tracker = Util.getNew(callbacks.keySet(), UUID::randomUUID); callbacks.put(tracker, callback); } @Override public ObjectMap send(SubDataSender client) { ObjectMap json = new ObjectMap(); json.set(0x0000, tracker); if (names != null) json.set(0x0001, names); if (ids != null) json.set(0x0002, ids); return json; } @SuppressWarnings("unchecked") @Override public void receive(SubDataSender client, ObjectMap data) { for (Consumer> callback : callbacks.get(data.getUUID(0x0000))) callback.accept(new ObjectMap((Map) data.getObject(0x0001))); callbacks.remove(data.getUUID(0x0000)); } }