diff --git a/src/api/java/appeng/api/implementations/items/IStorageCell.java b/src/api/java/appeng/api/implementations/items/IStorageCell.java index 4e50a179b..d85e34a8d 100644 --- a/src/api/java/appeng/api/implementations/items/IStorageCell.java +++ b/src/api/java/appeng/api/implementations/items/IStorageCell.java @@ -24,6 +24,8 @@ package appeng.api.implementations.items; +import javax.annotation.Nonnull; + import net.minecraft.item.ItemStack; import appeng.api.storage.ICellWorkbenchItem; @@ -52,7 +54,7 @@ public interface IStorageCell> extends ICellWorkbenchItem * * @return number of bytes */ - int getBytes( ItemStack cellItem ); + int getBytes( @Nonnull ItemStack cellItem ); /** * Determines the number of bytes used for any type included on the cell. @@ -61,7 +63,7 @@ public interface IStorageCell> extends ICellWorkbenchItem * * @return number of bytes */ - int getBytesPerType( ItemStack cellItem ); + int getBytesPerType( @Nonnull ItemStack cellItem ); /** * Must be between 1 and 63, indicates how many types you want to store on @@ -71,7 +73,7 @@ public interface IStorageCell> extends ICellWorkbenchItem * * @return number of types */ - int getTotalTypes( ItemStack cellItem ); + int getTotalTypes( @Nonnull ItemStack cellItem ); /** * Allows you to fine tune which items are allowed on a given cell, if you @@ -83,7 +85,7 @@ public interface IStorageCell> extends ICellWorkbenchItem * * @return true to preventAdditionOfItem */ - boolean isBlackListed( ItemStack cellItem, T requestedAddition ); + boolean isBlackListed( @Nonnull ItemStack cellItem, @Nonnull T requestedAddition ); /** * Allows you to specify if this storage cell can be stored inside other @@ -104,7 +106,7 @@ public interface IStorageCell> extends ICellWorkbenchItem * * @return if the ItemStack should behavior as a storage cell. */ - boolean isStorageCell( ItemStack i ); + boolean isStorageCell( @Nonnull ItemStack i ); /** * @return drain in ae/t this storage cell will use. @@ -114,5 +116,6 @@ public interface IStorageCell> extends ICellWorkbenchItem /** * @return the type of channel your cell should be part of */ + @Nonnull IStorageChannel getChannel(); } diff --git a/src/main/java/appeng/me/storage/BasicCellInventory.java b/src/main/java/appeng/me/storage/BasicCellInventory.java index 8ba08f5a8..e7ed348e6 100644 --- a/src/main/java/appeng/me/storage/BasicCellInventory.java +++ b/src/main/java/appeng/me/storage/BasicCellInventory.java @@ -64,52 +64,44 @@ public class BasicCellInventory> extends AbstractCellInven } } - public static > boolean isCellOfType( final ItemStack input, IStorageChannel channel ) + public static > boolean isCellOfType( final ItemStack input, IStorageChannel channel ) { - if( input == null ) - { - return false; - } + final IStorageCell type = getStorageCell( input ); - final Item type = input.getItem(); - if( type instanceof IStorageCell ) - { - return ( (IStorageCell) type ).getChannel() == channel; - } - - return false; + return type != null && type.getChannel() == channel; } public static boolean isCell( final ItemStack input ) { - if( input == null ) - { - return false; - } + return getStorageCell( input ) != null; + } - try + private boolean isStorageCell( final T input ) + { + if( input instanceof IAEItemStack ) { - final Item type = input.getItem(); - if( type instanceof IStorageCell ) - { - return !( (IStorageCell) type ).storableInStorageCell(); - } - } - catch( final Throwable err ) - { - return true; + final IAEItemStack stack = (IAEItemStack) input; + final IStorageCell type = getStorageCell( stack.getDefinition() ); + + return type != null && !type.storableInStorageCell(); } return false; } - private boolean isStorageCell( final T input ) + private static IStorageCell getStorageCell( final ItemStack input ) { - if( !input.isItem() ) + if( input != null ) { - return false; + final Item type = input.getItem(); + + if( type instanceof IStorageCell ) + { + return (IStorageCell) type; + } } - return isCell( ( (IAEItemStack) input ).getDefinition() ); + + return null; } @SuppressWarnings( { "rawtypes", "unchecked" } )