package joshie.progression.network; import com.google.common.collect.HashMultimap; import io.netty.buffer.ByteBuf; import joshie.progression.api.criteria.IRewardProvider; import joshie.progression.network.core.PenguinPacket; import joshie.progression.player.PlayerTracker; import net.minecraft.entity.player.EntityPlayer; import net.minecraftforge.fml.relauncher.Side; import java.util.Collection; import java.util.HashSet; import java.util.List; import java.util.UUID; @Packet(isSided = true, side = Side.CLIENT) public class PacketSyncUnclaimed extends PenguinPacket { public static class UnclaimedPair { public UUID uuid; public UUID[] rewardUUIDs; public UnclaimedPair(){} public UnclaimedPair(UUID uuid, Collection<IRewardProvider> reward) { this.uuid = uuid; rewardUUIDs = new UUID[reward.size()]; int i = 0; for (IRewardProvider provider: reward) { rewardUUIDs[i] = provider.getUniqueID(); i++; } } public void toBytes(ByteBuf buf) { writeGzipString(buf, uuid.toString()); buf.writeInt(rewardUUIDs.length); for (UUID rewardUUID: rewardUUIDs) { writeGzipString(buf, rewardUUID.toString()); } } public void fromBytes(ByteBuf buf) { uuid = UUID.fromString(readGzipString(buf)); int amount = buf.readInt(); rewardUUIDs = new UUID[amount]; for (int i = 0; i < amount; i++) { rewardUUIDs[i] = UUID.fromString(readGzipString(buf)); } } } private boolean remove; private boolean overwrite; private UnclaimedPair[] data; public PacketSyncUnclaimed() {} public PacketSyncUnclaimed(HashMultimap<UUID, IRewardProvider> map) { this.overwrite = true; this.data = new UnclaimedPair[map.size()]; int position = 0; for (UUID uuid: map.keySet()) { this.data[position] = new UnclaimedPair(uuid, map.get(uuid)); position++; } } public PacketSyncUnclaimed(UUID uuid, List<IRewardProvider> rewards) { this.overwrite = false; this.data = new UnclaimedPair[1]; this.data[0] = new UnclaimedPair(uuid, rewards); } public PacketSyncUnclaimed(UUID uuid, IRewardProvider reward) { this.overwrite = false; this.data = new UnclaimedPair[1]; HashSet<IRewardProvider> set = new HashSet(); set.add(reward); this.data[0] = new UnclaimedPair(uuid, set); this.remove = true; } @Override public void toBytes(ByteBuf buf) { buf.writeBoolean(remove); buf.writeBoolean(overwrite); buf.writeInt(data.length); for (UnclaimedPair pair: data) { if (pair == null) buf.writeBoolean(false); else { buf.writeBoolean(true); pair.toBytes(buf); } } } @Override public void fromBytes(ByteBuf buf) { remove = buf.readBoolean(); overwrite = buf.readBoolean(); int size = buf.readInt(); data = new UnclaimedPair[size]; for (int i = 0; i < size; i++) { if (buf.readBoolean()) { data[i] = new UnclaimedPair(); data[i].fromBytes(buf); } } } @Override public void handlePacket(EntityPlayer player) { PlayerTracker.getClientPlayer().getMappings().setUnclaimedRewards(remove, overwrite, data); } }