package joshie.progression.network; import io.netty.buffer.ByteBuf; import joshie.progression.api.special.IStoreTriggerData; import joshie.progression.network.core.PenguinPacket; import joshie.progression.player.PlayerTracker; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.nbt.NBTTagCompound; import net.minecraftforge.fml.common.network.ByteBufUtils; import net.minecraftforge.fml.relauncher.Side; import java.util.HashMap; import java.util.UUID; @Packet(isSided = true, side = Side.CLIENT) public class PacketSyncTriggerData extends PenguinPacket { public static class DataPair { public UUID uuid; public NBTTagCompound data; public DataPair(){} public DataPair(UUID uuid, NBTTagCompound data) { this.uuid = uuid; this.data = data; } public void toBytes(ByteBuf buf) { writeGzipString(buf, uuid.toString()); ByteBufUtils.writeTag(buf, data); } public void fromBytes(ByteBuf buf) { uuid = UUID.fromString(readGzipString(buf)); data = ByteBufUtils.readTag(buf); } } private boolean overwrite; private DataPair[] data; public PacketSyncTriggerData() {} public PacketSyncTriggerData(HashMap<UUID, IStoreTriggerData> triggerData) { this.overwrite = true; this.data = new DataPair[triggerData.size()]; int position = 0; for (UUID uuid: triggerData.keySet()) { NBTTagCompound tag = new NBTTagCompound(); triggerData.get(uuid).writeDataToNBT(tag); this.data[position] = new DataPair(uuid, tag); position++; } } public PacketSyncTriggerData(UUID uuid, NBTTagCompound data) { this.overwrite = false; this.data = new DataPair[1]; this.data[0] = new DataPair(uuid, data); } @Override public void toBytes(ByteBuf buf) { buf.writeBoolean(overwrite); buf.writeInt(data.length); for (DataPair pair: data) { pair.toBytes(buf); } } @Override public void fromBytes(ByteBuf buf) { overwrite = buf.readBoolean(); int size = buf.readInt(); data = new DataPair[size]; for (int i = 0; i < size; i++) { data[i] = new DataPair(); data[i].fromBytes(buf); } } @Override public void handlePacket(EntityPlayer player) { PlayerTracker.getClientPlayer().getMappings().setTriggerData(overwrite, data); } }