Use buckets from fluid storage in autocrafting

This commit is contained in:
Raoul Van den Berge
2016-08-16 23:51:49 +02:00
parent 529d5682b9
commit 4ab9ff499c
4 changed files with 40 additions and 10 deletions

View File

@@ -10,6 +10,7 @@ import refinedstorage.api.autocrafting.ICraftingPattern;
import refinedstorage.api.autocrafting.ICraftingTask;
import refinedstorage.api.network.INetworkMaster;
import refinedstorage.api.network.NetworkUtils;
import refinedstorage.apiimpl.storage.fluid.FluidUtils;
import java.util.ArrayList;
import java.util.List;
@@ -68,7 +69,7 @@ public class BasicCraftingTask implements ICraftingTask {
if (!satisfied[i]) {
done = false;
ItemStack took = NetworkUtils.extractItem(network, input, 1);
ItemStack took = FluidUtils.extractItemOrIfBucketLookInFluids(network, input, 1);
if (took != null) {
itemsTook.add(took);

View File

@@ -10,6 +10,7 @@ import refinedstorage.api.autocrafting.ICraftingTask;
import refinedstorage.api.network.INetworkMaster;
import refinedstorage.api.network.NetworkUtils;
import refinedstorage.api.storage.CompareUtils;
import refinedstorage.apiimpl.storage.fluid.FluidUtils;
public class ProcessingCraftingTask implements ICraftingTask {
public static final int ID = 1;
@@ -53,7 +54,7 @@ public class ProcessingCraftingTask implements ICraftingTask {
for (int i = 0; i < inserted.length; ++i) {
if (!inserted[i]) {
ItemStack input = pattern.getInputs()[i];
ItemStack took = NetworkUtils.extractItem(network, input, 1);
ItemStack took = FluidUtils.extractItemOrIfBucketLookInFluids(network, input, 1);
if (took != null) {
if (ItemHandlerHelper.insertItem(container.getConnectedItems(), took, true) == null) {

View File

@@ -1,11 +1,9 @@
package refinedstorage.apiimpl.network.grid;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.init.Items;
import net.minecraft.inventory.InventoryHelper;
import net.minecraft.item.ItemStack;
import net.minecraftforge.fluids.Fluid;
import net.minecraftforge.fluids.FluidRegistry;
import net.minecraftforge.fluids.FluidStack;
import net.minecraftforge.fluids.capability.CapabilityFluidHandler;
import refinedstorage.api.network.INetworkMaster;
@@ -17,8 +15,6 @@ import refinedstorage.apiimpl.storage.fluid.FluidUtils;
import javax.annotation.Nullable;
public class FluidGridHandler implements IFluidGridHandler {
private static final ItemStack EMPTY_BUCKET = new ItemStack(Items.BUCKET);
private INetworkMaster network;
public FluidGridHandler(INetworkMaster network) {
@@ -29,15 +25,15 @@ public class FluidGridHandler implements IFluidGridHandler {
public void onExtract(int hash, boolean shift, EntityPlayerMP player) {
FluidStack stack = network.getFluidStorage().get(hash);
if (stack != null && (stack.getFluid() == FluidRegistry.WATER || stack.getFluid() == FluidRegistry.LAVA || FluidRegistry.getBucketFluids().contains(stack.getFluid()))) {
ItemStack bucket = NetworkUtils.extractItem(network, EMPTY_BUCKET, 1);
if (stack != null && FluidUtils.hasFluidBucket(stack)) {
ItemStack bucket = FluidUtils.extractBucket(network);
if (bucket == null) {
for (int i = 0; i < player.inventory.getSizeInventory(); ++i) {
ItemStack slot = player.inventory.getStackInSlot(i);
if (CompareUtils.compareStackNoQuantity(EMPTY_BUCKET, slot)) {
bucket = EMPTY_BUCKET.copy();
if (CompareUtils.compareStackNoQuantity(FluidUtils.EMPTY_BUCKET, slot)) {
bucket = FluidUtils.EMPTY_BUCKET.copy();
player.inventory.decrStackSize(i, 1);

View File

@@ -1,12 +1,18 @@
package refinedstorage.apiimpl.storage.fluid;
import net.minecraft.init.Items;
import net.minecraft.item.ItemStack;
import net.minecraftforge.fluids.Fluid;
import net.minecraftforge.fluids.FluidRegistry;
import net.minecraftforge.fluids.FluidStack;
import net.minecraftforge.fluids.IFluidContainerItem;
import net.minecraftforge.fluids.capability.CapabilityFluidHandler;
import refinedstorage.api.network.INetworkMaster;
import refinedstorage.api.network.NetworkUtils;
public final class FluidUtils {
public static final ItemStack EMPTY_BUCKET = new ItemStack(Items.BUCKET);
public static FluidStack copyStackWithSize(FluidStack stack, int size) {
FluidStack copy = stack.copy();
copy.amount = size;
@@ -26,4 +32,30 @@ public final class FluidUtils {
return null;
}
public static boolean hasFluidBucket(FluidStack stack) {
return stack.getFluid() == FluidRegistry.WATER || stack.getFluid() == FluidRegistry.LAVA || FluidRegistry.getBucketFluids().contains(stack.getFluid());
}
public static ItemStack extractItemOrIfBucketLookInFluids(INetworkMaster network, ItemStack stack, int size) {
ItemStack result = NetworkUtils.extractItem(network, stack, size);
if (result == null && stack.hasCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, null)) {
FluidStack fluidStack = getFluidFromStack(stack, true);
if (fluidStack != null && hasFluidBucket(fluidStack)) {
result = extractBucket(network);
if (result != null) {
result.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, null).fill(NetworkUtils.extractFluid(network, fluidStack, Fluid.BUCKET_VOLUME), true);
}
}
}
return result;
}
public static ItemStack extractBucket(INetworkMaster network) {
return NetworkUtils.extractItem(network, EMPTY_BUCKET, 1);
}
}