From a48d0d8a061fc74a5c815d647a3789a5e1c1c460 Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Sun, 5 Jun 2016 14:10:26 +0200 Subject: [PATCH] Move IStorageProviders into capability --- .../api/RefinedStorageCapabilities.java | 10 ++++++++ .../api/solderer/ISoldererRecipe.java | 2 +- .../api/solderer/SoldererRecipeBasic.java | 8 +++---- .../api/solderer/SoldererRegistry.java | 2 +- .../api/storage/IStorageProvider.java | 15 ++++++++++++ .../storage/IStorageProvider.java | 7 ------ .../refinedstorage/storage/NBTStorage.java | 1 + .../refinedstorage/tile/TileDiskDrive.java | 11 +++++++-- .../tile/TileExternalStorage.java | 19 ++++++++++++++- .../java/refinedstorage/tile/TileStorage.java | 23 ++++++++++++++++++- .../tile/controller/TileController.java | 6 ++--- 11 files changed, 84 insertions(+), 20 deletions(-) create mode 100755 src/main/java/refinedstorage/api/RefinedStorageCapabilities.java create mode 100755 src/main/java/refinedstorage/api/storage/IStorageProvider.java delete mode 100755 src/main/java/refinedstorage/storage/IStorageProvider.java diff --git a/src/main/java/refinedstorage/api/RefinedStorageCapabilities.java b/src/main/java/refinedstorage/api/RefinedStorageCapabilities.java new file mode 100755 index 000000000..84018800d --- /dev/null +++ b/src/main/java/refinedstorage/api/RefinedStorageCapabilities.java @@ -0,0 +1,10 @@ +package refinedstorage.api; + +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.common.capabilities.CapabilityInject; +import refinedstorage.api.storage.IStorageProvider; + +public final class RefinedStorageCapabilities { + @CapabilityInject(IStorageProvider.class) + public static final Capability STORAGE_PROVIDER_CAPABILITY = null; +} diff --git a/src/main/java/refinedstorage/api/solderer/ISoldererRecipe.java b/src/main/java/refinedstorage/api/solderer/ISoldererRecipe.java index 499cb125b..a16225ed6 100755 --- a/src/main/java/refinedstorage/api/solderer/ISoldererRecipe.java +++ b/src/main/java/refinedstorage/api/solderer/ISoldererRecipe.java @@ -7,7 +7,7 @@ import net.minecraft.item.ItemStack; */ public interface ISoldererRecipe { /** - * @param row The solderer row (between 1 - 3) + * @param row The solderer row (between 0 - 2) * @return A stack for the given row, can be null for an empty row */ ItemStack getRow(int row); diff --git a/src/main/java/refinedstorage/api/solderer/SoldererRecipeBasic.java b/src/main/java/refinedstorage/api/solderer/SoldererRecipeBasic.java index 98a957392..1ba619df1 100755 --- a/src/main/java/refinedstorage/api/solderer/SoldererRecipeBasic.java +++ b/src/main/java/refinedstorage/api/solderer/SoldererRecipeBasic.java @@ -3,8 +3,8 @@ package refinedstorage.api.solderer; import net.minecraft.item.ItemStack; /** - * A solderer recipe with basic behaviour - * Implement {@link refinedstorage.api.solderer.ISoldererRecipe} for custom behaviour + * A solderer recipe with basic behaviour. + * Implement {@link ISoldererRecipe} for custom behaviour. */ public class SoldererRecipeBasic implements ISoldererRecipe { private int duration; @@ -12,8 +12,8 @@ public class SoldererRecipeBasic implements ISoldererRecipe { private ItemStack[] rows; /** - * @param result The result that this recipe gives back - * @param duration The duration of this recipe + * @param result The result + * @param duration The duration in ticks * @param rows The rows of this recipe, has to be 3 rows (null for an empty row) */ public SoldererRecipeBasic(ItemStack result, int duration, ItemStack... rows) { diff --git a/src/main/java/refinedstorage/api/solderer/SoldererRegistry.java b/src/main/java/refinedstorage/api/solderer/SoldererRegistry.java index a0874dd1d..f0cdd71ee 100755 --- a/src/main/java/refinedstorage/api/solderer/SoldererRegistry.java +++ b/src/main/java/refinedstorage/api/solderer/SoldererRegistry.java @@ -30,7 +30,7 @@ public class SoldererRegistry { } /** - * @param items The item handler, where slots 0 - 2 are the row slots + * @param items An item handler, where slots 0 - 2 are the row slots * @return The recipe */ public static ISoldererRecipe getRecipe(IItemHandler items) { diff --git a/src/main/java/refinedstorage/api/storage/IStorageProvider.java b/src/main/java/refinedstorage/api/storage/IStorageProvider.java new file mode 100755 index 000000000..b93794c75 --- /dev/null +++ b/src/main/java/refinedstorage/api/storage/IStorageProvider.java @@ -0,0 +1,15 @@ +package refinedstorage.api.storage; + +import refinedstorage.storage.IStorage; + +import java.util.List; + +/** + * Should be implement as a capability on tile entities. + */ +public interface IStorageProvider { + /** + * @param storages A list containing previously added storages + */ + void provide(List storages); +} diff --git a/src/main/java/refinedstorage/storage/IStorageProvider.java b/src/main/java/refinedstorage/storage/IStorageProvider.java deleted file mode 100755 index c6b77b88b..000000000 --- a/src/main/java/refinedstorage/storage/IStorageProvider.java +++ /dev/null @@ -1,7 +0,0 @@ -package refinedstorage.storage; - -import java.util.List; - -public interface IStorageProvider { - void provide(List storages); -} diff --git a/src/main/java/refinedstorage/storage/NBTStorage.java b/src/main/java/refinedstorage/storage/NBTStorage.java index 97a358d7f..c92826ed8 100755 --- a/src/main/java/refinedstorage/storage/NBTStorage.java +++ b/src/main/java/refinedstorage/storage/NBTStorage.java @@ -18,6 +18,7 @@ public abstract class NBTStorage implements IStorage { public static final String NBT_ITEM_QUANTITY = "Quantity"; public static final String NBT_ITEM_DAMAGE = "Damage"; public static final String NBT_ITEM_NBT = "NBT"; + public static final String NBT_CAPS = "Caps"; private NBTTagCompound tag; private int capacity; diff --git a/src/main/java/refinedstorage/tile/TileDiskDrive.java b/src/main/java/refinedstorage/tile/TileDiskDrive.java index 97719d976..63b28cbf8 100755 --- a/src/main/java/refinedstorage/tile/TileDiskDrive.java +++ b/src/main/java/refinedstorage/tile/TileDiskDrive.java @@ -11,12 +11,17 @@ import net.minecraftforge.items.IItemHandler; import refinedstorage.RefinedStorage; import refinedstorage.RefinedStorageItems; import refinedstorage.RefinedStorageUtils; +import refinedstorage.api.RefinedStorageCapabilities; +import refinedstorage.api.storage.IStorageProvider; import refinedstorage.block.EnumStorageType; import refinedstorage.container.ContainerDiskDrive; import refinedstorage.inventory.BasicItemHandler; import refinedstorage.inventory.BasicItemValidator; import refinedstorage.network.MessagePriorityUpdate; -import refinedstorage.storage.*; +import refinedstorage.storage.DiskStorage; +import refinedstorage.storage.IStorage; +import refinedstorage.storage.IStorageGui; +import refinedstorage.storage.NBTStorage; import refinedstorage.tile.config.ICompareConfig; import refinedstorage.tile.config.IModeConfig; import refinedstorage.tile.config.IRedstoneModeConfig; @@ -257,6 +262,8 @@ public class TileDiskDrive extends TileMachine implements IStorageProvider, ISto public T getCapability(Capability capability, EnumFacing facing) { if (capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY) { return (T) disks; + } else if (capability == RefinedStorageCapabilities.STORAGE_PROVIDER_CAPABILITY) { + return (T) this; } return super.getCapability(capability, facing); @@ -264,6 +271,6 @@ public class TileDiskDrive extends TileMachine implements IStorageProvider, ISto @Override public boolean hasCapability(Capability capability, EnumFacing facing) { - return capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY || super.hasCapability(capability, facing); + return capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY || capability == RefinedStorageCapabilities.STORAGE_PROVIDER_CAPABILITY || super.hasCapability(capability, facing); } } diff --git a/src/main/java/refinedstorage/tile/TileExternalStorage.java b/src/main/java/refinedstorage/tile/TileExternalStorage.java index 4b30b2628..4f04827f1 100755 --- a/src/main/java/refinedstorage/tile/TileExternalStorage.java +++ b/src/main/java/refinedstorage/tile/TileExternalStorage.java @@ -4,17 +4,20 @@ import io.netty.buffer.ByteBuf; import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumFacing; +import net.minecraftforge.common.capabilities.Capability; import net.minecraftforge.items.IItemHandler; import net.minecraftforge.items.ItemHandlerHelper; import powercrystals.minefactoryreloaded.api.IDeepStorageUnit; import refinedstorage.RefinedStorage; import refinedstorage.RefinedStorageUtils; +import refinedstorage.api.RefinedStorageCapabilities; +import refinedstorage.api.storage.IStorageProvider; import refinedstorage.container.ContainerStorage; import refinedstorage.inventory.BasicItemHandler; import refinedstorage.network.MessagePriorityUpdate; import refinedstorage.storage.IStorage; import refinedstorage.storage.IStorageGui; -import refinedstorage.storage.IStorageProvider; import refinedstorage.tile.config.*; import java.util.List; @@ -323,4 +326,18 @@ public class TileExternalStorage extends TileMachine implements IStorageProvider public IItemHandler getFilters() { return filters; } + + @Override + public T getCapability(Capability capability, EnumFacing facing) { + if (capability == RefinedStorageCapabilities.STORAGE_PROVIDER_CAPABILITY) { + return (T) this; + } + + return super.getCapability(capability, facing); + } + + @Override + public boolean hasCapability(Capability capability, EnumFacing facing) { + return capability == RefinedStorageCapabilities.STORAGE_PROVIDER_CAPABILITY || super.hasCapability(capability, facing); + } } diff --git a/src/main/java/refinedstorage/tile/TileStorage.java b/src/main/java/refinedstorage/tile/TileStorage.java index 9be56bb44..51b54382b 100755 --- a/src/main/java/refinedstorage/tile/TileStorage.java +++ b/src/main/java/refinedstorage/tile/TileStorage.java @@ -3,16 +3,23 @@ package refinedstorage.tile; import io.netty.buffer.ByteBuf; import net.minecraft.inventory.Container; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumFacing; +import net.minecraftforge.common.capabilities.Capability; import net.minecraftforge.items.IItemHandler; import refinedstorage.RefinedStorage; import refinedstorage.RefinedStorageBlocks; import refinedstorage.RefinedStorageUtils; +import refinedstorage.api.RefinedStorageCapabilities; +import refinedstorage.api.storage.IStorageProvider; import refinedstorage.block.BlockStorage; import refinedstorage.block.EnumStorageType; import refinedstorage.container.ContainerStorage; import refinedstorage.inventory.BasicItemHandler; import refinedstorage.network.MessagePriorityUpdate; -import refinedstorage.storage.*; +import refinedstorage.storage.IStorage; +import refinedstorage.storage.IStorageGui; +import refinedstorage.storage.NBTStorage; +import refinedstorage.storage.StorageBlockStorage; import refinedstorage.tile.config.ICompareConfig; import refinedstorage.tile.config.IModeConfig; import refinedstorage.tile.config.IRedstoneModeConfig; @@ -217,4 +224,18 @@ public class TileStorage extends TileMachine implements IStorageProvider, IStora public int getCapacity() { return getType().getCapacity(); } + + @Override + public T getCapability(Capability capability, EnumFacing facing) { + if (capability == RefinedStorageCapabilities.STORAGE_PROVIDER_CAPABILITY) { + return (T) this; + } + + return super.getCapability(capability, facing); + } + + @Override + public boolean hasCapability(Capability capability, EnumFacing facing) { + return capability == RefinedStorageCapabilities.STORAGE_PROVIDER_CAPABILITY || super.hasCapability(capability, facing); + } } diff --git a/src/main/java/refinedstorage/tile/controller/TileController.java b/src/main/java/refinedstorage/tile/controller/TileController.java index 04c02d952..824bdd072 100755 --- a/src/main/java/refinedstorage/tile/controller/TileController.java +++ b/src/main/java/refinedstorage/tile/controller/TileController.java @@ -16,6 +16,7 @@ import net.minecraftforge.fml.common.network.ByteBufUtils; import refinedstorage.RefinedStorage; import refinedstorage.RefinedStorageBlocks; import refinedstorage.RefinedStorageUtils; +import refinedstorage.api.RefinedStorageCapabilities; import refinedstorage.autocrafting.CraftingPattern; import refinedstorage.autocrafting.task.BasicCraftingTask; import refinedstorage.autocrafting.task.ICraftingTask; @@ -27,7 +28,6 @@ import refinedstorage.container.ContainerGrid; import refinedstorage.item.ItemPattern; import refinedstorage.network.MessageGridItems; import refinedstorage.storage.IStorage; -import refinedstorage.storage.IStorageProvider; import refinedstorage.tile.*; import refinedstorage.tile.config.IRedstoneModeConfig; import refinedstorage.tile.config.RedstoneMode; @@ -259,8 +259,8 @@ public class TileController extends TileBase implements IEnergyReceiver, ISynchr this.wirelessGridRange += ((TileWirelessTransmitter) machine).getRange(); } - if (machine instanceof IStorageProvider) { - ((IStorageProvider) machine).provide(storages); + if (machine.hasCapability(RefinedStorageCapabilities.STORAGE_PROVIDER_CAPABILITY, EnumFacing.DOWN)) { + machine.getCapability(RefinedStorageCapabilities.STORAGE_PROVIDER_CAPABILITY, EnumFacing.DOWN).provide(storages); } if (machine instanceof TileCrafter) {