Changed related to storage

- Removed support for the Deep Storage Unit API
- Performance improvements related to storage inserting and extracting, fixes #871
- Fixed crash with External Storage, fixes #1115
This commit is contained in:
raoulvdberge
2017-04-01 18:15:02 +02:00
parent fd700912f5
commit 69d92c4164
21 changed files with 92 additions and 309 deletions

View File

@@ -17,6 +17,9 @@
- Fixed controller model warning during launch (raoulvdberge)
- Improved memory usage of some models (raoulvdberge)
- Fixed not rendering some tooltips correctly (raoulvdberge)
- Removed support for the Deep Storage Unit API (raoulvdberge)
- Performance improvements related to storage inserting and extracting (raoulvdberge)
- Fixed crash with External Storage (raoulvdberge)
### 1.4.1
- Added Storage Monitor (raoulvdberge)

View File

@@ -6,9 +6,9 @@ import net.minecraftforge.fml.client.registry.ClientRegistry;
import org.lwjgl.input.Keyboard;
public final class RSKeyBindings {
public static final KeyBinding focusSearchBar = new KeyBinding("key.refinedstorage.focusSearchBar", KeyConflictContext.GUI, Keyboard.KEY_TAB, "Refined Storage");
public static final KeyBinding FOCUS_SEARCH_BAR = new KeyBinding("key.refinedstorage.focusSearchBar", KeyConflictContext.GUI, Keyboard.KEY_TAB, "Refined Storage");
public static void init() {
ClientRegistry.registerKeyBinding(focusSearchBar);
ClientRegistry.registerKeyBinding(FOCUS_SEARCH_BAR);
}
}

View File

@@ -55,22 +55,12 @@ import javax.annotation.Nullable;
import java.math.RoundingMode;
import java.text.DecimalFormat;
import java.text.DecimalFormatSymbols;
import java.util.*;
import java.util.function.BiConsumer;
import java.util.function.BinaryOperator;
import java.util.Collection;
import java.util.List;
import java.util.Locale;
import java.util.function.Function;
import java.util.function.Supplier;
import java.util.stream.Collector;
public final class RSUtils {
private static final NonNullList EMPTY_NON_NULL_LIST = new NonNullList<Object>(Collections.emptyList(), null) {
};
@SuppressWarnings("unchecked")
public static <T> NonNullList<T> emptyNonNullList() {
return (NonNullList<T>) EMPTY_NON_NULL_LIST;
}
public static final ItemStack EMPTY_BUCKET = new ItemStack(Items.BUCKET);
public static final DecimalFormat QUANTITY_FORMATTER = new DecimalFormat("####0.#", DecimalFormatSymbols.getInstance(Locale.US));
@@ -549,42 +539,4 @@ public final class RSUtils {
vertexBuffer.pos(xCoord, yCoord + maskTop, zLevel).tex(uMin, vMin).endVertex();
tessellator.draw();
}
public static <T> Collector<T, ?, NonNullList<T>> toNonNullList() {
return new Collector<T, NonNullList<T>, NonNullList<T>>() {
@Override
public Supplier<NonNullList<T>> supplier() {
return NonNullList::create;
}
@Override
public BiConsumer<NonNullList<T>, T> accumulator() {
return (list, item) -> {
if (item != null) {
list.add(item);
}
};
}
@Override
public BinaryOperator<NonNullList<T>> combiner() {
return (a, b) -> {
NonNullList<T> list = NonNullList.create();
a.forEach(list::add);
b.forEach(list::add);
return list;
};
}
@Override
public Function<NonNullList<T>, NonNullList<T>> finisher() {
return (list) -> list;
}
@Override
public Set<Characteristics> characteristics() {
return EnumSet.of(Characteristics.IDENTITY_FINISH);
}
};
}
}

View File

