package com.jaquadro.minecraft.storagedrawers.block.tile;
import com.jaquadro.minecraft.storagedrawers.StorageDrawers;
import com.jaquadro.minecraft.storagedrawers.api.storage.EnumBasicDrawer;
import com.jaquadro.minecraft.storagedrawers.api.storage.IDrawer;
import com.jaquadro.minecraft.storagedrawers.api.storage.attribute.LockAttribute;
import com.jaquadro.minecraft.storagedrawers.block.BlockStandardDrawers;
import com.jaquadro.minecraft.storagedrawers.config.ConfigManager;
import com.jaquadro.minecraft.storagedrawers.inventory.ContainerDrawers1;
import com.jaquadro.minecraft.storagedrawers.inventory.ContainerDrawers2;
import com.jaquadro.minecraft.storagedrawers.inventory.ContainerDrawers4;
import com.jaquadro.minecraft.storagedrawers.storage.*;
import com.jaquadro.minecraft.storagedrawers.storage.IStorageProvider;
import net.minecraft.block.state.IBlockState;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.inventory.Container;
public class TileEntityDrawersStandard extends TileEntityDrawers
{
private static final String[] GUI_IDS = new String[] {
null, StorageDrawers.MOD_ID + ":basicDrawers1", StorageDrawers.MOD_ID + ":basicDrawers2", null, StorageDrawers.MOD_ID + ":basicDrawers4"
};
private IStorageProvider storageProvider = new StandardStorageProvider();
private int capacity = 0;
public TileEntityDrawersStandard () {
super(1);
}
public TileEntityDrawersStandard (int count) {
super(count);
}
public void setDrawerCount (int count) {
initWithDrawerCount(count);
}
protected IStorageProvider getStorageProvider () {
if (storageProvider == null)
storageProvider = new StandardStorageProvider();
return storageProvider;
}
@Override
protected IDrawer createDrawer (int slot) {
return new DrawerData(getStorageProvider(), slot);
}
@Override
public Container createContainer (InventoryPlayer playerInventory, EntityPlayer playerIn) {
switch (getDrawerCount()) {
case 1:
return new ContainerDrawers1(playerInventory, this);
case 2:
return new ContainerDrawers2(playerInventory, this);
case 4:
return new ContainerDrawers4(playerInventory, this);
default:
return null;
}
}
@Override
public String getGuiID () {
return GUI_IDS[getDrawerCount()];
}
@Override
public int getDrawerCapacity () {
if (world == null || world.isRemote)
return super.getDrawerCapacity();
if (capacity == 0) {
IBlockState blockState = world.getBlockState(this.pos);
if (!blockState.getPropertyKeys().contains(BlockStandardDrawers.BLOCK))
return 1;
EnumBasicDrawer type = blockState.getValue(BlockStandardDrawers.BLOCK);
ConfigManager config = StorageDrawers.config;
switch (type) {
case FULL1:
capacity = config.getBlockBaseStorage("fulldrawers1");
break;
case FULL2:
capacity = config.getBlockBaseStorage("fulldrawers2");
break;
case FULL4:
capacity = config.getBlockBaseStorage("fulldrawers4");
break;
case HALF2:
capacity = config.getBlockBaseStorage("halfdrawers2");
break;
case HALF4:
capacity = config.getBlockBaseStorage("halfdrawers4");
break;
default:
capacity = 1;
}
if (capacity <= 0)
capacity = 1;
attributeChanged();
}
return capacity;
}
private class StandardStorageProvider extends DefaultStorageProvider
{
public StandardStorageProvider () {
super(TileEntityDrawersStandard.this, TileEntityDrawersStandard.this);
}
@Override
public int getSlotStackCapacity (int slot) {
ConfigManager config = StorageDrawers.config;
return getEffectiveStorageMultiplier() * getEffectiveDrawerCapacity();
}
@Override
public boolean isLocked (int slot, LockAttribute attr) {
return TileEntityDrawersStandard.this.isItemLocked(attr);
}
@Override
public boolean isVoid (int slot) {
return TileEntityDrawersStandard.this.isVoid();
}
@Override
public boolean isShrouded (int slot) {
return TileEntityDrawersStandard.this.isShrouded();
}
@Override
public boolean setIsShrouded (int slot, boolean state) {
TileEntityDrawersStandard.this.setIsShrouded(state);
return true;
}
@Override
public boolean isShowingQuantity (int slot) {
return TileEntityDrawersStandard.this.isShowingQuantity();
}
@Override
public boolean setIsShowingQuantity (int slot, boolean state) {
return TileEntityDrawersStandard.this.setIsShowingQuantity(state);
}
@Override
public boolean isStorageUnlimited (int slot) {
return TileEntityDrawersStandard.this.isUnlimited();
}
@Override
public boolean isVendingUnlimited (int slot) {
return TileEntityDrawersStandard.this.isVending();
}
@Override
public boolean isRedstone (int slot) {
return TileEntityDrawersStandard.this.isRedstone();
}
}
}