Fix more bugs
This commit is contained in:
@@ -29,6 +29,7 @@ import net.minecraftforge.fluids.FluidRegistry;
|
||||
import net.minecraftforge.fluids.FluidStack;
|
||||
import net.minecraftforge.fluids.capability.CapabilityFluidHandler;
|
||||
import net.minecraftforge.fluids.capability.IFluidHandler;
|
||||
import net.minecraftforge.fluids.capability.IFluidHandlerItem;
|
||||
import net.minecraftforge.fml.common.network.ByteBufUtils;
|
||||
import net.minecraftforge.items.CapabilityItemHandler;
|
||||
import net.minecraftforge.items.IItemHandler;
|
||||
@@ -81,7 +82,7 @@ public final class RSUtils {
|
||||
}
|
||||
|
||||
public static void createStorages(ItemStack disk, int slot, ItemStorageNBT[] itemStorages, FluidStorageNBT[] fluidStorages, Function<ItemStack, ItemStorageNBT> itemStorageSupplier, Function<ItemStack, FluidStorageNBT> fluidStorageNBTSupplier) {
|
||||
if (disk == null) {
|
||||
if (disk.isEmpty()) {
|
||||
itemStorages[slot] = null;
|
||||
fluidStorages[slot] = null;
|
||||
} else {
|
||||
@@ -239,26 +240,20 @@ public final class RSUtils {
|
||||
return handler;
|
||||
}
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
public static IFluidHandler getFluidHandler(TileEntity tile, EnumFacing side) {
|
||||
if (tile == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
if (!tile.hasCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, side)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return tile.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, side);
|
||||
return (tile != null && tile.hasCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, side)) ? tile.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, side) : null;
|
||||
}
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
public static FluidStack getFluidFromStack(ItemStack stack, boolean simulate) {
|
||||
if (stack.hasCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, null)) {
|
||||
return stack.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, null).drain(Fluid.BUCKET_VOLUME, !simulate);
|
||||
public static Pair<ItemStack, FluidStack> getFluidFromStack(ItemStack stack, boolean simulate) {
|
||||
if (stack.hasCapability(CapabilityFluidHandler.FLUID_HANDLER_ITEM_CAPABILITY, null)) {
|
||||
IFluidHandlerItem fluidHandler = stack.getCapability(CapabilityFluidHandler.FLUID_HANDLER_ITEM_CAPABILITY, null);
|
||||
|
||||
FluidStack result = fluidHandler.drain(Fluid.BUCKET_VOLUME, !simulate);
|
||||
|
||||
return Pair.of(fluidHandler.getContainer(), result);
|
||||
}
|
||||
|
||||
return null;
|
||||
return Pair.of(null, null);
|
||||
}
|
||||
|
||||
public static boolean hasFluidBucket(FluidStack stack) {
|
||||
|
@@ -164,7 +164,7 @@ public abstract class CraftingStep implements ICraftingStep {
|
||||
|
||||
protected AvailableType isItemAvailable(IItemStackList items, IFluidStackList fluids, ItemStack stack, ItemStack actualStack, int compare) {
|
||||
if (actualStack == null || actualStack.getCount() == 0 || !items.trackedRemove(actualStack, stack.getCount(), true)) {
|
||||
FluidStack fluidInItem = RSUtils.getFluidFromStack(stack, true);
|
||||
FluidStack fluidInItem = RSUtils.getFluidFromStack(stack, true).getValue();
|
||||
|
||||
if (fluidInItem != null && RSUtils.hasFluidBucket(fluidInItem)) {
|
||||
FluidStack fluidStack = fluids.get(fluidInItem, compare);
|
||||
@@ -192,7 +192,7 @@ public abstract class CraftingStep implements ICraftingStep {
|
||||
actualInputs.add(input);
|
||||
} else {
|
||||
boolean abort = true;
|
||||
FluidStack fluidInItem = RSUtils.getFluidFromStack(insertStack, true);
|
||||
FluidStack fluidInItem = RSUtils.getFluidFromStack(insertStack, true).getValue();
|
||||
if (fluidInItem != null) {
|
||||
FluidStack fluidStack = network.extractFluid(fluidInItem, fluidInItem.amount, compare, false);
|
||||
ItemStack bucketStack = network.extractItem(RSUtils.EMPTY_BUCKET, 1, compare, false);
|
||||
|
@@ -239,7 +239,7 @@ public class CraftingTask implements ICraftingTask {
|
||||
}
|
||||
|
||||
private boolean doFluidCalculation(IItemStackList networkList, IFluidStackList networkFluidList, ItemStack input, IItemStackList toInsert) {
|
||||
FluidStack fluidInItem = RSUtils.getFluidFromStack(input, true);
|
||||
FluidStack fluidInItem = RSUtils.getFluidFromStack(input, true).getValue();
|
||||
|
||||
if (fluidInItem != null && RSUtils.hasFluidBucket(fluidInItem)) {
|
||||
FluidStack fluidInStorage = networkFluidList.get(fluidInItem);
|
||||
|
@@ -10,6 +10,8 @@ import net.minecraft.item.ItemStack;
|
||||
import net.minecraftforge.fluids.Fluid;
|
||||
import net.minecraftforge.fluids.FluidStack;
|
||||
import net.minecraftforge.fluids.capability.CapabilityFluidHandler;
|
||||
import net.minecraftforge.fluids.capability.IFluidHandlerItem;
|
||||
import org.apache.commons.lang3.tuple.Pair;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
@@ -46,14 +48,16 @@ public class FluidGridHandler implements IFluidGridHandler {
|
||||
}
|
||||
|
||||
if (bucket != null) {
|
||||
bucket.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, null).fill(network.extractFluid(stack, Fluid.BUCKET_VOLUME, false), true);
|
||||
IFluidHandlerItem fluidHandler = bucket.getCapability(CapabilityFluidHandler.FLUID_HANDLER_ITEM_CAPABILITY, null);
|
||||
|
||||
fluidHandler.fill(network.extractFluid(stack, Fluid.BUCKET_VOLUME, false), true);
|
||||
|
||||
if (shift) {
|
||||
if (!player.inventory.addItemStackToInventory(bucket.copy())) {
|
||||
InventoryHelper.spawnItemStack(player.getEntityWorld(), player.getPosition().getX(), player.getPosition().getY(), player.getPosition().getZ(), bucket);
|
||||
if (!player.inventory.addItemStackToInventory(fluidHandler.getContainer().copy())) {
|
||||
InventoryHelper.spawnItemStack(player.getEntityWorld(), player.getPosition().getX(), player.getPosition().getY(), player.getPosition().getZ(), fluidHandler.getContainer());
|
||||
}
|
||||
} else {
|
||||
player.inventory.setItemStack(bucket);
|
||||
player.inventory.setItemStack(fluidHandler.getContainer());
|
||||
player.updateHeldItem();
|
||||
}
|
||||
}
|
||||
@@ -63,12 +67,14 @@ public class FluidGridHandler implements IFluidGridHandler {
|
||||
@Nullable
|
||||
@Override
|
||||
public ItemStack onInsert(ItemStack container) {
|
||||
FluidStack stack = RSUtils.getFluidFromStack(container, true);
|
||||
Pair<ItemStack, FluidStack> result = RSUtils.getFluidFromStack(container, true);
|
||||
|
||||
if (stack != null && network.insertFluid(stack, stack.amount, true) == null) {
|
||||
FluidStack drained = RSUtils.getFluidFromStack(container, false);
|
||||
if (result.getValue() != null && network.insertFluid(result.getValue(), result.getValue().amount, true) == null) {
|
||||
result = RSUtils.getFluidFromStack(container, false);
|
||||
|
||||
network.insertFluid(drained, drained.amount, false);
|
||||
network.insertFluid(result.getValue(), result.getValue().amount, false);
|
||||
|
||||
return result.getLeft();
|
||||
}
|
||||
|
||||
return container;
|
||||
|
@@ -10,7 +10,7 @@ public class ItemHandlerFluid extends ItemHandlerBasic {
|
||||
private FluidStack[] fluids;
|
||||
|
||||
public ItemHandlerFluid(int size, TileEntity tile) {
|
||||
super(size, tile, s -> RSUtils.getFluidFromStack(ItemHandlerHelper.copyStackWithSize(s, 1), true) != null);
|
||||
super(size, tile, s -> RSUtils.getFluidFromStack(ItemHandlerHelper.copyStackWithSize(s, 1), true).getValue() != null);
|
||||
|
||||
this.fluids = new FluidStack[size];
|
||||
}
|
||||
@@ -24,7 +24,7 @@ public class ItemHandlerFluid extends ItemHandlerBasic {
|
||||
if (stack.isEmpty()) {
|
||||
fluids[slot] = null;
|
||||
} else {
|
||||
fluids[slot] = RSUtils.getFluidFromStack(ItemHandlerHelper.copyStackWithSize(stack, 1), true);
|
||||
fluids[slot] = RSUtils.getFluidFromStack(ItemHandlerHelper.copyStackWithSize(stack, 1), true).getValue();
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -395,7 +395,7 @@ public class TileDiskDrive extends TileNode implements IItemStorageProvider, IFl
|
||||
public static int getDiskState(int stored, int capacity) {
|
||||
if (stored == capacity) {
|
||||
return DISK_STATE_FULL;
|
||||
} else if ((int) ((float) stored / (float) capacity * 100F) > 85) {
|
||||
} else if ((int) ((float) stored / (float) capacity * 100F) >= 85) {
|
||||
return DISK_STATE_NEAR_CAPACITY;
|
||||
} else {
|
||||
return DISK_STATE_NORMAL;
|
||||
|
@@ -19,6 +19,7 @@ import net.minecraftforge.fluids.Fluid;
|
||||
import net.minecraftforge.fluids.FluidStack;
|
||||
import net.minecraftforge.fluids.FluidTank;
|
||||
import net.minecraftforge.fluids.capability.CapabilityFluidHandler;
|
||||
import org.apache.commons.lang3.tuple.Pair;
|
||||
|
||||
public class TileFluidInterface extends TileNode implements IComparable {
|
||||
public static final int TANK_CAPACITY = 16000;
|
||||
@@ -93,10 +94,14 @@ public class TileFluidInterface extends TileNode implements IComparable {
|
||||
ItemStack container = in.getStackInSlot(0);
|
||||
|
||||
if (!container.isEmpty()) {
|
||||
FluidStack fluid = RSUtils.getFluidFromStack(container, true);
|
||||
Pair<ItemStack, FluidStack> result = RSUtils.getFluidFromStack(container, true);
|
||||
|
||||
if (fluid != null && tankIn.fillInternal(fluid, false) == fluid.amount) {
|
||||
tankIn.fillInternal(RSUtils.getFluidFromStack(container, false), true);
|
||||
if (result.getValue() != null && tankIn.fillInternal(result.getValue(), false) == result.getValue().amount) {
|
||||
result = RSUtils.getFluidFromStack(container, false);
|
||||
|
||||
tankIn.fillInternal(result.getValue(), true);
|
||||
|
||||
in.setStackInSlot(0, result.getLeft());
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user