/**
* Copyright (c) 2011-2015, SpaceToad and the BuildCraft Team
* http://www.mod-buildcraft.com
* <p/>
* BuildCraft is distributed under the terms of the Minecraft Mod Public
* License 1.0, or MMPL. Please check the contents of the license located in
* http://www.mod-buildcraft.com/MMPL-1.0.txt
*/
package buildcraft.transport.network;
import io.netty.buffer.ByteBuf;
import net.minecraft.util.MathHelper;
import net.minecraftforge.common.util.ForgeDirection;
import buildcraft.api.core.EnumColor;
import buildcraft.core.lib.network.Packet;
import buildcraft.core.network.PacketIds;
import buildcraft.transport.TravelingItem;
public class PacketPipeTransportTraveler extends Packet {
public int posX;
public int posY;
public int posZ;
private TravelingItem item;
private boolean forceStackRefresh;
private int entityId;
private ForgeDirection input;
private ForgeDirection output;
private EnumColor color;
private float itemX;
private float itemY;
private float itemZ;
private float speed;
public PacketPipeTransportTraveler() {
}
public PacketPipeTransportTraveler(TravelingItem item, boolean forceStackRefresh) {
this.item = item;
this.forceStackRefresh = forceStackRefresh;
}
@Override
public void writeData(ByteBuf data) {
data.writeFloat((float) item.xCoord);
data.writeFloat((float) item.yCoord);
data.writeFloat((float) item.zCoord);
data.writeShort(item.id);
byte flags = (byte) ((item.output.ordinal() & 7) | ((item.input.ordinal() & 7) << 3) | (forceStackRefresh ? 64 : 0));
data.writeByte(flags);
data.writeByte(item.color != null ? item.color.ordinal() : -1);
data.writeFloat(item.getSpeed());
}
@Override
public void readData(ByteBuf data) {
this.itemX = data.readFloat();
this.itemY = data.readFloat();
this.itemZ = data.readFloat();
posX = MathHelper.floor_float(itemX);
posY = MathHelper.floor_float(itemY);
posZ = MathHelper.floor_float(itemZ);
this.entityId = data.readShort();
int flags = data.readUnsignedByte();
this.input = ForgeDirection.getOrientation((flags >> 3) & 7);
this.output = ForgeDirection.getOrientation(flags & 7);
byte c = data.readByte();
if (c != -1) {
this.color = EnumColor.fromId(c);
}
this.speed = data.readFloat();
this.forceStackRefresh = (flags & 0x40) > 0;
}
public int getTravelingEntityId() {
return entityId;
}
public ForgeDirection getInputOrientation() {
return input;
}
public ForgeDirection getOutputOrientation() {
return output;
}
public EnumColor getColor() {
return color;
}
public double getItemX() {
return itemX;
}
public double getItemY() {
return itemY;
}
public double getItemZ() {
return itemZ;
}
public float getSpeed() {
return speed;
}
public boolean forceStackRefresh() {
return forceStackRefresh;
}
@Override
public int getID() {
return PacketIds.PIPE_TRAVELER;
}
}