package emasher.modules;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import emasher.api.SideConfig;
import emasher.api.SocketModule;
import emasher.api.SocketTileAccess;
import emasher.blocks.BlockSocket;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.Blocks;
import net.minecraft.init.Items;
import net.minecraft.item.ItemStack;
import net.minecraft.item.crafting.CraftingManager;
import net.minecraft.util.IIcon;
import net.minecraftforge.common.util.ForgeDirection;
import net.minecraftforge.fluids.Fluid;
import net.minecraftforge.fluids.FluidContainerRegistry;
import net.minecraftforge.fluids.FluidStack;
import net.minecraftforge.oredict.ShapedOreRecipe;
import java.util.List;
public class ModTankDisplay extends SocketModule {
public ModTankDisplay( int id ) {
super( id, "eng_toolbox:tankDisplay", "eng_toolbox:tankOverlay" );
}
public static ItemStack consumeItem( ItemStack stack ) {
if( stack.stackSize == 1 ) {
if( stack.getItem().hasContainerItem( stack ) ) {
return stack.getItem().getContainerItem( stack );
} else {
return null;
}
} else {
stack.splitStack( 1 );
return stack;
}
}
@Override
public String getLocalizedName() {
return "Tank Interface";
}
@Override
public void getToolTip( List l ) {
l.add( "Displays an internal tank" );
l.add( "Allows players to fill and empty fluid" );
l.add( "containersby right clicking" );
}
@Override
public void getIndicatorKey( List l ) {
l.add( emasher.util.Config.PREF_BLUE() + "Tank to display" );
}
@Override
public void addRecipe() {
CraftingManager.getInstance().getRecipeList().add( new ShapedOreRecipe( new ItemStack( emasher.items.Items.module(), 1, moduleID ), "ggg", "slr", " b ", Character.valueOf( 'g' ), Blocks.glass_pane, Character.valueOf( 's' ),
Items.glowstone_dust, Character.valueOf( 'l' ), "dyeBlue", Character.valueOf( 'r' ), Items.redstone, Character.valueOf( 'b' ), emasher.items.Items.blankSide() ) );
}
@Override
public boolean hasTankIndicator() {
return true;
}
@Override
public void onTankChange( SideConfig config, int index, SocketTileAccess ts, ForgeDirection side, boolean add ) {
if( index == config.tank ) {
ts.sendClientTankSlot( index );
}
}
@Override
@SideOnly( Side.CLIENT )
public int getTankToRender( SocketTileAccess ts, SideConfig config, ForgeDirection side ) {
return config.tank;
}
@Override
@SideOnly( Side.CLIENT )
public IIcon[] getAdditionalOverlays( SocketTileAccess ts, SideConfig config, ForgeDirection side ) {
return new IIcon[] {( ( BlockSocket ) emasher.blocks.Blocks.socket() ).textures[moduleID][1]};
}
@Override
@SideOnly( Side.CLIENT )
public boolean flipBottomOverlay() {
return true;
}
@Override
public void onSideActivated( SocketTileAccess ts, SideConfig config, ForgeDirection side, EntityPlayer player ) {
ItemStack is = player.getCurrentEquippedItem();
if( config.tank != -1 && is != null ) {
if( FluidContainerRegistry.isEmptyContainer( is ) ) {
FluidStack fs = ts.getFluidInTank( config.tank );
if( fs != null && fs.amount > 0 ) {
ItemStack fillContainer = is.copy().splitStack( 1 );
FluidStack fillFluid = fs.copy( );
fillFluid.amount = FluidContainerRegistry.getContainerCapacity( fillFluid, fillContainer );
if( fillFluid.amount <= fs.amount ) {
ItemStack result = FluidContainerRegistry.fillFluidContainer( fillFluid, fillContainer );
if( result != null ) {
if( ! player.capabilities.isCreativeMode ) {
ts.drainInternal( config.tank, fillFluid.amount, true );
is.stackSize--;
}
player.inventory.addItemStackToInventory( result );
}
}
}
} else if( FluidContainerRegistry.isFilledContainer( is ) ) {
FluidStack containerStack = FluidContainerRegistry.getFluidForFilledItem( is );
ItemStack drainedContainer = FluidContainerRegistry.drainFluidContainer( is.copy( ) );
if( containerStack != null ) {
if( ts.fillInternal( config.tank, containerStack, false ) == containerStack.amount ) {
if( ! player.capabilities.isCreativeMode ) {
is.stackSize--;
}
ts.fillInternal( config.tank, containerStack, true );
if( drainedContainer != null && ! player.capabilities.isCreativeMode ) {
player.inventory.addItemStackToInventory( drainedContainer );
}
}
}
}
}
}
@Override
public void indicatorUpdated( SocketTileAccess ts, SideConfig config, ForgeDirection side ) {
if( config.tank != -1 ) ts.sendClientTankSlot( config.tank );
}
}