package emasher.modules; import emasher.api.SideConfig; import emasher.api.SocketModule; import emasher.api.SocketTileAccess; import emasher.tileentities.TileShaleResource; import net.minecraft.init.Blocks; import net.minecraft.init.Items; import net.minecraft.item.ItemStack; import net.minecraft.item.crafting.CraftingManager; import net.minecraft.tileentity.TileEntity; import net.minecraftforge.common.util.ForgeDirection; import net.minecraftforge.fluids.FluidRegistry; import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.oredict.ShapedOreRecipe; import java.util.List; public class ModFracker extends SocketModule { public ModFracker( int id ) { super( id, "eng_toolbox:fracker" ); } @Override public String getLocalizedName() { return "Fracker"; } @Override public void getToolTip( List l ) { l.add( "Inputs shale resource fluid into its output tank" ); l.add( "when water or slickwater is pumped into its input tank" ); } @Override public void getIndicatorKey( List l ) { l.add( emasher.util.Config.PREF_BLUE() + "Input tank" ); l.add( emasher.util.Config.PREF_GREEN() + "Output tank" ); l.add( "Must be placed on the bottom of a socket" ); l.add( "Only works if the socket is directly above" ); l.add( "a shale resource block" ); l.add( "Slickwater doubles the output" ); } @Override public void addRecipe() { CraftingManager.getInstance().getRecipeList().add( new ShapedOreRecipe( new ItemStack( emasher.items.Items.module(), 1, moduleID ), "hih", "cdu", " b ", Character.valueOf( 'h' ), Blocks.hopper, Character.valueOf( 'u' ), Items.bucket, Character.valueOf( 'i' ), Items.iron_ingot, Character.valueOf( 'c' ), emasher.items.Items.circuit(), Character.valueOf( 'd' ), Items.diamond, Character.valueOf( 'b' ), emasher.items.Items.blankSide() ) ); CraftingManager.getInstance().getRecipeList().add( new ShapedOreRecipe( new ItemStack( emasher.items.Items.module(), 1, moduleID ), "hih", "cdu", " b ", Character.valueOf( 'h' ), Blocks.hopper, Character.valueOf( 'u' ), Items.bucket, Character.valueOf( 'i' ), "ingotAluminum", Character.valueOf( 'c' ), emasher.items.Items.circuit(), Character.valueOf( 'd' ), Items.diamond, Character.valueOf( 'b' ), emasher.items.Items.blankSide() ) ); CraftingManager.getInstance().getRecipeList().add( new ShapedOreRecipe( new ItemStack( emasher.items.Items.module(), 1, moduleID ), "hih", "cdu", " b ", Character.valueOf( 'h' ), Blocks.hopper, Character.valueOf( 'u' ), Items.bucket, Character.valueOf( 'i' ), "ingotTin", Character.valueOf( 'c' ), emasher.items.Items.circuit(), Character.valueOf( 'd' ), Items.diamond, Character.valueOf( 'b' ), emasher.items.Items.blankSide() ) ); } @Override public boolean hasTankIndicator() { return true; } @Override public boolean hasInventoryIndicator() { return true; } @Override public boolean canBeInstalled( SocketTileAccess ts, ForgeDirection side ) { if( side == ForgeDirection.DOWN ) return true; return false; } @Override public void updateSide( SideConfig config, SocketTileAccess ts, ForgeDirection side ) { config.meta++; if( config.meta >= 10 ) { config.meta = 0; if( config.tank >= 0 && config.tank < 3 && ts.getFluidInTank( config.tank ) != null ) { onTankChange( config, config.tank, ts, side, true ); } } } @Override public void onTankChange( SideConfig config, int index, SocketTileAccess ts, ForgeDirection side, boolean add ) { if( index == config.tank && add && side == ForgeDirection.DOWN && config.inventory >= 0 && config.inventory < 3 ) { FluidStack f = ts.getFluidInTank( index ); if( f.isFluidEqual( new FluidStack( emasher.fluids.Fluids.fluidSlickwater(), 1000 ) ) || f.isFluidEqual( new FluidStack( FluidRegistry.WATER, 1000 ) ) ) { int amntToDraw; boolean sw = false; if( f.isFluidEqual( ( new FluidStack( emasher.fluids.Fluids.fluidSlickwater(), 1000 ) ) ) ) { amntToDraw = 1000; sw = true; } else { amntToDraw = 200; } if( ts.getWorldObj().getBlock( ts.xCoord, ts.yCoord - 1, ts.zCoord ) == emasher.blocks.Blocks.shaleResource() && ts.getWorldObj().getBlockMetadata( ts.xCoord, ts.yCoord - 1, ts.zCoord ) != 2 ) { TileEntity te = ts.getWorldObj().getTileEntity( ts.xCoord, ts.yCoord - 1, ts.zCoord ); if( te != null && te instanceof TileShaleResource ) { TileShaleResource tsr = ( TileShaleResource ) te; FluidStack fs = ts.getFluidInTank( index ); if( fs.amount >= 1000 && ts.fillInternal( config.inventory, tsr.drain( amntToDraw, false ), false ) == amntToDraw ) { ts.drainInternal( index, 1000, true ); FluidStack ext; if( sw ) { ext = tsr.drain( amntToDraw, true ); } else { ext = tsr.drain( amntToDraw * 2, true ); if( ext != null ) ext.amount = Math.min( ext.amount, 200 ); } if( ext != null ) ts.fillInternal( config.inventory, ext, true ); } } } } else if( f.isFluidEqual( new FluidStack( FluidRegistry.LAVA, 1000 ) ) ) { int amntToDraw = 1000; if( ts.getWorldObj().getBlock( ts.xCoord, ts.yCoord - 1, ts.zCoord ) == emasher.blocks.Blocks.shaleResource() && ts.getWorldObj().getBlockMetadata( ts.xCoord, ts.yCoord - 1, ts.zCoord ) == 2 ) { TileEntity te = ts.getWorldObj().getTileEntity( ts.xCoord, ts.yCoord - 1, ts.zCoord ); if( te != null && te instanceof TileShaleResource ) { TileShaleResource tsr = ( TileShaleResource ) te; FluidStack fs = ts.getFluidInTank( index ); if( fs.amount >= 1000 && ts.fillInternal( config.inventory, tsr.drain( amntToDraw, false ), false ) == amntToDraw ) { ts.drainInternal( index, 1000, true ); FluidStack ext; ext = tsr.drain( amntToDraw, true ); if( ext != null ) ts.fillInternal( config.inventory, ext, true ); } } } } } } }