package joshie.progression.network;
import io.netty.buffer.ByteBuf;
import joshie.progression.api.criteria.ICriteria;
import joshie.progression.api.criteria.IRewardProvider;
import joshie.progression.handlers.APICache;
import joshie.progression.network.core.PenguinPacket;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraftforge.fml.common.network.ByteBufUtils;
import net.minecraftforge.fml.relauncher.Side;
import java.util.Collections;
import java.util.List;
import java.util.UUID;
@Packet(isSided = true, side = Side.SERVER)
public class PacketClaimReward extends PenguinPacket {
private ICriteria criteria;
private int rewardId;
private boolean randomReward;
public PacketClaimReward() {}
public PacketClaimReward(ICriteria criteria, int rewardId, boolean randomReward) {
this.criteria = criteria;
this.rewardId = rewardId;
this.randomReward = randomReward;
}
@Override
public void toBytes(ByteBuf buf) {
ByteBufUtils.writeUTF8String(buf, criteria.getUniqueID().toString());
buf.writeInt(rewardId);
buf.writeBoolean(randomReward);
}
@Override
public void fromBytes(ByteBuf buf) {
criteria = APICache.getServerCache().getCriteria(UUID.fromString(ByteBufUtils.readUTF8String(buf)));
rewardId = buf.readInt();
randomReward = buf.readBoolean();
}
@Override
public void handlePacket(EntityPlayer player) {
List<IRewardProvider> rewards = criteria.getRewards();
if (rewards != null && rewards.size() > 0) {
if (randomReward) Collections.shuffle(rewards);
int selected = 0;
//Looping around to avoid getting wrong values
for (int i = 0; i < rewards.size(); i++) {
if (i == rewardId) {
selected = i;
break;
}
}
rewards.get(selected).getProvided().reward((EntityPlayerMP)player);
}
}
}