package mekanism.common.network;
import io.netty.buffer.ByteBuf;
import mekanism.api.Coord4D;
import mekanism.common.PacketHandler;
import mekanism.common.network.PacketSecurityMode.SecurityModeMessage;
import mekanism.common.security.ISecurityItem;
import mekanism.common.security.ISecurityTile;
import mekanism.common.security.ISecurityTile.SecurityMode;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.EnumHand;
import net.minecraftforge.fml.common.network.simpleimpl.IMessage;
import net.minecraftforge.fml.common.network.simpleimpl.IMessageHandler;
import net.minecraftforge.fml.common.network.simpleimpl.MessageContext;
public class PacketSecurityMode implements IMessageHandler<SecurityModeMessage, IMessage>
{
@Override
public IMessage onMessage(SecurityModeMessage message, MessageContext context)
{
EntityPlayer player = PacketHandler.getPlayer(context);
PacketHandler.handlePacket(new Runnable() {
@Override
public void run()
{
if(message.packetType == SecurityPacketType.BLOCK)
{
TileEntity tileEntity = message.coord4D.getTileEntity(player.worldObj);
if(tileEntity instanceof ISecurityTile)
{
String owner = ((ISecurityTile)tileEntity).getSecurity().getOwner();
if(owner != null && player.getName().equals(owner))
{
((ISecurityTile)tileEntity).getSecurity().setMode(message.value);
}
}
}
else {
ItemStack stack = player.getHeldItem(message.currentHand);
if(stack.getItem() instanceof ISecurityItem)
{
((ISecurityItem)stack.getItem()).setSecurity(stack, message.value);
}
}
}
}, player);
return null;
}
public static class SecurityModeMessage implements IMessage
{
public SecurityPacketType packetType;
public Coord4D coord4D;
public EnumHand currentHand;
public SecurityMode value;
public SecurityModeMessage() {}
public SecurityModeMessage(Coord4D coord, SecurityMode control)
{
packetType = SecurityPacketType.BLOCK;
coord4D = coord;
value = control;
}
public SecurityModeMessage(EnumHand hand, SecurityMode control)
{
packetType = SecurityPacketType.ITEM;
currentHand = hand;
value = control;
}
@Override
public void toBytes(ByteBuf dataStream)
{
dataStream.writeInt(packetType.ordinal());
if(packetType == SecurityPacketType.BLOCK)
{
coord4D.write(dataStream);
}
else {
dataStream.writeInt(currentHand.ordinal());
}
dataStream.writeInt(value.ordinal());
}
@Override
public void fromBytes(ByteBuf dataStream)
{
packetType = SecurityPacketType.values()[dataStream.readInt()];
if(packetType == SecurityPacketType.BLOCK)
{
coord4D = Coord4D.read(dataStream);
}
else {
currentHand = EnumHand.values()[dataStream.readInt()];
}
value = SecurityMode.values()[dataStream.readInt()];
}
}
public static enum SecurityPacketType
{
BLOCK,
ITEM
}
}