/* * 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 java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import mods.railcraft.api.signals.ISignalBlockTile; import mods.railcraft.api.signals.SignalBlock; import net.minecraft.tileentity.TileEntity; import net.minecraft.world.World; import net.minecraftforge.common.DimensionManager; 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 net.minecraft.entity.player.EntityPlayerMP; public class PacketPairRequest extends RailcraftPacket { private AbstractPair pairing; private EntityPlayerMP player; private PacketType packetType; public PacketPairRequest(EntityPlayerMP player, PacketType type) { super(); this.player = player; this.packetType = type; } public PacketPairRequest(AbstractPair pairing) { this.pairing = pairing; } @Override public void writeData(DataOutputStream data) throws IOException { TileEntity tile = pairing.getTile(); data.writeInt(tile.getWorldObj().provider.dimensionId); data.writeInt(tile.xCoord); data.writeInt(tile.yCoord); data.writeInt(tile.zCoord); } @Override public void readData(DataInputStream data) throws IOException { World world = DimensionManager.getWorld(data.readInt()); if (world == null) return; int x = data.readInt(); int y = data.readInt(); int z = data.readInt(); TileEntity tile = world.getTileEntity(x, y, z); switch (packetType) { case CONTROLLER_REQUEST: if (tile instanceof IControllerTile) pairing = ((IControllerTile) tile).getController(); break; case RECEIVER_REQUEST: if (tile instanceof IReceiverTile) pairing = ((IReceiverTile) tile).getReceiver(); break; case SIGNAL_REQUEST: if (tile instanceof ISignalBlockTile) pairing = ((ISignalBlockTile) tile).getSignalBlock(); break; } if (pairing != null && player != null) { PacketPairUpdate pkt = new PacketPairUpdate(pairing); PacketDispatcher.sendToPlayer(pkt, player); } } @Override public int getID() { if (pairing instanceof SignalController) return PacketType.CONTROLLER_REQUEST.ordinal(); if (pairing instanceof SignalReceiver) return PacketType.RECEIVER_REQUEST.ordinal(); if (pairing instanceof SignalBlock) return PacketType.SIGNAL_REQUEST.ordinal(); return -1; } }