package hunternif.mc.atlas.network.client;
import hunternif.mc.atlas.AntiqueAtlasMod;
import hunternif.mc.atlas.ext.ExtBiomeData;
import hunternif.mc.atlas.network.AbstractMessage.AbstractClientMessage;
import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.network.PacketBuffer;
import net.minecraftforge.fml.relauncher.Side;
import java.io.IOException;
/**
* Used to sync custom tiles from server to client.
* @author Hunternif
*/
public class TilesPacket extends AbstractClientMessage<TilesPacket> {
/** Size of one entry in the map in bytes. */
private static final int ENTRY_SIZE_BYTES = 2 + 2 + 2;
private int dimension;
private int tileCount;
private ByteBuf tileData;
public TilesPacket() {}
public TilesPacket(int dimension) {
this.dimension = dimension;
tileCount = 0;
tileData = Unpooled.buffer();
}
public TilesPacket addTile(int x, int y, int biomeID) {
tileData.writeShort(x);
tileData.writeShort(y);
tileData.writeShort(biomeID);
tileCount++;
return this;
}
public boolean isEmpty() {
return tileCount == 0;
}
@Override
public void read(PacketBuffer buffer) throws IOException {
dimension = buffer.readVarInt();
tileCount = buffer.readVarInt();
tileData = buffer.readBytes(tileCount * ENTRY_SIZE_BYTES);
}
@Override
public void write(PacketBuffer buffer) throws IOException {
buffer.writeVarInt(dimension);
buffer.writeVarInt(tileCount);
buffer.writeBytes(tileData);
}
@Override
protected void process(EntityPlayer player, Side side) {
ExtBiomeData data = AntiqueAtlasMod.extBiomeData.getData();
for (int i = 0; i < tileCount; i++) {
data.setBiomeIdAt(dimension, tileData.readShort(), tileData.readShort(), tileData.readShort());
}
}
}