Package extracells.tileentity

Source Code of extracells.tileentity.TileEntityMonitorStorageFluid

package extracells.tileentity;

import static extracells.ItemEnum.FLUIDDISPLAY;

import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.network.INetworkManager;
import net.minecraft.network.packet.Packet;
import net.minecraft.network.packet.Packet132TileEntityData;
import net.minecraft.world.World;
import net.minecraftforge.common.ForgeDirection;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.fluids.*;
import appeng.api.IAEItemStack;
import appeng.api.IItemList;
import appeng.api.Util;
import appeng.api.WorldCoord;
import appeng.api.events.GridTileLoadEvent;
import appeng.api.events.GridTileUnloadEvent;
import appeng.api.me.tiles.IDirectionalMETile;
import appeng.api.me.tiles.IGridMachine;
import appeng.api.me.tiles.IStorageAware;
import appeng.api.me.util.IGridInterface;
import appeng.api.me.util.IMEInventoryHandler;
import cpw.mods.fml.common.network.PacketDispatcher;
import extracells.ItemEnum;
import extracells.items.ItemFluidDisplay;

@SuppressWarnings("deprecation")
public class TileEntityMonitorStorageFluid extends ColorableECTile implements IGridMachine, IDirectionalMETile, IStorageAware
{
  private IGridInterface grid;
  private boolean locked, matrixed, powerStatus = false, networkReady = true;
  private Fluid fluid;
  private long fluidAmount;

  public void setLocked(boolean _locked)
  {
    locked = _locked;
  }

  public boolean isLocked()
  {
    return locked;
  }

  public void setMatrixed()
  {
    matrixed = true;
    PacketDispatcher.sendPacketToAllPlayers(getDescriptionPacket());
  }

  public boolean isMatrixed()
  {
    return matrixed;
  }

  public void setFluid(Fluid _fluid)
  {
    fluid = _fluid;
    if (grid != null && grid.getCellArray() != null)
      onNetworkInventoryChange(getGrid().getCellArray().getAvailableItems());
    PacketDispatcher.sendPacketToAllPlayers(getDescriptionPacket());
  }

  public Fluid getFluid()
  {
    return fluid;
  }

  public long getAmount()
  {
    return fluidAmount;
  }

  public void writeToNBT(NBTTagCompound nbtTag)
  {
    super.writeToNBT(nbtTag);
    nbtTag.setString("fluid", fluid != null ? fluid.getName() : "");
    nbtTag.setBoolean("matrixed", matrixed);
    nbtTag.setBoolean("locked", locked);
  }

  public void readFromNBT(NBTTagCompound nbtTag)
  {
    super.readFromNBT(nbtTag);
    fluid = FluidRegistry.getFluid(nbtTag.getString("fluid"));
    matrixed = nbtTag.getBoolean("matrixed");
    locked = nbtTag.getBoolean("locked");
  }

  @Override
  public void onNetworkInventoryChange(IItemList iss)
  {
    long lastAmount = fluidAmount;
    fluidAmount = 0;
    if (fluid != null)
    {
      for (IAEItemStack stack : iss)
      {
        if (stack != null && stack.getItem() == ItemEnum.FLUIDDISPLAY.getItemInstance() && stack.getItemDamage() == fluid.getID())
        {
          fluidAmount += stack.getStackSize();
        }
      }
    }
    if (lastAmount != fluidAmount)
    {
      lastAmount = fluidAmount;
      PacketDispatcher.sendPacketToAllPlayers(getDescriptionPacket());
    }
  }

  @Override
  public Packet getDescriptionPacket()
  {
    NBTTagCompound nbtTag = getColorDataForPacket();
    writeToNBT(nbtTag);
    nbtTag.setBoolean("networkReady", networkReady);
    nbtTag.setBoolean("powerStatus", powerStatus);
    nbtTag.setLong("amount", fluidAmount);
    nbtTag.setInteger("meta", getBlockMetadata());
    return new Packet132TileEntityData(this.xCoord, this.yCoord, this.zCoord, 1, nbtTag);
  }

  @Override
  public void onDataPacket(INetworkManager net, Packet132TileEntityData packet)
  {
    super.onDataPacket(net, packet);
    readFromNBT(packet.data);
    networkReady = packet.data.getBoolean("networkReady");
    powerStatus = packet.data.getBoolean("powerStatus");
    fluidAmount = packet.data.getLong("amount");
    blockMetadata = packet.data.getInteger("meta");
  }

