From 7669b1929b82a4dcc1a5c0f70a47cd6e623dd454 Mon Sep 17 00:00:00 2001 From: raoulvdberge Date: Fri, 7 Jul 2017 15:36:36 +0200 Subject: [PATCH] Update drawer API usage to only use IItemRepository (#1346), also fixes Drawer Controller priority issues (#1340) --- CHANGELOG.md | 1 + .../api/IStorageDrawersApi.java | 10 -- .../storagedrawers/api/StorageDrawersApi.java | 28 --- .../api/capabilities/IItemRepository.java | 108 ++++++++++-- .../api/event/DrawerPopulatedEvent.java | 18 -- .../api/event/package-info.java | 5 - .../storagedrawers/api/package-info.java | 4 - .../api/registry/IRenderRegistry.java | 7 - .../api/registry/IWailaRegistry.java | 5 - .../api/registry/IWailaTooltipHandler.java | 7 - .../api/registry/package-info.java | 5 - .../api/render/IRenderLabel.java | 8 - .../api/render/package-info.java | 5 - .../api/security/ISecurityProvider.java | 12 -- .../storagedrawers/api/storage/BlockType.java | 6 - .../storagedrawers/api/storage/Drawers.java | 81 --------- .../api/storage/EmptyDrawerAttributes.java | 6 - .../api/storage/EnumBasicDrawer.java | 71 -------- .../storagedrawers/api/storage/IDrawer.java | 145 ---------------- .../api/storage/IDrawerAttributes.java | 63 ------- .../storage/IDrawerAttributesModifiable.java | 58 ------- .../api/storage/IDrawerGeometry.java | 7 - .../api/storage/IDrawerGroup.java | 38 ---- .../api/storage/IFractionalDrawer.java | 27 --- .../api/storage/INetworked.java | 4 - .../api/storage/attribute/IProtectable.java | 37 ---- .../api/storage/attribute/ISealable.java | 15 -- .../api/storage/attribute/IVoidable.java | 7 - .../api/storage/attribute/LockAttribute.java | 36 ---- .../api/storage/attribute/package-info.java | 5 - .../api/storage/package-info.java | 5 - .../com/raoulvdberge/refinedstorage/RS.java | 2 +- .../NetworkNodeExternalStorage.java | 22 +-- .../externalstorage/StorageItemDrawer.java | 109 ------------ .../StorageItemDrawerGroup.java | 163 ------------------ .../StorageItemItemRepository.java | 106 ++++++++++++ 36 files changed, 211 insertions(+), 1025 deletions(-) delete mode 100755 src/main/java/com/jaquadro/minecraft/storagedrawers/api/IStorageDrawersApi.java delete mode 100755 src/main/java/com/jaquadro/minecraft/storagedrawers/api/StorageDrawersApi.java delete mode 100755 src/main/java/com/jaquadro/minecraft/storagedrawers/api/event/DrawerPopulatedEvent.java delete mode 100755 src/main/java/com/jaquadro/minecraft/storagedrawers/api/event/package-info.java delete mode 100755 src/main/java/com/jaquadro/minecraft/storagedrawers/api/package-info.java delete mode 100755 src/main/java/com/jaquadro/minecraft/storagedrawers/api/registry/IRenderRegistry.java delete mode 100755 src/main/java/com/jaquadro/minecraft/storagedrawers/api/registry/IWailaRegistry.java delete mode 100755 src/main/java/com/jaquadro/minecraft/storagedrawers/api/registry/IWailaTooltipHandler.java delete mode 100755 src/main/java/com/jaquadro/minecraft/storagedrawers/api/registry/package-info.java delete mode 100755 src/main/java/com/jaquadro/minecraft/storagedrawers/api/render/IRenderLabel.java delete mode 100755 src/main/java/com/jaquadro/minecraft/storagedrawers/api/render/package-info.java delete mode 100755 src/main/java/com/jaquadro/minecraft/storagedrawers/api/security/ISecurityProvider.java delete mode 100644 src/main/java/com/jaquadro/minecraft/storagedrawers/api/storage/BlockType.java delete mode 100644 src/main/java/com/jaquadro/minecraft/storagedrawers/api/storage/Drawers.java delete mode 100644 src/main/java/com/jaquadro/minecraft/storagedrawers/api/storage/EmptyDrawerAttributes.java delete mode 100755 src/main/java/com/jaquadro/minecraft/storagedrawers/api/storage/EnumBasicDrawer.java delete mode 100755 src/main/java/com/jaquadro/minecraft/storagedrawers/api/storage/IDrawer.java delete mode 100644 src/main/java/com/jaquadro/minecraft/storagedrawers/api/storage/IDrawerAttributes.java delete mode 100644 src/main/java/com/jaquadro/minecraft/storagedrawers/api/storage/IDrawerAttributesModifiable.java delete mode 100755 src/main/java/com/jaquadro/minecraft/storagedrawers/api/storage/IDrawerGeometry.java delete mode 100755 src/main/java/com/jaquadro/minecraft/storagedrawers/api/storage/IDrawerGroup.java delete mode 100755 src/main/java/com/jaquadro/minecraft/storagedrawers/api/storage/IFractionalDrawer.java delete mode 100755 src/main/java/com/jaquadro/minecraft/storagedrawers/api/storage/INetworked.java delete mode 100755 src/main/java/com/jaquadro/minecraft/storagedrawers/api/storage/attribute/IProtectable.java delete mode 100755 src/main/java/com/jaquadro/minecraft/storagedrawers/api/storage/attribute/ISealable.java delete mode 100755 src/main/java/com/jaquadro/minecraft/storagedrawers/api/storage/attribute/IVoidable.java delete mode 100755 src/main/java/com/jaquadro/minecraft/storagedrawers/api/storage/attribute/LockAttribute.java delete mode 100755 src/main/java/com/jaquadro/minecraft/storagedrawers/api/storage/attribute/package-info.java delete mode 100755 src/main/java/com/jaquadro/minecraft/storagedrawers/api/storage/package-info.java delete mode 100755 src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/externalstorage/StorageItemDrawer.java delete mode 100755 src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/externalstorage/StorageItemDrawerGroup.java create mode 100644 src/main/java/com/raoulvdberge/refinedstorage/integration/storagedrawers/StorageItemItemRepository.java diff --git a/CHANGELOG.md b/CHANGELOG.md index fa115df54..50d045c5a 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,7 @@ ### 1.5.8 - Updated Storage Drawers API (raoulvdberge) - Fixed bug where disks have to be re-inserted in the Disk Drive in order to work again after rejoining a chunk (raoulvdberge) +- Fixed bug where items inserted in Storage Drawers through External Storage with a Drawer Controller wouldn't respect drawer priority rules (raoulvdberge) - Autocrafting can now fill water bottles with water from the fluid storage - regular bottles or pattern for regular bottles are required (raoulvdberge) ### 1.5.7 diff --git a/src/main/java/com/jaquadro/minecraft/storagedrawers/api/IStorageDrawersApi.java b/src/main/java/com/jaquadro/minecraft/storagedrawers/api/IStorageDrawersApi.java deleted file mode 100755 index c6ee06672..000000000 --- a/src/main/java/com/jaquadro/minecraft/storagedrawers/api/IStorageDrawersApi.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.jaquadro.minecraft.storagedrawers.api; - -import com.jaquadro.minecraft.storagedrawers.api.registry.IRenderRegistry; -import com.jaquadro.minecraft.storagedrawers.api.registry.IWailaRegistry; - -public interface IStorageDrawersApi { - IRenderRegistry renderRegistry(); - - IWailaRegistry wailaRegistry(); -} diff --git a/src/main/java/com/jaquadro/minecraft/storagedrawers/api/StorageDrawersApi.java b/src/main/java/com/jaquadro/minecraft/storagedrawers/api/StorageDrawersApi.java deleted file mode 100755 index d770e0e89..000000000 --- a/src/main/java/com/jaquadro/minecraft/storagedrawers/api/StorageDrawersApi.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.jaquadro.minecraft.storagedrawers.api; - -/** - * Entry point for the public API. - */ -public class StorageDrawersApi { - private static IStorageDrawersApi instance; - - public static final String VERSION = "2.0.0"; - - /** - * API entry point. - * - * @return The {@link IStorageDrawersApi} instance or null if the API or Storage Drawers is unavailable. - */ - public static IStorageDrawersApi instance() { - if (instance == null) { - try { - Class classApi = Class.forName("com.jaquadro.minecraft.storagedrawers.core.Api"); - instance = (IStorageDrawersApi) classApi.getField("instance").get(null); - } catch (Throwable t) { - return null; - } - } - - return instance; - } -} diff --git a/src/main/java/com/jaquadro/minecraft/storagedrawers/api/capabilities/IItemRepository.java b/src/main/java/com/jaquadro/minecraft/storagedrawers/api/capabilities/IItemRepository.java index 629b76c4e..c1e4a7502 100644 --- a/src/main/java/com/jaquadro/minecraft/storagedrawers/api/capabilities/IItemRepository.java +++ b/src/main/java/com/jaquadro/minecraft/storagedrawers/api/capabilities/IItemRepository.java @@ -4,43 +4,120 @@ import net.minecraft.item.ItemStack; import net.minecraft.util.NonNullList; import javax.annotation.Nonnull; +import java.util.function.Predicate; +/** + * An interface for treating an inventory as a slotless, central repository of items. + *

+ * For all operations that accept a predicate, if a predicate is supplied, a stored ItemStack must pass the predicate + * in order to be considered for the given operation. + *

+ * An IItemRepository implementation MAY relax or eliminate its own internal tests when a predicate is supplied. If + * the predicate is derived from DefaultPredicate, then the implementation MUST apply any tests it would have applied + * had no predicate been provided at all, in addition to testing the predicate itself. + */ public interface IItemRepository { /** * Gets a list of all items in the inventory. The same item may appear multiple times with varying counts. - * + * @return A list of zero or more items in the inventory. */ @Nonnull - NonNullList getAllItems(); + NonNullList getAllItems (); /** * Inserts an ItemStack into the inventory and returns the remainder. * - * @param stack ItemStack to insert. - * @param simulate If true, the insertion is only simulated + * @param stack ItemStack to insert. + * @param simulate If true, the insertion is only simulated + * @param predicate See interface notes about predicates. Passing null specifies default matching. * @return The remaining ItemStack that was not inserted. If the entire stack was accepted, returns * ItemStack.EMPTY instead. */ @Nonnull - ItemStack insertItem(@Nonnull ItemStack stack, boolean simulate); + ItemStack insertItem(@Nonnull ItemStack stack, boolean simulate, Predicate predicate); + + @Nonnull + default ItemStack insertItem(@Nonnull ItemStack stack, boolean simulate) { + return insertItem(stack, simulate, null); + } /** * Tries to extract the given ItemStack from the inventory. The returned value will be a matching ItemStack * with a stack size equal to or less than amount, or the empty ItemStack if the item could not be found at all. - * The returned stack size may exceed the itemstack's getMaxStackSize() value. - * - * @param stack The item to extract. The stack size is ignored. - * @param amount Amount to extract (may be greater than the stacks max limit) - * @param simulate If true, the extraction is only simulated + * The returned stack size may exceed the ItemStack's getMaxStackSize() value. + + * @param stack The item to extract. The stack size is ignored. + * @param amount Amount to extract (may be greater than the stacks max limit) + * @param simulate If true, the extraction is only simulated + * @param predicate See interface notes about predicates. Passing null specifies default matching. * @return ItemStack extracted from the inventory, or ItemStack.EMPTY if nothing could be extracted. */ @Nonnull - ItemStack extractItem(@Nonnull ItemStack stack, int amount, boolean simulate); + ItemStack extractItem(@Nonnull ItemStack stack, int amount, boolean simulate, Predicate predicate); + + @Nonnull + default ItemStack extractItem(@Nonnull ItemStack stack, int amount, boolean simulate) { + return extractItem(stack, amount, simulate, null); + } + + /** + * Gets the number of items matching the given ItemStack stored by the inventory. + * + * @param stack ItemStack to query. + * @param predicate See interface notes about predicates. Passing null specifies default matching. + * @return The number of stored matching items. A value of Integer.MAX_VALUE may indicate an infinite item source. + */ + default int getStoredItemCount(@Nonnull ItemStack stack, Predicate predicate) { + ItemStack amount = extractItem(stack, Integer.MAX_VALUE, true, predicate); + return amount.getCount(); + } + + default int getStoredItemCount(@Nonnull ItemStack stack) { + return getStoredItemCount(stack, null); + } + + /** + * Gets the number items matching the given ItemStack that additionally still be stored by the inventory. + * Remaining capacity may include space that is internally empty or unassigned to any given item. + * + * @param stack ItemStack to query. + * @param predicate See interface notes about predicates. Passing null specifies default matching. + * @return The available remaining space for matching items. + */ + default int getRemainingItemCapacity(@Nonnull ItemStack stack, Predicate predicate) { + stack = stack.copy(); + stack.setCount(Integer.MAX_VALUE); + ItemStack remainder = insertItem(stack, true, predicate); + return Integer.MAX_VALUE - remainder.getCount(); + } + + default int getRemainingItemCapacity(@Nonnull ItemStack stack) { + return getRemainingItemCapacity(stack, null); + } + + /** + * Gets the total inventory capacity for items matching the given ItemStack. + * Total capacity may include space that is internally empty or unassigned to any given item. + * + * @param stack ItemStack to query. + * @param predicate See interface notes about predicates. Passing null specifies default matching. + * @return The total capacity for matching items. + */ + default int getItemCapacity(@Nonnull ItemStack stack, Predicate predicate) { + long capacity = getStoredItemCount(stack, predicate) + getRemainingItemCapacity(stack, predicate); + if (capacity > Integer.MAX_VALUE) + return Integer.MAX_VALUE; + return (int) capacity; + } + + default int getItemCapacity(@Nonnull ItemStack stack) { + return getItemCapacity(stack, null); + } /** * An item record representing an item and the amount stored. - *

+ * * The ItemStack held by itemPrototype always reports a stack size of 1. * IT IS IMPORTANT THAT YOU NEVER MODIFY itemPrototype. */ @@ -54,4 +131,11 @@ public interface IItemRepository { this.count = count; } } + + /** + * A variant of the standard Predicate interface that when passed to IItemRepository functions, will ask the + * internal default predicate to be tested in addition to the custom predicate. An IItemRepository function + * may choose to enforce its own predicate regardless. + */ + interface DefaultPredicate extends Predicate { } } diff --git a/src/main/java/com/jaquadro/minecraft/storagedrawers/api/event/DrawerPopulatedEvent.java b/src/main/java/com/jaquadro/minecraft/storagedrawers/api/event/DrawerPopulatedEvent.java deleted file mode 100755 index f934cea45..000000000 --- a/src/main/java/com/jaquadro/minecraft/storagedrawers/api/event/DrawerPopulatedEvent.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.jaquadro.minecraft.storagedrawers.api.event; - -import com.jaquadro.minecraft.storagedrawers.api.storage.IDrawer; -import net.minecraftforge.fml.common.eventhandler.Event; - -/** - * This event is called when a drawer has been bound to a new item. This is - * and opportunity for mods to cache extended data with the drawer. - * - * This event is also called when the drawer is changed to empty. - */ -public class DrawerPopulatedEvent extends Event { - public final IDrawer drawer; - - public DrawerPopulatedEvent(IDrawer drawer) { - this.drawer = drawer; - } -} diff --git a/src/main/java/com/jaquadro/minecraft/storagedrawers/api/event/package-info.java b/src/main/java/com/jaquadro/minecraft/storagedrawers/api/event/package-info.java deleted file mode 100755 index 517ce1760..000000000 --- a/src/main/java/com/jaquadro/minecraft/storagedrawers/api/event/package-info.java +++ /dev/null @@ -1,5 +0,0 @@ -@API(owner = "StorageDrawersAPI", provides = "StorageDrawersAPI|event", apiVersion = StorageDrawersApi.VERSION) -package com.jaquadro.minecraft.storagedrawers.api.event; - -import com.jaquadro.minecraft.storagedrawers.api.StorageDrawersApi; -import net.minecraftforge.fml.common.API; \ No newline at end of file diff --git a/src/main/java/com/jaquadro/minecraft/storagedrawers/api/package-info.java b/src/main/java/com/jaquadro/minecraft/storagedrawers/api/package-info.java deleted file mode 100755 index 86d7280fa..000000000 --- a/src/main/java/com/jaquadro/minecraft/storagedrawers/api/package-info.java +++ /dev/null @@ -1,4 +0,0 @@ -@API(owner = "StorageDrawers", provides = "StorageDrawersAPI", apiVersion = StorageDrawersApi.VERSION) -package com.jaquadro.minecraft.storagedrawers.api; - -import net.minecraftforge.fml.common.API; \ No newline at end of file diff --git a/src/main/java/com/jaquadro/minecraft/storagedrawers/api/registry/IRenderRegistry.java b/src/main/java/com/jaquadro/minecraft/storagedrawers/api/registry/IRenderRegistry.java deleted file mode 100755 index dc605b381..000000000 --- a/src/main/java/com/jaquadro/minecraft/storagedrawers/api/registry/IRenderRegistry.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.jaquadro.minecraft.storagedrawers.api.registry; - -import com.jaquadro.minecraft.storagedrawers.api.render.IRenderLabel; - -public interface IRenderRegistry { - void registerPreLabelRenderHandler(IRenderLabel renderHandler); -} diff --git a/src/main/java/com/jaquadro/minecraft/storagedrawers/api/registry/IWailaRegistry.java b/src/main/java/com/jaquadro/minecraft/storagedrawers/api/registry/IWailaRegistry.java deleted file mode 100755 index 5cc8909cf..000000000 --- a/src/main/java/com/jaquadro/minecraft/storagedrawers/api/registry/IWailaRegistry.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.jaquadro.minecraft.storagedrawers.api.registry; - -public interface IWailaRegistry { - void registerTooltipHandler(IWailaTooltipHandler handler); -} diff --git a/src/main/java/com/jaquadro/minecraft/storagedrawers/api/registry/IWailaTooltipHandler.java b/src/main/java/com/jaquadro/minecraft/storagedrawers/api/registry/IWailaTooltipHandler.java deleted file mode 100755 index acd724d4f..000000000 --- a/src/main/java/com/jaquadro/minecraft/storagedrawers/api/registry/IWailaTooltipHandler.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.jaquadro.minecraft.storagedrawers.api.registry; - -import com.jaquadro.minecraft.storagedrawers.api.storage.IDrawer; - -public interface IWailaTooltipHandler { - String transformItemName(IDrawer drawer, String defaultName); -} diff --git a/src/main/java/com/jaquadro/minecraft/storagedrawers/api/registry/package-info.java b/src/main/java/com/jaquadro/minecraft/storagedrawers/api/registry/package-info.java deleted file mode 100755 index 75fe1f250..000000000 --- a/src/main/java/com/jaquadro/minecraft/storagedrawers/api/registry/package-info.java +++ /dev/null @@ -1,5 +0,0 @@ -@API(owner = "StorageDrawersAPI", provides = "StorageDrawersAPI|registry", apiVersion = StorageDrawersApi.VERSION) -package com.jaquadro.minecraft.storagedrawers.api.registry; - -import com.jaquadro.minecraft.storagedrawers.api.StorageDrawersApi; -import net.minecraftforge.fml.common.API; \ No newline at end of file diff --git a/src/main/java/com/jaquadro/minecraft/storagedrawers/api/render/IRenderLabel.java b/src/main/java/com/jaquadro/minecraft/storagedrawers/api/render/IRenderLabel.java deleted file mode 100755 index 23e0c6d39..000000000 --- a/src/main/java/com/jaquadro/minecraft/storagedrawers/api/render/IRenderLabel.java +++ /dev/null @@ -1,8 +0,0 @@ -package com.jaquadro.minecraft.storagedrawers.api.render; - -import com.jaquadro.minecraft.storagedrawers.api.storage.IDrawerGroup; -import net.minecraft.tileentity.TileEntity; - -public interface IRenderLabel { - void render(TileEntity tileEntity, IDrawerGroup drawerGroup, int slot, float brightness, float partialTickTime); -} diff --git a/src/main/java/com/jaquadro/minecraft/storagedrawers/api/render/package-info.java b/src/main/java/com/jaquadro/minecraft/storagedrawers/api/render/package-info.java deleted file mode 100755 index 76e937caa..000000000 --- a/src/main/java/com/jaquadro/minecraft/storagedrawers/api/render/package-info.java +++ /dev/null @@ -1,5 +0,0 @@ -@API(owner = "StorageDrawersAPI", provides = "StorageDrawersAPI|render", apiVersion = StorageDrawersApi.VERSION) -package com.jaquadro.minecraft.storagedrawers.api.render; - -import com.jaquadro.minecraft.storagedrawers.api.StorageDrawersApi; -import net.minecraftforge.fml.common.API; \ No newline at end of file diff --git a/src/main/java/com/jaquadro/minecraft/storagedrawers/api/security/ISecurityProvider.java b/src/main/java/com/jaquadro/minecraft/storagedrawers/api/security/ISecurityProvider.java deleted file mode 100755 index 3b8e0869e..000000000 --- a/src/main/java/com/jaquadro/minecraft/storagedrawers/api/security/ISecurityProvider.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.jaquadro.minecraft.storagedrawers.api.security; - -import com.jaquadro.minecraft.storagedrawers.api.storage.attribute.IProtectable; -import com.mojang.authlib.GameProfile; - -public interface ISecurityProvider { - String getProviderID(); - - boolean hasOwnership(GameProfile profile, IProtectable target); - - boolean hasAccess(GameProfile profile, IProtectable target); -} diff --git a/src/main/java/com/jaquadro/minecraft/storagedrawers/api/storage/BlockType.java b/src/main/java/com/jaquadro/minecraft/storagedrawers/api/storage/BlockType.java deleted file mode 100644 index a9e5f0c57..000000000 --- a/src/main/java/com/jaquadro/minecraft/storagedrawers/api/storage/BlockType.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.jaquadro.minecraft.storagedrawers.api.storage; - -public enum BlockType { - Drawers, - Trim -} diff --git a/src/main/java/com/jaquadro/minecraft/storagedrawers/api/storage/Drawers.java b/src/main/java/com/jaquadro/minecraft/storagedrawers/api/storage/Drawers.java deleted file mode 100644 index 5914db3ea..000000000 --- a/src/main/java/com/jaquadro/minecraft/storagedrawers/api/storage/Drawers.java +++ /dev/null @@ -1,81 +0,0 @@ -package com.jaquadro.minecraft.storagedrawers.api.storage; - -import net.minecraft.item.ItemStack; - -import javax.annotation.Nonnull; - -public class Drawers { - public static final IDrawer DISABLED = new DisabledDrawer(); - public static final IFractionalDrawer DISABLED_FRACTIONAL = new DisabledFractionalDrawer(); - - private static class DisabledDrawer implements IDrawer { - @Nonnull - @Override - public ItemStack getStoredItemPrototype() { - return ItemStack.EMPTY; - } - - @Nonnull - @Override - public IDrawer setStoredItem(@Nonnull ItemStack itemPrototype) { - return this; - } - - @Override - public int getStoredItemCount() { - return 0; - } - - @Override - public void setStoredItemCount(int amount) { - - } - - @Override - public int getMaxCapacity(@Nonnull ItemStack itemPrototype) { - return 0; - } - - @Override - public int getRemainingCapacity() { - return 0; - } - - @Override - public boolean canItemBeStored(@Nonnull ItemStack itemPrototype) { - return false; - } - - @Override - public boolean canItemBeExtracted(@Nonnull ItemStack itemPrototype) { - return false; - } - - @Override - public boolean isEmpty() { - return true; - } - - @Override - public boolean isEnabled() { - return false; - } - } - - private static class DisabledFractionalDrawer extends DisabledDrawer implements IFractionalDrawer { - @Override - public int getConversionRate() { - return 0; - } - - @Override - public int getStoredItemRemainder() { - return 0; - } - - @Override - public boolean isSmallestUnit() { - return false; - } - } -} diff --git a/src/main/java/com/jaquadro/minecraft/storagedrawers/api/storage/EmptyDrawerAttributes.java b/src/main/java/com/jaquadro/minecraft/storagedrawers/api/storage/EmptyDrawerAttributes.java deleted file mode 100644 index ad1f52b37..000000000 --- a/src/main/java/com/jaquadro/minecraft/storagedrawers/api/storage/EmptyDrawerAttributes.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.jaquadro.minecraft.storagedrawers.api.storage; - -public class EmptyDrawerAttributes implements IDrawerAttributes { - public EmptyDrawerAttributes() { - } -} diff --git a/src/main/java/com/jaquadro/minecraft/storagedrawers/api/storage/EnumBasicDrawer.java b/src/main/java/com/jaquadro/minecraft/storagedrawers/api/storage/EnumBasicDrawer.java deleted file mode 100755 index 245872644..000000000 --- a/src/main/java/com/jaquadro/minecraft/storagedrawers/api/storage/EnumBasicDrawer.java +++ /dev/null @@ -1,71 +0,0 @@ -package com.jaquadro.minecraft.storagedrawers.api.storage; - -import net.minecraft.util.IStringSerializable; - -import javax.annotation.Nonnull; - -public enum EnumBasicDrawer implements IDrawerGeometry, IStringSerializable { - FULL1(0, 1, false, "full1", "fulldrawers1"), - FULL2(1, 2, false, "full2", "fulldrawers2"), - FULL4(2, 4, false, "full4", "fulldrawers4"), - HALF2(3, 2, true, "half2", "halfdrawers2"), - HALF4(4, 4, true, "half4", "halfdrawers4"); - - private static final EnumBasicDrawer[] META_LOOKUP; - - private final int meta; - private final int drawerCount; - private final boolean halfDepth; - private final String name; - private final String unlocalizedName; - - EnumBasicDrawer(int meta, int drawerCount, boolean halfDepth, String name, String unlocalizedName) { - this.meta = meta; - this.name = name; - this.drawerCount = drawerCount; - this.halfDepth = halfDepth; - this.unlocalizedName = unlocalizedName; - } - - public int getMetadata() { - return meta; - } - - @Override - public int getDrawerCount() { - return drawerCount; - } - - @Override - public boolean isHalfDepth() { - return halfDepth; - } - - public String getUnlocalizedName() { - return unlocalizedName; - } - - public static EnumBasicDrawer byMetadata(int meta) { - if (meta < 0 || meta >= META_LOOKUP.length) - meta = 0; - return META_LOOKUP[meta]; - } - - @Override - public String toString() { - return getName(); - } - - @Override - @Nonnull - public String getName() { - return name; - } - - static { - META_LOOKUP = new EnumBasicDrawer[values().length]; - for (EnumBasicDrawer upgrade : values()) { - META_LOOKUP[upgrade.getMetadata()] = upgrade; - } - } -} diff --git a/src/main/java/com/jaquadro/minecraft/storagedrawers/api/storage/IDrawer.java b/src/main/java/com/jaquadro/minecraft/storagedrawers/api/storage/IDrawer.java deleted file mode 100755 index af8c12a16..000000000 --- a/src/main/java/com/jaquadro/minecraft/storagedrawers/api/storage/IDrawer.java +++ /dev/null @@ -1,145 +0,0 @@ -package com.jaquadro.minecraft.storagedrawers.api.storage; - -import net.minecraft.item.ItemStack; - -import javax.annotation.Nonnull; - -public interface IDrawer { - /** - * Gets an ItemStack of size 1 representing the type, metadata, and tags of the stored items. - * The returned ItemStack should not be modified for any reason. Make a copy if you need to store or modify it. - */ - @Nonnull - ItemStack getStoredItemPrototype(); - - /** - * Sets the type of the stored item and initializes it to 0. Any existing item will be replaced. - * - * @param itemPrototype An ItemStack representing the type, metadata, and tags of the item to store. - * @return The IDrawer actually set with the prototype. Some drawer groups can redirect a set operation to another member. - */ - @Nonnull - IDrawer setStoredItem(@Nonnull ItemStack itemPrototype); - - /** - * Sets the type of the stored item and initializes it to the given amount. Any existing item will be replaced. - * - * @param itemPrototype An ItemStack representing the type, metadata, and tags of the item to store. - * @param amount The amount of items stored in this drawer. - * @return The IDrawer actually set with the prototype. Some drawer groups can redirect a set operation to another member. - */ - @Nonnull - default IDrawer setStoredItem(@Nonnull ItemStack itemPrototype, int amount) { - IDrawer drawer = setStoredItem(itemPrototype); - drawer.setStoredItemCount(amount); - return drawer; - } - - /** - * Gets the number of items stored in this drawer. - */ - int getStoredItemCount(); - - /** - * Sets the number of items stored in this drawer. Triggers syncing of inventories and client data. - * Setting a drawer's count to 0 may also result in the item type being cleared, depending in implementation. - * - * @param amount The new amount of items stored in this drawer. - */ - void setStoredItemCount(int amount); - - /** - * Adds or removes a given amount from the number of items stored in this drawer. - * - * @param amount The amount to add (positive) or subtract (negative). - * @return 0 if the full adjustment was committed, or a positive value representing the remainder if the full - * amount couldn't be added or subtracted. - */ - default int adjustStoredItemCount(int amount) { - if (amount > 0) { - int insert = Math.min(amount, getRemainingCapacity()); - setStoredItemCount(getStoredItemCount() + insert); - return amount - insert; - } else if (amount < 0) { - int stored = getStoredItemCount(); - int destroy = Math.min(Math.abs(amount), getStoredItemCount()); - setStoredItemCount(stored - destroy); - return amount + destroy; - } else { - return 0; - } - } - - /** - * Gets the maximum number of items that can be stored in this drawer. - * This value will vary depending on the max stack size of the stored item type. - */ - default int getMaxCapacity() { - return getMaxCapacity(getStoredItemPrototype()); - } - - /** - * Gets the maximum number of items that could be stored in this drawer if it held the given item. - * - * @param itemPrototype The item type to query. Pass the empty stack to get the max capacity for an empty slot. - */ - int getMaxCapacity(@Nonnull ItemStack itemPrototype); - - /** - * Gets the number of items that could still be added to this drawer before it is full. - */ - int getRemainingCapacity(); - - /** - * Gets the number of additional items that would be accepted by this drawer. - * - * Because a drawer may be able to handle items in excess of its full capacity, this value may be larger than - * the result of getRemainingCapacity(). - */ - default int getAcceptingRemainingCapacity() { - return getRemainingCapacity(); - } - - /** - * Gets the max stack size of the item type stored in this drawer. - */ - default int getStoredItemStackSize() { - @Nonnull ItemStack protoStack = getStoredItemPrototype(); - if (protoStack.isEmpty()) - return 0; - - return protoStack.getItem().getItemStackLimit(protoStack); - } - - /** - * Gets whether or not an item of the given type and data can be stored in this drawer. - * - * Stack size and available capacity are not considered. For drawers that are not empty, this - * method can allow ore-dictionary compatible items to be accepted into the drawer, as defined by what - * the drawer considers to be an equivalent item. - * For drawers that are empty, locking status is considered. - * - * @param itemPrototype An ItemStack representing the type, metadata, and tags of an item. - */ - boolean canItemBeStored(@Nonnull ItemStack itemPrototype); - - /** - * Gets whether or not an item of the given type and data can be extracted from this drawer. - * - * This is intended to allow outbound ore-dictionary conversions of compatible items, as defined by what - * the drawer considers to be an equivalent item. - * - * @param itemPrototype An ItemStack representing the type, metadata, and tags of an item. - */ - boolean canItemBeExtracted(@Nonnull ItemStack itemPrototype); - - /** - * Gets whether or not the drawer has items. - * A drawer set with an item type and 0 count is not considered empty. - */ - boolean isEmpty(); - - default boolean isEnabled() { - return true; - } -} diff --git a/src/main/java/com/jaquadro/minecraft/storagedrawers/api/storage/IDrawerAttributes.java b/src/main/java/com/jaquadro/minecraft/storagedrawers/api/storage/IDrawerAttributes.java deleted file mode 100644 index b36edc19f..000000000 --- a/src/main/java/com/jaquadro/minecraft/storagedrawers/api/storage/IDrawerAttributes.java +++ /dev/null @@ -1,63 +0,0 @@ -package com.jaquadro.minecraft.storagedrawers.api.storage; - -import com.jaquadro.minecraft.storagedrawers.api.storage.attribute.LockAttribute; - -public interface IDrawerAttributes { - /** - * Gets whether or not the lock state can be changed for the given lock attribute. - * If this method returns false, isItemLocked may still return true. - */ - default boolean canItemLock(LockAttribute attr) { - return false; - } - - /** - * Gets whether or not a drawer or group is locked for the given lock attribute. - */ - default boolean isItemLocked(LockAttribute attr) { - return false; - } - - /** - * Gets whether or not the drawer has the concealed attribute. - * The shrouded attribute instructs the drawer to not render its item label. - */ - default boolean isConcealed() { - return false; - } - - /** - * Gets whether or not the drawer has the sealed attribute. - * A sealed drawer cannot be interacted with, and when broken will retain all of its items and upgrades. - */ - default boolean isSealed() { - return false; - } - - /** - * Gets whether or not the drawer has the quantified attribute. - * The quantified attribute instructs the drawer to render its numerical quantity. - */ - default boolean isShowingQuantity() { - return false; - } - - /** - * Gets whether or not the drawer has a voiding attribute. - */ - default boolean isVoid() { - return false; - } - - default boolean isUnlimitedStorage() { - return false; - } - - default boolean isUnlimitedVending() { - return false; - } - - default boolean isDictConvertible() { - return false; - } -} diff --git a/src/main/java/com/jaquadro/minecraft/storagedrawers/api/storage/IDrawerAttributesModifiable.java b/src/main/java/com/jaquadro/minecraft/storagedrawers/api/storage/IDrawerAttributesModifiable.java deleted file mode 100644 index b96509547..000000000 --- a/src/main/java/com/jaquadro/minecraft/storagedrawers/api/storage/IDrawerAttributesModifiable.java +++ /dev/null @@ -1,58 +0,0 @@ -package com.jaquadro.minecraft.storagedrawers.api.storage; - -import com.jaquadro.minecraft.storagedrawers.api.storage.attribute.LockAttribute; - -public interface IDrawerAttributesModifiable extends IDrawerAttributes { - /** - * Sets whether or not the drawer is currently concealed. - * - * @return false if the operation is not supported, true otherwise. - */ - default boolean setIsConcealed(boolean state) { - return false; - } - - /** - * Sets the lock state of a drawer or group for the given lock attribute. - * If canItemLock returns false, this is a no-op. - * - * @return false if the operation is not supported, true otherwise. - */ - default boolean setItemLocked(LockAttribute attr, boolean isLocked) { - return false; - } - - /** - * Sets whether or not the drawer is currently quantified. - * - * @return false if the operation is not supported, true otherwise. - */ - default boolean setIsShowingQuantity(boolean state) { - return false; - } - - /** - * Sets whether or not the drawer is currently sealed. - * - * @return false if the operation is not supported, true otherwise. - */ - default boolean setIsSealed(boolean state) { - return false; - } - - default boolean setIsVoid(boolean state) { - return false; - } - - default boolean setIsUnlimitedStorage(boolean state) { - return false; - } - - default boolean setIsUnlimitedVending(boolean state) { - return false; - } - - default boolean setIsDictConvertible(boolean state) { - return false; - } -} diff --git a/src/main/java/com/jaquadro/minecraft/storagedrawers/api/storage/IDrawerGeometry.java b/src/main/java/com/jaquadro/minecraft/storagedrawers/api/storage/IDrawerGeometry.java deleted file mode 100755 index 283483328..000000000 --- a/src/main/java/com/jaquadro/minecraft/storagedrawers/api/storage/IDrawerGeometry.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.jaquadro.minecraft.storagedrawers.api.storage; - -public interface IDrawerGeometry { - boolean isHalfDepth(); - - int getDrawerCount(); -} diff --git a/src/main/java/com/jaquadro/minecraft/storagedrawers/api/storage/IDrawerGroup.java b/src/main/java/com/jaquadro/minecraft/storagedrawers/api/storage/IDrawerGroup.java deleted file mode 100755 index 80402ab6b..000000000 --- a/src/main/java/com/jaquadro/minecraft/storagedrawers/api/storage/IDrawerGroup.java +++ /dev/null @@ -1,38 +0,0 @@ -package com.jaquadro.minecraft.storagedrawers.api.storage; - -import net.minecraft.util.EnumFacing; -import net.minecraftforge.common.capabilities.Capability; -import net.minecraftforge.common.capabilities.ICapabilityProvider; - -import javax.annotation.Nonnull; -import javax.annotation.Nullable; - -public interface IDrawerGroup extends ICapabilityProvider { - /** - * Gets the number of drawers contained within this group. - */ - int getDrawerCount(); - - /** - * Gets the drawer at the given slot within this group. - */ - @Nonnull - IDrawer getDrawer(int slot); - - /** - * Gets the list of available drawer slots in priority order. - */ - @Nonnull - int[] getAccessibleDrawerSlots(); - - @Override - default boolean hasCapability(@Nonnull Capability capability, @Nullable EnumFacing facing) { - return false; - } - - @Nullable - @Override - default T getCapability(@Nonnull Capability capability, @Nullable EnumFacing facing) { - return null; - } -} diff --git a/src/main/java/com/jaquadro/minecraft/storagedrawers/api/storage/IFractionalDrawer.java b/src/main/java/com/jaquadro/minecraft/storagedrawers/api/storage/IFractionalDrawer.java deleted file mode 100755 index ba47d9652..000000000 --- a/src/main/java/com/jaquadro/minecraft/storagedrawers/api/storage/IFractionalDrawer.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.jaquadro.minecraft.storagedrawers.api.storage; - -/** - * Represents a drawer with items that are a fractional component of another item within the drawer group. Compacting - * Drawers are a primary example of this drawer type. - */ -public interface IFractionalDrawer extends IDrawer { - /** - * Gets the storage ratio between the held item and the most compressed item within the drawer group. - * - * For example, most ingots have a conversion rate of 9 compared to metal blocks, and nuggets a rate of 81. - * Actual conversion rates are implementation-defined. - */ - int getConversionRate(); - - /** - * Gets the number of items left in the drawer if the maximum number of equivalent compressed items had been removed. - * The equivalency is determined by the next compression tier, and not necessarily the conversion rate. - */ - int getStoredItemRemainder(); - - /** - * Gets whether or not the stored item represents the smallest granularity of material that can be stored within - * the drawer group. - */ - boolean isSmallestUnit(); -} diff --git a/src/main/java/com/jaquadro/minecraft/storagedrawers/api/storage/INetworked.java b/src/main/java/com/jaquadro/minecraft/storagedrawers/api/storage/INetworked.java deleted file mode 100755 index ac4524c3c..000000000 --- a/src/main/java/com/jaquadro/minecraft/storagedrawers/api/storage/INetworked.java +++ /dev/null @@ -1,4 +0,0 @@ -package com.jaquadro.minecraft.storagedrawers.api.storage; - -public interface INetworked { -} diff --git a/src/main/java/com/jaquadro/minecraft/storagedrawers/api/storage/attribute/IProtectable.java b/src/main/java/com/jaquadro/minecraft/storagedrawers/api/storage/attribute/IProtectable.java deleted file mode 100755 index 0bea99d6c..000000000 --- a/src/main/java/com/jaquadro/minecraft/storagedrawers/api/storage/attribute/IProtectable.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.jaquadro.minecraft.storagedrawers.api.storage.attribute; - -import com.jaquadro.minecraft.storagedrawers.api.security.ISecurityProvider; -import net.minecraft.world.ILockableContainer; - -import java.util.UUID; - -public interface IProtectable { - /** - * Gets the owner of the drawer, or null if there is no owner. - */ - UUID getOwner(); - - /** - * Sets the owner of the drawer. Set to null to set no owner. - * @return false if the operation is not supported, true otherwise. - */ - boolean setOwner(UUID owner); - - /** - * Gets the provider managing security for the target. - * @return null to use the default provider, which enforces strict owner access. - */ - ISecurityProvider getSecurityProvider(); - - /** - * Gets the lockable interface if it exists on the protected drawer. - * @return A lockable interface, or null if lockable is not supported. - */ - ILockableContainer getLockableContainer(); - - /** - * Sets the provider managing security for the target. Set to null for default provider. - * @return false if the operation is not supported, true otherwise. - */ - boolean setSecurityProvider(ISecurityProvider provder); -} diff --git a/src/main/java/com/jaquadro/minecraft/storagedrawers/api/storage/attribute/ISealable.java b/src/main/java/com/jaquadro/minecraft/storagedrawers/api/storage/attribute/ISealable.java deleted file mode 100755 index eb9a951d8..000000000 --- a/src/main/java/com/jaquadro/minecraft/storagedrawers/api/storage/attribute/ISealable.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.jaquadro.minecraft.storagedrawers.api.storage.attribute; - -public interface ISealable { - /** - * Gets whether or not the drawer has the sealed attribute. - * A sealed drawer cannot be interacted with, and when broken will retain all of its items and upgrades. - */ - boolean isSealed(); - - /** - * Sets whether or not the drawer is currently sealed. - * @return false if the operation is not supported, true otherwise. - */ - boolean setIsSealed(boolean state); -} diff --git a/src/main/java/com/jaquadro/minecraft/storagedrawers/api/storage/attribute/IVoidable.java b/src/main/java/com/jaquadro/minecraft/storagedrawers/api/storage/attribute/IVoidable.java deleted file mode 100755 index 0d53fd508..000000000 --- a/src/main/java/com/jaquadro/minecraft/storagedrawers/api/storage/attribute/IVoidable.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.jaquadro.minecraft.storagedrawers.api.storage.attribute; - -@Deprecated -public interface IVoidable { - @Deprecated - boolean isVoid(); -} diff --git a/src/main/java/com/jaquadro/minecraft/storagedrawers/api/storage/attribute/LockAttribute.java b/src/main/java/com/jaquadro/minecraft/storagedrawers/api/storage/attribute/LockAttribute.java deleted file mode 100755 index d51e1994d..000000000 --- a/src/main/java/com/jaquadro/minecraft/storagedrawers/api/storage/attribute/LockAttribute.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.jaquadro.minecraft.storagedrawers.api.storage.attribute; - -import java.util.EnumSet; - -public enum LockAttribute { - LOCK_POPULATED, - LOCK_EMPTY; - - public int getFlagValue() { - return 1 << ordinal(); - } - - public static int getBitfield(EnumSet attributes) { - int value = 0; - if (attributes == null) - return value; - - for (LockAttribute attr : attributes) - value |= attr.getFlagValue(); - - return value; - } - - public static EnumSet getEnumSet(int bitfield) { - if (bitfield == 0) - return null; - - EnumSet set = EnumSet.noneOf(LockAttribute.class); - for (LockAttribute attr : values()) { - if ((bitfield & attr.getFlagValue()) != 0) - set.add(attr); - } - - return set; - } -} diff --git a/src/main/java/com/jaquadro/minecraft/storagedrawers/api/storage/attribute/package-info.java b/src/main/java/com/jaquadro/minecraft/storagedrawers/api/storage/attribute/package-info.java deleted file mode 100755 index cbcb916aa..000000000 --- a/src/main/java/com/jaquadro/minecraft/storagedrawers/api/storage/attribute/package-info.java +++ /dev/null @@ -1,5 +0,0 @@ -@API(owner = "StorageDrawersAPI", provides = "StorageDrawersAPI|storage-attribute", apiVersion = StorageDrawersApi.VERSION) -package com.jaquadro.minecraft.storagedrawers.api.storage.attribute; - -import com.jaquadro.minecraft.storagedrawers.api.StorageDrawersApi; -import net.minecraftforge.fml.common.API; \ No newline at end of file diff --git a/src/main/java/com/jaquadro/minecraft/storagedrawers/api/storage/package-info.java b/src/main/java/com/jaquadro/minecraft/storagedrawers/api/storage/package-info.java deleted file mode 100755 index c9539a2ae..000000000 --- a/src/main/java/com/jaquadro/minecraft/storagedrawers/api/storage/package-info.java +++ /dev/null @@ -1,5 +0,0 @@ -@API(owner = "StorageDrawersAPI", provides = "StorageDrawersAPI|storage", apiVersion = StorageDrawersApi.VERSION) -package com.jaquadro.minecraft.storagedrawers.api.storage; - -import com.jaquadro.minecraft.storagedrawers.api.StorageDrawersApi; -import net.minecraftforge.fml.common.API; \ No newline at end of file diff --git a/src/main/java/com/raoulvdberge/refinedstorage/RS.java b/src/main/java/com/raoulvdberge/refinedstorage/RS.java index ceb7dde26..e2caf2f34 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/RS.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/RS.java @@ -22,7 +22,7 @@ public final class RS { public static final String ID = "refinedstorage"; public static final String VERSION = "1.5.8"; - public static final String DEPENDENCIES = "required-after:forge@[14.21.0.2363,);after:mcmultipart@[2.2.1,);"; + public static final String DEPENDENCIES = "required-after:forge@[14.21.0.2363,);after:mcmultipart@[2.2.1,);after:storagedrawers@[1.12-5.2.1,);"; public static final String GUI_FACTORY = "com.raoulvdberge.refinedstorage.gui.config.ModGuiFactory"; public static final String UPDATE_JSON = "https://refinedstorage.raoulvdberge.com/update"; 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 6b5ee0bcf..88d099aba 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 @@ -1,7 +1,6 @@ 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.jaquadro.minecraft.storagedrawers.api.capabilities.IItemRepository; import com.raoulvdberge.refinedstorage.RS; import com.raoulvdberge.refinedstorage.RSUtils; import com.raoulvdberge.refinedstorage.api.network.INetwork; @@ -12,6 +11,7 @@ import com.raoulvdberge.refinedstorage.api.util.IComparer; import com.raoulvdberge.refinedstorage.apiimpl.network.node.IGuiStorage; import com.raoulvdberge.refinedstorage.apiimpl.network.node.NetworkNode; import com.raoulvdberge.refinedstorage.capability.CapabilityNetworkNodeProxy; +import com.raoulvdberge.refinedstorage.integration.storagedrawers.StorageItemItemRepository; import com.raoulvdberge.refinedstorage.inventory.ItemHandlerBase; import com.raoulvdberge.refinedstorage.inventory.ItemHandlerFluid; import com.raoulvdberge.refinedstorage.inventory.ItemHandlerListenerNetworkNode; @@ -33,10 +33,8 @@ import java.util.List; import java.util.concurrent.CopyOnWriteArrayList; public class NetworkNodeExternalStorage extends NetworkNode implements IStorageProvider, IGuiStorage, IComparable, IFilterable, IPrioritizable, IType, IAccessType { - @CapabilityInject(IDrawerGroup.class) - private static final Capability DRAWER_GROUP_CAPABILITY = null; - @CapabilityInject(IDrawer.class) - private static final Capability DRAWER_CAPABILITY = null; + @CapabilityInject(IItemRepository.class) + private static final Capability ITEM_REPOSITORY_CAPABILITY = null; public static final String ID = "external_storage"; @@ -203,17 +201,11 @@ public class NetworkNodeExternalStorage extends NetworkNode implements IStorageP } if (type == IType.ITEMS) { - if (facing.hasCapability(DRAWER_GROUP_CAPABILITY, getDirection().getOpposite())) { - itemStorages.add(new StorageItemDrawerGroup(this, () -> { + if (facing.hasCapability(ITEM_REPOSITORY_CAPABILITY, getDirection().getOpposite())) { + itemStorages.add(new StorageItemItemRepository(this, () -> { TileEntity f = getFacingTile(); - return (f != null && f.hasCapability(DRAWER_GROUP_CAPABILITY, getDirection().getOpposite())) ? f.getCapability(DRAWER_GROUP_CAPABILITY, getDirection().getOpposite()) : null; - })); - } else if (facing.hasCapability(DRAWER_CAPABILITY, getDirection().getOpposite())) { - itemStorages.add(new StorageItemDrawer(this, () -> { - TileEntity f = getFacingTile(); - - return (f != null && f.hasCapability(DRAWER_CAPABILITY, getDirection().getOpposite())) ? f.getCapability(DRAWER_CAPABILITY, getDirection().getOpposite()) : null; + return (f != null && f.hasCapability(ITEM_REPOSITORY_CAPABILITY, getDirection().getOpposite())) ? f.getCapability(ITEM_REPOSITORY_CAPABILITY, getDirection().getOpposite()) : null; })); } else if (!(facing.hasCapability(CapabilityNetworkNodeProxy.NETWORK_NODE_PROXY_CAPABILITY, getDirection().getOpposite()) && facing.getCapability(CapabilityNetworkNodeProxy.NETWORK_NODE_PROXY_CAPABILITY, getDirection().getOpposite()).getNode() instanceof IStorageProvider)) { IItemHandler itemHandler = RSUtils.getItemHandler(facing, getDirection().getOpposite()); 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 deleted file mode 100755 index 3e699edd5..000000000 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/externalstorage/StorageItemDrawer.java +++ /dev/null @@ -1,109 +0,0 @@ -package com.raoulvdberge.refinedstorage.apiimpl.network.node.externalstorage; - -import com.jaquadro.minecraft.storagedrawers.api.storage.IDrawer; -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.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 { - private NetworkNodeExternalStorage externalStorage; - private Supplier drawerSupplier; - - public StorageItemDrawer(NetworkNodeExternalStorage externalStorage, Supplier drawerSupplier) { - this.externalStorage = externalStorage; - this.drawerSupplier = drawerSupplier; - } - - @Override - public int getCapacity() { - IDrawer drawer = drawerSupplier.get(); - - return drawer != null ? drawer.getMaxCapacity() : 0; - } - - @Override - public Collection getStacks() { - return Collections.singletonList(getStack(drawerSupplier.get())); - } - - @Override - public ItemStack insert(@Nonnull ItemStack stack, int size, boolean simulate) { - return insert(externalStorage, drawerSupplier.get(), stack, size, simulate); - } - - @Override - public ItemStack extract(@Nonnull ItemStack stack, int size, int flags, boolean simulate) { - return extract(drawerSupplier.get(), stack, size, flags, simulate); - } - - @Override - public int getStored() { - IDrawer drawer = drawerSupplier.get(); - - return drawer != null ? drawer.getStoredItemCount() : 0; - } - - @Override - public int getPriority() { - return externalStorage.getPriority(); - } - - @Override - public AccessType getAccessType() { - return externalStorage.getAccessType(); - } - - public static ItemStack getStack(@Nullable IDrawer drawer) { - if (drawer != null && !drawer.isEmpty() && drawer.getStoredItemCount() > 0) { - return ItemHandlerHelper.copyStackWithSize(drawer.getStoredItemPrototype(), drawer.getStoredItemCount()); - } - - return ItemStack.EMPTY; - } - - public static ItemStack insert(NetworkNodeExternalStorage externalStorage, @Nullable IDrawer drawer, @Nonnull ItemStack stack, int size, boolean simulate) { - if (drawer != null && IFilterable.canTake(externalStorage.getItemFilters(), externalStorage.getMode(), externalStorage.getCompare(), stack) && drawer.canItemBeStored(stack)) { - if (drawer.getStoredItemCount() == 0) { - int toInsert = size > drawer.getMaxCapacity() ? drawer.getMaxCapacity() : size; - - if (!simulate) { - drawer.setStoredItem(stack, toInsert); - } - - return toInsert == size ? null : ItemHandlerHelper.copyStackWithSize(stack, size - toInsert); - } - - int remainder = simulate ? Math.max(size - drawer.getAcceptingRemainingCapacity(), 0) : drawer.adjustStoredItemCount(size); - - return remainder == 0 ? null : ItemHandlerHelper.copyStackWithSize(stack, remainder); - } - - return ItemHandlerHelper.copyStackWithSize(stack, size); - } - - public static ItemStack extract(@Nullable IDrawer drawer, @Nonnull ItemStack stack, int size, int flags, boolean simulate) { - if (drawer != null && API.instance().getComparer().isEqual(stack, drawer.getStoredItemPrototype(), flags)) { - if (size > drawer.getStoredItemCount()) { - size = drawer.getStoredItemCount(); - } - - ItemStack stored = drawer.getStoredItemPrototype(); - - if (!simulate) { - drawer.setStoredItemCount(drawer.getStoredItemCount() - size); - } - - return ItemHandlerHelper.copyStackWithSize(stored, size); - } - - return null; - } -} 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 deleted file mode 100755 index d92e95038..000000000 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/externalstorage/StorageItemDrawerGroup.java +++ /dev/null @@ -1,163 +0,0 @@ -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.api.storage.AccessType; -import net.minecraft.item.ItemStack; - -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 { - private NetworkNodeExternalStorage externalStorage; - private Supplier groupSupplier; - - public StorageItemDrawerGroup(NetworkNodeExternalStorage externalStorage, Supplier groupSupplier) { - this.externalStorage = externalStorage; - this.groupSupplier = groupSupplier; - } - - @Override - public Collection getStacks() { - IDrawerGroup group = groupSupplier.get(); - - if (group == null) { - return Collections.emptyList(); - } - - List stacks = new ArrayList<>(); - - for (int i = 0; i < group.getDrawerCount(); ++i) { - IDrawer drawer = group.getDrawer(i); - - if (drawer.isEnabled()) { - stacks.add(StorageItemDrawer.getStack(drawer)); - } - } - - return stacks; - } - - @Override - public int getStored() { - int stored = 0; - - IDrawerGroup group = groupSupplier.get(); - - if (group == null) { - return 0; - } - - for (int i = 0; i < group.getDrawerCount(); ++i) { - IDrawer drawer = group.getDrawer(i); - - if (drawer.isEnabled()) { - stored += drawer.getStoredItemCount(); - } - } - - return stored; - } - - @Override - public int getPriority() { - return externalStorage.getPriority(); - } - - @Override - public int getCapacity() { - int capacity = 0; - - IDrawerGroup group = groupSupplier.get(); - - if (group == null) { - return 0; - } - - for (int i = 0; i < group.getDrawerCount(); ++i) { - IDrawer drawer = group.getDrawer(i); - - if (drawer.isEnabled()) { - capacity += drawer.getMaxCapacity(); - } - } - - return capacity; - } - - @Nullable - @Override - public ItemStack insert(@Nonnull ItemStack stack, int size, boolean simulate) { - ItemStack remainder = stack; - - IDrawerGroup group = groupSupplier.get(); - - if (group == null) { - return stack; - } - - for (int i = 0; i < group.getDrawerCount(); ++i) { - IDrawer drawer = group.getDrawer(i); - - if (drawer.isEnabled()) { - remainder = StorageItemDrawer.insert(externalStorage, drawer, stack, size, simulate); - - if (remainder == null || remainder.getCount() <= 0) { - break; - } else { - size = remainder.getCount(); - } - } - } - - return remainder; - } - - @Nullable - @Override - public ItemStack extract(@Nonnull ItemStack stack, int size, int flags, boolean simulate) { - int toExtract = size; - - IDrawerGroup group = groupSupplier.get(); - - if (group == null) { - return null; - } - - ItemStack result = null; - - for (int i = 0; i < group.getDrawerCount(); ++i) { - IDrawer drawer = group.getDrawer(i); - - if (drawer.isEnabled()) { - ItemStack extracted = StorageItemDrawer.extract(drawer, stack, toExtract, flags, simulate); - - if (extracted != null) { - if (result == null) { - result = extracted; - } else { - result.grow(extracted.getCount()); - } - - toExtract -= extracted.getCount(); - } - - if (toExtract == 0) { - break; - } - } - } - - return result; - } - - @Override - public AccessType getAccessType() { - return externalStorage.getAccessType(); - } -} diff --git a/src/main/java/com/raoulvdberge/refinedstorage/integration/storagedrawers/StorageItemItemRepository.java b/src/main/java/com/raoulvdberge/refinedstorage/integration/storagedrawers/StorageItemItemRepository.java new file mode 100644 index 000000000..9c1f19fbc --- /dev/null +++ b/src/main/java/com/raoulvdberge/refinedstorage/integration/storagedrawers/StorageItemItemRepository.java @@ -0,0 +1,106 @@ +package com.raoulvdberge.refinedstorage.integration.storagedrawers; + +import com.jaquadro.minecraft.storagedrawers.api.capabilities.IItemRepository; +import com.raoulvdberge.refinedstorage.RSUtils; +import com.raoulvdberge.refinedstorage.api.storage.AccessType; +import com.raoulvdberge.refinedstorage.apiimpl.API; +import com.raoulvdberge.refinedstorage.apiimpl.network.node.externalstorage.NetworkNodeExternalStorage; +import com.raoulvdberge.refinedstorage.apiimpl.network.node.externalstorage.StorageItemExternal; +import net.minecraft.item.ItemStack; +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; +import java.util.stream.Collectors; + +public class StorageItemItemRepository extends StorageItemExternal { + private NetworkNodeExternalStorage externalStorage; + private Supplier repositorySupplier; + + public StorageItemItemRepository(NetworkNodeExternalStorage externalStorage, Supplier repositorySupplier) { + this.externalStorage = externalStorage; + this.repositorySupplier = repositorySupplier; + } + + @Override + public Collection getStacks() { + IItemRepository repository = repositorySupplier.get(); + + if (repository == null) { + return Collections.emptyList(); + } + + return repository.getAllItems().stream().map(r -> ItemHandlerHelper.copyStackWithSize(r.itemPrototype, r.count)).collect(Collectors.toList()); + } + + @Nullable + @Override + public ItemStack insert(@Nonnull ItemStack stack, int size, boolean simulate) { + IItemRepository repository = repositorySupplier.get(); + + if (repository == null) { + return stack; + } + + return RSUtils.transformEmptyToNull(repository.insertItem(ItemHandlerHelper.copyStackWithSize(stack, size), simulate)); + } + + @Nullable + @Override + public ItemStack extract(@Nonnull ItemStack stack, int size, int flags, boolean simulate) { + IItemRepository repository = repositorySupplier.get(); + + if (repository == null) { + return stack; + } + + int toExtract = size; + + if (toExtract > repository.getStoredItemCount(stack)) { + toExtract = repository.getStoredItemCount(stack); + } + + return repository.extractItem(stack, toExtract, simulate, s -> API.instance().getComparer().isEqual(stack, s, flags)); + } + + @Override + public int getStored() { + IItemRepository repository = repositorySupplier.get(); + + if (repository == null) { + return 0; + } + + return repository.getAllItems().stream().mapToInt(r -> r.count).sum(); + } + + @Override + public int getPriority() { + return externalStorage.getPriority(); + } + + @Override + public AccessType getAccessType() { + return externalStorage.getAccessType(); + } + + @Override + public int getCapacity() { + IItemRepository repository = repositorySupplier.get(); + + if (repository == null) { + return 0; + } + + int capacity = 0; + + for (IItemRepository.ItemRecord record : repository.getAllItems()) { + capacity += repository.getItemCapacity(record.itemPrototype); + } + + return capacity; + } +}