diff --git a/CHANGELOG.md b/CHANGELOG.md index 4f5a6d835..9e12aeab2 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -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) diff --git a/src/main/java/com/raoulvdberge/refinedstorage/RSKeyBindings.java b/src/main/java/com/raoulvdberge/refinedstorage/RSKeyBindings.java index 124ff9610..e3b78f607 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/RSKeyBindings.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/RSKeyBindings.java @@ -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); } } \ No newline at end of file diff --git a/src/main/java/com/raoulvdberge/refinedstorage/RSUtils.java b/src/main/java/com/raoulvdberge/refinedstorage/RSUtils.java index 21acdfa05..8ea16315e 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/RSUtils.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/RSUtils.java @@ -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(Collections.emptyList(), null) { - }; - - @SuppressWarnings("unchecked") - public static NonNullList emptyNonNullList() { - return (NonNullList) 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 Collector> toNonNullList() { - return new Collector, NonNullList>() { - @Override - public Supplier> supplier() { - return NonNullList::create; - } - - @Override - public BiConsumer, T> accumulator() { - return (list, item) -> { - if (item != null) { - list.add(item); - } - }; - } - - @Override - public BinaryOperator> combiner() { - return (a, b) -> { - NonNullList list = NonNullList.create(); - a.forEach(list::add); - b.forEach(list::add); - return list; - }; - } - - @Override - public Function, NonNullList> finisher() { - return (list) -> list; - } - - @Override - public Set characteristics() { - return EnumSet.of(Characteristics.IDENTITY_FINISH); - } - }; - } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/api/storage/IStorage.java b/src/main/java/com/raoulvdberge/refinedstorage/api/storage/IStorage.java index ad4ead253..e8c072db4 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/api/storage/IStorage.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/api/storage/IStorage.java @@ -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 { /** * @return stacks stored in this storage */ - NonNullList getStacks(); + Collection getStacks(); /** * Inserts a stack to this storage. diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/diskdrive/StorageFluidDiskDrive.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/diskdrive/StorageFluidDiskDrive.java index f693f2ec5..fca806db6 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/diskdrive/StorageFluidDiskDrive.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/diskdrive/StorageFluidDiskDrive.java @@ -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 { private NetworkNodeDiskDrive diskDrive; @@ -41,7 +41,7 @@ public class StorageFluidDiskDrive implements IStorageDisk { } @Override - public NonNullList getStacks() { + public Collection getStacks() { return parent.getStacks(); } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/diskdrive/StorageItemDiskDrive.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/diskdrive/StorageItemDiskDrive.java index cf4c5aa34..1ffcc5de5 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/diskdrive/StorageItemDiskDrive.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/diskdrive/StorageItemDiskDrive.java @@ -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 { private NetworkNodeDiskDrive diskDrive; @@ -41,7 +41,7 @@ public class StorageItemDiskDrive implements IStorageDisk { } @Override - public NonNullList getStacks() { + public Collection getStacks() { return parent.getStacks(); } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/diskmanipulator/NetworkNodeDiskManipulator.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/diskmanipulator/NetworkNodeDiskManipulator.java index a49d9c764..c49df8327 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/diskmanipulator/NetworkNodeDiskManipulator.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/diskmanipulator/NetworkNodeDiskManipulator.java @@ -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) { diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/diskmanipulator/StorageFluidDiskManipulator.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/diskmanipulator/StorageFluidDiskManipulator.java index 1d1a25f81..7cca1e8c4 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/diskmanipulator/StorageFluidDiskManipulator.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/diskmanipulator/StorageFluidDiskManipulator.java @@ -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 { private NetworkNodeDiskManipulator diskManipulator; @@ -70,7 +70,7 @@ public class StorageFluidDiskManipulator implements IStorageDisk { } @Override - public NonNullList getStacks() { + public Collection getStacks() { return parent.getStacks(); } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/diskmanipulator/StorageItemDiskManipulator.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/diskmanipulator/StorageItemDiskManipulator.java index 7eb481d41..e060358ba 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/diskmanipulator/StorageItemDiskManipulator.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/diskmanipulator/StorageItemDiskManipulator.java @@ -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 { private NetworkNodeDiskManipulator diskManipulator; @@ -70,7 +70,7 @@ public class StorageItemDiskManipulator implements IStorageDisk { } @Override - public NonNullList getStacks() { + public Collection getStacks() { return parent.getStacks(); } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/externalstorage/NetworkNodeExternalStorage.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/externalstorage/NetworkNodeExternalStorage.java index 93c9e6e32..0b889b540 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/externalstorage/NetworkNodeExternalStorage.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/externalstorage/NetworkNodeExternalStorage.java @@ -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)) { diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/externalstorage/StorageFluidExternal.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/externalstorage/StorageFluidExternal.java index fba64751d..8e6cd4bb2 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/externalstorage/StorageFluidExternal.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/externalstorage/StorageFluidExternal.java @@ -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 { @@ -37,8 +38,8 @@ public class StorageFluidExternal implements IStorage { } @Override - public NonNullList getStacks() { - return getContents() == null ? RSUtils.emptyNonNullList() : NonNullList.withSize(1, getContents().copy()); + public Collection getStacks() { + return getContents() == null ? Collections.emptyList() : Collections.singletonList(getContents().copy()); } @Override diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/externalstorage/StorageItemCyclops.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/externalstorage/StorageItemCyclops.java index 54b867a57..51d8e0384 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/externalstorage/StorageItemCyclops.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/externalstorage/StorageItemCyclops.java @@ -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 getStacks() { + public Collection 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 getStacks(@Nullable InventoryTileEntityBase inv) { + private Collection 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(); } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/externalstorage/StorageItemDSU.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/externalstorage/StorageItemDSU.java deleted file mode 100755 index 20addca8c..000000000 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/externalstorage/StorageItemDSU.java +++ /dev/null @@ -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 dsuSupplier; - - public StorageItemDSU(NetworkNodeExternalStorage externalStorage, Supplier dsuSupplier) { - this.externalStorage = externalStorage; - this.dsuSupplier = dsuSupplier; - } - - @Override - public int getCapacity() { - IDeepStorageUnit dsu = dsuSupplier.get(); - - return dsu != null ? dsu.getMaxStoredCount() : 0; - } - - @Override - public NonNullList 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(); - } -} diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/externalstorage/StorageItemDrawer.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/externalstorage/StorageItemDrawer.java index fc06ca80d..6882f525a 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/externalstorage/StorageItemDrawer.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/externalstorage/StorageItemDrawer.java @@ -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 getStacks() { - return getStacks(drawerSupplier.get()); + public Collection getStacks() { + return Collections.singletonList(getStack(drawerSupplier.get())); } @Override @@ -62,12 +62,12 @@ public class StorageItemDrawer extends StorageItemExternal { return externalStorage.getAccessType(); } - public static NonNullList 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) { diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/externalstorage/StorageItemDrawerGroup.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/externalstorage/StorageItemDrawerGroup.java index 5d2b33596..0de4e7284 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/externalstorage/StorageItemDrawerGroup.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/externalstorage/StorageItemDrawerGroup.java @@ -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 getStacks() { + public Collection getStacks() { IDrawerGroup group = groupSupplier.get(); if (group == null) { - return RSUtils.emptyNonNullList(); + return Collections.emptyList(); } - NonNullList stacks = NonNullList.create(); + List 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)); } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/externalstorage/StorageItemExternal.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/externalstorage/StorageItemExternal.java index 99c88e976..4f1d642df 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/externalstorage/StorageItemExternal.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/externalstorage/StorageItemExternal.java @@ -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 { @@ -21,12 +22,12 @@ public abstract class StorageItemExternal implements IStorage { } if (cache == null) { - cache = getStacks(); + cache = new ArrayList<>(getStacks()); return; } - List newStacks = getStacks(); + List newStacks = new ArrayList<>(getStacks()); for (int i = 0; i < newStacks.size(); ++i) { ItemStack actual = newStacks.get(i); diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/externalstorage/StorageItemItemHandler.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/externalstorage/StorageItemItemHandler.java index 1c5162486..94a0816b3 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/externalstorage/StorageItemItemHandler.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/externalstorage/StorageItemItemHandler.java @@ -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 getStacks() { + public Collection getStacks() { IItemHandler handler = handlerSupplier.get(); if (handler == null) { - return RSUtils.emptyNonNullList(); + return Collections.emptyList(); } - NonNullList stacks = NonNullList.withSize(handler.getSlots(), ItemStack.EMPTY); + List 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; diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/StorageDiskFluid.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/StorageDiskFluid.java index aa43937aa..d14c4255b 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/StorageDiskFluid.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/StorageDiskFluid.java @@ -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 { private static final int PROTOCOL = 1; @@ -25,7 +28,7 @@ public class StorageDiskFluid implements IStorageDisk { private NBTTagCompound tag; private int capacity; - private NonNullList stacks = NonNullList.create(); + private Multimap stacks = ArrayListMultimap.create(); private Runnable listener = () -> { }; @@ -47,7 +50,7 @@ public class StorageDiskFluid implements IStorageDisk { 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 { 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 { } @Override - public NonNullList getStacks() { - return stacks; + public Collection 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 { 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 { 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 { @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 { 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 { 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; diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/StorageDiskItem.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/StorageDiskItem.java index 0f8d0301f..25e7c3adc 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/StorageDiskItem.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/StorageDiskItem.java @@ -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} that stores storage items in NBT. @@ -38,7 +40,7 @@ public class StorageDiskItem implements IStorageDisk { private Runnable listener = () -> { }; - private NonNullList stacks = NonNullList.create(); + private Multimap 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 { 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 { // 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 { } @Override - public NonNullList getStacks() { - return stacks; + public Collection 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 { 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 { 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 { @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 { 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 { 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; diff --git a/src/main/java/com/raoulvdberge/refinedstorage/gui/grid/GuiGrid.java b/src/main/java/com/raoulvdberge/refinedstorage/gui/grid/GuiGrid.java index 1dfac23e9..de08e7290 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/gui/grid/GuiGrid.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/gui/grid/GuiGrid.java @@ -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); diff --git a/src/main/java/powercrystals/minefactoryreloaded/api/IDeepStorageUnit.java b/src/main/java/powercrystals/minefactoryreloaded/api/IDeepStorageUnit.java deleted file mode 100755 index 72696674b..000000000 --- a/src/main/java/powercrystals/minefactoryreloaded/api/IDeepStorageUnit.java +++ /dev/null @@ -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.
- * 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. - *

- * Will overwrite any existing stored items. - */ - void setStoredItemType(ItemStack type, int amount); - - /** - * @return The maximum number of items the DSU can hold.
- * May change based on the current type stored. - */ - int getMaxStoredCount(); - -} \ No newline at end of file