Applied-Energistics-2-tiler.../src/main/java/appeng/container/slot/SlotRestrictedInput.java

239 lines
7 KiB
Java
Raw Normal View History

package appeng.container.slot;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.init.Items;
import net.minecraft.inventory.IInventory;
import net.minecraft.inventory.Slot;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntityFurnace;
import net.minecraft.world.World;
import net.minecraftforge.oredict.OreDictionary;
import appeng.api.AEApi;
import appeng.api.IAppEngApi;
2014-03-25 20:20:51 +01:00
import appeng.api.features.INetworkEncodable;
import appeng.api.implementations.ICraftingPatternItem;
import appeng.api.implementations.items.IBiometricCard;
2014-01-23 20:02:48 +01:00
import appeng.api.implementations.items.ISpatialStorageCell;
import appeng.api.implementations.items.IStorageComponent;
import appeng.api.implementations.items.IUpgradeModule;
import appeng.api.networking.crafting.ICraftingPatternDetails;
2014-01-20 17:41:37 +01:00
import appeng.api.storage.ICellWorkbenchItem;
import appeng.items.misc.ItemEncodedPattern;
import appeng.recipes.handlers.Inscribe;
import appeng.util.Platform;
public class SlotRestrictedInput extends AppEngSlot
{
2014-09-21 02:38:51 +02:00
public enum PlacableItemType
{
STORAGE_CELLS(15), ORE(1 * 16 + 15), STORAGE_COMPONENT(3 * 16 + 15),
ENCODABLE_ITEM(4 * 16 + 15), TRASH(5 * 16 + 15), VALID_ENCODED_PATTERN_W_OUTPUT(7 * 16 + 15), ENCODED_PATTERN_W_OUTPUT(7 * 16 + 15),
ENCODED_CRAFTING_PATTERN(7 * 16 + 15), ENCODED_PATTERN(7 * 16 + 15), PATTERN(8 * 16 + 15), BLANK_PATTERN(8 * 16 + 15), POWERED_TOOL(9 * 16 + 15),
2014-09-21 01:38:58 +02:00
RANGE_BOOSTER(6 * 16 + 15), QE_SINGULARITY(10 * 16 + 15), SPATIAL_STORAGE_CELLS(11 * 16 + 15),
FUEL(12 * 16 + 15), UPGRADES(13 * 16 + 15), WORKBENCH_CELL(15), BIOMETRIC_CARD(14 * 16 + 15), VIEW_CELL(4 * 16 + 14),
INSCRIBER_PLATE(2 * 16 + 14), INSCRIBER_INPUT(3 * 16 + 14), METAL_INGOTS(3 * 16 + 14);
2014-02-09 02:34:52 +01:00
public final int IIcon;
2014-09-21 02:38:51 +02:00
private PlacableItemType(int o) {
2014-02-09 02:34:52 +01:00
IIcon = o;
}
2014-09-28 00:50:06 +02:00
}
@Override
public int getSlotStackLimit()
{
if ( stackLimit != -1 )
return stackLimit;
return super.getSlotStackLimit();
}
public boolean isValid(ItemStack is, World theWorld)
{
2014-09-21 02:38:51 +02:00
if ( which == PlacableItemType.VALID_ENCODED_PATTERN_W_OUTPUT )
{
ICraftingPatternDetails ap = is.getItem() instanceof ICraftingPatternItem ? ((ICraftingPatternItem) is.getItem()).getPatternForItem( is, theWorld )
: null;
2014-04-09 04:56:59 +02:00
if ( ap != null )
return true;
return false;
}
return true;
}
2014-09-21 02:38:51 +02:00
public PlacableItemType which;
public boolean allowEdit = true;
public int stackLimit = -1;
private InventoryPlayer p;
@Override
public boolean canTakeStack(EntityPlayer par1EntityPlayer)
{
return allowEdit;
}
public Slot setStackLimit(int i)
{
stackLimit = i;
return this;
}
public SlotRestrictedInput(PlacableItemType valid, IInventory i, int slotIndex, int x, int y, InventoryPlayer p) {
super( i, slotIndex, x, y );
which = valid;
2014-02-09 02:34:52 +01:00
IIcon = valid.IIcon;
this.p = p;
}
@Override
public ItemStack getDisplayStack()
{
2014-09-21 02:38:51 +02:00
if ( Platform.isClient() && (which == PlacableItemType.ENCODED_PATTERN) )
{
ItemStack is = super.getStack();
if ( is != null && is.getItem() instanceof ItemEncodedPattern )
{
ItemEncodedPattern iep = (ItemEncodedPattern) is.getItem();
ItemStack out = iep.getOutput( is );
if ( out != null )
return out;
}
}
return super.getStack();
}
@Override
public boolean isItemValid(ItemStack i)
{
if ( !myContainer.isValidForSlot( this, i ) )
return false;
if ( i == null )
return false;
if ( i.getItem() == null )
return false;
2014-02-12 06:26:19 +01:00
if ( !inventory.isItemValidForSlot( this.getSlotIndex(), i ) )
2013-12-30 06:52:00 +01:00
return false;
IAppEngApi api = AEApi.instance();
if ( !allowEdit )
return false;
switch (which)
{
case ENCODED_CRAFTING_PATTERN:
if ( i.getItem() instanceof ICraftingPatternItem )
{
ICraftingPatternItem b = (ICraftingPatternItem) i.getItem();
ICraftingPatternDetails de = b.getPatternForItem( i, p.player.worldObj );
if ( de != null )
return de.isCraftable();
}
return false;
2014-09-21 01:38:28 +02:00
case VALID_ENCODED_PATTERN_W_OUTPUT:
case ENCODED_PATTERN_W_OUTPUT:
case ENCODED_PATTERN: {
2014-04-10 06:51:08 +02:00
if ( i.getItem() instanceof ICraftingPatternItem )
return true;
// ICraftingPatternDetails pattern = i.getItem() instanceof ICraftingPatternItem ? ((ICraftingPatternItem)
// i.getItem()).getPatternForItem( i ) : null;
return false;// pattern != null;
}
2014-04-10 06:51:08 +02:00
case BLANK_PATTERN:
return AEApi.instance().materials().materialBlankPattern.sameAsStack( i );
2014-04-08 04:25:41 +02:00
case PATTERN:
2014-04-09 04:56:59 +02:00
if ( i.getItem() instanceof ICraftingPatternItem )
return true;
return AEApi.instance().materials().materialBlankPattern.sameAsStack( i );
case INSCRIBER_PLATE:
if ( AEApi.instance().materials().materialNamePress.sameAsStack( i ) )
return true;
for (ItemStack is : Inscribe.plates)
if ( Platform.isSameItemPrecise( is, i ) )
return true;
return false;
case INSCRIBER_INPUT:
return true;/*
* for (ItemStack is : Inscribe.inputs) if ( Platform.isSameItemPrecise( is, i ) ) return true;
*
* return false;
*/
case METAL_INGOTS:
return isMetalIngot( i );
case VIEW_CELL:
return AEApi.instance().items().itemViewCell.sameAsStack( i );
case ORE:
return appeng.api.AEApi.instance().registries().grinder().getRecipeForInput( i ) != null;
case FUEL:
return TileEntityFurnace.getItemBurnTime( i ) > 0;
case POWERED_TOOL:
return Platform.isChargeable( i );
2014-09-21 01:38:58 +02:00
case QE_SINGULARITY:
return api.materials().materialQESingularity.sameAsStack( i );
case RANGE_BOOSTER:
return api.materials().materialWirelessBooster.sameAsStack( i );
case SPATIAL_STORAGE_CELLS:
return i.getItem() instanceof ISpatialStorageCell && ((ISpatialStorageCell) i.getItem()).isSpatialStorage( i );
case STORAGE_CELLS:
return AEApi.instance().registries().cell().isCellHandled( i );
2014-01-20 17:41:37 +01:00
case WORKBENCH_CELL:
return i != null && i.getItem() instanceof ICellWorkbenchItem && ((ICellWorkbenchItem) i.getItem()).isEditable( i );
case STORAGE_COMPONENT:
boolean isComp = i.getItem() instanceof IStorageComponent && ((IStorageComponent) i.getItem()).isStorageComponent( i );
return isComp;
case TRASH:
if ( AEApi.instance().registries().cell().isCellHandled( i ) )
return false;
if ( i.getItem() instanceof IStorageComponent && ((IStorageComponent) i.getItem()).isStorageComponent( i ) )
return false;
return true;
case ENCODABLE_ITEM:
2014-04-08 04:25:41 +02:00
return i.getItem() instanceof INetworkEncodable || AEApi.instance().registries().wireless().isWirelessTerminal( i );
case BIOMETRIC_CARD:
return i.getItem() instanceof IBiometricCard;
2013-12-30 06:52:00 +01:00
case UPGRADES:
return i.getItem() instanceof IUpgradeModule && ((IUpgradeModule) i.getItem()).getType( i ) != null;
default:
break;
}
return false;
}
static public boolean isMetalIngot(ItemStack i)
{
if ( Platform.isSameItemPrecise( i, new ItemStack( Items.iron_ingot ) ) )
return true;
for (String name : new String[] { "Copper", "Tin", "Obsidian", "Iron", "Lead", "Bronze", "Brass", "Nickel", "Aluminium" })
{
for (ItemStack ingot : OreDictionary.getOres( "ingot" + name ))
{
if ( Platform.isSameItemPrecise( i, ingot ) )
return true;
}
}
return false;
}
}