From b9df4a8c28cb9441890d46270f13b94dd2a91c06 Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Thu, 6 Jul 2017 15:22:40 +0200 Subject: [PATCH] Update Storage Drawers API, #1346 --- .../api/IStorageDrawersApi.java | 12 --- .../storagedrawers/api/StorageDrawersApi.java | 2 +- .../api/capabilities/IItemRepository.java | 57 +++++++++++ .../api/config/IAddonConfig.java | 20 ---- .../api/config/IBlockConfig.java | 13 --- .../api/config/IIntegrationConfig.java | 5 - .../api/config/IUserConfig.java | 17 ---- .../api/config/package-info.java | 5 - .../api/pack/BlockConfiguration.java | 41 -------- .../storagedrawers/api/pack/BlockType.java | 6 -- .../storagedrawers/api/pack/TextureType.java | 12 --- .../storagedrawers/api/pack/package-info.java | 5 - .../api/registry/IIngredientHandler.java | 21 ---- .../api/registry/IRecipeHandler.java | 35 ------- .../api/registry/IRecipeHandlerRegistry.java | 11 --- .../storagedrawers/api/storage/BlockType.java | 6 ++ .../storagedrawers/api/storage/Drawers.java | 81 +++++++++++++++ .../api/storage/EmptyDrawerAttributes.java | 6 ++ .../storagedrawers/api/storage/IDrawer.java | 99 ++++++++++++------- .../api/storage/IDrawerAttributes.java | 63 ++++++++++++ .../storage/IDrawerAttributesModifiable.java | 58 +++++++++++ .../api/storage/IDrawerGroup.java | 29 ++++-- .../api/storage/IDrawerGroupInteractive.java | 17 ---- .../api/storage/IPriorityGroup.java | 9 -- .../api/storage/ISmartGroup.java | 19 ---- .../api/storage/attribute/IItemLockable.java | 20 ---- .../api/storage/attribute/IQuantifiable.java | 15 --- .../api/storage/attribute/IShroudable.java | 15 --- .../api/storage/attribute/IVoidable.java | 5 +- 29 files changed, 358 insertions(+), 346 deletions(-) create mode 100644 src/main/java/com/jaquadro/minecraft/storagedrawers/api/capabilities/IItemRepository.java delete mode 100755 src/main/java/com/jaquadro/minecraft/storagedrawers/api/config/IAddonConfig.java delete mode 100755 src/main/java/com/jaquadro/minecraft/storagedrawers/api/config/IBlockConfig.java delete mode 100755 src/main/java/com/jaquadro/minecraft/storagedrawers/api/config/IIntegrationConfig.java delete mode 100755 src/main/java/com/jaquadro/minecraft/storagedrawers/api/config/IUserConfig.java delete mode 100755 src/main/java/com/jaquadro/minecraft/storagedrawers/api/config/package-info.java delete mode 100755 src/main/java/com/jaquadro/minecraft/storagedrawers/api/pack/BlockConfiguration.java delete mode 100755 src/main/java/com/jaquadro/minecraft/storagedrawers/api/pack/BlockType.java delete mode 100755 src/main/java/com/jaquadro/minecraft/storagedrawers/api/pack/TextureType.java delete mode 100755 src/main/java/com/jaquadro/minecraft/storagedrawers/api/pack/package-info.java delete mode 100755 src/main/java/com/jaquadro/minecraft/storagedrawers/api/registry/IIngredientHandler.java delete mode 100755 src/main/java/com/jaquadro/minecraft/storagedrawers/api/registry/IRecipeHandler.java delete mode 100755 src/main/java/com/jaquadro/minecraft/storagedrawers/api/registry/IRecipeHandlerRegistry.java create mode 100644 src/main/java/com/jaquadro/minecraft/storagedrawers/api/storage/BlockType.java create mode 100644 src/main/java/com/jaquadro/minecraft/storagedrawers/api/storage/Drawers.java create mode 100644 src/main/java/com/jaquadro/minecraft/storagedrawers/api/storage/EmptyDrawerAttributes.java create mode 100644 src/main/java/com/jaquadro/minecraft/storagedrawers/api/storage/IDrawerAttributes.java create 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/IDrawerGroupInteractive.java delete mode 100755 src/main/java/com/jaquadro/minecraft/storagedrawers/api/storage/IPriorityGroup.java delete mode 100755 src/main/java/com/jaquadro/minecraft/storagedrawers/api/storage/ISmartGroup.java delete mode 100755 src/main/java/com/jaquadro/minecraft/storagedrawers/api/storage/attribute/IItemLockable.java delete mode 100755 src/main/java/com/jaquadro/minecraft/storagedrawers/api/storage/attribute/IQuantifiable.java delete mode 100755 src/main/java/com/jaquadro/minecraft/storagedrawers/api/storage/attribute/IShroudable.java diff --git a/src/main/java/com/jaquadro/minecraft/storagedrawers/api/IStorageDrawersApi.java b/src/main/java/com/jaquadro/minecraft/storagedrawers/api/IStorageDrawersApi.java index 0ac038580..c6ee06672 100755 --- a/src/main/java/com/jaquadro/minecraft/storagedrawers/api/IStorageDrawersApi.java +++ b/src/main/java/com/jaquadro/minecraft/storagedrawers/api/IStorageDrawersApi.java @@ -1,22 +1,10 @@ package com.jaquadro.minecraft.storagedrawers.api; -import com.jaquadro.minecraft.storagedrawers.api.config.IUserConfig; -import com.jaquadro.minecraft.storagedrawers.api.registry.IRecipeHandlerRegistry; import com.jaquadro.minecraft.storagedrawers.api.registry.IRenderRegistry; import com.jaquadro.minecraft.storagedrawers.api.registry.IWailaRegistry; public interface IStorageDrawersApi { - /** - * Recipe handlers are used to make custom recipes compatible with compacting drawers. - */ - IRecipeHandlerRegistry recipeHandlerRegistry(); - IRenderRegistry renderRegistry(); IWailaRegistry wailaRegistry(); - - /** - * User-managed configuration for the Storage Drawers mod. - */ - IUserConfig userConfig(); } diff --git a/src/main/java/com/jaquadro/minecraft/storagedrawers/api/StorageDrawersApi.java b/src/main/java/com/jaquadro/minecraft/storagedrawers/api/StorageDrawersApi.java index ef7dcdc93..d770e0e89 100755 --- a/src/main/java/com/jaquadro/minecraft/storagedrawers/api/StorageDrawersApi.java +++ b/src/main/java/com/jaquadro/minecraft/storagedrawers/api/StorageDrawersApi.java @@ -6,7 +6,7 @@ package com.jaquadro.minecraft.storagedrawers.api; public class StorageDrawersApi { private static IStorageDrawersApi instance; - public static final String VERSION = "1.10.2-1.3.0"; + public static final String VERSION = "2.0.0"; /** * API entry point. 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 new file mode 100644 index 000000000..629b76c4e --- /dev/null +++ b/src/main/java/com/jaquadro/minecraft/storagedrawers/api/capabilities/IItemRepository.java @@ -0,0 +1,57 @@ +package com.jaquadro.minecraft.storagedrawers.api.capabilities; + +import net.minecraft.item.ItemStack; +import net.minecraft.util.NonNullList; + +import javax.annotation.Nonnull; + +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(); + + /** + * Inserts an ItemStack into the inventory and returns the remainder. + * + * @param stack ItemStack to insert. + * @param simulate If true, the insertion is only simulated + * @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); + + /** + * 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 + * @return ItemStack extracted from the inventory, or ItemStack.EMPTY if nothing could be extracted. + */ + @Nonnull + ItemStack extractItem(@Nonnull ItemStack stack, int amount, boolean simulate); + + /** + * 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. + */ + class ItemRecord { + @Nonnull + public final ItemStack itemPrototype; + public final int count; + + public ItemRecord(@Nonnull ItemStack itemPrototype, int count) { + this.itemPrototype = itemPrototype; + this.count = count; + } + } +} diff --git a/src/main/java/com/jaquadro/minecraft/storagedrawers/api/config/IAddonConfig.java b/src/main/java/com/jaquadro/minecraft/storagedrawers/api/config/IAddonConfig.java deleted file mode 100755 index 55356ab81..000000000 --- a/src/main/java/com/jaquadro/minecraft/storagedrawers/api/config/IAddonConfig.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.jaquadro.minecraft.storagedrawers.api.config; - -public interface IAddonConfig { - /** - * Gets whether the user has configured a preference for addon packs to hide their blocks and items from Vanilla - * creative tabs. - */ - boolean showAddonItemsNEI(); - - /** - * Gets whether the user has configured a preference for addon packs to hide their blocks and items from NEI. - */ - boolean showAddonItemsVanilla(); - - /** - * Gets whether the user has configured a preference for addon packs to provide their blocks and items through - * their own vanilla tab. - */ - boolean addonItemsUseSeparateTab(); -} diff --git a/src/main/java/com/jaquadro/minecraft/storagedrawers/api/config/IBlockConfig.java b/src/main/java/com/jaquadro/minecraft/storagedrawers/api/config/IBlockConfig.java deleted file mode 100755 index 514578b87..000000000 --- a/src/main/java/com/jaquadro/minecraft/storagedrawers/api/config/IBlockConfig.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.jaquadro.minecraft.storagedrawers.api.config; - -import com.jaquadro.minecraft.storagedrawers.api.pack.BlockConfiguration; - -public interface IBlockConfig { - String getBlockConfigName(BlockConfiguration blockConfig); - - boolean isBlockEnabled(String blockConfigName); - - int getBlockRecipeOutput(String blockConfigName); - - int getBaseCapacity(String blockConfigName); -} diff --git a/src/main/java/com/jaquadro/minecraft/storagedrawers/api/config/IIntegrationConfig.java b/src/main/java/com/jaquadro/minecraft/storagedrawers/api/config/IIntegrationConfig.java deleted file mode 100755 index 96431b2f5..000000000 --- a/src/main/java/com/jaquadro/minecraft/storagedrawers/api/config/IIntegrationConfig.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.jaquadro.minecraft.storagedrawers.api.config; - -public interface IIntegrationConfig { - boolean isRefinedRelocationEnabled(); -} diff --git a/src/main/java/com/jaquadro/minecraft/storagedrawers/api/config/IUserConfig.java b/src/main/java/com/jaquadro/minecraft/storagedrawers/api/config/IUserConfig.java deleted file mode 100755 index 5f9c1beae..000000000 --- a/src/main/java/com/jaquadro/minecraft/storagedrawers/api/config/IUserConfig.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.jaquadro.minecraft.storagedrawers.api.config; - -/** - * The main hub for user-managed mod configuration. - */ -public interface IUserConfig { - /** - * Configuration options related to third party addon packs for Storage Drawers. - */ - @Deprecated - IAddonConfig addonConfig(); - - /** - * Configuration options related to individual blocks. - */ - IBlockConfig blockConfig(); -} diff --git a/src/main/java/com/jaquadro/minecraft/storagedrawers/api/config/package-info.java b/src/main/java/com/jaquadro/minecraft/storagedrawers/api/config/package-info.java deleted file mode 100755 index 4a83dca8e..000000000 --- a/src/main/java/com/jaquadro/minecraft/storagedrawers/api/config/package-info.java +++ /dev/null @@ -1,5 +0,0 @@ -@API(owner = "StorageDrawersAPI", provides = "StorageDrawersAPI|config", apiVersion = StorageDrawersApi.VERSION) -package com.jaquadro.minecraft.storagedrawers.api.config; - -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/pack/BlockConfiguration.java b/src/main/java/com/jaquadro/minecraft/storagedrawers/api/pack/BlockConfiguration.java deleted file mode 100755 index bf1394782..000000000 --- a/src/main/java/com/jaquadro/minecraft/storagedrawers/api/pack/BlockConfiguration.java +++ /dev/null @@ -1,41 +0,0 @@ -package com.jaquadro.minecraft.storagedrawers.api.pack; - -import com.jaquadro.minecraft.storagedrawers.api.storage.EnumBasicDrawer; - -public enum BlockConfiguration { - BasicFull1(BlockType.Drawers, EnumBasicDrawer.FULL1), - BasicFull2(BlockType.Drawers, EnumBasicDrawer.FULL2), - BasicFull4(BlockType.Drawers, EnumBasicDrawer.FULL4), - BasicHalf2(BlockType.Drawers, EnumBasicDrawer.HALF2), - BasicHalf4(BlockType.Drawers, EnumBasicDrawer.HALF4), - Trim(BlockType.Trim, null); - - private final BlockType type; - private final EnumBasicDrawer drawer; - - BlockConfiguration(BlockType type, EnumBasicDrawer drawer) { - this.type = type; - this.drawer = drawer; - } - - public BlockType getBlockType() { - return type; - } - - public int getDrawerCount() { - return (drawer != null) ? drawer.getDrawerCount() : 0; - } - - public boolean isHalfDepth() { - return (drawer != null) && drawer.isHalfDepth(); - } - - public static BlockConfiguration by(BlockType type, EnumBasicDrawer drawer) { - for (BlockConfiguration config : values()) { - if (config.type == type && config.drawer == drawer) - return config; - } - - return null; - } -} diff --git a/src/main/java/com/jaquadro/minecraft/storagedrawers/api/pack/BlockType.java b/src/main/java/com/jaquadro/minecraft/storagedrawers/api/pack/BlockType.java deleted file mode 100755 index 386b6007b..000000000 --- a/src/main/java/com/jaquadro/minecraft/storagedrawers/api/pack/BlockType.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.jaquadro.minecraft.storagedrawers.api.pack; - -public enum BlockType { - Drawers, - Trim -} diff --git a/src/main/java/com/jaquadro/minecraft/storagedrawers/api/pack/TextureType.java b/src/main/java/com/jaquadro/minecraft/storagedrawers/api/pack/TextureType.java deleted file mode 100755 index 123c8527d..000000000 --- a/src/main/java/com/jaquadro/minecraft/storagedrawers/api/pack/TextureType.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.jaquadro.minecraft.storagedrawers.api.pack; - -public enum TextureType { - Front1, - Front2, - Front4, - Side, - SideVSplit, - SideHSplit, - TrimBorder, - TrimBlock -} diff --git a/src/main/java/com/jaquadro/minecraft/storagedrawers/api/pack/package-info.java b/src/main/java/com/jaquadro/minecraft/storagedrawers/api/pack/package-info.java deleted file mode 100755 index 2c7367e85..000000000 --- a/src/main/java/com/jaquadro/minecraft/storagedrawers/api/pack/package-info.java +++ /dev/null @@ -1,5 +0,0 @@ -@API(owner = "StorageDrawersAPI", provides = "StorageDrawersAPI|pack", apiVersion = StorageDrawersApi.VERSION) -package com.jaquadro.minecraft.storagedrawers.api.pack; - -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/registry/IIngredientHandler.java b/src/main/java/com/jaquadro/minecraft/storagedrawers/api/registry/IIngredientHandler.java deleted file mode 100755 index c2f5d1064..000000000 --- a/src/main/java/com/jaquadro/minecraft/storagedrawers/api/registry/IIngredientHandler.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.jaquadro.minecraft.storagedrawers.api.registry; - -import net.minecraft.item.ItemStack; - -import javax.annotation.Nonnull; - -/** - * Ingredient handlers are used to get ItemStacks from ingredients in custom IRecipe implementations. If you have - * registered an IRecipeHandler that returns lists of objects that aren't ItemStacks, then you will need to - * implement an ingredient handler for those objects. - */ -public interface IIngredientHandler { - /** - * Gets an ItemStack from an object that represents an ingredient in an IRecipe. - * - * @param object An ingredient object. - * @return An ItemStack for the given ingredient. - */ - @Nonnull - ItemStack getItemStack(Object object); -} diff --git a/src/main/java/com/jaquadro/minecraft/storagedrawers/api/registry/IRecipeHandler.java b/src/main/java/com/jaquadro/minecraft/storagedrawers/api/registry/IRecipeHandler.java deleted file mode 100755 index 00fe63a32..000000000 --- a/src/main/java/com/jaquadro/minecraft/storagedrawers/api/registry/IRecipeHandler.java +++ /dev/null @@ -1,35 +0,0 @@ -package com.jaquadro.minecraft.storagedrawers.api.registry; - -import net.minecraft.item.crafting.IRecipe; - -import java.util.List; - -/** - * Recipe handlers are used by compacting drawers to find more-compressed forms of blocks and items. If your recipe - * to craft compressed items is a custom IRecipe implementation, you will need to register a handler for it. - */ -public interface IRecipeHandler { - /** - * Get the recipe ingredient list as an array of objects (usually used for shaped recipes). - * If your array does not contain ItemStack objects, you will need to register an {@link IIngredientHandler} to - * get an ItemStack from them. - * - * If you would prefer to return a List, return null in this method and implement {@link #getInputAsList}. - * - * @param recipe An instance of a custom {@link IRecipe}. - * @return An array of ItemStacks or objects with a registered {@link IIngredientHandler}. - */ - Object[] getInputAsArray(IRecipe recipe); - - /** - * Get the recipe ingredient list as a list of objects (usually used for shapeless recipes). - * If your list does not contain ItemStack objects, you will need to register an {@link IIngredientHandler} to - * get an ItemStack from them. - * - * If you would prefer to return an array, return null in this method and implement {@link #getInputAsArray}. - * - * @param recipe An instance of a custom {@link IRecipe}. - * @return A list of ItemStacks or objects with a registered {@link IIngredientHandler}. - */ - List getInputAsList(IRecipe recipe); -} diff --git a/src/main/java/com/jaquadro/minecraft/storagedrawers/api/registry/IRecipeHandlerRegistry.java b/src/main/java/com/jaquadro/minecraft/storagedrawers/api/registry/IRecipeHandlerRegistry.java deleted file mode 100755 index 8645fb3ef..000000000 --- a/src/main/java/com/jaquadro/minecraft/storagedrawers/api/registry/IRecipeHandlerRegistry.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.jaquadro.minecraft.storagedrawers.api.registry; - -public interface IRecipeHandlerRegistry { - void registerRecipeHandler(Class clazz, IRecipeHandler handler); - - void registerIngredientHandler(Class clazz, IIngredientHandler handler); - - IRecipeHandler getRecipeHandler(Class clazz); - - IIngredientHandler getIngredientHandler(Class clazz); -} 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 new file mode 100644 index 000000000..a9e5f0c57 --- /dev/null +++ b/src/main/java/com/jaquadro/minecraft/storagedrawers/api/storage/BlockType.java @@ -0,0 +1,6 @@ +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 new file mode 100644 index 000000000..5914db3ea --- /dev/null +++ b/src/main/java/com/jaquadro/minecraft/storagedrawers/api/storage/Drawers.java @@ -0,0 +1,81 @@ +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 new file mode 100644 index 000000000..ad1f52b37 --- /dev/null +++ b/src/main/java/com/jaquadro/minecraft/storagedrawers/api/storage/EmptyDrawerAttributes.java @@ -0,0 +1,6 @@ +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/IDrawer.java b/src/main/java/com/jaquadro/minecraft/storagedrawers/api/storage/IDrawer.java index 5d434ef00..af8c12a16 100755 --- a/src/main/java/com/jaquadro/minecraft/storagedrawers/api/storage/IDrawer.java +++ b/src/main/java/com/jaquadro/minecraft/storagedrawers/api/storage/IDrawer.java @@ -1,7 +1,6 @@ package com.jaquadro.minecraft.storagedrawers.api.storage; import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; import javax.annotation.Nonnull; @@ -13,14 +12,28 @@ public interface IDrawer { @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 to initialize the stored item count to. + * @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. */ - IDrawer setStoredItem(@Nonnull ItemStack itemPrototype, int amount); + @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. @@ -35,34 +48,68 @@ public interface IDrawer { */ 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. */ - int getMaxCapacity(); + 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. + * @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 maxmimum number of items that could be stored in this drawer for a standard item stack size - * of 64. - */ - int getDefaultMaxCapacity(); - /** * Gets the number of items that could still be added to this drawer before it is full. */ int getRemainingCapacity(); /** - * Gets the max stack size of the item type stored in this drawer. Convenience method. + * 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(). */ - int getStoredItemStackSize(); + 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. @@ -92,27 +139,7 @@ public interface IDrawer { */ boolean isEmpty(); - /** - * Gets auxiliary data that has been associated with this drawer. - * - * @param key The key used to identify the data. - * @return An opaque object that was previously stored. - */ - Object getExtendedData(String key); - - /** - * Stores auxiliary data with this drawer, mainly for use in integration. - * @param key The key to identify the data with. - * @param data The data to store. - */ - void setExtendedData(String key, Object data); - - /** - * Called when a component attribute of a drawer (such as lock or void) changes state. - */ - void attributeChanged(); - - void writeToNBT(NBTTagCompound tag); - - void readFromNBT(NBTTagCompound tag); + 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 new file mode 100644 index 000000000..b36edc19f --- /dev/null +++ b/src/main/java/com/jaquadro/minecraft/storagedrawers/api/storage/IDrawerAttributes.java @@ -0,0 +1,63 @@ +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 new file mode 100644 index 000000000..b96509547 --- /dev/null +++ b/src/main/java/com/jaquadro/minecraft/storagedrawers/api/storage/IDrawerAttributesModifiable.java @@ -0,0 +1,58 @@ +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/IDrawerGroup.java b/src/main/java/com/jaquadro/minecraft/storagedrawers/api/storage/IDrawerGroup.java index 90f54707e..80402ab6b 100755 --- a/src/main/java/com/jaquadro/minecraft/storagedrawers/api/storage/IDrawerGroup.java +++ b/src/main/java/com/jaquadro/minecraft/storagedrawers/api/storage/IDrawerGroup.java @@ -1,6 +1,13 @@ package com.jaquadro.minecraft.storagedrawers.api.storage; -public interface IDrawerGroup { +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. */ @@ -9,17 +16,23 @@ public interface IDrawerGroup { /** * Gets the drawer at the given slot within this group. */ + @Nonnull IDrawer getDrawer(int slot); /** - * Gets the drawer at the given slot within this group only if it is enabled. + * Gets the list of available drawer slots in priority order. */ - IDrawer getDrawerIfEnabled(int slot); + @Nonnull + int[] getAccessibleDrawerSlots(); - /** - * Gets whether the drawer in the given slot is usable. - */ - boolean isDrawerEnabled(int slot); + @Override + default boolean hasCapability(@Nonnull Capability capability, @Nullable EnumFacing facing) { + return false; + } - boolean markDirtyIfNeeded(); + @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/IDrawerGroupInteractive.java b/src/main/java/com/jaquadro/minecraft/storagedrawers/api/storage/IDrawerGroupInteractive.java deleted file mode 100755 index 14535e8e9..000000000 --- a/src/main/java/com/jaquadro/minecraft/storagedrawers/api/storage/IDrawerGroupInteractive.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.jaquadro.minecraft.storagedrawers.api.storage; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; - -import javax.annotation.Nonnull; - -public interface IDrawerGroupInteractive extends IDrawerGroup { - @Nonnull - ItemStack takeItemsFromSlot(int slot, int count); - - int putItemsIntoSlot(int slot, @Nonnull ItemStack stack, int count); - - int interactPutCurrentItemIntoSlot(int slot, EntityPlayer player); - - int interactPutCurrentInventoryIntoSlot(int slot, EntityPlayer player); -} diff --git a/src/main/java/com/jaquadro/minecraft/storagedrawers/api/storage/IPriorityGroup.java b/src/main/java/com/jaquadro/minecraft/storagedrawers/api/storage/IPriorityGroup.java deleted file mode 100755 index 1313dfc6a..000000000 --- a/src/main/java/com/jaquadro/minecraft/storagedrawers/api/storage/IPriorityGroup.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.jaquadro.minecraft.storagedrawers.api.storage; - - -public interface IPriorityGroup { - /** - * Gets the list of available drawer slots in priority order. - */ - int[] getAccessibleDrawerSlots(); -} diff --git a/src/main/java/com/jaquadro/minecraft/storagedrawers/api/storage/ISmartGroup.java b/src/main/java/com/jaquadro/minecraft/storagedrawers/api/storage/ISmartGroup.java deleted file mode 100755 index 7d2f50f1f..000000000 --- a/src/main/java/com/jaquadro/minecraft/storagedrawers/api/storage/ISmartGroup.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.jaquadro.minecraft.storagedrawers.api.storage; - -import net.minecraft.item.ItemStack; - -import javax.annotation.Nonnull; - -public interface ISmartGroup { - /** - * Gets a lazy enumeration of all slots that will accept at least one item of the given stack, ordered by - * insertion preference. - */ - Iterable enumerateDrawersForInsertion(@Nonnull ItemStack stack, boolean strict); - - /** - * Gets a lazy enumeration of all slots that will provide at least one item of the given stack, ordered by - * extraction preference. - */ - Iterable enumerateDrawersForExtraction(@Nonnull ItemStack stack, boolean strict); -} diff --git a/src/main/java/com/jaquadro/minecraft/storagedrawers/api/storage/attribute/IItemLockable.java b/src/main/java/com/jaquadro/minecraft/storagedrawers/api/storage/attribute/IItemLockable.java deleted file mode 100755 index 0f7ef0485..000000000 --- a/src/main/java/com/jaquadro/minecraft/storagedrawers/api/storage/attribute/IItemLockable.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.jaquadro.minecraft.storagedrawers.api.storage.attribute; - -public interface IItemLockable { - /** - * Gets whether or not a drawer or group is locked for the given lock attribute. - */ - boolean isItemLocked(LockAttribute attr); - - /** - * 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. - */ - boolean canItemLock(LockAttribute attr); - - /** - * Sets the lock state of a drawer or group for the given lock attribute. - * If canItemLock returns false, this is a no-op. - */ - void setItemLocked(LockAttribute attr, boolean isLocked); -} diff --git a/src/main/java/com/jaquadro/minecraft/storagedrawers/api/storage/attribute/IQuantifiable.java b/src/main/java/com/jaquadro/minecraft/storagedrawers/api/storage/attribute/IQuantifiable.java deleted file mode 100755 index 19c4cb9a3..000000000 --- a/src/main/java/com/jaquadro/minecraft/storagedrawers/api/storage/attribute/IQuantifiable.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.jaquadro.minecraft.storagedrawers.api.storage.attribute; - -public interface IQuantifiable { - /** - * Gets whether or not the drawer has the quantified attribute. - * The quantified attribute instructs the drawer to render its numerical quantity. - */ - boolean isShowingQuantity(); - - /** - * Sets whether or not the drawer is currently quantified. - * @return false if the operation is not supported, true otherwise. - */ - boolean setIsShowingQuantity(boolean state); -} diff --git a/src/main/java/com/jaquadro/minecraft/storagedrawers/api/storage/attribute/IShroudable.java b/src/main/java/com/jaquadro/minecraft/storagedrawers/api/storage/attribute/IShroudable.java deleted file mode 100755 index 025420cfd..000000000 --- a/src/main/java/com/jaquadro/minecraft/storagedrawers/api/storage/attribute/IShroudable.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.jaquadro.minecraft.storagedrawers.api.storage.attribute; - -public interface IShroudable { - /** - * Gets whether or not the drawer has the shrouded attribute. - * The shrouded attribute instructs the drawer to not render its item label. - */ - boolean isShrouded(); - - /** - * Sets whether or not the drawer is currently shrouded. - * @return false if the operation is not supported, true otherwise. - */ - boolean setIsShrouded(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 index 7d0451658..0d53fd508 100755 --- 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 @@ -1,8 +1,7 @@ package com.jaquadro.minecraft.storagedrawers.api.storage.attribute; +@Deprecated public interface IVoidable { - /** - * Gets whether or not the drawer has a voiding attribute. - */ + @Deprecated boolean isVoid(); }