package net.minecraft.network.play.server;
import com.google.common.collect.Lists;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import net.minecraft.network.INetHandler;
import net.minecraft.network.Packet;
import net.minecraft.network.PacketBuffer;
import net.minecraft.network.play.INetHandlerPlayClient;
import net.minecraft.world.chunk.Chunk;
import net.minecraft.world.chunk.storage.ExtendedBlockStorage;
public class S21PacketChunkData implements Packet
{
private int field_149284_a;
private int field_149282_b;
private S21PacketChunkData.Extracted field_179758_c;
private boolean field_149279_g;
private static final String __OBFID = "CL_00001304";
public S21PacketChunkData() {}
public S21PacketChunkData(Chunk p_i45196_1_, boolean p_i45196_2_, int p_i45196_3_)
{
this.field_149284_a = p_i45196_1_.xPosition;
this.field_149282_b = p_i45196_1_.zPosition;
this.field_149279_g = p_i45196_2_;
this.field_179758_c = func_179756_a(p_i45196_1_, p_i45196_2_, !p_i45196_1_.getWorld().provider.getHasNoSky(), p_i45196_3_);
}
/**
* Reads the raw packet data from the data stream.
*/
public void readPacketData(PacketBuffer data) throws IOException
{
this.field_149284_a = data.readInt();
this.field_149282_b = data.readInt();
this.field_149279_g = data.readBoolean();
this.field_179758_c = new S21PacketChunkData.Extracted();
this.field_179758_c.field_150280_b = data.readShort();
this.field_179758_c.field_150282_a = data.readByteArray();
}
/**
* Writes the raw packet data to the data stream.
*/
public void writePacketData(PacketBuffer data) throws IOException
{
data.writeInt(this.field_149284_a);
data.writeInt(this.field_149282_b);
data.writeBoolean(this.field_149279_g);
data.writeShort((short)(this.field_179758_c.field_150280_b & 65535));
data.writeByteArray(this.field_179758_c.field_150282_a);
}
/**
* Passes this Packet on to the NetHandler for processing.
*/
public void processPacket(INetHandlerPlayClient handler)
{
handler.handleChunkData(this);
}
protected static int func_180737_a(int p_180737_0_, boolean p_180737_1_, boolean p_180737_2_)
{
int var3 = p_180737_0_ * 2 * 16 * 16 * 16;
int var4 = p_180737_0_ * 16 * 16 * 16 / 2;
int var5 = p_180737_1_ ? p_180737_0_ * 16 * 16 * 16 / 2 : 0;
int var6 = p_180737_2_ ? 256 : 0;
return var3 + var4 + var5 + var6;
}
public static S21PacketChunkData.Extracted func_179756_a(Chunk p_179756_0_, boolean p_179756_1_, boolean p_179756_2_, int p_179756_3_)
{
ExtendedBlockStorage[] var4 = p_179756_0_.getBlockStorageArray();
S21PacketChunkData.Extracted var5 = new S21PacketChunkData.Extracted();
ArrayList var6 = Lists.newArrayList();
int var7;
for (var7 = 0; var7 < var4.length; ++var7)
{
ExtendedBlockStorage var8 = var4[var7];
if (var8 != null && (!p_179756_1_ || !var8.isEmpty()) && (p_179756_3_ & 1 << var7) != 0)
{
var5.field_150280_b |= 1 << var7;
var6.add(var8);
}
}
var5.field_150282_a = new byte[func_180737_a(Integer.bitCount(var5.field_150280_b), p_179756_2_, p_179756_1_)];
var7 = 0;
Iterator var15 = var6.iterator();
ExtendedBlockStorage var9;
while (var15.hasNext())
{
var9 = (ExtendedBlockStorage)var15.next();
char[] var10 = var9.getData();
char[] var11 = var10;
int var12 = var10.length;
for (int var13 = 0; var13 < var12; ++var13)
{
char var14 = var11[var13];
var5.field_150282_a[var7++] = (byte)(var14 & 255);
var5.field_150282_a[var7++] = (byte)(var14 >> 8 & 255);
}
}
for (var15 = var6.iterator(); var15.hasNext(); var7 = func_179757_a(var9.getBlocklightArray().getData(), var5.field_150282_a, var7))
{
var9 = (ExtendedBlockStorage)var15.next();
}
if (p_179756_2_)
{
for (var15 = var6.iterator(); var15.hasNext(); var7 = func_179757_a(var9.getSkylightArray().getData(), var5.field_150282_a, var7))
{
var9 = (ExtendedBlockStorage)var15.next();
}
}
if (p_179756_1_)
{
func_179757_a(p_179756_0_.getBiomeArray(), var5.field_150282_a, var7);
}
return var5;
}
private static int func_179757_a(byte[] p_179757_0_, byte[] p_179757_1_, int p_179757_2_)
{
System.arraycopy(p_179757_0_, 0, p_179757_1_, p_179757_2_, p_179757_0_.length);
return p_179757_2_ + p_179757_0_.length;
}
/**
* Passes this Packet on to the NetHandler for processing.
*/
public void processPacket(INetHandler handler)
{
this.processPacket((INetHandlerPlayClient)handler);
}
public static class Extracted
{
public byte[] field_150282_a;
public int field_150280_b;
private static final String __OBFID = "CL_00001305";
}
}