Exemplo n.º 1
0
  /**
   * We have to handle cheese by itself because the barrel recipe manager doesnt take kindly to null
   * input items.
   */
  private boolean handleCheese() {
    ItemStack inIS = this.getInputStack();
    if (this.getSealed()
        && this.fluid != null
        && this.fluid.getFluid() == TFCFluids.MILKCURDLED
        && (inIS == null
            || inIS.getItem() instanceof IFood
                && ((IFood) inIS.getItem()).getFoodGroup() != EnumFoodGroup.Dairy
                && ((IFood) inIS.getItem()).isEdible(inIS)
                && Food.getWeight(inIS) <= 20.0f)) {
      recipe =
          new BarrelRecipe(
                  null,
                  new FluidStack(TFCFluids.MILKCURDLED, 10000),
                  ItemFoodTFC.createTag(new ItemStack(TFCItems.cheese, 1), 160),
                  null)
              .setMinTechLevel(0);
      if (!worldObj.isRemote) {
        int time = 0;
        if (sealtime > 0) time = (int) TFC_Time.getTotalHours() - sealtime;
        else if (unsealtime > 0) time = (int) TFC_Time.getTotalHours() - unsealtime;

        // Make sure that the recipe meets the time requirements
        if (time < recipe.sealTime) return true;
        float w = this.fluid.amount / 62.5f;

        ItemStack is = ItemFoodTFC.createTag(new ItemStack(TFCItems.cheese), w);

        if (inIS != null && inIS.getItem() instanceof IFood) {
          int[] profile = Food.getFoodTasteProfile(inIS);
          float ratio =
              Math.min(
                  (Food.getWeight(getInputStack()) - Food.getDecay(inIS))
                      / (Global.FOOD_MAX_WEIGHT / 8),
                  1.0f);
          Food.setSweetMod(is, (int) Math.floor(profile[INPUT_SLOT] * ratio));
          Food.setSourMod(is, (int) Math.floor(profile[1] * ratio));
          Food.setSaltyMod(is, (int) Math.floor(profile[2] * ratio));
          Food.setBitterMod(is, (int) Math.floor(profile[3] * ratio));
          Food.setSavoryMod(is, (int) Math.floor(profile[4] * ratio));
          Food.setInfusion(is, inIS.getItem().getUnlocalizedName());
          this.storage[INPUT_SLOT] = null;
        }

        this.actionEmpty();
        this.setInventorySlotContents(0, is);
      }
      return true;
    }
    return false;
  }
Exemplo n.º 2
0
  public boolean processItem() {
    if (storage[0] != null) {
      QuernRecipe qr = QuernManager.getInstance().findMatchingRecipe(storage[0]);
      if (qr == null) {
        TerraFirmaCraft.LOG.warn(
            "QUERN RECIPE NOT FOUND! This is a BUG! -- "
                + storage[0].getItem().getUnlocalizedName());
        return false; // If this happens, it's a bug!
      }

      // If the output item can not be combined or is different from what is being made, eject and
      // make room for the new output
      if (storage[1] != null
          && !(storage[1].getItem() == qr.getResult().getItem()
              && storage[1].getItemDamage() == qr.getResult().getItemDamage())) {
        ejectItem(storage[1]);
        storage[1] = null;
      }

      if (qr.getInItem().getItem() instanceof IFood) {
        if (storage[1] != null) {
          float slot0Weight = Food.getWeight(storage[0]);
          float slot1Weight = Food.getWeight(storage[1]);
          float newWeight = slot0Weight + slot1Weight;

          if (newWeight > Global.FOOD_MAX_WEIGHT) {
            Food.setWeight(storage[1], newWeight - Global.FOOD_MAX_WEIGHT);

            ItemStack tossStack = storage[1].copy();
            Food.setWeight(tossStack, Global.FOOD_MAX_WEIGHT);
            ejectItem(tossStack);
          } else {
            Food.setWeight(storage[1], newWeight);
          }
          storage[0] = null;
          worldObj.markBlockForUpdate(xCoord, yCoord, zCoord);
          return true;
        }

        if (storage[1] == null) {
          storage[1] = qr.getResult().copy();
          float flourWeight = Food.getWeight(storage[0]);
          float flourDecay = Food.getDecay(storage[0]);
          ItemFoodTFC.createTag(storage[1], flourWeight, flourDecay);
          storage[0] = null;
          worldObj.markBlockForUpdate(xCoord, yCoord, zCoord);
          return true;
        }
      } else {
        if (storage[0].stackSize == qr.getInItem().stackSize) {
          storage[0] = null;
          worldObj.markBlockForUpdate(xCoord, yCoord, zCoord);
        } else storage[0].stackSize -= qr.getInItem().stackSize;

        if (storage[1] == null) storage[1] = qr.getResult().copy();
        else if (storage[1].stackSize < storage[1].getMaxStackSize()) {
          if ((qr.getResult().stackSize + storage[1].stackSize) > storage[1].getMaxStackSize()) {
            int amountleft =
                qr.getResult().stackSize - (storage[1].getMaxStackSize() - storage[1].stackSize);
            ItemStack tossStack = qr.getResult().copy();
            tossStack.stackSize = tossStack.getMaxStackSize();
            ejectItem(tossStack);
            ItemStack remainStack = qr.getResult().copy();
            remainStack.stackSize = amountleft;
            storage[1] = remainStack;
          } else storage[1].stackSize += qr.getResult().stackSize;
        } else {
          ejectItem(storage[1]);
          storage[1] = qr.getResult().copy();
        }
        return true;
      }
    }
    return false;
  }