@Override public boolean workCycle() { Preconditions.checkNotNull(currentRecipe); int cycles = currentRecipe.getCyclesPerUnit(); FluidStack output = currentRecipe.getOutput(); FluidStack product = new FluidStack(output, output.amount * cycles); productTank.fillInternal(product, true); bufferedLiquid = null; return true; }
@Override public boolean hasWork() { checkRecipe(); boolean hasRecipe = currentRecipe != null; boolean hasTankSpace = true; boolean hasLiquidResource = true; if (hasRecipe) { FluidStack fluidStack = currentRecipe.getOutput(); hasTankSpace = productTank.fillInternal(fluidStack, false) == fluidStack.amount; if (bufferedLiquid == null) { int cycles = currentRecipe.getCyclesPerUnit(); FluidStack input = currentRecipe.getInput(); int drainAmount = cycles * input.amount; FluidStack drained = resourceTank.drain(drainAmount, false); hasLiquidResource = drained != null && drained.amount == drainAmount; if (hasLiquidResource) { bufferedLiquid = new FluidStack(input, drainAmount); resourceTank.drain(drainAmount, true); } } } IErrorLogic errorLogic = getErrorLogic(); errorLogic.setCondition(!hasRecipe, EnumErrorCode.NO_RECIPE); errorLogic.setCondition(!hasTankSpace, EnumErrorCode.NO_SPACE_TANK); errorLogic.setCondition(!hasLiquidResource, EnumErrorCode.NO_RESOURCE_LIQUID); return hasRecipe && hasLiquidResource && hasTankSpace; }
public static boolean matches(@Nullable IStillRecipe recipe, @Nullable FluidStack item) { if (recipe == null || item == null) { return false; } return item.containsFluid(recipe.getInput()); }
@Override public String getRecipeInfo() { return LogHelper.getStackDescription(recipe.getOutput()); } }
private void checkRecipe() { FluidStack recipeLiquid = bufferedLiquid != null ? bufferedLiquid : resourceTank.getFluid(); if (!StillRecipeManager.matches(currentRecipe, recipeLiquid)) { currentRecipe = StillRecipeManager.findMatchingRecipe(recipeLiquid); int recipeTime = currentRecipe == null ? 0 : currentRecipe.getCyclesPerUnit(); setEnergyPerWorkCycle(ENERGY_PER_RECIPE_TIME * recipeTime); setTicksPerWorkCycle(recipeTime); } }