Use buckets from fluid storage in autocrafting
This commit is contained in:
@@ -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);
|
||||
|
@@ -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) {
|
||||
|
@@ -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);
|
||||
|
||||
|
@@ -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);
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user