@@ -1,16 +1,16 @@
package com.raoulvdberge.refinedstorage.api.storage;
import com.raoulvdberge.refinedstorage.api.util.IComparer;
import net.minecraft.util.NonNullList;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import java.util.Collection;
public interface IStorage<T> {
/**
* @return stacks stored in this storage
*/
NonNullList<T> getStacks();
Collection<T> getStacks();
/**
* Inserts a stack to this storage.

View File

@@ -7,11 +7,11 @@ import com.raoulvdberge.refinedstorage.api.storage.StorageDiskType;
import com.raoulvdberge.refinedstorage.tile.TileDiskDrive;
import com.raoulvdberge.refinedstorage.tile.config.IFilterable;
import net.minecraft.item.ItemStack;
import net.minecraft.util.NonNullList;
import net.minecraftforge.fluids.FluidStack;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import java.util.Collection;
public class StorageFluidDiskDrive implements IStorageDisk<FluidStack> {
private NetworkNodeDiskDrive diskDrive;
@@ -41,7 +41,7 @@ public class StorageFluidDiskDrive implements IStorageDisk<FluidStack> {
}
@Override
public NonNullList<FluidStack> getStacks() {
public Collection<FluidStack> getStacks() {
return parent.getStacks();
}

View File

@@ -7,11 +7,11 @@ import com.raoulvdberge.refinedstorage.api.storage.StorageDiskType;
import com.raoulvdberge.refinedstorage.tile.TileDiskDrive;
import com.raoulvdberge.refinedstorage.tile.config.IFilterable;
import net.minecraft.item.ItemStack;
import net.minecraft.util.NonNullList;
import net.minecraftforge.items.ItemHandlerHelper;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import java.util.Collection;
public class StorageItemDiskDrive implements IStorageDisk<ItemStack> {
private NetworkNodeDiskDrive diskDrive;
@@ -41,7 +41,7 @@ public class StorageItemDiskDrive implements IStorageDisk<ItemStack> {
}
@Override
public NonNullList<ItemStack> getStacks() {
public Collection<ItemStack> getStacks() {
return parent.getStacks();
}

View File

@@ -168,9 +168,7 @@ public class NetworkNodeDiskManipulator extends NetworkNode implements IComparab
return;
}
for (int i = 0; i < storage.getStacks().size(); i++) {
ItemStack stack = storage.getStacks().get(i);
for (ItemStack stack : storage.getStacks()) {
ItemStack extracted = storage.extract(stack, upgrades.getItemInteractCount(), compare, false);
if (extracted == null) {
continue;
@@ -245,11 +243,13 @@ public class NetworkNodeDiskManipulator extends NetworkNode implements IComparab
}
FluidStack extracted = null;
int i = 0;
while (extracted == null && storage.getStacks().size() > i) {
FluidStack stack = storage.getStacks().get(i++);
for (FluidStack stack : storage.getStacks()) {
extracted = storage.extract(stack, upgrades.getItemInteractCount(), compare, false);
if (extracted != null) {
break;
}
}
if (extracted == null) {

View File

@@ -6,11 +6,11 @@ import com.raoulvdberge.refinedstorage.api.storage.StorageDiskType;
import com.raoulvdberge.refinedstorage.tile.TileDiskDrive;
import com.raoulvdberge.refinedstorage.tile.config.IFilterable;
import net.minecraft.item.ItemStack;
import net.minecraft.util.NonNullList;
import net.minecraftforge.fluids.FluidStack;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import java.util.Collection;
public class StorageFluidDiskManipulator implements IStorageDisk<FluidStack> {
private NetworkNodeDiskManipulator diskManipulator;
@@ -70,7 +70,7 @@ public class StorageFluidDiskManipulator implements IStorageDisk<FluidStack> {
}
@Override
public NonNullList<FluidStack> getStacks() {
public Collection<FluidStack> getStacks() {
return parent.getStacks();
}

View File

@@ -6,11 +6,11 @@ import com.raoulvdberge.refinedstorage.api.storage.StorageDiskType;
import com.raoulvdberge.refinedstorage.tile.TileDiskDrive;
import com.raoulvdberge.refinedstorage.tile.config.IFilterable;
import net.minecraft.item.ItemStack;
import net.minecraft.util.NonNullList;
import net.minecraftforge.items.ItemHandlerHelper;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import java.util.Collection;
public class StorageItemDiskManipulator implements IStorageDisk<ItemStack> {
private NetworkNodeDiskManipulator diskManipulator;
@@ -70,7 +70,7 @@ public class StorageItemDiskManipulator implements IStorageDisk<ItemStack> {
}
@Override
public NonNullList<ItemStack> getStacks() {
public Collection<ItemStack> getStacks() {
return parent.getStacks();
}

View File

@@ -26,7 +26,6 @@ import net.minecraft.tileentity.TileEntity;
import net.minecraftforge.fluids.FluidStack;
import net.minecraftforge.fluids.capability.IFluidHandler;
import net.minecraftforge.items.IItemHandler;
import powercrystals.minefactoryreloaded.api.IDeepStorageUnit;
import java.util.ArrayList;
import java.util.List;
@@ -203,12 +202,6 @@ public class NetworkNodeExternalStorage extends NetworkNode implements IStorageP
return f instanceof IDrawer ? (IDrawer) f : null;
}));
} else if (facing instanceof IDeepStorageUnit) {
itemStorages.add(new StorageItemDSU(this, () -> {
TileEntity f = getFacingTile();
return f instanceof IDeepStorageUnit ? (IDeepStorageUnit) f : null;
}));
} else if (IntegrationCyclopsCore.isLoaded() && StorageItemCyclops.isValid(facing, holder.getDirection().getOpposite())) {
itemStorages.add(new StorageItemCyclops(this));
} else if (!(facing instanceof TileNode)) {

View File

@@ -6,13 +6,14 @@ import com.raoulvdberge.refinedstorage.api.storage.IStorage;
import com.raoulvdberge.refinedstorage.api.util.IComparer;
import com.raoulvdberge.refinedstorage.apiimpl.API;
import com.raoulvdberge.refinedstorage.tile.config.IFilterable;
import net.minecraft.util.NonNullList;
import net.minecraftforge.fluids.FluidStack;
import net.minecraftforge.fluids.capability.IFluidHandler;
import net.minecraftforge.fluids.capability.IFluidTankProperties;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import java.util.Collection;
import java.util.Collections;
import java.util.function.Supplier;
public class StorageFluidExternal implements IStorage<FluidStack> {
@@ -37,8 +38,8 @@ public class StorageFluidExternal implements IStorage<FluidStack> {
}
@Override
public NonNullList<FluidStack> getStacks() {
return getContents() == null ? RSUtils.emptyNonNullList() : NonNullList.withSize(1, getContents().copy());
public Collection<FluidStack> getStacks() {
return getContents() == null ? Collections.emptyList() : Collections.singletonList(getContents().copy());
}
@Override

View File

@@ -7,7 +7,6 @@ import com.raoulvdberge.refinedstorage.tile.config.IFilterable;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.NonNullList;
import net.minecraftforge.items.ItemHandlerHelper;
import org.cyclops.cyclopscore.inventory.IndexedSlotlessItemHandlerWrapper;
import org.cyclops.cyclopscore.inventory.SimpleInventory;
@@ -16,7 +15,10 @@ import org.cyclops.cyclopscore.tileentity.InventoryTileEntityBase;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.function.Supplier;
import java.util.stream.Collectors;
public class StorageItemCyclops extends StorageItemExternal {
private NetworkNodeExternalStorage externalStorage;
@@ -49,7 +51,7 @@ public class StorageItemCyclops extends StorageItemExternal {
}
@Override
public NonNullList<ItemStack> getStacks() {
public Collection<ItemStack> getStacks() {
return getStacks(cyclopsInv.get());
}
@@ -90,7 +92,7 @@ public class StorageItemCyclops extends StorageItemExternal {
return inv != null ? RSUtils.transformEmptyToNull(SlotlessItemHandlerHelper.extractItem(inv, opposite, stack, size, flags, simulate)) : null;
}
private NonNullList<ItemStack> getStacks(@Nullable InventoryTileEntityBase inv) {
private Collection<ItemStack> getStacks(@Nullable InventoryTileEntityBase inv) {
if (inv != null) {
if (inv.getInventory() instanceof IndexedSlotlessItemHandlerWrapper.IInventoryIndexReference) {
return ((IndexedSlotlessItemHandlerWrapper.IInventoryIndexReference) inv.getInventory())
@@ -99,14 +101,14 @@ public class StorageItemCyclops extends StorageItemExternal {
.stream()
.flatMap(m -> m.valueCollection().stream())
.map(ItemStack::copy)
.collect(RSUtils.toNonNullList());
.collect(Collectors.toList());
} else {
return Arrays.stream(((SimpleInventory) inv.getInventory()).getItemStacks())
.map(ItemStack::copy)
.collect(RSUtils.toNonNullList());
.collect(Collectors.toList());
}
} else {
return RSUtils.emptyNonNullList();
return Collections.emptyList();
}
}

View File

@@ -1,144 +0,0 @@
package com.raoulvdberge.refinedstorage.apiimpl.network.node.externalstorage;
import com.raoulvdberge.refinedstorage.RSUtils;
import com.raoulvdberge.refinedstorage.api.storage.AccessType;
import com.raoulvdberge.refinedstorage.apiimpl.API;
import com.raoulvdberge.refinedstorage.tile.config.IFilterable;
import net.minecraft.item.ItemStack;
import net.minecraft.util.NonNullList;
import net.minecraftforge.items.ItemHandlerHelper;
import powercrystals.minefactoryreloaded.api.IDeepStorageUnit;
import javax.annotation.Nonnull;
import java.util.function.Supplier;
public class StorageItemDSU extends StorageItemExternal {
private NetworkNodeExternalStorage externalStorage;
private Supplier<IDeepStorageUnit> dsuSupplier;
public StorageItemDSU(NetworkNodeExternalStorage externalStorage, Supplier<IDeepStorageUnit> dsuSupplier) {
this.externalStorage = externalStorage;
this.dsuSupplier = dsuSupplier;
}
@Override
public int getCapacity() {
IDeepStorageUnit dsu = dsuSupplier.get();
return dsu != null ? dsu.getMaxStoredCount() : 0;
}
@Override
public NonNullList<ItemStack> getStacks() {
IDeepStorageUnit dsu = dsuSupplier.get();
if (dsu != null) {
ItemStack stored = dsu.getStoredItemType();
if (stored != null && stored.getCount() > 0) {
return NonNullList.withSize(1, stored.copy());
}
}
return RSUtils.emptyNonNullList();
}
@Override
public ItemStack insert(@Nonnull ItemStack stack, int size, boolean simulate) {
IDeepStorageUnit dsu = dsuSupplier.get();
if (dsu != null && IFilterable.canTake(externalStorage.getItemFilters(), externalStorage.getMode(), externalStorage.getCompare(), stack)) {
if (dsu.getStoredItemType() != null) {
if (API.instance().getComparer().isEqualNoQuantity(dsu.getStoredItemType(), stack)) {
if (getStored() + size > dsu.getMaxStoredCount()) {
int remainingSpace = getCapacity() - getStored();
if (remainingSpace <= 0) {
return ItemHandlerHelper.copyStackWithSize(stack, size);
}
if (!simulate) {
dsu.setStoredItemCount(dsu.getStoredItemType().getCount() + remainingSpace);
}
return ItemHandlerHelper.copyStackWithSize(stack, size - remainingSpace);
} else {
if (!simulate) {
dsu.setStoredItemCount(dsu.getStoredItemType().getCount() + size);
}
return null;
}
}
} else {
if (getStored() + size > dsu.getMaxStoredCount()) {
int remainingSpace = getCapacity() - getStored();
if (remainingSpace <= 0) {
return ItemHandlerHelper.copyStackWithSize(stack, size);
}
if (!simulate) {
dsu.setStoredItemType(stack.copy(), remainingSpace);
}
return ItemHandlerHelper.copyStackWithSize(stack, size - remainingSpace);
} else {
if (!simulate) {
dsu.setStoredItemType(stack.copy(), size);
}
return null;
}
}
}
return ItemHandlerHelper.copyStackWithSize(stack, size);
}
@Override
public ItemStack extract(@Nonnull ItemStack stack, int size, int flags, boolean simulate) {
IDeepStorageUnit dsu = dsuSupplier.get();
if (dsu != null && API.instance().getComparer().isEqual(stack, dsu.getStoredItemType(), flags)) {
ItemStack stored = dsu.getStoredItemType();
if (size > stored.getCount()) {
size = stored.getCount();
}
if (!simulate) {
dsu.setStoredItemCount(stored.getCount() - size);
}
return ItemHandlerHelper.copyStackWithSize(stored, size);
}
return null;
}
@Override
public int getStored() {
IDeepStorageUnit dsu = dsuSupplier.get();
if (dsu != null) {
ItemStack stored = dsu.getStoredItemType();
if (stored != null) {
return stored.getCount();
}
}
return 0;
}
@Override
public int getPriority() {
return externalStorage.getPriority();
}
@Override
public AccessType getAccessType() {
return externalStorage.getAccessType();
}
}

View File

@@ -2,16 +2,16 @@ package com.raoulvdberge.refinedstorage.apiimpl.network.node.externalstorage;
import com.jaquadro.minecraft.storagedrawers.api.storage.IDrawer;
import com.jaquadro.minecraft.storagedrawers.api.storage.attribute.IVoidable;
import com.raoulvdberge.refinedstorage.RSUtils;
import com.raoulvdberge.refinedstorage.api.storage.AccessType;
import com.raoulvdberge.refinedstorage.apiimpl.API;
import com.raoulvdberge.refinedstorage.tile.config.IFilterable;
import net.minecraft.item.ItemStack;
import net.minecraft.util.NonNullList;
import net.minecraftforge.items.ItemHandlerHelper;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import java.util.Collection;
import java.util.Collections;
import java.util.function.Supplier;
public class StorageItemDrawer extends StorageItemExternal {
@@ -31,8 +31,8 @@ public class StorageItemDrawer extends StorageItemExternal {
}
@Override
public NonNullList<ItemStack> getStacks() {
return getStacks(drawerSupplier.get());
public Collection<ItemStack> getStacks() {
return Collections.singletonList(getStack(drawerSupplier.get()));
}
@Override
@@ -62,12 +62,12 @@ public class StorageItemDrawer extends StorageItemExternal {
return externalStorage.getAccessType();
}
public static NonNullList<ItemStack> getStacks(@Nullable IDrawer drawer) {
public static ItemStack getStack(@Nullable IDrawer drawer) {
if (drawer != null && !drawer.isEmpty() && drawer.getStoredItemCount() > 0) {
return NonNullList.withSize(1, ItemHandlerHelper.copyStackWithSize(drawer.getStoredItemPrototype(), drawer.getStoredItemCount()));
return ItemHandlerHelper.copyStackWithSize(drawer.getStoredItemPrototype(), drawer.getStoredItemCount());
}
return RSUtils.emptyNonNullList();
return ItemStack.EMPTY;
}
public static ItemStack insert(NetworkNodeExternalStorage externalStorage, @Nullable IDrawer drawer, @Nonnull ItemStack stack, int size, boolean simulate) {

View File

@@ -2,13 +2,15 @@ package com.raoulvdberge.refinedstorage.apiimpl.network.node.externalstorage;
import com.jaquadro.minecraft.storagedrawers.api.storage.IDrawer;
import com.jaquadro.minecraft.storagedrawers.api.storage.IDrawerGroup;
import com.raoulvdberge.refinedstorage.RSUtils;
import com.raoulvdberge.refinedstorage.api.storage.AccessType;
import net.minecraft.item.ItemStack;
import net.minecraft.util.NonNullList;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.function.Supplier;
public class StorageItemDrawerGroup extends StorageItemExternal {
@@ -21,20 +23,20 @@ public class StorageItemDrawerGroup extends StorageItemExternal {
}
@Override
public NonNullList<ItemStack> getStacks() {
public Collection<ItemStack> getStacks() {
IDrawerGroup group = groupSupplier.get();
if (group == null) {
return RSUtils.emptyNonNullList();
return Collections.emptyList();
}
NonNullList<ItemStack> stacks = NonNullList.create();
List<ItemStack> stacks = new ArrayList<>();
for (int i = 0; i < group.getDrawerCount(); ++i) {
IDrawer drawer = group.getDrawer(i);
if (group.isDrawerEnabled(i)) {
stacks.addAll(StorageItemDrawer.getStacks(drawer));
stacks.add(StorageItemDrawer.getStack(drawer));
}
}

View File

@@ -7,6 +7,7 @@ import com.raoulvdberge.refinedstorage.apiimpl.API;
import net.minecraft.item.ItemStack;
import javax.annotation.Nullable;
import java.util.ArrayList;
import java.util.List;
public abstract class StorageItemExternal implements IStorage<ItemStack> {
@@ -21,12 +22,12 @@ public abstract class StorageItemExternal implements IStorage<ItemStack> {
}
if (cache == null) {
cache = getStacks();
cache = new ArrayList<>(getStacks());
return;
}
List<ItemStack> newStacks = getStacks();
List<ItemStack> newStacks = new ArrayList<>(getStacks());
for (int i = 0; i < newStacks.size(); ++i) {
ItemStack actual = newStacks.get(i);

View File

@@ -5,11 +5,14 @@ import com.raoulvdberge.refinedstorage.api.storage.AccessType;
import com.raoulvdberge.refinedstorage.apiimpl.API;
import com.raoulvdberge.refinedstorage.tile.config.IFilterable;
import net.minecraft.item.ItemStack;
import net.minecraft.util.NonNullList;
import net.minecraftforge.items.IItemHandler;
import net.minecraftforge.items.ItemHandlerHelper;
import javax.annotation.Nonnull;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.function.Supplier;
public class StorageItemItemHandler extends StorageItemExternal {
@@ -34,17 +37,17 @@ public class StorageItemItemHandler extends StorageItemExternal {
}
@Override
public NonNullList<ItemStack> getStacks() {
public Collection<ItemStack> getStacks() {
IItemHandler handler = handlerSupplier.get();
if (handler == null) {
return RSUtils.emptyNonNullList();
return Collections.emptyList();
}
NonNullList<ItemStack> stacks = NonNullList.withSize(handler.getSlots(), ItemStack.EMPTY);
List<ItemStack> stacks = new ArrayList<>();
for (int i = 0; i < handler.getSlots(); ++i) {
stacks.set(i, handler.getStackInSlot(i).copy());
stacks.add(handler.getStackInSlot(i).copy());
}
return stacks;

View File

@@ -1,5 +1,7 @@
package com.raoulvdberge.refinedstorage.apiimpl.storage;
import com.google.common.collect.ArrayListMultimap;
import com.google.common.collect.Multimap;
import com.raoulvdberge.refinedstorage.RSUtils;
import com.raoulvdberge.refinedstorage.api.storage.AccessType;
import com.raoulvdberge.refinedstorage.api.storage.IStorageDisk;
@@ -8,11 +10,12 @@ import com.raoulvdberge.refinedstorage.apiimpl.API;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagList;
import net.minecraft.util.NonNullList;
import net.minecraftforge.fluids.Fluid;
import net.minecraftforge.fluids.FluidStack;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import java.util.Collection;
public class StorageDiskFluid implements IStorageDisk<FluidStack> {
private static final int PROTOCOL = 1;
@@ -25,7 +28,7 @@ public class StorageDiskFluid implements IStorageDisk<FluidStack> {
private NBTTagCompound tag;
private int capacity;
private NonNullList<FluidStack> stacks = NonNullList.create();
private Multimap<Fluid, FluidStack> stacks = ArrayListMultimap.create();
private Runnable listener = () -> {
};
@@ -47,7 +50,7 @@ public class StorageDiskFluid implements IStorageDisk<FluidStack> {
FluidStack stack = FluidStack.loadFluidStackFromNBT(list.getCompoundTagAt(i));
if (stack != null) {
stacks.add(stack);
stacks.put(stack.getFluid(), stack);
}
}
}
@@ -56,7 +59,7 @@ public class StorageDiskFluid implements IStorageDisk<FluidStack> {
public void writeToNBT() {
NBTTagList list = new NBTTagList();
for (FluidStack stack : stacks) {
for (FluidStack stack : stacks.values()) {
list.appendTag(stack.writeToNBT(new NBTTagCompound()));
}
@@ -70,14 +73,14 @@ public class StorageDiskFluid implements IStorageDisk<FluidStack> {
}
@Override
public NonNullList<FluidStack> getStacks() {
return stacks;
public Collection<FluidStack> getStacks() {
return stacks.values();
}
@Override
@Nullable
public synchronized FluidStack insert(@Nonnull FluidStack stack, int size, boolean simulate) {
for (FluidStack otherStack : stacks) {
for (FluidStack otherStack : stacks.get(stack.getFluid())) {
if (otherStack.isFluidEqual(stack)) {
if (getCapacity() != -1 && getStored() + size > getCapacity()) {
int remainingSpace = getCapacity() - getStored();
@@ -127,7 +130,7 @@ public class StorageDiskFluid implements IStorageDisk<FluidStack> {
if (!simulate) {
tag.setInteger(NBT_STORED, getStored() + remainingSpace);
stacks.add(RSUtils.copyStackWithSize(stack, remainingSpace));
stacks.put(stack.getFluid(), RSUtils.copyStackWithSize(stack, remainingSpace));
listener.run();
}
@@ -137,7 +140,7 @@ public class StorageDiskFluid implements IStorageDisk<FluidStack> {
if (!simulate) {
tag.setInteger(NBT_STORED, getStored() + size);
stacks.add(RSUtils.copyStackWithSize(stack, size));
stacks.put(stack.getFluid(), RSUtils.copyStackWithSize(stack, size));
listener.run();
}
@@ -149,7 +152,7 @@ public class StorageDiskFluid implements IStorageDisk<FluidStack> {
@Override
@Nullable
public synchronized FluidStack extract(@Nonnull FluidStack stack, int size, int flags, boolean simulate) {
for (FluidStack otherStack : stacks) {
for (FluidStack otherStack : stacks.get(stack.getFluid())) {
if (API.instance().getComparer().isEqual(otherStack, stack, flags)) {
if (size > otherStack.amount) {
size = otherStack.amount;
@@ -157,7 +160,7 @@ public class StorageDiskFluid implements IStorageDisk<FluidStack> {
if (!simulate) {
if (otherStack.amount - size == 0) {
stacks.remove(otherStack);
stacks.remove(otherStack.getFluid(), otherStack);
} else {
otherStack.amount -= size;
}
@@ -223,7 +226,7 @@ public class StorageDiskFluid implements IStorageDisk<FluidStack> {
NBTTagCompound otherTag = new NBTTagCompound();
otherTag.setInteger(NBT_STORED, getStored(tag));
otherTag.setTag(NBT_FLUIDS, new NBTTagList()); // To circumvent not being able to insert disks in Disk Drives (see FluidStorageNBT#isValid(ItemStack)).
otherTag.setTag(NBT_FLUIDS, new NBTTagList());
otherTag.setInteger(NBT_PROTOCOL, PROTOCOL);
return otherTag;

View File

@@ -1,5 +1,7 @@
package com.raoulvdberge.refinedstorage.apiimpl.storage;
import com.google.common.collect.ArrayListMultimap;
import com.google.common.collect.Multimap;
import com.raoulvdberge.refinedstorage.api.storage.AccessType;
import com.raoulvdberge.refinedstorage.api.storage.IStorage;
import com.raoulvdberge.refinedstorage.api.storage.IStorageDisk;
@@ -9,11 +11,11 @@ import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagList;
import net.minecraft.util.NonNullList;
import net.minecraftforge.items.ItemHandlerHelper;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import java.util.Collection;
/**
* A implementation of {@link IStorage<ItemStack>} that stores storage items in NBT.
@@ -38,7 +40,7 @@ public class StorageDiskItem implements IStorageDisk<ItemStack> {
private Runnable listener = () -> {
};
private NonNullList<ItemStack> stacks = NonNullList.create();
private Multimap<Item, ItemStack> stacks = ArrayListMultimap.create();
/**
* @param tag The NBT tag we are reading from and writing the amount stored to, has to be initialized with {@link StorageDiskItem#getTag()} if it doesn't exist yet
@@ -70,7 +72,7 @@ public class StorageDiskItem implements IStorageDisk<ItemStack> {
stack.setTagCompound(tag.hasKey(NBT_ITEM_NBT) ? tag.getCompoundTag(NBT_ITEM_NBT) : null);
if (!stack.isEmpty()) {
stacks.add(stack);
stacks.put(stack.getItem(), stack);
}
}
}
@@ -82,7 +84,7 @@ public class StorageDiskItem implements IStorageDisk<ItemStack> {
// Dummy value for extracting ForgeCaps
NBTTagCompound dummy = new NBTTagCompound();
for (ItemStack stack : stacks) {
for (ItemStack stack : stacks.values()) {
NBTTagCompound itemTag = new NBTTagCompound();
itemTag.setInteger(NBT_ITEM_TYPE, Item.getIdFromItem(stack.getItem()));
@@ -114,14 +116,14 @@ public class StorageDiskItem implements IStorageDisk<ItemStack> {
}
@Override
public NonNullList<ItemStack> getStacks() {
return stacks;
public Collection<ItemStack> getStacks() {
return stacks.values();
}
@Override
@Nullable
public synchronized ItemStack insert(@Nonnull ItemStack stack, int size, boolean simulate) {
for (ItemStack otherStack : stacks) {
for (ItemStack otherStack : stacks.get(stack.getItem())) {
if (API.instance().getComparer().isEqualNoQuantity(otherStack, stack)) {
if (getCapacity() != -1 && getStored() + size > getCapacity()) {
int remainingSpace = getCapacity() - getStored();
@@ -171,7 +173,7 @@ public class StorageDiskItem implements IStorageDisk<ItemStack> {
if (!simulate) {
tag.setInteger(NBT_STORED, getStored() + remainingSpace);
stacks.add(ItemHandlerHelper.copyStackWithSize(stack, remainingSpace));
stacks.put(stack.getItem(), ItemHandlerHelper.copyStackWithSize(stack, remainingSpace));
listener.run();
}
@@ -181,7 +183,7 @@ public class StorageDiskItem implements IStorageDisk<ItemStack> {
if (!simulate) {
tag.setInteger(NBT_STORED, getStored() + size);
stacks.add(ItemHandlerHelper.copyStackWithSize(stack, size));
stacks.put(stack.getItem(), ItemHandlerHelper.copyStackWithSize(stack, size));
listener.run();
}
@@ -193,7 +195,7 @@ public class StorageDiskItem implements IStorageDisk<ItemStack> {
@Override
@Nullable
public synchronized ItemStack extract(@Nonnull ItemStack stack, int size, int flags, boolean simulate) {
for (ItemStack otherStack : stacks) {
for (ItemStack otherStack : stacks.get(stack.getItem())) {
if (API.instance().getComparer().isEqual(otherStack, stack, flags)) {
if (size > otherStack.getCount()) {
size = otherStack.getCount();
@@ -201,7 +203,7 @@ public class StorageDiskItem implements IStorageDisk<ItemStack> {
if (!simulate) {
if (otherStack.getCount() - size == 0) {
stacks.remove(otherStack);
stacks.remove(otherStack.getItem(), otherStack);
} else {
otherStack.shrink(size);
}
@@ -267,7 +269,7 @@ public class StorageDiskItem implements IStorageDisk<ItemStack> {
NBTTagCompound otherTag = new NBTTagCompound();
otherTag.setInteger(NBT_STORED, getStored(tag));
otherTag.setTag(NBT_ITEMS, new NBTTagList()); // To circumvent not being able to insert disks in Disk Drives (see ItemStorageNBT#isValid(ItemStack)).
otherTag.setTag(NBT_ITEMS, new NBTTagList());
otherTag.setInteger(NBT_PROTOCOL, PROTOCOL);
return otherTag;

View File

@@ -581,7 +581,7 @@ public class GuiGrid extends GuiBase implements IGridDisplay {
updateJEI();
sortItems();
} else if (keyCode == RSKeyBindings.focusSearchBar.getKeyCode() && (grid.getSearchBoxMode() == NetworkNodeGrid.SEARCH_BOX_MODE_NORMAL || grid.getSearchBoxMode() == NetworkNodeGrid.SEARCH_BOX_MODE_JEI_SYNCHRONIZED)) {
} else if (keyCode == RSKeyBindings.FOCUS_SEARCH_BAR.getKeyCode() && (grid.getSearchBoxMode() == NetworkNodeGrid.SEARCH_BOX_MODE_NORMAL || grid.getSearchBoxMode() == NetworkNodeGrid.SEARCH_BOX_MODE_JEI_SYNCHRONIZED)) {
searchField.setFocused(!searchField.isFocused());
} else {
super.keyTyped(character, keyCode);

View File

@@ -1,35 +0,0 @@
package powercrystals.minefactoryreloaded.api;
import net.minecraft.item.ItemStack;
public interface IDeepStorageUnit {
/**
* @return A populated ItemStack with stackSize for the full amount of
* materials in the DSU. <br>
* May have a stackSize > getMaxStackSize(). May have a stackSize of
* 0 (indicating locked contents).
*/
ItemStack getStoredItemType();
/**
* Sets the total amount of the item currently being stored, or zero if all
* items are to be removed.
*/
void setStoredItemCount(int amount);
/**
* Sets the type of the stored item and initializes the number of stored
* items to amount.
* <p>
* Will overwrite any existing stored items.
*/
void setStoredItemType(ItemStack type, int amount);
/**
* @return The maximum number of items the DSU can hold. <br>
* May change based on the current type stored.
*/
int getMaxStoredCount();
}