Fix more bugs

This commit is contained in:
Raoul Van den Berge
2016-11-27 13:48:47 +01:00
parent 261f63c796
commit e65fb4b7cf
7 changed files with 39 additions and 33 deletions

View File

@@ -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) {

View File

@@ -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);

View File

@@ -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);

View File

@@ -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;

View File

@@ -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();
}
}

View File

@@ -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;

View File

@@ -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());
}
}