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 net.minecraft.entity.item.EntityItem; 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.minecraftforge.common.util.ForgeDirection; import net.minecraftforge.oredict.ShapedOreRecipe; import java.util.List; //import emasher.sockets.PacketHandler; public class ModItemDisplay extends SocketModule { public ModItemDisplay( int id ) { super( id, "eng_toolbox:itemDisplay", "eng_toolbox:itemDisplayStack" ); } @Override public String getLocalizedName() { return "Inventory Interface"; } @Override public void getToolTip( List l ) { l.add( "Displays and allows for manual" ); l.add( "interaction with an internal" ); l.add( "inventory" ); } @Override public void getIndicatorKey( List l ) { l.add( emasher.util.Config.PREF_GREEN() + "Inventory to display" ); l.add( emasher.util.Config.PREF_WHITE() + "Toggle stack mode" ); } @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' ), "dyeLime", Character.valueOf( 'r' ), Items.redstone, Character.valueOf( 'b' ), emasher.items.Items.blankSide() ) ); } @Override public boolean hasInventoryIndicator() { return true; } @Override public int getCurrentTexture( SideConfig config, SocketTileAccess ts, ForgeDirection side ) { if( config.meta == 0 ) return 0; return 1; } @Override public void onGenericRemoteSignal( SocketTileAccess ts, SideConfig config, ForgeDirection side ) { if( config.meta == 0 ) config.meta = 1; else config.meta = 0; ts.sendClientSideState( side.ordinal() ); } @Override @SideOnly( Side.CLIENT ) public String getTextToRender( SocketTileAccess ts, SideConfig config, ForgeDirection side ) { if( config.inventory == -1 ) { return null; } if( ts.getStackInInventorySlot( config.inventory ) != null ) { return ts.getStackInInventorySlot( config.inventory ).stackSize + ""; } return null; } @SideOnly( Side.CLIENT ) public ItemStack getItemToRender( SocketTileAccess ts, SideConfig config, ForgeDirection side ) { if( config.inventory != -1 ) return ts.getStackInInventorySlot( config.inventory ); return null; } @Override public void onInventoryChange( SideConfig config, int index, SocketTileAccess ts, ForgeDirection side, boolean add ) { if( index == config.inventory ) { ts.sendClientInventorySlot( index ); } } @Override public void onSideActivated( SocketTileAccess ts, SideConfig config, ForgeDirection side, EntityPlayer player ) { ItemStack is = player.getCurrentEquippedItem(); int added = 0; boolean flag = false; if( config.inventory != -1 ) { if( is != null ) { added = ts.addItemInternal( is, true, config.inventory ); is.stackSize -= added; } ItemStack stack = ts.getStackInInventorySlot( config.inventory ); if( stack != null && is != null ) { flag = !stack.isItemEqual( is ); } else { flag = stack != null; } if( added == 0 && stack != null && flag ) { int xo = ts.xCoord + side.offsetX; int yo = ts.yCoord + side.offsetY; int zo = ts.zCoord + side.offsetZ; int dropped = 0; if( config.meta == 1 ) { dropped = Math.min( stack.stackSize, stack.getMaxStackSize() ); } else { dropped = 1; } ItemStack dropStack = stack.copy(); dropStack.stackSize = dropped; dropItemsOnSide( ts, config, side, xo, yo, zo, dropStack ); ts.extractItemInternal( true, config.inventory, dropped ); } ts.sendClientInventorySlot( config.inventory ); } } public void dropItemsOnSide( SocketTileAccess ts, SideConfig config, ForgeDirection side, int xo, int yo, int zo, ItemStack stack ) { if( !ts.getWorldObj().isRemote ) { float f = 0.7F; double d0 = ( double ) ( ts.getWorldObj().rand.nextFloat() * f ) + ( double ) ( 1.0F - f ) * 0.5D; double d1 = ( double ) ( ts.getWorldObj().rand.nextFloat() * f ) + ( double ) ( 1.0F - f ) * 0.5D; double d2 = ( double ) ( ts.getWorldObj().rand.nextFloat() * f ) + ( double ) ( 1.0F - f ) * 0.5D; EntityItem entityitem = new EntityItem( ts.getWorldObj(), ( double ) xo + d0, ( double ) yo + d1, ( double ) zo + d2, stack ); entityitem.delayBeforeCanPickup = 1; ts.getWorldObj().spawnEntityInWorld( entityitem ); } } @Override public void indicatorUpdated( SocketTileAccess ts, SideConfig config, ForgeDirection side ) { if( config.inventory != -1 ) ts.sendClientInventorySlot( config.inventory ); } }