Exemplo n.º 1
0
  @Override
  public TMultiPart newPart(
      ItemStack stack,
      EntityPlayer player,
      World world,
      BlockCoord coord,
      int face,
      Vector3 vecHit) {
    TransmitterType type = TransmitterType.values()[stack.getItemDamage()];

    if (type.getTransmission() != TransmissionType.ITEM) {
      Coord4D obj = new Coord4D(coord.x, coord.y, coord.z, world.provider.dimensionId);

      List<ITransmitterNetwork<?, ?>> networks = new ArrayList<ITransmitterNetwork<?, ?>>();

      for (ForgeDirection side : ForgeDirection.VALID_DIRECTIONS) {
        TileEntity tile = obj.getFromSide(side).getTileEntity(world);

        if (tile instanceof IGridTransmitter
            && TransmissionType.checkTransmissionType(tile, type.getTransmission())) {
          networks.add(((IGridTransmitter) tile).getTransmitterNetwork());
        }
      }

      if (networks.size() > 0) {
        if (!networks.iterator().next().canMerge(networks)) {
          return null;
        }
      }
    }

    return PartTransmitter.getPartType(TransmitterType.values()[getDamage(stack)]);
  }
Exemplo n.º 2
0
  @Override
  public void load(NBTTagCompound nbtTags) {
    super.load(nbtTags);

    if (nbtTags.hasKey("cacheFluid")) {
      cacheFluid = FluidStack.loadFluidStackFromNBT(nbtTags.getCompoundTag("cacheFluid"));
    }
  }
Exemplo n.º 3
0
  @Override
  public void onChunkUnload() {
    if (!world().isRemote) {
      if (lastWrite != null) {
        if (getTransmitterNetwork().fluidStored != null) {
          getTransmitterNetwork().fluidStored.amount -= lastWrite.amount;

          if (getTransmitterNetwork().fluidStored.amount <= 0) {
            getTransmitterNetwork().fluidStored = null;
          }
        }
      }
    }

    super.onChunkUnload();
  }
Exemplo n.º 4
0
  @Override
  public void update() {
    if (!world().isRemote) {
      if (cacheFluid != null) {
        if (getTransmitterNetwork().fluidStored == null) {
          getTransmitterNetwork().fluidStored = cacheFluid;
        } else {
          getTransmitterNetwork().fluidStored.amount += cacheFluid.amount;
        }

        cacheFluid = null;
      }

      if (getTransmitterNetwork(false) != null && getTransmitterNetwork(false).getSize() > 0) {
        int last = lastWrite != null ? lastWrite.amount : 0;

        if (last != getSaveShare()) {
          MekanismUtils.saveChunk(tile());
        }
      }

      IFluidHandler[] connectedAcceptors = PipeUtils.getConnectedAcceptors(tile());

      for (ForgeDirection side : getConnections(ConnectionType.PULL)) {
        if (connectedAcceptors[side.ordinal()] != null) {
          IFluidHandler container = connectedAcceptors[side.ordinal()];

          if (container != null) {
            FluidStack received = container.drain(side.getOpposite(), 100, false);

            if (received != null && received.amount != 0) {
              container.drain(
                  side.getOpposite(), getTransmitterNetwork().emit(received, true), true);
            }
          }
        }
      }
    }

    super.update();
  }
Exemplo n.º 5
0
  @Override
  public void save(NBTTagCompound nbtTags) {
    super.save(nbtTags);

    if (getTransmitterNetwork().fluidStored != null) {
      int remain =
          getTransmitterNetwork().fluidStored.amount % getTransmitterNetwork().transmitters.size();
      int toSave =
          getTransmitterNetwork().fluidStored.amount / getTransmitterNetwork().transmitters.size();

      if (getTransmitterNetwork().isFirst((IGridTransmitter<FluidNetwork>) tile())) {
        toSave += remain;
      }

      if (toSave > 0) {
        FluidStack stack = new FluidStack(getTransmitterNetwork().fluidStored.getFluid(), toSave);
        lastWrite = stack;
        nbtTags.setCompoundTag("cacheFluid", stack.writeToNBT(new NBTTagCompound()));
      }
    }
  }