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.autocrafting.ICraftingTask;
|
||||||
import refinedstorage.api.network.INetworkMaster;
|
import refinedstorage.api.network.INetworkMaster;
|
||||||
import refinedstorage.api.network.NetworkUtils;
|
import refinedstorage.api.network.NetworkUtils;
|
||||||
|
import refinedstorage.apiimpl.storage.fluid.FluidUtils;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@@ -68,7 +69,7 @@ public class BasicCraftingTask implements ICraftingTask {
|
|||||||
if (!satisfied[i]) {
|
if (!satisfied[i]) {
|
||||||
done = false;
|
done = false;
|
||||||
|
|
||||||
ItemStack took = NetworkUtils.extractItem(network, input, 1);
|
ItemStack took = FluidUtils.extractItemOrIfBucketLookInFluids(network, input, 1);
|
||||||
|
|
||||||
if (took != null) {
|
if (took != null) {
|
||||||
itemsTook.add(took);
|
itemsTook.add(took);
|
||||||
|
@@ -10,6 +10,7 @@ import refinedstorage.api.autocrafting.ICraftingTask;
|
|||||||
import refinedstorage.api.network.INetworkMaster;
|
import refinedstorage.api.network.INetworkMaster;
|
||||||
import refinedstorage.api.network.NetworkUtils;
|
import refinedstorage.api.network.NetworkUtils;
|
||||||
import refinedstorage.api.storage.CompareUtils;
|
import refinedstorage.api.storage.CompareUtils;
|
||||||
|
import refinedstorage.apiimpl.storage.fluid.FluidUtils;
|
||||||
|
|
||||||
public class ProcessingCraftingTask implements ICraftingTask {
|
public class ProcessingCraftingTask implements ICraftingTask {
|
||||||
public static final int ID = 1;
|
public static final int ID = 1;
|
||||||
@@ -53,7 +54,7 @@ public class ProcessingCraftingTask implements ICraftingTask {
|
|||||||
for (int i = 0; i < inserted.length; ++i) {
|
for (int i = 0; i < inserted.length; ++i) {
|
||||||
if (!inserted[i]) {
|
if (!inserted[i]) {
|
||||||
ItemStack input = pattern.getInputs()[i];
|
ItemStack input = pattern.getInputs()[i];
|
||||||
ItemStack took = NetworkUtils.extractItem(network, input, 1);
|
ItemStack took = FluidUtils.extractItemOrIfBucketLookInFluids(network, input, 1);
|
||||||
|
|
||||||
if (took != null) {
|
if (took != null) {
|
||||||
if (ItemHandlerHelper.insertItem(container.getConnectedItems(), took, true) == null) {
|
if (ItemHandlerHelper.insertItem(container.getConnectedItems(), took, true) == null) {
|
||||||
|
@@ -1,11 +1,9 @@
|
|||||||
package refinedstorage.apiimpl.network.grid;
|
package refinedstorage.apiimpl.network.grid;
|
||||||
|
|
||||||
import net.minecraft.entity.player.EntityPlayerMP;
|
import net.minecraft.entity.player.EntityPlayerMP;
|
||||||
import net.minecraft.init.Items;
|
|
||||||
import net.minecraft.inventory.InventoryHelper;
|
import net.minecraft.inventory.InventoryHelper;
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
import net.minecraftforge.fluids.Fluid;
|
import net.minecraftforge.fluids.Fluid;
|
||||||
import net.minecraftforge.fluids.FluidRegistry;
|
|
||||||
import net.minecraftforge.fluids.FluidStack;
|
import net.minecraftforge.fluids.FluidStack;
|
||||||
import net.minecraftforge.fluids.capability.CapabilityFluidHandler;
|
import net.minecraftforge.fluids.capability.CapabilityFluidHandler;
|
||||||
import refinedstorage.api.network.INetworkMaster;
|
import refinedstorage.api.network.INetworkMaster;
|
||||||
@@ -17,8 +15,6 @@ import refinedstorage.apiimpl.storage.fluid.FluidUtils;
|
|||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
|
|
||||||
public class FluidGridHandler implements IFluidGridHandler {
|
public class FluidGridHandler implements IFluidGridHandler {
|
||||||
private static final ItemStack EMPTY_BUCKET = new ItemStack(Items.BUCKET);
|
|
||||||
|
|
||||||
private INetworkMaster network;
|
private INetworkMaster network;
|
||||||
|
|
||||||
public FluidGridHandler(INetworkMaster network) {
|
public FluidGridHandler(INetworkMaster network) {
|
||||||
@@ -29,15 +25,15 @@ public class FluidGridHandler implements IFluidGridHandler {
|
|||||||
public void onExtract(int hash, boolean shift, EntityPlayerMP player) {
|
public void onExtract(int hash, boolean shift, EntityPlayerMP player) {
|
||||||
FluidStack stack = network.getFluidStorage().get(hash);
|
FluidStack stack = network.getFluidStorage().get(hash);
|
||||||
|
|
||||||
if (stack != null && (stack.getFluid() == FluidRegistry.WATER || stack.getFluid() == FluidRegistry.LAVA || FluidRegistry.getBucketFluids().contains(stack.getFluid()))) {
|
if (stack != null && FluidUtils.hasFluidBucket(stack)) {
|
||||||
ItemStack bucket = NetworkUtils.extractItem(network, EMPTY_BUCKET, 1);
|
ItemStack bucket = FluidUtils.extractBucket(network);
|
||||||
|
|
||||||
if (bucket == null) {
|
if (bucket == null) {
|
||||||
for (int i = 0; i < player.inventory.getSizeInventory(); ++i) {
|
for (int i = 0; i < player.inventory.getSizeInventory(); ++i) {
|
||||||
ItemStack slot = player.inventory.getStackInSlot(i);
|
ItemStack slot = player.inventory.getStackInSlot(i);
|
||||||
|
|
||||||
if (CompareUtils.compareStackNoQuantity(EMPTY_BUCKET, slot)) {
|
if (CompareUtils.compareStackNoQuantity(FluidUtils.EMPTY_BUCKET, slot)) {
|
||||||
bucket = EMPTY_BUCKET.copy();
|
bucket = FluidUtils.EMPTY_BUCKET.copy();
|
||||||
|
|
||||||
player.inventory.decrStackSize(i, 1);
|
player.inventory.decrStackSize(i, 1);
|
||||||
|
|
||||||
|
@@ -1,12 +1,18 @@
|
|||||||
package refinedstorage.apiimpl.storage.fluid;
|
package refinedstorage.apiimpl.storage.fluid;
|
||||||
|
|
||||||
|
import net.minecraft.init.Items;
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
import net.minecraftforge.fluids.Fluid;
|
import net.minecraftforge.fluids.Fluid;
|
||||||
|
import net.minecraftforge.fluids.FluidRegistry;
|
||||||
import net.minecraftforge.fluids.FluidStack;
|
import net.minecraftforge.fluids.FluidStack;
|
||||||
import net.minecraftforge.fluids.IFluidContainerItem;
|
import net.minecraftforge.fluids.IFluidContainerItem;
|
||||||
import net.minecraftforge.fluids.capability.CapabilityFluidHandler;
|
import net.minecraftforge.fluids.capability.CapabilityFluidHandler;
|
||||||
|
import refinedstorage.api.network.INetworkMaster;
|
||||||
|
import refinedstorage.api.network.NetworkUtils;
|
||||||
|
|
||||||
public final class FluidUtils {
|
public final class FluidUtils {
|
||||||
|
public static final ItemStack EMPTY_BUCKET = new ItemStack(Items.BUCKET);
|
||||||
|
|
||||||
public static FluidStack copyStackWithSize(FluidStack stack, int size) {
|
public static FluidStack copyStackWithSize(FluidStack stack, int size) {
|
||||||
FluidStack copy = stack.copy();
|
FluidStack copy = stack.copy();
|
||||||
copy.amount = size;
|
copy.amount = size;
|
||||||
@@ -26,4 +32,30 @@ public final class FluidUtils {
|
|||||||
|
|
||||||
return null;
|
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