Move IStorageProviders into capability

This commit is contained in:
Raoul Van den Berge
2016-06-05 14:10:26 +02:00
parent a96dd80b24
commit a48d0d8a06
11 changed files with 84 additions and 20 deletions

View File

@@ -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<IStorageProvider> STORAGE_PROVIDER_CAPABILITY = null;
}

View File

@@ -7,7 +7,7 @@ import net.minecraft.item.ItemStack;
*/ */
public interface ISoldererRecipe { 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 * @return A stack for the given row, can be null for an empty row
*/ */
ItemStack getRow(int row); ItemStack getRow(int row);

View File

@@ -3,8 +3,8 @@ package refinedstorage.api.solderer;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
/** /**
* A solderer recipe with basic behaviour * A solderer recipe with basic behaviour.
* Implement {@link refinedstorage.api.solderer.ISoldererRecipe} for custom behaviour * Implement {@link ISoldererRecipe} for custom behaviour.
*/ */
public class SoldererRecipeBasic implements ISoldererRecipe { public class SoldererRecipeBasic implements ISoldererRecipe {
private int duration; private int duration;
@@ -12,8 +12,8 @@ public class SoldererRecipeBasic implements ISoldererRecipe {
private ItemStack[] rows; private ItemStack[] rows;
/** /**
* @param result The result that this recipe gives back * @param result The result
* @param duration The duration of this recipe * @param duration The duration in ticks
* @param rows The rows of this recipe, has to be 3 rows (null for an empty row) * @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) { public SoldererRecipeBasic(ItemStack result, int duration, ItemStack... rows) {

View File

@@ -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 * @return The recipe
*/ */
public static ISoldererRecipe getRecipe(IItemHandler items) { public static ISoldererRecipe getRecipe(IItemHandler items) {

View File

@@ -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<IStorage> storages);
}

View File

@@ -1,7 +0,0 @@
package refinedstorage.storage;
import java.util.List;
public interface IStorageProvider {
void provide(List<IStorage> storages);
}

View File

@@ -18,6 +18,7 @@ public abstract class NBTStorage implements IStorage {
public static final String NBT_ITEM_QUANTITY = "Quantity"; public static final String NBT_ITEM_QUANTITY = "Quantity";
public static final String NBT_ITEM_DAMAGE = "Damage"; public static final String NBT_ITEM_DAMAGE = "Damage";
public static final String NBT_ITEM_NBT = "NBT"; public static final String NBT_ITEM_NBT = "NBT";
public static final String NBT_CAPS = "Caps";
private NBTTagCompound tag; private NBTTagCompound tag;
private int capacity; private int capacity;

View File

@@ -11,12 +11,17 @@ import net.minecraftforge.items.IItemHandler;
import refinedstorage.RefinedStorage; import refinedstorage.RefinedStorage;
import refinedstorage.RefinedStorageItems; import refinedstorage.RefinedStorageItems;
import refinedstorage.RefinedStorageUtils; import refinedstorage.RefinedStorageUtils;
import refinedstorage.api.RefinedStorageCapabilities;
import refinedstorage.api.storage.IStorageProvider;
import refinedstorage.block.EnumStorageType; import refinedstorage.block.EnumStorageType;
import refinedstorage.container.ContainerDiskDrive; import refinedstorage.container.ContainerDiskDrive;
import refinedstorage.inventory.BasicItemHandler; import refinedstorage.inventory.BasicItemHandler;
import refinedstorage.inventory.BasicItemValidator; import refinedstorage.inventory.BasicItemValidator;
import refinedstorage.network.MessagePriorityUpdate; 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.ICompareConfig;
import refinedstorage.tile.config.IModeConfig; import refinedstorage.tile.config.IModeConfig;
import refinedstorage.tile.config.IRedstoneModeConfig; import refinedstorage.tile.config.IRedstoneModeConfig;
@@ -257,6 +262,8 @@ public class TileDiskDrive extends TileMachine implements IStorageProvider, ISto
public <T> T getCapability(Capability<T> capability, EnumFacing facing) { public <T> T getCapability(Capability<T> capability, EnumFacing facing) {
if (capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY) { if (capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY) {
return (T) disks; return (T) disks;
} else if (capability == RefinedStorageCapabilities.STORAGE_PROVIDER_CAPABILITY) {
return (T) this;
} }
return super.getCapability(capability, facing); return super.getCapability(capability, facing);
@@ -264,6 +271,6 @@ public class TileDiskDrive extends TileMachine implements IStorageProvider, ISto
@Override @Override
public boolean hasCapability(Capability<?> capability, EnumFacing facing) { 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);
} }
} }

View File

@@ -4,17 +4,20 @@ import io.netty.buffer.ByteBuf;
import net.minecraft.inventory.Container; import net.minecraft.inventory.Container;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound; 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.IItemHandler;
import net.minecraftforge.items.ItemHandlerHelper; import net.minecraftforge.items.ItemHandlerHelper;
import powercrystals.minefactoryreloaded.api.IDeepStorageUnit; import powercrystals.minefactoryreloaded.api.IDeepStorageUnit;
import refinedstorage.RefinedStorage; import refinedstorage.RefinedStorage;
import refinedstorage.RefinedStorageUtils; import refinedstorage.RefinedStorageUtils;
import refinedstorage.api.RefinedStorageCapabilities;
import refinedstorage.api.storage.IStorageProvider;
import refinedstorage.container.ContainerStorage; import refinedstorage.container.ContainerStorage;
import refinedstorage.inventory.BasicItemHandler; import refinedstorage.inventory.BasicItemHandler;
import refinedstorage.network.MessagePriorityUpdate; import refinedstorage.network.MessagePriorityUpdate;
import refinedstorage.storage.IStorage; import refinedstorage.storage.IStorage;
import refinedstorage.storage.IStorageGui; import refinedstorage.storage.IStorageGui;
import refinedstorage.storage.IStorageProvider;
import refinedstorage.tile.config.*; import refinedstorage.tile.config.*;
import java.util.List; import java.util.List;
@@ -323,4 +326,18 @@ public class TileExternalStorage extends TileMachine implements IStorageProvider
public IItemHandler getFilters() { public IItemHandler getFilters() {
return filters; return filters;
} }
@Override
public <T> T getCapability(Capability<T> 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);
}
} }

