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.FluidStack;
|
||||||
import net.minecraftforge.fluids.capability.CapabilityFluidHandler;
|
import net.minecraftforge.fluids.capability.CapabilityFluidHandler;
|
||||||
import net.minecraftforge.fluids.capability.IFluidHandler;
|
import net.minecraftforge.fluids.capability.IFluidHandler;
|
||||||
|
import net.minecraftforge.fluids.capability.IFluidHandlerItem;
|
||||||
import net.minecraftforge.fml.common.network.ByteBufUtils;
|
import net.minecraftforge.fml.common.network.ByteBufUtils;
|
||||||
import net.minecraftforge.items.CapabilityItemHandler;
|
import net.minecraftforge.items.CapabilityItemHandler;
|
||||||
import net.minecraftforge.items.IItemHandler;
|
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) {
|
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;
|
itemStorages[slot] = null;
|
||||||
fluidStorages[slot] = null;
|
fluidStorages[slot] = null;
|
||||||
} else {
|
} else {
|
||||||
@@ -239,26 +240,20 @@ public final class RSUtils {
|
|||||||
return handler;
|
return handler;
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings("deprecation")
|
|
||||||
public static IFluidHandler getFluidHandler(TileEntity tile, EnumFacing side) {
|
public static IFluidHandler getFluidHandler(TileEntity tile, EnumFacing side) {
|
||||||
if (tile == null) {
|
return (tile != null && tile.hasCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, side)) ? tile.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, side) : null;
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!tile.hasCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, side)) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
return tile.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, side);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings("deprecation")
|
public static Pair<ItemStack, FluidStack> getFluidFromStack(ItemStack stack, boolean simulate) {
|
||||||
public static FluidStack getFluidFromStack(ItemStack stack, boolean simulate) {
|
if (stack.hasCapability(CapabilityFluidHandler.FLUID_HANDLER_ITEM_CAPABILITY, null)) {
|
||||||
if (stack.hasCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, null)) {
|
IFluidHandlerItem fluidHandler = stack.getCapability(CapabilityFluidHandler.FLUID_HANDLER_ITEM_CAPABILITY, null);
|
||||||
return stack.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, null).drain(Fluid.BUCKET_VOLUME, !simulate);
|
|
||||||
|
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) {
|
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) {
|
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)) {
|
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)) {
|
if (fluidInItem != null && RSUtils.hasFluidBucket(fluidInItem)) {
|
||||||
FluidStack fluidStack = fluids.get(fluidInItem, compare);
|
FluidStack fluidStack = fluids.get(fluidInItem, compare);
|
||||||
@@ -192,7 +192,7 @@ public abstract class CraftingStep implements ICraftingStep {
|
|||||||
actualInputs.add(input);
|
actualInputs.add(input);
|
||||||
} else {
|
} else {
|
||||||
boolean abort = true;
|
boolean abort = true;
|
||||||
FluidStack fluidInItem = RSUtils.getFluidFromStack(insertStack, true);
|
FluidStack fluidInItem = RSUtils.getFluidFromStack(insertStack, true).getValue();
|
||||||
if (fluidInItem != null) {
|
if (fluidInItem != null) {
|
||||||
FluidStack fluidStack = network.extractFluid(fluidInItem, fluidInItem.amount, compare, false);
|
FluidStack fluidStack = network.extractFluid(fluidInItem, fluidInItem.amount, compare, false);
|
||||||
ItemStack bucketStack = network.extractItem(RSUtils.EMPTY_BUCKET, 1, 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) {
|
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)) {
|
if (fluidInItem != null && RSUtils.hasFluidBucket(fluidInItem)) {
|
||||||
FluidStack fluidInStorage = networkFluidList.get(fluidInItem);
|
FluidStack fluidInStorage = networkFluidList.get(fluidInItem);
|
||||||
|
@@ -10,6 +10,8 @@ import net.minecraft.item.ItemStack;
|
|||||||
import net.minecraftforge.fluids.Fluid;
|
import net.minecraftforge.fluids.Fluid;
|
||||||
import net.minecraftforge.fluids.FluidStack;
|
import net.minecraftforge.fluids.FluidStack;
|
||||||
import net.minecraftforge.fluids.capability.CapabilityFluidHandler;
|
import net.minecraftforge.fluids.capability.CapabilityFluidHandler;
|
||||||
|
import net.minecraftforge.fluids.capability.IFluidHandlerItem;
|
||||||
|
import org.apache.commons.lang3.tuple.Pair;
|
||||||
|
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
|
|
||||||
@@ -46,14 +48,16 @@ public class FluidGridHandler implements IFluidGridHandler {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (bucket != null) {
|
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 (shift) {
|
||||||
if (!player.inventory.addItemStackToInventory(bucket.copy())) {
|
if (!player.inventory.addItemStackToInventory(fluidHandler.getContainer().copy())) {
|
||||||
InventoryHelper.spawnItemStack(player.getEntityWorld(), player.getPosition().getX(), player.getPosition().getY(), player.getPosition().getZ(), bucket);
|
InventoryHelper.spawnItemStack(player.getEntityWorld(), player.getPosition().getX(), player.getPosition().getY(), player.getPosition().getZ(), fluidHandler.getContainer());
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
player.inventory.setItemStack(bucket);
|
player.inventory.setItemStack(fluidHandler.getContainer());
|
||||||
player.updateHeldItem();
|
player.updateHeldItem();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -63,12 +67,14 @@ public class FluidGridHandler implements IFluidGridHandler {
|
|||||||
@Nullable
|
@Nullable
|
||||||
@Override
|
@Override
|
||||||
public ItemStack onInsert(ItemStack container) {
|
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) {
|
if (result.getValue() != null && network.insertFluid(result.getValue(), result.getValue().amount, true) == null) {
|
||||||
FluidStack drained = RSUtils.getFluidFromStack(container, false);
|
result = RSUtils.getFluidFromStack(container, false);
|
||||||
|
|
||||||
network.insertFluid(drained, drained.amount, false);
|
network.insertFluid(result.getValue(), result.getValue().amount, false);
|
||||||
|
|
||||||
|
return result.getLeft();
|
||||||
}
|
}
|
||||||
|
|
||||||
return container;
|
return container;
|
||||||
|
@@ -10,7 +10,7 @@ public class ItemHandlerFluid extends ItemHandlerBasic {
|
|||||||
private FluidStack[] fluids;
|
private FluidStack[] fluids;
|
||||||
|
|
||||||
public ItemHandlerFluid(int size, TileEntity tile) {
|
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];
|
this.fluids = new FluidStack[size];
|
||||||
}
|
}
|
||||||
@@ -24,7 +24,7 @@ public class ItemHandlerFluid extends ItemHandlerBasic {
|
|||||||
if (stack.isEmpty()) {
|
if (stack.isEmpty()) {
|
||||||
fluids[slot] = null;
|
fluids[slot] = null;
|
||||||
} else {
|
} 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) {
|
public static int getDiskState(int stored, int capacity) {
|
||||||
if (stored == capacity) {
|
if (stored == capacity) {
|
||||||
return DISK_STATE_FULL;
|
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;
|
return DISK_STATE_NEAR_CAPACITY;
|
||||||
} else {
|
} else {
|
||||||
return DISK_STATE_NORMAL;
|
return DISK_STATE_NORMAL;
|
||||||
|
@@ -19,6 +19,7 @@ import net.minecraftforge.fluids.Fluid;
|
|||||||
import net.minecraftforge.fluids.FluidStack;
|
import net.minecraftforge.fluids.FluidStack;
|
||||||
import net.minecraftforge.fluids.FluidTank;
|
import net.minecraftforge.fluids.FluidTank;
|
||||||
import net.minecraftforge.fluids.capability.CapabilityFluidHandler;
|
import net.minecraftforge.fluids.capability.CapabilityFluidHandler;
|
||||||
|
import org.apache.commons.lang3.tuple.Pair;
|
||||||
|
|
||||||
public class TileFluidInterface extends TileNode implements IComparable {
|
public class TileFluidInterface extends TileNode implements IComparable {
|
||||||
public static final int TANK_CAPACITY = 16000;
|
public static final int TANK_CAPACITY = 16000;
|
||||||
@@ -93,10 +94,14 @@ public class TileFluidInterface extends TileNode implements IComparable {
|
|||||||
ItemStack container = in.getStackInSlot(0);
|
ItemStack container = in.getStackInSlot(0);
|
||||||
|
|
||||||
if (!container.isEmpty()) {
|
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) {
|
if (result.getValue() != null && tankIn.fillInternal(result.getValue(), false) == result.getValue().amount) {
|
||||||
tankIn.fillInternal(RSUtils.getFluidFromStack(container, false), true);
|
result = RSUtils.getFluidFromStack(container, false);
|
||||||
|
|
||||||
|
tankIn.fillInternal(result.getValue(), true);
|
||||||
|
|
||||||
|
in.setStackInSlot(0, result.getLeft());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user