/*
* Copyright (c) CovertJaguar, 2014 http://railcraft.info
*
* This code is the property of CovertJaguar
* and may only be used with explicit written
* permission unless otherwise specified on the
* license page at http://railcraft.info/wiki/info:license.
*/
package mods.railcraft.common.util.network;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.util.Collection;
import mods.railcraft.api.signals.ISignalBlockTile;
import mods.railcraft.api.signals.SignalBlock;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World;
import mods.railcraft.api.core.WorldCoordinate;
import mods.railcraft.api.signals.AbstractPair;
import mods.railcraft.api.signals.IControllerTile;
import mods.railcraft.api.signals.IReceiverTile;
import mods.railcraft.api.signals.SignalController;
import mods.railcraft.api.signals.SignalReceiver;
import mods.railcraft.common.util.misc.Game;
public class PacketPairUpdate extends RailcraftPacket {
private AbstractPair pairing;
private PacketType packetType;
public PacketPairUpdate(PacketType packetType) {
super();
this.packetType = packetType;
}
public PacketPairUpdate(AbstractPair pairing) {
this.pairing = pairing;
}
@Override
public void writeData(DataOutputStream data) throws IOException {
data.writeInt(pairing.getTile().xCoord);
data.writeInt(pairing.getTile().yCoord);
data.writeInt(pairing.getTile().zCoord);
Collection<WorldCoordinate> pairs = pairing.getPairs();
data.writeByte(pairs.size());
for (WorldCoordinate coord : pairs) {
data.writeInt(coord.x);
data.writeInt(coord.y);
data.writeInt(coord.z);
}
}
@Override
@SideOnly(Side.CLIENT)
public void readData(DataInputStream data) throws IOException {
World world = Game.getWorld();
int x = data.readInt();
int y = data.readInt();
int z = data.readInt();
TileEntity tile = world.getTileEntity(x, y, z);
if (packetType == PacketType.CONTROLLER_UPDATE) {
if (tile instanceof IControllerTile)
pairing = ((IControllerTile) tile).getController();
} else if (packetType == PacketType.RECEIVER_UPDATE) {
if (tile instanceof IReceiverTile)
pairing = ((IReceiverTile) tile).getReceiver();
} else if (packetType == PacketType.SIGNAL_UPDATE) {
if (tile instanceof ISignalBlockTile)
pairing = ((ISignalBlockTile) tile).getSignalBlock();
}
if (pairing != null) {
try {
pairing.clearPairings();
} catch (Throwable error) {
Game.logErrorAPI("Railcraft", error, AbstractPair.class);
}
int size = data.readByte();
for (int i = 0; i < size; i++) {
pairing.addPair(data.readInt(), data.readInt(), data.readInt());
}
}
}
@Override
public int getID() {
if (pairing instanceof SignalController)
return PacketType.CONTROLLER_UPDATE.ordinal();
if (pairing instanceof SignalReceiver)
return PacketType.RECEIVER_UPDATE.ordinal();
if (pairing instanceof SignalBlock)
return PacketType.SIGNAL_UPDATE.ordinal();
return -1;
}
}