Ejemplo n.º 1
0
 public static Collection<ItemStack> getContainersFilledWith(FluidStack fluidStack) {
   List<ItemStack> containers = new ArrayList<ItemStack>();
   for (FluidContainerData data : FluidContainerRegistry.getRegisteredFluidContainerData()) {
     FluidStack inContainer = FluidItemHelper.getFluidStackInContainer(data.filledContainer);
     if (inContainer != null && inContainer.containsFluid(fluidStack))
       containers.add(data.filledContainer.copy());
   }
   return containers;
 }
  private void normalOperation(byte type) {

    int amount = tank[1].getCapacity() - tank[1].getFluidAmount();

    if (amount > FluidContainerRegistry.BUCKET_VOLUME / 10)
      amount = FluidContainerRegistry.BUCKET_VOLUME / 10;
    if (amount > 0) {
      FluidStack fluidStack;
      FluidStack activeLava;
      int activeValue;

      if (tank[0].getFluid().getFluid() == ModFluids.ActiveLava) {

        fluidStack = tank[0].drain(amount, true);
        activeLava = new FluidStack(ModFluids.ActiveLava, fluidStack.amount);
        activeValue = ((ActiveLava) activeLava.getFluid()).getActiveValue(fluidStack);

      } else {

        activeValue = tank[0].getFluid().getFluid().getTemperature();
        fluidStack = tank[0].drain(amount * 2, true);
        activeLava = new FluidStack(ModFluids.ActiveLava, fluidStack.amount / 2);
      }

      ActiveLava fluid = (ActiveLava) tank[1].getFluid().getFluid();

      // activeValue += fluid.getActiveValue(tank[1].getFluid());

      activeValue += type * 6;

      activeValue = Math.abs(activeValue);

      ((ActiveLava) activeLava.getFluid()).setActiveValue(activeLava, activeValue);

      tank[1].fill(activeLava, true);

      if (Math.random() < 0.42) {
        fluid.increaseActiveValue(tank[1].getFluid());
        if (Math.random() < 0.16) decrStackSize(1, 1);
      }

    } else {

      ActiveLava fluid = (ActiveLava) tank[1].getFluid().getFluid();
      int activeValue = fluid.getActiveValue(tank[1].getFluid());
      activeValue += type * 2;
      fluid.setActiveValue(tank[1].getFluid(), activeValue);

      if (Math.random() < 0.22) decrStackSize(1, 1);

      if (Math.random() < 0.27) heatOperation(type);
    }
  }
 @Override
 public FluidStack drain(ForgeDirection from, FluidStack resource, boolean doDrain) {
   if (hasValidMaster() && canDrain(from, resource.getFluid())) {
     SmelteryLogic smeltery =
         (SmelteryLogic)
             worldObj.getTileEntity(
                 getMasterPosition().x, getMasterPosition().y, getMasterPosition().z);
     if (resource.getFluid() == smeltery.getFluid().getFluid()) {
       return smeltery.drain(resource.amount, doDrain);
     }
   }
   return null;
 }
  @Override
  public int fill(ForgeDirection from, FluidStack resource, boolean doFill) {
    if (from == ForgeDirection.UP && resource.getFluid().canBePlacedInWorld()) {
      return fluidTank.fill(resource, true);
    }

    return 0;
  }
  @Override
  public FluidStack drain(ForgeDirection from, FluidStack resource, boolean doDrain) {
    if (fluidTank.getFluid() != null
        && fluidTank.getFluid().getFluid() == resource.getFluid()
        && from == ForgeDirection.UP) {
      return drain(from, resource.amount, doDrain);
    }

    return null;
  }
 @Override
 public FluidStack drain(ForgeDirection from, FluidStack resource, boolean doDrain) {
   if ((from == ForgeDirection.UNKNOWN) || (this.sideCache[from.ordinal()] != 2)) {
     return null;
   }
   if ((resource == null) || (!resource.isFluidEqual(this.tank.getFluid()))) {
     return null;
   }
   return this.tank.drain(resource.amount, doDrain);
 }
  @Override
  public int fill(ForgeDirection from, FluidStack resource, boolean doFill) {
    if (worldObj.isRemote) return 0;
    if (resource == null) // What!?
    return 0;
    if (resource.getFluid() == null) return 0;
    if (resource.getFluid().getID() != FluidRegistry.LAVA.getID()) {
      return 0;
    }

    if (tank != null && tank.getFluid() != null && tank.getFluidAmount() > 0) {
      if (resource.getFluid().getID() != tank.getFluid().getFluid().getID()) {
        return 0;
      }
    } else if (tank == null) {
      setTier(getTier());
    }

    return tank.fill(resource, doFill);
  }
  /* IFluidBlock */
  @Override
  public FluidStack drain(World world, int x, int y, int z, boolean doDrain) {

    if (!isSourceBlock(world, x, y, z)) {
      return null;
    }
    if (doDrain) {
      world.setBlockToAir(x, y, z);
    }
    return stack.copy();
  }
 @Override
 public int fill(ForgeDirection from, FluidStack resource, boolean doFill) {
   if (hasValidMaster() && resource != null && canFill(from, resource.getFluid())) {
     SmelteryLogic smeltery =
         (SmelteryLogic)
             worldObj.getTileEntity(
                 getMasterPosition().x, getMasterPosition().y, getMasterPosition().z);
     return smeltery.fill(resource, doFill);
   } else {
     return 0;
   }
 }
  private void outputActiveLava() {
    FluidStack fluid = tank[1].getFluid();
    if (fluid != null) {
      if (itemStacks[2] != null && itemStacks[2].stackSize == 1) {
        ItemStack itemStack = itemStacks[2];
        if (FluidContainerRegistry.isEmptyContainer(itemStack)) {
          if (fluid.amount >= FluidContainerRegistry.BUCKET_VOLUME) {
            FluidStack oneBucketOfFluid =
                new FluidStack(fluid, FluidContainerRegistry.BUCKET_VOLUME);
            ItemStack filledBucket =
                FluidContainerRegistry.fillFluidContainer(
                    oneBucketOfFluid, FluidContainerRegistry.EMPTY_BUCKET);
            itemStacks[2] = filledBucket;
            fluid.amount -= FluidContainerRegistry.BUCKET_VOLUME;
          }
        } else if (itemStack.getItem() instanceof IFluidContainerItem && (workingTick % 20) == 10) {
          if (fluid.amount >= FluidContainerRegistry.BUCKET_VOLUME) {

            IFluidContainerItem fluidContainerItem = (IFluidContainerItem) itemStack.getItem();
            FluidStack fluidStack = fluid.copy();

            if (fluidStack.amount > FluidContainerRegistry.BUCKET_VOLUME)
              fluidStack.amount = FluidContainerRegistry.BUCKET_VOLUME;

            int amount = fluidContainerItem.fill(itemStack, fluidStack, true);
            if (amount > 0) {
              fluid.amount -= amount;
            }
            if (fluid.amount == 0) tank[1].setFluid(null);
          }
        }
      }
    }
  }
  private void initOperation(byte type) {

    if (tank[0].getFluidAmount() >= FluidContainerRegistry.BUCKET_VOLUME) {

      FluidStack fluidStacks = tank[0].drain(FluidContainerRegistry.BUCKET_VOLUME, true);
      FluidStack activeLava;
      int activeValue = 0;
      if (fluidStacks.getFluid() == ModFluids.ActiveLava) {
        activeLava = new FluidStack(ModFluids.ActiveLava, FluidContainerRegistry.BUCKET_VOLUME / 5);
        activeValue = ((ActiveLava) fluidStacks.getFluid()).getActiveValue(fluidStacks);
      } else
        activeLava =
            new FluidStack(ModFluids.ActiveLava, FluidContainerRegistry.BUCKET_VOLUME / 10);

      activeValue += type * 3;
      ((ActiveLava) activeLava.getFluid()).setActiveValue(activeLava, activeValue);

      tank[1].fill(activeLava, true);

      decrStackSize(1, 1);
    }
  }
  @Override
  public boolean canDrain(ForgeDirection from, Fluid fluid) {
    // Check that the drain is coming from the from the front of the block
    // and that the fluid to be drained is in the smeltery.
    if (!hasValidMaster()) return false;

    boolean containsFluid = fluid == null;
    if (fluid != null) {
      SmelteryLogic smeltery =
          (SmelteryLogic)
              worldObj.getTileEntity(
                  getMasterPosition().x, getMasterPosition().y, getMasterPosition().z);
      for (FluidStack fstack : smeltery.moltenMetal) {
        if (fstack.getFluidID() == fluid.getID()) {
          containsFluid = true;
          break;
        }
      }
    }
    // return from == getForgeDirection().getOpposite() && containsFluid;
    return containsFluid;
  }
  private void inputLava() {

    if (itemStacks[0] != null) {
      Item item = itemStacks[0].getItem();

      if (item != null) {
        if (item == Items.lava_bucket || item == ModItems.itemActiveLavaBucket) {

          if (tank[0].getCapacity() - tank[0].getFluidAmount()
              >= FluidContainerRegistry.BUCKET_VOLUME) {
            FluidStack fluidStack = FluidContainerRegistry.getFluidForFilledItem(itemStacks[0]);

            int result = tank[0].fill(fluidStack, false);

            if (result == FluidContainerRegistry.BUCKET_VOLUME) {
              itemStacks[0] = new ItemStack(Items.bucket, 1);
              tank[0].fill(fluidStack, true);
            }
          }

        } else if (item instanceof IFluidContainerItem && (workingTick % 20) == 5) {
          IFluidContainerItem fluidContainerItem = (IFluidContainerItem) item;
          FluidStack fluidStack = fluidContainerItem.getFluid(itemStacks[0]);

          if (fluidStack != null) {
            fluidStack = fluidStack.copy();

            if (fluidStack.amount > FluidContainerRegistry.BUCKET_VOLUME)
              fluidStack.amount = FluidContainerRegistry.BUCKET_VOLUME;

            int result = tank[0].fill(fluidStack, true);
            if (result > 0) {
              fluidContainerItem.drain(itemStacks[0], result, true);
            }
          }
        }
      }
    }
  }
 @Override
 public int fill(ForgeDirection from, FluidStack resource, boolean doFill) {
   if (resource.getFluid().getName().equalsIgnoreCase("steam"))
     return _steamTank.fill(resource, doFill);
   return 0;
 }
  @Override
  public void onUpdate() {
    if (!worldObj.isRemote) {
      ChargeUtils.discharge(2, this);

      if (inventory[0] != null) {
        if (inventory[0].getItem() instanceof IFluidContainerItem
            && ((IFluidContainerItem) inventory[0].getItem()).getFluid(inventory[0]) != null) {
          if (((IFluidContainerItem) inventory[0].getItem())
              .getFluid(inventory[0])
              .getFluid()
              .canBePlacedInWorld()) {
            fluidTank.fill(FluidContainerUtils.extractFluid(fluidTank, inventory[0]), true);

            if (((IFluidContainerItem) inventory[0].getItem()).getFluid(inventory[0]) == null
                || fluidTank.getFluidAmount() == fluidTank.getCapacity()) {
              if (inventory[1] == null) {
                inventory[1] = inventory[0].copy();
                inventory[0] = null;

                markDirty();
              }
            }
          }
        } else if (FluidContainerRegistry.isFilledContainer(inventory[0])) {
          FluidStack itemFluid = FluidContainerRegistry.getFluidForFilledItem(inventory[0]);

          if ((fluidTank.getFluid() == null && itemFluid.amount <= fluidTank.getCapacity())
              || fluidTank.getFluid().amount + itemFluid.amount <= fluidTank.getCapacity()) {
            if ((fluidTank.getFluid() != null && !fluidTank.getFluid().isFluidEqual(itemFluid))
                || !itemFluid.getFluid().canBePlacedInWorld()) {
              return;
            }

            ItemStack containerItem = inventory[0].getItem().getContainerItem(inventory[0]);

            boolean filled = false;

            if (containerItem != null) {
              if (inventory[1] == null
                  || (inventory[1].isItemEqual(containerItem)
                      && inventory[1].stackSize + 1 <= containerItem.getMaxStackSize())) {
                inventory[0] = null;

                if (inventory[1] == null) {
                  inventory[1] = containerItem;
                } else {
                  inventory[1].stackSize++;
                }

                filled = true;
              }
            } else {
              inventory[0].stackSize--;

              if (inventory[0].stackSize == 0) {
                inventory[0] = null;
              }

              filled = true;
            }

            if (filled) {
              fluidTank.fill(itemFluid, true);
              markDirty();
            }
          }
        }
      }

      if (getEnergy() >= usage.fluidicPlenisherUsage
          && worldObj.getWorldTime() % 10 == 0
          && fluidTank.getFluidAmount() >= FluidContainerRegistry.BUCKET_VOLUME) {
        if (fluidTank.getFluid().getFluid().canBePlacedInWorld()) {
          if (!finishedCalc) {
            doPlenish();
          } else {
            Coord4D below = Coord4D.get(this).getFromSide(ForgeDirection.DOWN);

            if (canReplace(below, false, false)
                && getEnergy() >= usage.fluidicPlenisherUsage
                && fluidTank.getFluidAmount() >= FluidContainerRegistry.BUCKET_VOLUME) {
              if (fluidTank.getFluid().getFluid().canBePlacedInWorld()) {
                worldObj.setBlock(
                    below.xCoord,
                    below.yCoord,
                    below.zCoord,
                    MekanismUtils.getFlowingBlock(fluidTank.getFluid().getFluid()),
                    0,
                    3);

                setEnergy(getEnergy() - usage.fluidicPlenisherUsage);
                fluidTank.drain(FluidContainerRegistry.BUCKET_VOLUME, true);
              }
            }
          }
        }
      }
    }
  }
