Make IStorage return NonNull ItemStack/FluidStack
This commit is contained in:
@@ -3,6 +3,7 @@ package com.raoulvdberge.refinedstorage.api.network.grid.handler;
|
|||||||
import net.minecraft.entity.player.ServerPlayerEntity;
|
import net.minecraft.entity.player.ServerPlayerEntity;
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
|
|
||||||
|
import javax.annotation.Nonnull;
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
@@ -30,7 +31,7 @@ public interface IItemGridHandler {
|
|||||||
* @param stack the item we're trying to insert
|
* @param stack the item we're trying to insert
|
||||||
* @return the remainder, or null if there is no remainder
|
* @return the remainder, or null if there is no remainder
|
||||||
*/
|
*/
|
||||||
@Nullable
|
@Nonnull
|
||||||
ItemStack onInsert(ServerPlayerEntity player, ItemStack stack);
|
ItemStack onInsert(ServerPlayerEntity player, ItemStack stack);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -48,6 +49,8 @@ public interface IItemGridHandler {
|
|||||||
* @param stack the stack
|
* @param stack the stack
|
||||||
* @return the remainder stack
|
* @return the remainder stack
|
||||||
*/
|
*/
|
||||||
|
// TODO Maybe remove?
|
||||||
|
@Nonnull
|
||||||
ItemStack onShiftClick(ServerPlayerEntity player, ItemStack stack);
|
ItemStack onShiftClick(ServerPlayerEntity player, ItemStack stack);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -28,12 +28,12 @@ public interface IStorage<T> {
|
|||||||
/**
|
/**
|
||||||
* Inserts a stack to this storage.
|
* Inserts a stack to this storage.
|
||||||
*
|
*
|
||||||
* @param stack the stack prototype to insert, do NOT modify
|
* @param stack the stack prototype to insert, can be empty, do NOT modify
|
||||||
* @param size the amount of that prototype that has to be inserted
|
* @param size the amount of that prototype that has to be inserted
|
||||||
* @param action the action
|
* @param action the action
|
||||||
* @return null if the insert was successful, or a stack with the remainder
|
* @return an empty stack if the insert was successful, or a stack with the remainder
|
||||||
*/
|
*/
|
||||||
@Nullable
|
@Nonnull
|
||||||
T insert(@Nonnull T stack, int size, Action action);
|
T insert(@Nonnull T stack, int size, Action action);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -41,13 +41,13 @@ public interface IStorage<T> {
|
|||||||
* <p>
|
* <p>
|
||||||
* If the stack we found in the system is smaller than the requested size, return that stack anyway.
|
* If the stack we found in the system is smaller than the requested size, return that stack anyway.
|
||||||
*
|
*
|
||||||
* @param stack a prototype of the stack to extract, do NOT modify
|
* @param stack a prototype of the stack to extract, can be empty, do NOT modify
|
||||||
* @param size the amount of that prototype that has to be extracted
|
* @param size the amount of that prototype that has to be extracted
|
||||||
* @param flags the flags to compare on, see {@link IComparer}
|
* @param flags the flags to compare on, see {@link IComparer}
|
||||||
* @param action the action
|
* @param action the action
|
||||||
* @return null if we didn't extract anything, or a stack with the result
|
* @return an empty stack if nothing was extracted, or an extracted stack
|
||||||
*/
|
*/
|
||||||
@Nullable
|
@Nonnull
|
||||||
T extract(@Nonnull T stack, int size, int flags, Action action);
|
T extract(@Nonnull T stack, int size, int flags, Action action);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -611,7 +611,7 @@ public class CraftingTask implements ICraftingTask {
|
|||||||
for (StackListEntry<ItemStack> need : c.getToExtract().getStacks()) {
|
for (StackListEntry<ItemStack> need : c.getToExtract().getStacks()) {
|
||||||
ItemStack result = this.internalStorage.extract(need.getStack(), need.getStack().getCount(), DEFAULT_EXTRACT_FLAGS, Action.SIMULATE);
|
ItemStack result = this.internalStorage.extract(need.getStack(), need.getStack().getCount(), DEFAULT_EXTRACT_FLAGS, Action.SIMULATE);
|
||||||
|
|
||||||
if (result == null || result.getCount() != need.getStack().getCount()) {
|
if (result.getCount() != need.getStack().getCount()) {
|
||||||
hasAll = false;
|
hasAll = false;
|
||||||
|
|
||||||
break;
|
break;
|
||||||
@@ -622,7 +622,7 @@ public class CraftingTask implements ICraftingTask {
|
|||||||
for (StackListEntry<ItemStack> need : c.getToExtract().getStacks()) {
|
for (StackListEntry<ItemStack> need : c.getToExtract().getStacks()) {
|
||||||
ItemStack result = this.internalStorage.extract(need.getStack(), need.getStack().getCount(), DEFAULT_EXTRACT_FLAGS, Action.PERFORM);
|
ItemStack result = this.internalStorage.extract(need.getStack(), need.getStack().getCount(), DEFAULT_EXTRACT_FLAGS, Action.PERFORM);
|
||||||
|
|
||||||
if (result == null || result.getCount() != need.getStack().getCount()) {
|
if (result.getCount() != need.getStack().getCount()) {
|
||||||
throw new IllegalStateException("Extractor check lied");
|
throw new IllegalStateException("Extractor check lied");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -701,7 +701,7 @@ public class CraftingTask implements ICraftingTask {
|
|||||||
} else {
|
} else {
|
||||||
ItemStack result = this.internalStorage.extract(need.getStack(), need.getStack().getCount(), DEFAULT_EXTRACT_FLAGS, Action.SIMULATE);
|
ItemStack result = this.internalStorage.extract(need.getStack(), need.getStack().getCount(), DEFAULT_EXTRACT_FLAGS, Action.SIMULATE);
|
||||||
|
|
||||||
if (result == null || result.getCount() != need.getStack().getCount()) {
|
if (result.getCount() != need.getStack().getCount()) {
|
||||||
hasAll = false;
|
hasAll = false;
|
||||||
|
|
||||||
break;
|
break;
|
||||||
@@ -721,7 +721,7 @@ public class CraftingTask implements ICraftingTask {
|
|||||||
} else {
|
} else {
|
||||||
FluidStack result = this.internalFluidStorage.extract(need.getStack(), need.getStack().getAmount(), IComparer.COMPARE_NBT, Action.SIMULATE);
|
FluidStack result = this.internalFluidStorage.extract(need.getStack(), need.getStack().getAmount(), IComparer.COMPARE_NBT, Action.SIMULATE);
|
||||||
|
|
||||||
if (result == null || result.getAmount() != need.getStack().getAmount()) {
|
if (result.getAmount() != need.getStack().getAmount()) {
|
||||||
hasAll = false;
|
hasAll = false;
|
||||||
|
|
||||||
break;
|
break;
|
||||||
@@ -740,7 +740,7 @@ public class CraftingTask implements ICraftingTask {
|
|||||||
|
|
||||||
for (StackListEntry<ItemStack> need : p.getItemsToPut().getStacks()) {
|
for (StackListEntry<ItemStack> need : p.getItemsToPut().getStacks()) {
|
||||||
ItemStack result = this.internalStorage.extract(need.getStack(), need.getStack().getCount(), DEFAULT_EXTRACT_FLAGS, Action.PERFORM);
|
ItemStack result = this.internalStorage.extract(need.getStack(), need.getStack().getCount(), DEFAULT_EXTRACT_FLAGS, Action.PERFORM);
|
||||||
if (result == null || result.getCount() != need.getStack().getCount()) {
|
if (result.getCount() != need.getStack().getCount()) {
|
||||||
throw new IllegalStateException("The internal crafting inventory reported that " + need.getStack() + " was available but we got " + result);
|
throw new IllegalStateException("The internal crafting inventory reported that " + need.getStack() + " was available but we got " + result);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -753,7 +753,7 @@ public class CraftingTask implements ICraftingTask {
|
|||||||
|
|
||||||
for (StackListEntry<FluidStack> need : p.getFluidsToPut().getStacks()) {
|
for (StackListEntry<FluidStack> need : p.getFluidsToPut().getStacks()) {
|
||||||
FluidStack result = this.internalFluidStorage.extract(need.getStack(), need.getStack().getAmount(), IComparer.COMPARE_NBT, Action.PERFORM);
|
FluidStack result = this.internalFluidStorage.extract(need.getStack(), need.getStack().getAmount(), IComparer.COMPARE_NBT, Action.PERFORM);
|
||||||
if (result == null || result.getAmount() != need.getStack().getAmount()) {
|
if (result.getAmount() != need.getStack().getAmount()) {
|
||||||
throw new IllegalStateException("The internal crafting inventory reported that " + need + " was available but we got " + result);
|
throw new IllegalStateException("The internal crafting inventory reported that " + need + " was available but we got " + result);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -59,7 +59,11 @@ public class FluidGridHandler implements IFluidGridHandler {
|
|||||||
bucket.getCapability(CapabilityFluidHandler.FLUID_HANDLER_ITEM_CAPABILITY, null).ifPresent(fluidHandler -> {
|
bucket.getCapability(CapabilityFluidHandler.FLUID_HANDLER_ITEM_CAPABILITY, null).ifPresent(fluidHandler -> {
|
||||||
network.getFluidStorageTracker().changed(player, stack.copy());
|
network.getFluidStorageTracker().changed(player, stack.copy());
|
||||||
|
|
||||||
fluidHandler.fill(network.extractFluid(stack, FluidAttributes.BUCKET_VOLUME, Action.PERFORM), IFluidHandler.FluidAction.EXECUTE);
|
FluidStack extracted = network.extractFluid(stack, FluidAttributes.BUCKET_VOLUME, Action.PERFORM);
|
||||||
|
|
||||||
|
if (extracted != null) {
|
||||||
|
fluidHandler.fill(extracted, IFluidHandler.FluidAction.EXECUTE);
|
||||||
|
}
|
||||||
|
|
||||||
if (shift) {
|
if (shift) {
|
||||||
if (!player.inventory.addItemStackToInventory(fluidHandler.getContainer().copy())) {
|
if (!player.inventory.addItemStackToInventory(fluidHandler.getContainer().copy())) {
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ import net.minecraftforge.items.CapabilityItemHandler;
|
|||||||
import net.minecraftforge.items.IItemHandler;
|
import net.minecraftforge.items.IItemHandler;
|
||||||
import net.minecraftforge.items.ItemHandlerHelper;
|
import net.minecraftforge.items.ItemHandlerHelper;
|
||||||
|
|
||||||
|
import javax.annotation.Nonnull;
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
@@ -107,6 +108,7 @@ public class ItemGridHandler implements IItemGridHandler {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@Nonnull
|
||||||
public ItemStack onInsert(ServerPlayerEntity player, ItemStack stack) {
|
public ItemStack onInsert(ServerPlayerEntity player, ItemStack stack) {
|
||||||
if (!network.getSecurityManager().hasPermission(Permission.INSERT, player)) {
|
if (!network.getSecurityManager().hasPermission(Permission.INSERT, player)) {
|
||||||
return stack;
|
return stack;
|
||||||
@@ -114,7 +116,7 @@ public class ItemGridHandler implements IItemGridHandler {
|
|||||||
|
|
||||||
network.getItemStorageTracker().changed(player, stack.copy());
|
network.getItemStorageTracker().changed(player, stack.copy());
|
||||||
|
|
||||||
ItemStack remainder = network.insertItem(stack, stack.getCount(), Action.PERFORM);
|
ItemStack remainder = StackUtils.nullToEmpty(network.insertItem(stack, stack.getCount(), Action.PERFORM));
|
||||||
|
|
||||||
// TODO network.getNetworkItemHandler().drainEnergy(player, RS.INSTANCE.config.wirelessGridInsertUsage);
|
// TODO network.getNetworkItemHandler().drainEnergy(player, RS.INSTANCE.config.wirelessGridInsertUsage);
|
||||||
|
|
||||||
@@ -152,8 +154,9 @@ public class ItemGridHandler implements IItemGridHandler {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@Nonnull
|
||||||
public ItemStack onShiftClick(ServerPlayerEntity player, ItemStack stack) {
|
public ItemStack onShiftClick(ServerPlayerEntity player, ItemStack stack) {
|
||||||
return StackUtils.nullToEmpty(onInsert(player, stack));
|
return onInsert(player, stack);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -73,7 +73,7 @@ public class PortableFluidGridHandler implements IFluidGridHandler {
|
|||||||
public ItemStack onInsert(ServerPlayerEntity player, ItemStack container) {
|
public ItemStack onInsert(ServerPlayerEntity player, ItemStack container) {
|
||||||
Pair<ItemStack, FluidStack> result = StackUtils.getFluid(container, true);
|
Pair<ItemStack, FluidStack> result = StackUtils.getFluid(container, true);
|
||||||
|
|
||||||
if (!result.getValue().isEmpty() && portableGrid.getFluidStorage().insert(result.getValue(), result.getValue().getAmount(), Action.SIMULATE) == null) {
|
if (!result.getValue().isEmpty() && portableGrid.getFluidStorage().insert(result.getValue(), result.getValue().getAmount(), Action.SIMULATE).isEmpty()) {
|
||||||
portableGrid.getFluidStorageTracker().changed(player, result.getValue().copy());
|
portableGrid.getFluidStorageTracker().changed(player, result.getValue().copy());
|
||||||
|
|
||||||
result = StackUtils.getFluid(container, false);
|
result = StackUtils.getFluid(container, false);
|
||||||
|
|||||||
@@ -7,7 +7,6 @@ import com.raoulvdberge.refinedstorage.api.util.Action;
|
|||||||
import com.raoulvdberge.refinedstorage.api.util.IComparer;
|
import com.raoulvdberge.refinedstorage.api.util.IComparer;
|
||||||
import com.raoulvdberge.refinedstorage.apiimpl.API;
|
import com.raoulvdberge.refinedstorage.apiimpl.API;
|
||||||
import com.raoulvdberge.refinedstorage.tile.grid.portable.IPortableGrid;
|
import com.raoulvdberge.refinedstorage.tile.grid.portable.IPortableGrid;
|
||||||
import com.raoulvdberge.refinedstorage.util.StackUtils;
|
|
||||||
import net.minecraft.entity.player.ServerPlayerEntity;
|
import net.minecraft.entity.player.ServerPlayerEntity;
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
import net.minecraft.util.Direction;
|
import net.minecraft.util.Direction;
|
||||||
@@ -15,6 +14,7 @@ import net.minecraftforge.items.CapabilityItemHandler;
|
|||||||
import net.minecraftforge.items.IItemHandler;
|
import net.minecraftforge.items.IItemHandler;
|
||||||
import net.minecraftforge.items.ItemHandlerHelper;
|
import net.minecraftforge.items.ItemHandlerHelper;
|
||||||
|
|
||||||
|
import javax.annotation.Nonnull;
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
@@ -80,7 +80,7 @@ public class PortableItemGridHandler implements IItemGridHandler {
|
|||||||
|
|
||||||
ItemStack took = portableGrid.getItemStorage().extract(item, size, IComparer.COMPARE_NBT, Action.SIMULATE);
|
ItemStack took = portableGrid.getItemStorage().extract(item, size, IComparer.COMPARE_NBT, Action.SIMULATE);
|
||||||
|
|
||||||
if (took != null) {
|
if (!took.isEmpty()) {
|
||||||
if ((flags & EXTRACT_SHIFT) == EXTRACT_SHIFT) {
|
if ((flags & EXTRACT_SHIFT) == EXTRACT_SHIFT) {
|
||||||
IItemHandler playerInventory = player.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, Direction.UP).orElse(null);
|
IItemHandler playerInventory = player.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, Direction.UP).orElse(null);
|
||||||
|
|
||||||
@@ -105,8 +105,8 @@ public class PortableItemGridHandler implements IItemGridHandler {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Nullable
|
|
||||||
@Override
|
@Override
|
||||||
|
@Nonnull
|
||||||
public ItemStack onInsert(ServerPlayerEntity player, ItemStack stack) {
|
public ItemStack onInsert(ServerPlayerEntity player, ItemStack stack) {
|
||||||
if (portableGrid.getStorage() == null || !grid.isActive()) {
|
if (portableGrid.getStorage() == null || !grid.isActive()) {
|
||||||
return stack;
|
return stack;
|
||||||
@@ -133,17 +133,18 @@ public class PortableItemGridHandler implements IItemGridHandler {
|
|||||||
portableGrid.getItemStorageTracker().changed(player, stack.copy());
|
portableGrid.getItemStorageTracker().changed(player, stack.copy());
|
||||||
|
|
||||||
if (single) {
|
if (single) {
|
||||||
if (portableGrid.getItemStorage().insert(stack, size, Action.SIMULATE) == null) {
|
if (portableGrid.getItemStorage().insert(stack, size, Action.SIMULATE).isEmpty()) {
|
||||||
portableGrid.getItemStorage().insert(stack, size, Action.PERFORM);
|
portableGrid.getItemStorage().insert(stack, size, Action.PERFORM);
|
||||||
|
|
||||||
stack.shrink(size);
|
stack.shrink(size);
|
||||||
|
|
||||||
|
// TODO ???
|
||||||
if (stack.getCount() == 0) {
|
if (stack.getCount() == 0) {
|
||||||
player.inventory.setItemStack(ItemStack.EMPTY);
|
player.inventory.setItemStack(ItemStack.EMPTY);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
player.inventory.setItemStack(StackUtils.nullToEmpty(portableGrid.getItemStorage().insert(stack, size, Action.PERFORM)));
|
player.inventory.setItemStack(portableGrid.getItemStorage().insert(stack, size, Action.PERFORM));
|
||||||
}
|
}
|
||||||
|
|
||||||
player.updateHeldItem();
|
player.updateHeldItem();
|
||||||
@@ -152,8 +153,9 @@ public class PortableItemGridHandler implements IItemGridHandler {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@Nonnull
|
||||||
public ItemStack onShiftClick(ServerPlayerEntity player, ItemStack stack) {
|
public ItemStack onShiftClick(ServerPlayerEntity player, ItemStack stack) {
|
||||||
return StackUtils.nullToEmpty(onInsert(player, stack));
|
return onInsert(player, stack);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -81,8 +81,8 @@ public class DiskDriveNetworkNode extends NetworkNode implements IStorageProvide
|
|||||||
slot,
|
slot,
|
||||||
itemDisks,
|
itemDisks,
|
||||||
fluidDisks,
|
fluidDisks,
|
||||||
s -> new StorageDiskItemDriveWrapper(DiskDriveNetworkNode.this, s),
|
s -> new ItemDriveWrapperStorageDisk(DiskDriveNetworkNode.this, s),
|
||||||
s -> new StorageDiskFluidDriveWrapper(DiskDriveNetworkNode.this, s)
|
s -> new FluidDriveWrapperStorageDisk(DiskDriveNetworkNode.this, s)
|
||||||
);
|
);
|
||||||
|
|
||||||
if (network != null) {
|
if (network != null) {
|
||||||
|
|||||||
@@ -15,12 +15,12 @@ import javax.annotation.Nonnull;
|
|||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
|
|
||||||
public class StorageDiskFluidDriveWrapper implements IStorageDisk<FluidStack> {
|
public class FluidDriveWrapperStorageDisk implements IStorageDisk<FluidStack> {
|
||||||
private DiskDriveNetworkNode diskDrive;
|
private DiskDriveNetworkNode diskDrive;
|
||||||
private IStorageDisk<FluidStack> parent;
|
private IStorageDisk<FluidStack> parent;
|
||||||
private DiskDriveNetworkNode.DiskState lastState;
|
private DiskDriveNetworkNode.DiskState lastState;
|
||||||
|
|
||||||
public StorageDiskFluidDriveWrapper(DiskDriveNetworkNode diskDrive, IStorageDisk<FluidStack> parent) {
|
public FluidDriveWrapperStorageDisk(DiskDriveNetworkNode diskDrive, IStorageDisk<FluidStack> parent) {
|
||||||
this.diskDrive = diskDrive;
|
this.diskDrive = diskDrive;
|
||||||
this.parent = parent;
|
this.parent = parent;
|
||||||
this.setSettings(
|
this.setSettings(
|
||||||
@@ -54,7 +54,7 @@ public class StorageDiskFluidDriveWrapper implements IStorageDisk<FluidStack> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@Nullable
|
@Nonnull
|
||||||
public FluidStack insert(@Nonnull FluidStack stack, int size, Action action) {
|
public FluidStack insert(@Nonnull FluidStack stack, int size, Action action) {
|
||||||
if (!IWhitelistBlacklist.acceptsFluid(diskDrive.getFluidFilters(), diskDrive.getWhitelistBlacklistMode(), diskDrive.getCompare(), stack)) {
|
if (!IWhitelistBlacklist.acceptsFluid(diskDrive.getFluidFilters(), diskDrive.getWhitelistBlacklistMode(), diskDrive.getCompare(), stack)) {
|
||||||
return StackUtils.copy(stack, size);
|
return StackUtils.copy(stack, size);
|
||||||
@@ -63,8 +63,8 @@ public class StorageDiskFluidDriveWrapper implements IStorageDisk<FluidStack> {
|
|||||||
return parent.insert(stack, size, action);
|
return parent.insert(stack, size, action);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Nullable
|
|
||||||
@Override
|
@Override
|
||||||
|
@Nonnull
|
||||||
public FluidStack extract(@Nonnull FluidStack stack, int size, int flags, Action action) {
|
public FluidStack extract(@Nonnull FluidStack stack, int size, int flags, Action action) {
|
||||||
return parent.extract(stack, size, flags, action);
|
return parent.extract(stack, size, flags, action);
|
||||||
}
|
}
|
||||||
@@ -15,12 +15,12 @@ import javax.annotation.Nonnull;
|
|||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
|
|
||||||
public class StorageDiskItemDriveWrapper implements IStorageDisk<ItemStack> {
|
public class ItemDriveWrapperStorageDisk implements IStorageDisk<ItemStack> {
|
||||||
private DiskDriveNetworkNode diskDrive;
|
private DiskDriveNetworkNode diskDrive;
|
||||||
private IStorageDisk<ItemStack> parent;
|
private IStorageDisk<ItemStack> parent;
|
||||||
private DiskDriveNetworkNode.DiskState lastState;
|
private DiskDriveNetworkNode.DiskState lastState;
|
||||||
|
|
||||||
public StorageDiskItemDriveWrapper(DiskDriveNetworkNode diskDrive, IStorageDisk<ItemStack> parent) {
|
public ItemDriveWrapperStorageDisk(DiskDriveNetworkNode diskDrive, IStorageDisk<ItemStack> parent) {
|
||||||
this.diskDrive = diskDrive;
|
this.diskDrive = diskDrive;
|
||||||
this.parent = parent;
|
this.parent = parent;
|
||||||
this.setSettings(
|
this.setSettings(
|
||||||
@@ -54,7 +54,7 @@ public class StorageDiskItemDriveWrapper implements IStorageDisk<ItemStack> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@Nullable
|
@Nonnull
|
||||||
public ItemStack insert(@Nonnull ItemStack stack, int size, Action action) {
|
public ItemStack insert(@Nonnull ItemStack stack, int size, Action action) {
|
||||||
if (!IWhitelistBlacklist.acceptsItem(diskDrive.getItemFilters(), diskDrive.getWhitelistBlacklistMode(), diskDrive.getCompare(), stack)) {
|
if (!IWhitelistBlacklist.acceptsItem(diskDrive.getItemFilters(), diskDrive.getWhitelistBlacklistMode(), diskDrive.getCompare(), stack)) {
|
||||||
return ItemHandlerHelper.copyStackWithSize(stack, size);
|
return ItemHandlerHelper.copyStackWithSize(stack, size);
|
||||||
@@ -63,8 +63,8 @@ public class StorageDiskItemDriveWrapper implements IStorageDisk<ItemStack> {
|
|||||||
return parent.insert(stack, size, action);
|
return parent.insert(stack, size, action);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Nullable
|
|
||||||
@Override
|
@Override
|
||||||
|
@Nonnull
|
||||||
public ItemStack extract(@Nonnull ItemStack stack, int size, int flags, Action action) {
|
public ItemStack extract(@Nonnull ItemStack stack, int size, int flags, Action action) {
|
||||||
return parent.extract(stack, size, flags, action);
|
return parent.extract(stack, size, flags, action);
|
||||||
}
|
}
|
||||||
@@ -182,7 +182,7 @@ public class NetworkNodeDiskManipulator extends NetworkNode implements IComparab
|
|||||||
ItemStack stack = stacks.get(i);
|
ItemStack stack = stacks.get(i);
|
||||||
|
|
||||||
ItemStack extracted = storage.extract(stack, upgrades.getItemInteractCount(), compare, Action.PERFORM);
|
ItemStack extracted = storage.extract(stack, upgrades.getItemInteractCount(), compare, Action.PERFORM);
|
||||||
if (extracted == null) {
|
if (extracted.isEmpty()) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -217,7 +217,7 @@ public class NetworkNodeDiskManipulator extends NetworkNode implements IComparab
|
|||||||
ItemStack stack = stacks.get(i);
|
ItemStack stack = stacks.get(i);
|
||||||
|
|
||||||
ItemStack extracted = storage.extract(stack, upgrades.getItemInteractCount(), compare, Action.SIMULATE);
|
ItemStack extracted = storage.extract(stack, upgrades.getItemInteractCount(), compare, Action.SIMULATE);
|
||||||
if (extracted == null) {
|
if (extracted.isEmpty()) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -267,7 +267,7 @@ public class NetworkNodeDiskManipulator extends NetworkNode implements IComparab
|
|||||||
|
|
||||||
ItemStack remainder = storage.insert(extracted, extracted.getCount(), Action.PERFORM);
|
ItemStack remainder = storage.insert(extracted, extracted.getCount(), Action.PERFORM);
|
||||||
|
|
||||||
if (remainder != null) {
|
if (!remainder.isEmpty()) {
|
||||||
network.insertItem(remainder, remainder.getCount(), Action.PERFORM);
|
network.insertItem(remainder, remainder.getCount(), Action.PERFORM);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -275,16 +275,16 @@ public class NetworkNodeDiskManipulator extends NetworkNode implements IComparab
|
|||||||
private void insertFluidIntoNetwork(IStorageDisk<FluidStack> storage, int slot) {
|
private void insertFluidIntoNetwork(IStorageDisk<FluidStack> storage, int slot) {
|
||||||
List<FluidStack> stacks = new ArrayList<>(storage.getStacks());
|
List<FluidStack> stacks = new ArrayList<>(storage.getStacks());
|
||||||
|
|
||||||
FluidStack extracted = null;
|
FluidStack extracted = FluidStack.EMPTY;
|
||||||
int i = 0;
|
int i = 0;
|
||||||
|
|
||||||
while (extracted == null && stacks.size() > i) {
|
while (extracted.isEmpty() && stacks.size() > i) {
|
||||||
FluidStack stack = stacks.get(i++);
|
FluidStack stack = stacks.get(i++);
|
||||||
|
|
||||||
extracted = storage.extract(stack, upgrades.getItemInteractCount(), compare, Action.PERFORM);
|
extracted = storage.extract(stack, upgrades.getItemInteractCount(), compare, Action.PERFORM);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (extracted == null) {
|
if (extracted.isEmpty()) {
|
||||||
moveDriveToOutput(slot);
|
moveDriveToOutput(slot);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -316,7 +316,7 @@ public class NetworkNodeDiskManipulator extends NetworkNode implements IComparab
|
|||||||
FluidStack stack = stacks.get(i);
|
FluidStack stack = stacks.get(i);
|
||||||
|
|
||||||
FluidStack extracted = storage.extract(stack, upgrades.getItemInteractCount(), compare, Action.SIMULATE);
|
FluidStack extracted = storage.extract(stack, upgrades.getItemInteractCount(), compare, Action.SIMULATE);
|
||||||
if (extracted == null) {
|
if (extracted.isEmpty()) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -366,7 +366,7 @@ public class NetworkNodeDiskManipulator extends NetworkNode implements IComparab
|
|||||||
|
|
||||||
FluidStack remainder = storage.insert(extracted, extracted.getAmount(), Action.PERFORM);
|
FluidStack remainder = storage.insert(extracted, extracted.getAmount(), Action.PERFORM);
|
||||||
|
|
||||||
if (remainder != null) {
|
if (!remainder.isEmpty()) {
|
||||||
network.insertFluid(remainder, remainder.getAmount(), Action.PERFORM);
|
network.insertFluid(remainder, remainder.getAmount(), Action.PERFORM);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -66,7 +66,7 @@ public class StorageDiskFluidManipulatorWrapper implements IStorageDisk<FluidSta
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@Nullable
|
@Nonnull
|
||||||
public FluidStack insert(@Nonnull FluidStack stack, int size, Action action) {
|
public FluidStack insert(@Nonnull FluidStack stack, int size, Action action) {
|
||||||
if (!IWhitelistBlacklist.acceptsFluid(diskManipulator.getFluidFilters(), diskManipulator.getWhitelistBlacklistMode(), diskManipulator.getCompare(), stack)) {
|
if (!IWhitelistBlacklist.acceptsFluid(diskManipulator.getFluidFilters(), diskManipulator.getWhitelistBlacklistMode(), diskManipulator.getCompare(), stack)) {
|
||||||
return StackUtils.copy(stack, size);
|
return StackUtils.copy(stack, size);
|
||||||
@@ -76,10 +76,10 @@ public class StorageDiskFluidManipulatorWrapper implements IStorageDisk<FluidSta
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@Nullable
|
@Nonnull
|
||||||
public FluidStack extract(@Nonnull FluidStack stack, int size, int flags, Action action) {
|
public FluidStack extract(@Nonnull FluidStack stack, int size, int flags, Action action) {
|
||||||
if (!IWhitelistBlacklist.acceptsFluid(diskManipulator.getFluidFilters(), diskManipulator.getWhitelistBlacklistMode(), diskManipulator.getCompare(), stack)) {
|
if (!IWhitelistBlacklist.acceptsFluid(diskManipulator.getFluidFilters(), diskManipulator.getWhitelistBlacklistMode(), diskManipulator.getCompare(), stack)) {
|
||||||
return null;
|
return FluidStack.EMPTY;
|
||||||
}
|
}
|
||||||
|
|
||||||
return parent.extract(stack, size, flags, action);
|
return parent.extract(stack, size, flags, action);
|
||||||
|
|||||||
@@ -61,7 +61,7 @@ public class StorageDiskItemManipulatorWrapper implements IStorageDisk<ItemStack
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@Nullable
|
@Nonnull
|
||||||
public ItemStack insert(@Nonnull ItemStack stack, int size, Action action) {
|
public ItemStack insert(@Nonnull ItemStack stack, int size, Action action) {
|
||||||
if (!IWhitelistBlacklist.acceptsItem(diskManipulator.getItemFilters(), diskManipulator.getWhitelistBlacklistMode(), diskManipulator.getCompare(), stack)) {
|
if (!IWhitelistBlacklist.acceptsItem(diskManipulator.getItemFilters(), diskManipulator.getWhitelistBlacklistMode(), diskManipulator.getCompare(), stack)) {
|
||||||
return ItemHandlerHelper.copyStackWithSize(stack, size);
|
return ItemHandlerHelper.copyStackWithSize(stack, size);
|
||||||
@@ -71,10 +71,10 @@ public class StorageDiskItemManipulatorWrapper implements IStorageDisk<ItemStack
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@Nullable
|
@Nonnull
|
||||||
public ItemStack extract(@Nonnull ItemStack stack, int size, int flags, Action action) {
|
public ItemStack extract(@Nonnull ItemStack stack, int size, int flags, Action action) {
|
||||||
if (!IWhitelistBlacklist.acceptsItem(diskManipulator.getItemFilters(), diskManipulator.getWhitelistBlacklistMode(), diskManipulator.getCompare(), stack)) {
|
if (!IWhitelistBlacklist.acceptsItem(diskManipulator.getItemFilters(), diskManipulator.getWhitelistBlacklistMode(), diskManipulator.getCompare(), stack)) {
|
||||||
return null;
|
return ItemStack.EMPTY;
|
||||||
}
|
}
|
||||||
|
|
||||||
return parent.extract(stack, size, flags, action);
|
return parent.extract(stack, size, flags, action);
|
||||||
|
|||||||
@@ -139,7 +139,7 @@ public class FluidStorageNetworkNode extends NetworkNode implements IStorageScre
|
|||||||
API.instance().getStorageDiskManager((ServerWorld) world).markForSaving();
|
API.instance().getStorageDiskManager((ServerWorld) world).markForSaving();
|
||||||
}
|
}
|
||||||
|
|
||||||
this.storage = new StorageDiskFluidStorageWrapper(this, disk);
|
this.storage = new FluidStorageWrapperStorageDisk(this, disk);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setStorageId(UUID id) {
|
public void setStorageId(UUID id) {
|
||||||
|
|||||||
@@ -15,11 +15,11 @@ import javax.annotation.Nonnull;
|
|||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
|
|
||||||
public class StorageDiskFluidStorageWrapper implements IStorageDisk<FluidStack> {
|
public class FluidStorageWrapperStorageDisk implements IStorageDisk<FluidStack> {
|
||||||
private FluidStorageNetworkNode storage;
|
private FluidStorageNetworkNode storage;
|
||||||
private IStorageDisk<FluidStack> parent;
|
private IStorageDisk<FluidStack> parent;
|
||||||
|
|
||||||
public StorageDiskFluidStorageWrapper(FluidStorageNetworkNode storage, IStorageDisk<FluidStack> parent) {
|
public FluidStorageWrapperStorageDisk(FluidStorageNetworkNode storage, IStorageDisk<FluidStack> parent) {
|
||||||
this.storage = storage;
|
this.storage = storage;
|
||||||
this.parent = parent;
|
this.parent = parent;
|
||||||
this.setSettings(null, storage);
|
this.setSettings(null, storage);
|
||||||
@@ -41,7 +41,7 @@ public class StorageDiskFluidStorageWrapper implements IStorageDisk<FluidStack>
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@Nullable
|
@Nonnull
|
||||||
public FluidStack insert(@Nonnull FluidStack stack, int size, Action action) {
|
public FluidStack insert(@Nonnull FluidStack stack, int size, Action action) {
|
||||||
if (!IWhitelistBlacklist.acceptsFluid(storage.getFilters(), storage.getWhitelistBlacklistMode(), storage.getCompare(), stack)) {
|
if (!IWhitelistBlacklist.acceptsFluid(storage.getFilters(), storage.getWhitelistBlacklistMode(), storage.getCompare(), stack)) {
|
||||||
return StackUtils.copy(stack, size);
|
return StackUtils.copy(stack, size);
|
||||||
@@ -50,8 +50,8 @@ public class StorageDiskFluidStorageWrapper implements IStorageDisk<FluidStack>
|
|||||||
return parent.insert(stack, size, action);
|
return parent.insert(stack, size, action);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Nullable
|
|
||||||
@Override
|
@Override
|
||||||
|
@Nonnull
|
||||||
public FluidStack extract(@Nonnull FluidStack stack, int size, int flags, Action action) {
|
public FluidStack extract(@Nonnull FluidStack stack, int size, int flags, Action action) {
|
||||||
return parent.extract(stack, size, flags, action);
|
return parent.extract(stack, size, flags, action);
|
||||||
}
|
}
|
||||||
@@ -15,11 +15,11 @@ import javax.annotation.Nonnull;
|
|||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
|
|
||||||
public class StorageDiskItemStorageWrapper implements IStorageDisk<ItemStack> {
|
public class ItemStorageWrapperStorageDisk implements IStorageDisk<ItemStack> {
|
||||||
private StorageNetworkNode storage;
|
private StorageNetworkNode storage;
|
||||||
private IStorageDisk<ItemStack> parent;
|
private IStorageDisk<ItemStack> parent;
|
||||||
|
|
||||||
public StorageDiskItemStorageWrapper(StorageNetworkNode storage, IStorageDisk<ItemStack> parent) {
|
public ItemStorageWrapperStorageDisk(StorageNetworkNode storage, IStorageDisk<ItemStack> parent) {
|
||||||
this.storage = storage;
|
this.storage = storage;
|
||||||
this.parent = parent;
|
this.parent = parent;
|
||||||
this.setSettings(null, storage);
|
this.setSettings(null, storage);
|
||||||
@@ -41,7 +41,7 @@ public class StorageDiskItemStorageWrapper implements IStorageDisk<ItemStack> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@Nullable
|
@Nonnull
|
||||||
public ItemStack insert(@Nonnull ItemStack stack, int size, Action action) {
|
public ItemStack insert(@Nonnull ItemStack stack, int size, Action action) {
|
||||||
if (!IWhitelistBlacklist.acceptsItem(storage.getFilters(), storage.getWhitelistBlacklistMode(), storage.getCompare(), stack)) {
|
if (!IWhitelistBlacklist.acceptsItem(storage.getFilters(), storage.getWhitelistBlacklistMode(), storage.getCompare(), stack)) {
|
||||||
return ItemHandlerHelper.copyStackWithSize(stack, size);
|
return ItemHandlerHelper.copyStackWithSize(stack, size);
|
||||||
@@ -50,8 +50,8 @@ public class StorageDiskItemStorageWrapper implements IStorageDisk<ItemStack> {
|
|||||||
return parent.insert(stack, size, action);
|
return parent.insert(stack, size, action);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Nullable
|
|
||||||
@Override
|
@Override
|
||||||
|
@Nonnull
|
||||||
public ItemStack extract(@Nonnull ItemStack stack, int size, int flags, Action action) {
|
public ItemStack extract(@Nonnull ItemStack stack, int size, int flags, Action action) {
|
||||||
return parent.extract(stack, size, flags, action);
|
return parent.extract(stack, size, flags, action);
|
||||||
}
|
}
|
||||||
@@ -139,7 +139,7 @@ public class StorageNetworkNode extends NetworkNode implements IStorageScreen, I
|
|||||||
API.instance().getStorageDiskManager((ServerWorld) world).markForSaving();
|
API.instance().getStorageDiskManager((ServerWorld) world).markForSaving();
|
||||||
}
|
}
|
||||||
|
|
||||||
this.storage = new StorageDiskItemStorageWrapper(this, disk);
|
this.storage = new ItemStorageWrapperStorageDisk(this, disk);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setStorageId(UUID id) {
|
public void setStorageId(UUID id) {
|
||||||
|
|||||||
@@ -67,8 +67,12 @@ public class FluidStorageDisk implements IStorageDisk<FluidStack> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@Nullable
|
@Nonnull
|
||||||
public FluidStack insert(@Nonnull FluidStack stack, int size, Action action) {
|
public FluidStack insert(@Nonnull FluidStack stack, int size, Action action) {
|
||||||
|
if (stack.isEmpty()) {
|
||||||
|
return stack;
|
||||||
|
}
|
||||||
|
|
||||||
for (FluidStack otherStack : stacks.get(stack.getFluid())) {
|
for (FluidStack otherStack : stacks.get(stack.getFluid())) {
|
||||||
if (otherStack.isFluidEqual(stack)) {
|
if (otherStack.isFluidEqual(stack)) {
|
||||||
if (getCapacity() != -1 && getStored() + size > getCapacity()) {
|
if (getCapacity() != -1 && getStored() + size > getCapacity()) {
|
||||||
@@ -92,7 +96,7 @@ public class FluidStorageDisk implements IStorageDisk<FluidStack> {
|
|||||||
onChanged();
|
onChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
return FluidStack.EMPTY;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -118,13 +122,17 @@ public class FluidStorageDisk implements IStorageDisk<FluidStack> {
|
|||||||
onChanged();
|
onChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
return FluidStack.EMPTY;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@Nullable
|
@Nonnull
|
||||||
public FluidStack extract(@Nonnull FluidStack stack, int size, int flags, Action action) {
|
public FluidStack extract(@Nonnull FluidStack stack, int size, int flags, Action action) {
|
||||||
|
if (stack.isEmpty()) {
|
||||||
|
return stack;
|
||||||
|
}
|
||||||
|
|
||||||
for (FluidStack otherStack : stacks.get(stack.getFluid())) {
|
for (FluidStack otherStack : stacks.get(stack.getFluid())) {
|
||||||
if (API.instance().getComparer().isEqual(otherStack, stack, flags)) {
|
if (API.instance().getComparer().isEqual(otherStack, stack, flags)) {
|
||||||
if (size > otherStack.getAmount()) {
|
if (size > otherStack.getAmount()) {
|
||||||
@@ -145,7 +153,7 @@ public class FluidStorageDisk implements IStorageDisk<FluidStack> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
return FluidStack.EMPTY;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -73,8 +73,12 @@ public class ItemStorageDisk implements IStorageDisk<ItemStack> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@Nullable
|
@Nonnull
|
||||||
public ItemStack insert(@Nonnull ItemStack stack, int size, Action action) {
|
public ItemStack insert(@Nonnull ItemStack stack, int size, Action action) {
|
||||||
|
if (stack.isEmpty()) {
|
||||||
|
return stack;
|
||||||
|
}
|
||||||
|
|
||||||
for (ItemStack otherStack : stacks.get(stack.getItem())) {
|
for (ItemStack otherStack : stacks.get(stack.getItem())) {
|
||||||
if (API.instance().getComparer().isEqualNoQuantity(otherStack, stack)) {
|
if (API.instance().getComparer().isEqualNoQuantity(otherStack, stack)) {
|
||||||
if (getCapacity() != -1 && getStored() + size > getCapacity()) {
|
if (getCapacity() != -1 && getStored() + size > getCapacity()) {
|
||||||
@@ -98,7 +102,7 @@ public class ItemStorageDisk implements IStorageDisk<ItemStack> {
|
|||||||
onChanged();
|
onChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
return ItemStack.EMPTY;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -124,13 +128,17 @@ public class ItemStorageDisk implements IStorageDisk<ItemStack> {
|
|||||||
onChanged();
|
onChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
return ItemStack.EMPTY;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@Nullable
|
@Nonnull
|
||||||
public ItemStack extract(@Nonnull ItemStack stack, int size, int flags, Action action) {
|
public ItemStack extract(@Nonnull ItemStack stack, int size, int flags, Action action) {
|
||||||
|
if (stack.isEmpty()) {
|
||||||
|
return stack;
|
||||||
|
}
|
||||||
|
|
||||||
for (ItemStack otherStack : stacks.get(stack.getItem())) {
|
for (ItemStack otherStack : stacks.get(stack.getItem())) {
|
||||||
if (API.instance().getComparer().isEqual(otherStack, stack, flags)) {
|
if (API.instance().getComparer().isEqual(otherStack, stack, flags)) {
|
||||||
if (size > otherStack.getCount()) {
|
if (size > otherStack.getCount()) {
|
||||||
@@ -151,7 +159,7 @@ public class ItemStorageDisk implements IStorageDisk<ItemStack> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
return ItemStack.EMPTY;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -43,8 +43,8 @@ public class PortableFluidStorageDisk implements IStorageDisk<FluidStack> {
|
|||||||
return parent.getStacks();
|
return parent.getStacks();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Nullable
|
|
||||||
@Override
|
@Override
|
||||||
|
@Nonnull
|
||||||
public FluidStack insert(@Nonnull FluidStack stack, int size, Action action) {
|
public FluidStack insert(@Nonnull FluidStack stack, int size, Action action) {
|
||||||
int storedPre = parent.getStored();
|
int storedPre = parent.getStored();
|
||||||
|
|
||||||
@@ -61,12 +61,12 @@ public class PortableFluidStorageDisk implements IStorageDisk<FluidStack> {
|
|||||||
return remainder;
|
return remainder;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Nullable
|
|
||||||
@Override
|
@Override
|
||||||
|
@Nonnull
|
||||||
public FluidStack extract(@Nonnull FluidStack stack, int size, int flags, Action action) {
|
public FluidStack extract(@Nonnull FluidStack stack, int size, int flags, Action action) {
|
||||||
FluidStack extracted = parent.extract(stack, size, flags, action);
|
FluidStack extracted = parent.extract(stack, size, flags, action);
|
||||||
|
|
||||||
if (action == Action.PERFORM && extracted != null) {
|
if (action == Action.PERFORM && !extracted.isEmpty()) {
|
||||||
portableGrid.getFluidCache().remove(extracted, extracted.getAmount(), false);
|
portableGrid.getFluidCache().remove(extracted, extracted.getAmount(), false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -43,8 +43,8 @@ public class PortableItemStorageDisk implements IStorageDisk<ItemStack> {
|
|||||||
return parent.getStacks();
|
return parent.getStacks();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Nullable
|
|
||||||
@Override
|
@Override
|
||||||
|
@Nonnull
|
||||||
public ItemStack insert(@Nonnull ItemStack stack, int size, Action action) {
|
public ItemStack insert(@Nonnull ItemStack stack, int size, Action action) {
|
||||||
int storedPre = parent.getStored();
|
int storedPre = parent.getStored();
|
||||||
|
|
||||||
@@ -61,12 +61,12 @@ public class PortableItemStorageDisk implements IStorageDisk<ItemStack> {
|
|||||||
return remainder;
|
return remainder;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Nullable
|
|
||||||
@Override
|
@Override
|
||||||
|
@Nonnull
|
||||||
public ItemStack extract(@Nonnull ItemStack stack, int size, int flags, Action action) {
|
public ItemStack extract(@Nonnull ItemStack stack, int size, int flags, Action action) {
|
||||||
ItemStack extracted = parent.extract(stack, size, flags, action);
|
ItemStack extracted = parent.extract(stack, size, flags, action);
|
||||||
|
|
||||||
if (action == Action.PERFORM && extracted != null) {
|
if (action == Action.PERFORM && !extracted.isEmpty()) {
|
||||||
portableGrid.getItemCache().remove(extracted, extracted.getCount(), false);
|
portableGrid.getItemCache().remove(extracted, extracted.getCount(), false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -76,14 +76,18 @@ public class FluidExternalStorage implements IExternalStorage<FluidStack> {
|
|||||||
return Collections.emptyList();
|
return Collections.emptyList();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Nullable
|
|
||||||
@Override
|
@Override
|
||||||
|
@Nonnull
|
||||||
public FluidStack insert(@Nonnull FluidStack stack, int size, Action action) {
|
public FluidStack insert(@Nonnull FluidStack stack, int size, Action action) {
|
||||||
|
if (stack.isEmpty()) {
|
||||||
|
return stack;
|
||||||
|
}
|
||||||
|
|
||||||
if (context.acceptsFluid(stack)) {
|
if (context.acceptsFluid(stack)) {
|
||||||
int filled = handlerSupplier.get().fill(StackUtils.copy(stack, size), action == Action.PERFORM ? IFluidHandler.FluidAction.EXECUTE : IFluidHandler.FluidAction.SIMULATE);
|
int filled = handlerSupplier.get().fill(StackUtils.copy(stack, size), action == Action.PERFORM ? IFluidHandler.FluidAction.EXECUTE : IFluidHandler.FluidAction.SIMULATE);
|
||||||
|
|
||||||
if (filled == size) {
|
if (filled == size) {
|
||||||
return null;
|
return FluidStack.EMPTY;
|
||||||
}
|
}
|
||||||
|
|
||||||
return StackUtils.copy(stack, size - filled);
|
return StackUtils.copy(stack, size - filled);
|
||||||
@@ -92,13 +96,17 @@ public class FluidExternalStorage implements IExternalStorage<FluidStack> {
|
|||||||
return StackUtils.copy(stack, size);
|
return StackUtils.copy(stack, size);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Nullable
|
|
||||||
@Override
|
@Override
|
||||||
|
@Nonnull
|
||||||
public FluidStack extract(@Nonnull FluidStack stack, int size, int flags, Action action) {
|
public FluidStack extract(@Nonnull FluidStack stack, int size, int flags, Action action) {
|
||||||
|
if (stack.isEmpty()) {
|
||||||
|
return stack;
|
||||||
|
}
|
||||||
|
|
||||||
IFluidHandler handler = handlerSupplier.get();
|
IFluidHandler handler = handlerSupplier.get();
|
||||||
|
|
||||||
if (handler == null) {
|
if (handler == null) {
|
||||||
return null;
|
return FluidStack.EMPTY;
|
||||||
}
|
}
|
||||||
|
|
||||||
return handler.drain(StackUtils.copy(stack, size), action == Action.PERFORM ? IFluidHandler.FluidAction.EXECUTE : IFluidHandler.FluidAction.SIMULATE);
|
return handler.drain(StackUtils.copy(stack, size), action == Action.PERFORM ? IFluidHandler.FluidAction.EXECUTE : IFluidHandler.FluidAction.SIMULATE);
|
||||||
|
|||||||
@@ -6,7 +6,6 @@ import com.raoulvdberge.refinedstorage.api.storage.externalstorage.IExternalStor
|
|||||||
import com.raoulvdberge.refinedstorage.api.storage.externalstorage.IExternalStorageContext;
|
import com.raoulvdberge.refinedstorage.api.storage.externalstorage.IExternalStorageContext;
|
||||||
import com.raoulvdberge.refinedstorage.api.util.Action;
|
import com.raoulvdberge.refinedstorage.api.util.Action;
|
||||||
import com.raoulvdberge.refinedstorage.apiimpl.API;
|
import com.raoulvdberge.refinedstorage.apiimpl.API;
|
||||||
import com.raoulvdberge.refinedstorage.util.StackUtils;
|
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
import net.minecraftforge.items.IItemHandler;
|
import net.minecraftforge.items.IItemHandler;
|
||||||
import net.minecraftforge.items.ItemHandlerHelper;
|
import net.minecraftforge.items.ItemHandlerHelper;
|
||||||
@@ -78,31 +77,39 @@ public class ItemExternalStorage implements IExternalStorage<ItemStack> {
|
|||||||
return stacks;
|
return stacks;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Nullable
|
|
||||||
@Override
|
@Override
|
||||||
|
@Nonnull
|
||||||
public ItemStack insert(@Nonnull ItemStack stack, int size, Action action) {
|
public ItemStack insert(@Nonnull ItemStack stack, int size, Action action) {
|
||||||
|
if (stack.isEmpty()) {
|
||||||
|
return stack;
|
||||||
|
}
|
||||||
|
|
||||||
IItemHandler handler = handlerSupplier.get();
|
IItemHandler handler = handlerSupplier.get();
|
||||||
|
|
||||||
if (handler != null && context.acceptsItem(stack)) {
|
if (handler != null && context.acceptsItem(stack)) {
|
||||||
return StackUtils.emptyToNull(ItemHandlerHelper.insertItem(handler, ItemHandlerHelper.copyStackWithSize(stack, size), action == Action.SIMULATE));
|
return ItemHandlerHelper.insertItem(handler, ItemHandlerHelper.copyStackWithSize(stack, size), action == Action.SIMULATE);
|
||||||
}
|
}
|
||||||
|
|
||||||
return ItemHandlerHelper.copyStackWithSize(stack, size);
|
return ItemHandlerHelper.copyStackWithSize(stack, size);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Nullable
|
|
||||||
@Override
|
@Override
|
||||||
|
@Nonnull
|
||||||
public ItemStack extract(@Nonnull ItemStack stack, int size, int flags, Action action) {
|
public ItemStack extract(@Nonnull ItemStack stack, int size, int flags, Action action) {
|
||||||
int remaining = size;
|
if (stack.isEmpty()) {
|
||||||
|
return stack;
|
||||||
ItemStack received = null;
|
}
|
||||||
|
|
||||||
IItemHandler handler = handlerSupplier.get();
|
IItemHandler handler = handlerSupplier.get();
|
||||||
|
|
||||||
if (handler == null) {
|
if (handler == null) {
|
||||||
return null;
|
return ItemStack.EMPTY;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int remaining = size;
|
||||||
|
|
||||||
|
ItemStack received = ItemStack.EMPTY;
|
||||||
|
|
||||||
for (int i = 0; i < handler.getSlots(); ++i) {
|
for (int i = 0; i < handler.getSlots(); ++i) {
|
||||||
ItemStack slot = handler.getStackInSlot(i);
|
ItemStack slot = handler.getStackInSlot(i);
|
||||||
|
|
||||||
@@ -110,7 +117,7 @@ public class ItemExternalStorage implements IExternalStorage<ItemStack> {
|
|||||||
ItemStack got = handler.extractItem(i, remaining, action == Action.SIMULATE);
|
ItemStack got = handler.extractItem(i, remaining, action == Action.SIMULATE);
|
||||||
|
|
||||||
if (!got.isEmpty()) {
|
if (!got.isEmpty()) {
|
||||||
if (received == null) {
|
if (received.isEmpty()) {
|
||||||
received = got.copy();
|
received = got.copy();
|
||||||
} else {
|
} else {
|
||||||
received.grow(got.getCount());
|
received.grow(got.getCount());
|
||||||
|
|||||||
@@ -315,7 +315,7 @@ public class ControllerTile extends BaseTile implements ITickableTileEntity, INe
|
|||||||
inserted += storage.getCacheDelta(storedPre, size, remainder);
|
inserted += storage.getCacheDelta(storedPre, size, remainder);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (remainder == null) {
|
if (remainder.isEmpty()) {
|
||||||
// The external storage is responsible for sending changes, we don't need to anymore
|
// The external storage is responsible for sending changes, we don't need to anymore
|
||||||
if (storage instanceof IExternalStorage && action == Action.PERFORM) {
|
if (storage instanceof IExternalStorage && action == Action.PERFORM) {
|
||||||
((IExternalStorage) storage).update(this);
|
((IExternalStorage) storage).update(this);
|
||||||
@@ -340,6 +340,11 @@ public class ControllerTile extends BaseTile implements ITickableTileEntity, INe
|
|||||||
itemStorage.add(stack, inserted - insertedExternally, false, false);
|
itemStorage.add(stack, inserted - insertedExternally, false, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO Remove.
|
||||||
|
if (remainder.isEmpty()) {
|
||||||
|
remainder = null;
|
||||||
|
}
|
||||||
|
|
||||||
return remainder;
|
return remainder;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -350,16 +355,16 @@ public class ControllerTile extends BaseTile implements ITickableTileEntity, INe
|
|||||||
|
|
||||||
int extractedExternally = 0;
|
int extractedExternally = 0;
|
||||||
|
|
||||||
ItemStack newStack = null;
|
ItemStack newStack = ItemStack.EMPTY;
|
||||||
|
|
||||||
for (IStorage<ItemStack> storage : this.itemStorage.getStorages()) {
|
for (IStorage<ItemStack> storage : this.itemStorage.getStorages()) {
|
||||||
ItemStack took = null;
|
ItemStack took = ItemStack.EMPTY;
|
||||||
|
|
||||||
if (filter.test(storage) && storage.getAccessType() != AccessType.INSERT) {
|
if (filter.test(storage) && storage.getAccessType() != AccessType.INSERT) {
|
||||||
took = storage.extract(stack, requested - received, flags, action);
|
took = storage.extract(stack, requested - received, flags, action);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (took != null) {
|
if (!took.isEmpty()) {
|
||||||
// The external storage is responsible for sending changes, we don't need to anymore
|
// The external storage is responsible for sending changes, we don't need to anymore
|
||||||
if (storage instanceof IExternalStorage && action == Action.PERFORM) {
|
if (storage instanceof IExternalStorage && action == Action.PERFORM) {
|
||||||
((IExternalStorage) storage).update(this);
|
((IExternalStorage) storage).update(this);
|
||||||
@@ -367,7 +372,7 @@ public class ControllerTile extends BaseTile implements ITickableTileEntity, INe
|
|||||||
extractedExternally += took.getCount();
|
extractedExternally += took.getCount();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (newStack == null) {
|
if (newStack.isEmpty()) {
|
||||||
newStack = took;
|
newStack = took;
|
||||||
} else {
|
} else {
|
||||||
newStack.grow(took.getCount());
|
newStack.grow(took.getCount());
|
||||||
@@ -381,10 +386,15 @@ public class ControllerTile extends BaseTile implements ITickableTileEntity, INe
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (newStack != null && newStack.getCount() - extractedExternally > 0 && action == Action.PERFORM) {
|
if (newStack.getCount() - extractedExternally > 0 && action == Action.PERFORM) {
|
||||||
itemStorage.remove(newStack, newStack.getCount() - extractedExternally, false);
|
itemStorage.remove(newStack, newStack.getCount() - extractedExternally, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO Remove.
|
||||||
|
if (newStack.isEmpty()) {
|
||||||
|
newStack = null;
|
||||||
|
}
|
||||||
|
|
||||||
return newStack;
|
return newStack;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -413,7 +423,7 @@ public class ControllerTile extends BaseTile implements ITickableTileEntity, INe
|
|||||||
inserted += storage.getCacheDelta(storedPre, size, remainder);
|
inserted += storage.getCacheDelta(storedPre, size, remainder);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (remainder == null) {
|
if (remainder.isEmpty()) {
|
||||||
// The external storage is responsible for sending changes, we don't need to anymore
|
// The external storage is responsible for sending changes, we don't need to anymore
|
||||||
if (storage instanceof IExternalStorage && action == Action.PERFORM) {
|
if (storage instanceof IExternalStorage && action == Action.PERFORM) {
|
||||||
((IExternalStorage) storage).update(this);
|
((IExternalStorage) storage).update(this);
|
||||||
@@ -438,6 +448,11 @@ public class ControllerTile extends BaseTile implements ITickableTileEntity, INe
|
|||||||
fluidStorage.add(stack, inserted - insertedExternally, false, false);
|
fluidStorage.add(stack, inserted - insertedExternally, false, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO Remove.
|
||||||
|
if (remainder.isEmpty()) {
|
||||||
|
remainder = null;
|
||||||
|
}
|
||||||
|
|
||||||
return remainder;
|
return remainder;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -448,16 +463,16 @@ public class ControllerTile extends BaseTile implements ITickableTileEntity, INe
|
|||||||
|
|
||||||
int extractedExternally = 0;
|
int extractedExternally = 0;
|
||||||
|
|
||||||
FluidStack newStack = null;
|
FluidStack newStack = FluidStack.EMPTY;
|
||||||
|
|
||||||
for (IStorage<FluidStack> storage : this.fluidStorage.getStorages()) {
|
for (IStorage<FluidStack> storage : this.fluidStorage.getStorages()) {
|
||||||
FluidStack took = null;
|
FluidStack took = FluidStack.EMPTY;
|
||||||
|
|
||||||
if (filter.test(storage) && storage.getAccessType() != AccessType.INSERT) {
|
if (filter.test(storage) && storage.getAccessType() != AccessType.INSERT) {
|
||||||
took = storage.extract(stack, requested - received, flags, action);
|
took = storage.extract(stack, requested - received, flags, action);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (took != null) {
|
if (!took.isEmpty()) {
|
||||||
// The external storage is responsible for sending changes, we don't need to anymore
|
// The external storage is responsible for sending changes, we don't need to anymore
|
||||||
if (storage instanceof IExternalStorage && action == Action.PERFORM) {
|
if (storage instanceof IExternalStorage && action == Action.PERFORM) {
|
||||||
((IExternalStorage) storage).update(this);
|
((IExternalStorage) storage).update(this);
|
||||||
@@ -465,7 +480,7 @@ public class ControllerTile extends BaseTile implements ITickableTileEntity, INe
|
|||||||
extractedExternally += took.getAmount();
|
extractedExternally += took.getAmount();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (newStack == null) {
|
if (newStack.isEmpty()) {
|
||||||
newStack = took;
|
newStack = took;
|
||||||
} else {
|
} else {
|
||||||
newStack.grow(took.getAmount());
|
newStack.grow(took.getAmount());
|
||||||
@@ -479,10 +494,15 @@ public class ControllerTile extends BaseTile implements ITickableTileEntity, INe
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (newStack != null && newStack.getAmount() - extractedExternally > 0 && action == Action.PERFORM) {
|
if (newStack.getAmount() - extractedExternally > 0 && action == Action.PERFORM) {
|
||||||
fluidStorage.remove(newStack, newStack.getAmount() - extractedExternally, false);
|
fluidStorage.remove(newStack, newStack.getAmount() - extractedExternally, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO Remove.
|
||||||
|
if (newStack.isEmpty()) {
|
||||||
|
newStack = null;
|
||||||
|
}
|
||||||
|
|
||||||
return newStack;
|
return newStack;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user