Package crazypants.enderio.conduit.packet

Source Code of crazypants.enderio.conduit.packet.PacketItemConduitFilter

package crazypants.enderio.conduit.packet;

import io.netty.buffer.ByteBuf;
import net.minecraftforge.common.util.ForgeDirection;
import cpw.mods.fml.common.network.simpleimpl.IMessage;
import cpw.mods.fml.common.network.simpleimpl.IMessageHandler;
import cpw.mods.fml.common.network.simpleimpl.MessageContext;
import crazypants.enderio.conduit.item.FilterRegister;
import crazypants.enderio.conduit.item.IItemConduit;
import crazypants.enderio.conduit.item.filter.IItemFilter;
import crazypants.util.DyeColor;

public class PacketItemConduitFilter extends AbstractConduitPacket<IItemConduit> implements IMessageHandler<PacketItemConduitFilter, IMessage> {

  private ForgeDirection dir;
  private boolean loopMode;
  private boolean roundRobin;
  private DyeColor colIn;
  private DyeColor colOut;
  private int priority;

  private IItemFilter inputFilter;
  private IItemFilter outputFilter;

  public PacketItemConduitFilter() {
  }

  public PacketItemConduitFilter(IItemConduit con, ForgeDirection dir) {
    super(con.getBundle().getEntity(), ConTypeEnum.ITEM);
    this.dir = dir;
    loopMode = con.isSelfFeedEnabled(dir);
    roundRobin = con.isRoundRobinEnabled(dir);
    colIn = con.getInputColor(dir);
    colOut = con.getOutputColor(dir);
    priority = con.getOutputPriority(dir);

    inputFilter = con.getInputFilter(dir);
    outputFilter = con.getOutputFilter(dir);
  }

  @Override
  public void toBytes(ByteBuf buf) {
    super.toBytes(buf);
    buf.writeShort(dir.ordinal());
    buf.writeBoolean(loopMode);
    buf.writeBoolean(roundRobin);
    buf.writeInt(priority);
    buf.writeShort(colIn.ordinal());
    buf.writeShort(colOut.ordinal());
    FilterRegister.writeFilter(buf, inputFilter);
    FilterRegister.writeFilter(buf, outputFilter);
  }

  @Override
  public void fromBytes(ByteBuf buf) {
    super.fromBytes(buf);
    dir = ForgeDirection.values()[buf.readShort()];
    loopMode = buf.readBoolean();
    roundRobin = buf.readBoolean();
    priority = buf.readInt();
    colIn = DyeColor.values()[buf.readShort()];
    colOut = DyeColor.values()[buf.readShort()];
    inputFilter = FilterRegister.readFilter(buf);
    outputFilter = FilterRegister.readFilter(buf);
  }

  @Override
  public IMessage onMessage(PacketItemConduitFilter message, MessageContext ctx) {
    IItemConduit conduit = message.getTileCasted(ctx);
    conduit.setSelfFeedEnabled(message.dir, message.loopMode);
    conduit.setRoundRobinEnabled(message.dir, message.roundRobin);
    conduit.setInputColor(message.dir, message.colIn);
    conduit.setOutputColor(message.dir, message.colOut);
    conduit.setOutputPriority(message.dir, message.priority);
    applyFilter(message.dir, conduit, message.inputFilter, true);
    applyFilter(message.dir, conduit, message.outputFilter, false);

    message.getWorld(ctx).markBlockForUpdate(message.x, message.y, message.z);
    return null;
  }

  private void applyFilter(ForgeDirection dir, IItemConduit conduit, IItemFilter filter, boolean isInput) {
    if(isInput) {
      conduit.setInputFilter(dir, filter);
    } else {
      conduit.setOutputFilter(dir, filter);
    }
    return;
  }

}
TOP

Related Classes of crazypants.enderio.conduit.packet.PacketItemConduitFilter

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.