View File

@@ -3,16 +3,23 @@ package refinedstorage.tile;
import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBuf;
import net.minecraft.inventory.Container; import net.minecraft.inventory.Container;
import net.minecraft.nbt.NBTTagCompound; 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.IItemHandler;
import refinedstorage.RefinedStorage; import refinedstorage.RefinedStorage;
import refinedstorage.RefinedStorageBlocks; import refinedstorage.RefinedStorageBlocks;
import refinedstorage.RefinedStorageUtils; import refinedstorage.RefinedStorageUtils;
import refinedstorage.api.RefinedStorageCapabilities;
import refinedstorage.api.storage.IStorageProvider;
import refinedstorage.block.BlockStorage; import refinedstorage.block.BlockStorage;
import refinedstorage.block.EnumStorageType; import refinedstorage.block.EnumStorageType;
import refinedstorage.container.ContainerStorage; import refinedstorage.container.ContainerStorage;
import refinedstorage.inventory.BasicItemHandler; import refinedstorage.inventory.BasicItemHandler;
import refinedstorage.network.MessagePriorityUpdate; 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.ICompareConfig;
import refinedstorage.tile.config.IModeConfig; import refinedstorage.tile.config.IModeConfig;
import refinedstorage.tile.config.IRedstoneModeConfig; import refinedstorage.tile.config.IRedstoneModeConfig;
@@ -217,4 +224,18 @@ public class TileStorage extends TileMachine implements IStorageProvider, IStora
public int getCapacity() { public int getCapacity() {
return getType().getCapacity(); return getType().getCapacity();
} }
@Override
public <T> T getCapability(Capability<T> 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);
}
} }

View File

@@ -16,6 +16,7 @@ import net.minecraftforge.fml.common.network.ByteBufUtils;
import refinedstorage.RefinedStorage; import refinedstorage.RefinedStorage;
import refinedstorage.RefinedStorageBlocks; import refinedstorage.RefinedStorageBlocks;
import refinedstorage.RefinedStorageUtils; import refinedstorage.RefinedStorageUtils;
import refinedstorage.api.RefinedStorageCapabilities;
import refinedstorage.autocrafting.CraftingPattern; import refinedstorage.autocrafting.CraftingPattern;
import refinedstorage.autocrafting.task.BasicCraftingTask; import refinedstorage.autocrafting.task.BasicCraftingTask;
import refinedstorage.autocrafting.task.ICraftingTask; import refinedstorage.autocrafting.task.ICraftingTask;
@@ -27,7 +28,6 @@ import refinedstorage.container.ContainerGrid;
import refinedstorage.item.ItemPattern; import refinedstorage.item.ItemPattern;
import refinedstorage.network.MessageGridItems; import refinedstorage.network.MessageGridItems;
import refinedstorage.storage.IStorage; import refinedstorage.storage.IStorage;
import refinedstorage.storage.IStorageProvider;
import refinedstorage.tile.*; import refinedstorage.tile.*;
import refinedstorage.tile.config.IRedstoneModeConfig; import refinedstorage.tile.config.IRedstoneModeConfig;
import refinedstorage.tile.config.RedstoneMode; import refinedstorage.tile.config.RedstoneMode;
@@ -259,8 +259,8 @@ public class TileController extends TileBase implements IEnergyReceiver, ISynchr
this.wirelessGridRange += ((TileWirelessTransmitter) machine).getRange(); this.wirelessGridRange += ((TileWirelessTransmitter) machine).getRange();
} }
if (machine instanceof IStorageProvider) { if (machine.hasCapability(RefinedStorageCapabilities.STORAGE_PROVIDER_CAPABILITY, EnumFacing.DOWN)) {
((IStorageProvider) machine).provide(storages); machine.getCapability(RefinedStorageCapabilities.STORAGE_PROVIDER_CAPABILITY, EnumFacing.DOWN).provide(storages);
} }
if (machine instanceof TileCrafter) { if (machine instanceof TileCrafter) {