  @Override
  public void validate()
  {
    super.validate();
    MinecraftForge.EVENT_BUS.post(new GridTileLoadEvent(this, worldObj, getLocation()));
  }

  @Override
  public void invalidate()
  {
    super.invalidate();
    MinecraftForge.EVENT_BUS.post(new GridTileUnloadEvent(this, worldObj, getLocation()));
  }

  @Override
  public WorldCoord getLocation()
  {
    return new WorldCoord(xCoord, yCoord, zCoord);
  }

  @Override
  public boolean isValid()
  {
    return true;
  }

  @Override
  public void setPowerStatus(boolean hasPower)
  {
    powerStatus = hasPower;
    PacketDispatcher.sendPacketToAllPlayers(getDescriptionPacket());
    worldObj.markBlockForRenderUpdate(xCoord, yCoord, zCoord);
  }

  @Override
  public boolean isPowered()
  {
    return powerStatus;
  }

  @Override
  public IGridInterface getGrid()
  {
    return grid;
  }

  @Override
  public void setGrid(IGridInterface gi)
  {
    if (!worldObj.isRemote)
    {
      grid = gi;
      if (gi != null)
      {
        IMEInventoryHandler cellArray = gi.getCellArray();
        if (cellArray != null)
          onNetworkInventoryChange(cellArray.getAvailableItems());
      } else
      {
        setPowerStatus(false);
      }
      PacketDispatcher.sendPacketToAllPlayers(getDescriptionPacket());
    }
  }

  @Override
  public World getWorld()
  {
    return worldObj;
  }

  @Override
  public boolean canConnect(ForgeDirection dir)
  {
    return dir.ordinal() != getBlockMetadata();
  }

  @Override
  public float getPowerDrainPerTick()
  {
    return 5.0F;
  }

  public void setNetworkReady(boolean isReady)
  {
    networkReady = isReady;

    if (getGrid() != null)
    {
      IMEInventoryHandler cellArray = getGrid().getCellArray();
      if (cellArray != null)
        onNetworkInventoryChange(cellArray.getAvailableItems());
    }

    PacketDispatcher.sendPacketToAllPlayers(getDescriptionPacket());
  }

  public boolean isMachineActive()
  {
    return powerStatus && networkReady;
  }

  public boolean drainFluid(FluidStack toExport)
  {
    IAEItemStack toDrain = Util.createItemStack(new ItemStack(FLUIDDISPLAY.getItemInstance(), 0, toExport.fluidID));
    toDrain.setStackSize(toExport.amount);

    if (grid != null)
    {
      IMEInventoryHandler cellArray = grid.getCellArray();
      if (cellArray != null)
      {
        for (IAEItemStack fluidstack : cellArray.getAvailableItems())
        {
          if (fluidstack != null && fluidstack.getItem() instanceof ItemFluidDisplay && fluidstack.getItemDamage() == toExport.fluidID && fluidstack.getStackSize() >= toExport.amount)
          {
            IAEItemStack takenStack = cellArray.extractItems(Util.createItemStack(new ItemStack(toDrain.getItem(), (int) (toDrain.getStackSize()), toDrain.getItemDamage())));

            if (takenStack == null)
            {
              return false;
            } else if (takenStack.getStackSize() != (int) toDrain.getStackSize())
            {
              cellArray.addItems(takenStack);
              return false;
            } else
            {
              return true;
            }
          }
        }
      }
    }
    return false;
  }

  public ItemStack fillContainer(ItemStack container)
  {
    container.stackSize = 1;
    Item item = container.getItem();
    if (FluidContainerRegistry.isEmptyContainer(container))
    {
      ItemStack toReturn = FluidContainerRegistry.fillFluidContainer(new FluidStack(fluid, 1000), container);
      if (toReturn != null)
        if (drainFluid(FluidContainerRegistry.getFluidForFilledItem(toReturn)))
          return toReturn;
    } else if (item instanceof IFluidContainerItem)
    {
      IFluidContainerItem fluidContainer = (IFluidContainerItem) item;
      FluidStack inContainer = fluidContainer.getFluid(container);
      if (inContainer == null || inContainer.amount <= 0)
      {
        int amountDrained = fluidContainer.fill(container, new FluidStack(fluid, fluidContainer.getCapacity(container)), true);
        if (amountDrained >= 0)
          if (drainFluid(new FluidStack(fluid, amountDrained)))
            return container;
      }
    }
    return null;
  }
}
TOP

Related Classes of extracells.tileentity.TileEntityMonitorStorageFluid

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.