Ejemplo n.º 16
0
 public static int getFluidId(FluidStack stack) {
   if (stack == null) return -1;
   if (stack.getFluid() == null) return -1;
   return FluidRegistry.getFluidID(stack.getFluid().getName());
 }
  @Override
  protected void drawGuiContainerBackgroundLayer(float f, int mouseX, int mouseY) {
    GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
    this.mc.getTextureManager().bindTexture(background);
    int cornerX = (width - xSize) / 2 + 36;
    int cornerY = (height - ySize) / 2;
    drawTexturedModalRect(cornerX + 46, cornerY, 0, 0, 176, ySize);

    // Fuel - Lava
    this.mc.getTextureManager().bindTexture(TextureMap.locationBlocksTexture);
    if (scomp.fuelGague > 0) {
      Icon lavaIcon = Block.lavaStill.getIcon(0, 0);
      int fuel = scomp.getScaledFuelGague(52);
      int count = 0;
      while (fuel > 0) {
        int size = fuel >= 16 ? 16 : fuel;
        fuel -= size;
        drawLiquidRect(cornerX + 117, (cornerY + 68) - size - 16 * count, lavaIcon, 12, size);
        count++;
      }
    }

    FluidTankInfo[] info = logic.getTankInfo(ForgeDirection.UNKNOWN);
    int capacity = 0;

    for (int i = 0; i < info.length - 1; i++) {
      FluidStack liquid = info[i].fluid;
      if (liquid != null) capacity += info[i].capacity;
    }

    // Liquids - molten metal
    int base = 0;
    for (int i = 0; i < info.length - 1; i++) {
      FluidStack liquid = info[i].fluid;
      Icon renderIndex = liquid.getFluid().getStillIcon();
      int basePos = 54;
      if (capacity > 0) {
        int liquidSize = liquid.amount * 52 / capacity;
        if (liquidSize == 0) liquidSize = 1;
        while (liquidSize > 0) {
          int size = liquidSize >= 16 ? 16 : liquidSize;
          drawLiquidRect(cornerX + basePos, (cornerY + 68) - size - base, renderIndex, 16, size);
          drawLiquidRect(
              cornerX + basePos + 16, (cornerY + 68) - size - base, renderIndex, 16, size);
          drawLiquidRect(
              cornerX + basePos + 32, (cornerY + 68) - size - base, renderIndex, 16, size);
          drawLiquidRect(
              cornerX + basePos + 48, (cornerY + 68) - size - base, renderIndex, 4, size);
          liquidSize -= size;
          base += size;
        }
      }
    }

    // Liquid gague
    GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);

    this.mc.getTextureManager().bindTexture(background);
    drawTexturedModalRect(cornerX + 54, cornerY + 16, 176, 76, 52, 52);

    // Side inventory
    GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
    this.mc.getTextureManager().bindTexture(backgroundSide);
    // if (logic.layers > 0)
    {
      /*if (logic.layers == 1)
      {
          drawTexturedModalRect(cornerX - 46, cornerY, 0, 0, 98, 43);
          drawTexturedModalRect(cornerX - 46, cornerY + 43, 0, 133, 98, 25);
      }
      else if (logic.layers == 2)
      {
          drawTexturedModalRect(cornerX - 46, cornerY, 0, 0, 98, 61);
          drawTexturedModalRect(cornerX - 46, cornerY + 61, 0, 97, 98, 61);
      }
      else*/
      {
        drawTexturedModalRect(cornerX - 46, cornerY, 0, 0, 98, ySize - 8);
      }
      drawTexturedModalRect(cornerX + 32, (int) (cornerY + 8 + 127 * currentScroll), 98, 0, 12, 15);
    }

    // Temperature
    int slotSize = logic.getSizeInventory();
    if (slotSize > 24) slotSize = 24;
    for (int iter = 0; iter < slotSize; iter++) {
      int slotTemp = logic.getTempForSlot(iter + slotPos * 3) - 20;
      int maxTemp = logic.getMeltingPointForSlot(iter + slotPos * 3) - 20;
      if (slotTemp > 0 && maxTemp > 0) {
        int size = 16 * slotTemp / maxTemp + 1;
        drawTexturedModalRect(
            cornerX - 38 + (iter % 3 * 22),
            cornerY + 8 + (iter / 3 * 18) + 16 - size,
            98,
            15 + 16 - size,
            5,
            size);
      }
    }
  }