package net.minecraft.network.play.server;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import java.io.ByteArrayOutputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import net.minecraft.block.Block;
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.ChunkCoordIntPair;
import net.minecraft.world.chunk.Chunk;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
public class S22PacketMultiBlockChange extends Packet
{
private static final Logger logger = LogManager.getLogger();
private ChunkCoordIntPair field_148925_b;
private byte[] field_148926_c;
private int field_148924_d;
private static final String __OBFID = "CL_00001290";
public S22PacketMultiBlockChange() {}
public S22PacketMultiBlockChange(int p_i45181_1_, short[] p_i45181_2_, Chunk p_i45181_3_)
{
this.field_148925_b = new ChunkCoordIntPair(p_i45181_3_.xPosition, p_i45181_3_.zPosition);
this.field_148924_d = p_i45181_1_;
int j = 4 * p_i45181_1_;
try
{
ByteArrayOutputStream bytearrayoutputstream = new ByteArrayOutputStream(j);
DataOutputStream dataoutputstream = new DataOutputStream(bytearrayoutputstream);
for (int k = 0; k < p_i45181_1_; ++k)
{
int l = p_i45181_2_[k] >> 12 & 15;
int i1 = p_i45181_2_[k] >> 8 & 15;
int j1 = p_i45181_2_[k] & 255;
dataoutputstream.writeShort(p_i45181_2_[k]);
dataoutputstream.writeShort((short)((Block.getIdFromBlock(p_i45181_3_.getBlock(l, j1, i1)) & 4095) << 4 | p_i45181_3_.getBlockMetadata(l, j1, i1) & 15));
}
this.field_148926_c = bytearrayoutputstream.toByteArray();
if (this.field_148926_c.length != j)
{
throw new RuntimeException("Expected length " + j + " doesn\'t match received length " + this.field_148926_c.length);
}
}
catch (IOException ioexception)
{
logger.error("Couldn\'t create bulk block update packet", ioexception);
this.field_148926_c = null;
}
}
/**
* Reads the raw packet data from the data stream.
*/
public void readPacketData(PacketBuffer data) throws IOException
{
this.field_148925_b = new ChunkCoordIntPair(data.readInt(), data.readInt());
this.field_148924_d = data.readShort() & 65535;
int i = data.readInt();
if (i > 0)
{
this.field_148926_c = new byte[i];
data.readBytes(this.field_148926_c);
}
}
/**
* Writes the raw packet data to the data stream.
*/
public void writePacketData(PacketBuffer data) throws IOException
{
data.writeInt(this.field_148925_b.chunkXPos);
data.writeInt(this.field_148925_b.chunkZPos);
data.writeShort((short)this.field_148924_d);
if (this.field_148926_c != null)
{
data.writeInt(this.field_148926_c.length);
data.writeBytes(this.field_148926_c);
}
else
{
data.writeInt(0);
}
}
/**
* Passes this Packet on to the NetHandler for processing.
*/
public void processPacket(INetHandlerPlayClient handler)
{
handler.handleMultiBlockChange(this);
}
/**
* Returns a string formatted as comma separated [field]=[value] values. Used by Minecraft for logging purposes.
*/
public String serialize()
{
return String.format("xc=%d, zc=%d, count=%d", new Object[] {Integer.valueOf(this.field_148925_b.chunkXPos), Integer.valueOf(this.field_148925_b.chunkZPos), Integer.valueOf(this.field_148924_d)});
}
@SideOnly(Side.CLIENT)
public ChunkCoordIntPair func_148920_c()
{
return this.field_148925_b;
}
@SideOnly(Side.CLIENT)
public byte[] func_148921_d()
{
return this.field_148926_c;
}
@SideOnly(Side.CLIENT)
public int func_148922_e()
{
return this.field_148924_d;
}
/**
* Passes this Packet on to the NetHandler for processing.
*/
public void processPacket(INetHandler handler)
{
this.processPacket((INetHandlerPlayClient)handler);
}
}