diff --git a/block/misc/BlockInscriber.java b/block/misc/BlockInscriber.java index 54758f416..caca7a6c7 100644 --- a/block/misc/BlockInscriber.java +++ b/block/misc/BlockInscriber.java @@ -5,10 +5,14 @@ import java.util.EnumSet; import net.minecraft.block.material.Material; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; import appeng.block.AEBaseBlock; +import appeng.client.render.BaseBlockRender; +import appeng.client.render.blocks.RenderBlockInscriber; import appeng.core.features.AEFeature; +import appeng.core.sync.GuiBridge; import appeng.tile.misc.TileInscriber; -import appeng.tile.misc.TileInterface; +import appeng.util.Platform; public class BlockInscriber extends AEBaseBlock { @@ -17,6 +21,14 @@ public class BlockInscriber extends AEBaseBlock super( BlockInscriber.class, Material.iron ); setfeature( EnumSet.of( AEFeature.Inscriber ) ); setTileEntiy( TileInscriber.class ); + setLightOpacity( 2 ); + isFullSize = isOpaque = false; + } + + @Override + protected Class getRenderer() + { + return RenderBlockInscriber.class; } @Override @@ -25,11 +37,11 @@ public class BlockInscriber extends AEBaseBlock if ( p.isSneaking() ) return false; - TileInterface tg = getTileEntity( w, x, y, z ); + TileInscriber tg = getTileEntity( w, x, y, z ); if ( tg != null ) { - // if ( Platform.isServer() ) - // Platform.openGUI( p, tg, ForgeDirection.getOrientation( side ), GuiBridge.GUI_INSCRIBER ); + if ( Platform.isServer() ) + Platform.openGUI( p, tg, ForgeDirection.getOrientation( side ), GuiBridge.GUI_INSCRIBER ); return true; } return false; diff --git a/client/gui/implementations/GuiInscriber.java b/client/gui/implementations/GuiInscriber.java new file mode 100644 index 000000000..2b75a28ad --- /dev/null +++ b/client/gui/implementations/GuiInscriber.java @@ -0,0 +1,31 @@ +package appeng.client.gui.implementations; + +import net.minecraft.entity.player.InventoryPlayer; +import appeng.client.gui.AEBaseGui; +import appeng.container.implementations.ContainerInscriber; +import appeng.core.localization.GuiText; +import appeng.tile.misc.TileInscriber; + +public class GuiInscriber extends AEBaseGui +{ + + public GuiInscriber(InventoryPlayer inventoryPlayer, TileInscriber te) { + super( new ContainerInscriber( inventoryPlayer, te ) ); + this.ySize = 176; + } + + @Override + public void drawBG(int offsetX, int offsetY, int mouseX, int mouseY) + { + bindTexture( "guis/inscriber.png" ); + this.drawTexturedModalRect( offsetX, offsetY, 0, 0, xSize, ySize ); + } + + @Override + public void drawFG(int offsetX, int offsetY, int mouseX, int mouseY) + { + fontRendererObj.drawString( GuiText.Inscriber.getLocal(), 8, 6, 4210752 ); + fontRendererObj.drawString( GuiText.inventory.getLocal(), 8, ySize - 96 + 3, 4210752 ); + } + +} diff --git a/client/render/blocks/RenderBlockInscriber.java b/client/render/blocks/RenderBlockInscriber.java new file mode 100644 index 000000000..e2b16e9d3 --- /dev/null +++ b/client/render/blocks/RenderBlockInscriber.java @@ -0,0 +1,158 @@ +package appeng.client.render.blocks; + +import java.util.EnumSet; + +import net.minecraft.block.Block; +import net.minecraft.client.renderer.OpenGlHelper; +import net.minecraft.client.renderer.RenderBlocks; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.inventory.IInventory; +import net.minecraft.item.ItemStack; +import net.minecraft.world.IBlockAccess; +import net.minecraftforge.client.IItemRenderer.ItemRenderType; +import net.minecraftforge.common.util.ForgeDirection; + +import org.lwjgl.opengl.GL11; +import org.lwjgl.opengl.GL12; + +import appeng.api.util.IOrientable; +import appeng.block.AEBaseBlock; +import appeng.block.misc.BlockInscriber; +import appeng.client.render.BaseBlockRender; +import appeng.client.texture.ExtraTextures; +import appeng.core.AELog; +import appeng.tile.AEBaseTile; +import appeng.util.Platform; + +public class RenderBlockInscriber extends BaseBlockRender +{ + + public RenderBlockInscriber() { + super( true, 30 ); + } + + @Override + public void renderInventory(AEBaseBlock blk, ItemStack is, RenderBlocks renderer, ItemRenderType type, Object[] obj) + { + Tessellator tess = Tessellator.instance; + + renderer.renderAllFaces = true; + setInvRenderBounds( renderer, 6, 1, 0, 10, 15, 2 ); + renderInvBlock( EnumSet.allOf( ForgeDirection.class ), blk, is, tess, 0xffffff, renderer ); + + blk.getRendererInstance().setTemporaryRenderIcons( ExtraTextures.BlockChargerInside.getIcon(), null, null, null, null, null ); + + setInvRenderBounds( renderer, 2, 0, 2, 14, 3, 14 ); + // renderInvBlock( EnumSet.allOf( ForgeDirection.class ), blk, is, tess, 0xffffff, renderer ); + + setInvRenderBounds( renderer, 3, 3, 3, 13, 4, 13 ); + // renderInvBlock( EnumSet.allOf( ForgeDirection.class ), blk, is, tess, 0xffffff, renderer ); + + blk.getRendererInstance().setTemporaryRenderIcon( null ); + + blk.getRendererInstance().setTemporaryRenderIcons( null, ExtraTextures.BlockChargerInside.getIcon(), null, null, null, null ); + + setInvRenderBounds( renderer, 2, 13, 2, 14, 16, 14 ); + // renderInvBlock( EnumSet.allOf( ForgeDirection.class ), blk, is, tess, 0xffffff, renderer ); + + setInvRenderBounds( renderer, 3, 12, 3, 13, 13, 13 ); + // renderInvBlock( EnumSet.allOf( ForgeDirection.class ), blk, is, tess, 0xffffff, renderer ); + + renderer.renderAllFaces = false; + // blk.getRendererInstance().setTemporaryRenderIcon( null ); + + } + + @Override + public boolean renderInWorld(AEBaseBlock block, IBlockAccess world, int x, int y, int z, RenderBlocks renderer) + { + preRenderInWorld( block, world, x, y, z, renderer ); + + BlockInscriber blk = (BlockInscriber) block; + + IOrientable te = getOrientable( block, world, x, y, z ); + + ForgeDirection fdy = te.getUp(); + ForgeDirection fdz = te.getForward(); + ForgeDirection fdx = Platform.crossProduct( fdz, fdy ).getOpposite(); + + renderer.renderAllFaces = true; + renderBlockBounds( renderer, 6, 1, 0, 10, 15, 2, fdx, fdy, fdz ); + boolean out = renderer.renderStandardBlock( blk, x, y, z ); + + blk.getRendererInstance().setTemporaryRenderIcons( ExtraTextures.BlockChargerInside.getIcon(), null, null, null, null, null ); + + renderBlockBounds( renderer, 2, 0, 2, 14, 3, 14, fdx, fdy, fdz ); + // out = renderer.renderStandardBlock( blk, x, y, z ); + + renderBlockBounds( renderer, 3, 3, 3, 13, 4, 13, fdx, fdy, fdz ); + // out = renderer.renderStandardBlock( blk, x, y, z ); + + blk.getRendererInstance().setTemporaryRenderIcon( null ); + + blk.getRendererInstance().setTemporaryRenderIcons( null, ExtraTextures.BlockChargerInside.getIcon(), null, null, null, null ); + + renderBlockBounds( renderer, 2, 13, 2, 14, 16, 14, fdx, fdy, fdz ); + // out = renderer.renderStandardBlock( blk, x, y, z ); + + renderBlockBounds( renderer, 3, 12, 3, 13, 13, 13, fdx, fdy, fdz ); + // out = renderer.renderStandardBlock( blk, x, y, z ); + + renderer.renderAllFaces = false; + blk.getRendererInstance().setTemporaryRenderIcon( null ); + + postRenderInWorld( renderer ); + return out; + } + + @Override + public void renderTile(AEBaseBlock block, AEBaseTile tile, Tessellator tess, double x, double y, double z, float f, RenderBlocks renderer) + { + ItemStack sis = null; + if ( tile instanceof IInventory ) + sis = ((IInventory) tile).getStackInSlot( 0 ); + + if ( sis != null ) + { + applyTESRRotation( x, y, z, tile.getForward(), tile.getUp() ); + + GL11.glPushMatrix(); + + try + { + GL11.glTranslatef( 0.5f, 0.45f, 0.5f ); + GL11.glScalef( 1.0f / 1.1f, 1.0f / 1.1f, 1.0f / 1.1f ); + GL11.glScalef( 1.0f, 1.0f, 1.0f ); + + Block blk = Block.getBlockFromItem( sis.getItem() ); + if ( sis.getItemSpriteNumber() == 0 && block != null && RenderBlocks.renderItemIn3d( blk.getRenderType() ) ) + { + GL11.glRotatef( 25.0f, 1.0f, 0.0f, 0.0f ); + GL11.glRotatef( 15.0f, 0.0f, 1.0f, 0.0f ); + GL11.glRotatef( 30.0f, 0.0f, 1.0f, 0.0f ); + } + + int light = tile.getWorldObj().getLightBrightnessForSkyBlocks( tile.xCoord, tile.yCoord, tile.zCoord, 0 ); + int br = light;// << 20 | light << 4; + int var11 = br % 65536; + int var12 = br / 65536; + OpenGlHelper.setLightmapTextureCoords( OpenGlHelper.lightmapTexUnit, var11, var12 ); + + GL11.glColor4f( 1.0F, 1.0F, 1.0F, 1.0F ); + + GL11.glDisable( GL11.GL_LIGHTING ); + GL11.glDisable( GL12.GL_RESCALE_NORMAL ); + tess.setColorOpaque_F( 1.0f, 1.0f, 1.0f ); + + doRenderItem( sis, tile ); + } + catch (Exception err) + { + AELog.error( err ); + } + + GL11.glPopMatrix(); + } + } + +} diff --git a/container/implementations/ContainerInscriber.java b/container/implementations/ContainerInscriber.java new file mode 100644 index 000000000..0f9298a28 --- /dev/null +++ b/container/implementations/ContainerInscriber.java @@ -0,0 +1,19 @@ +package appeng.container.implementations; + +import net.minecraft.entity.player.InventoryPlayer; +import appeng.container.AEBaseContainer; +import appeng.tile.misc.TileInscriber; + +public class ContainerInscriber extends AEBaseContainer +{ + + TileInscriber myte; + + public ContainerInscriber(InventoryPlayer ip, TileInscriber te) { + super( ip, te, null ); + myte = te; + + bindPlayerInventory( ip, 0, 176 - /* height of playerinventory */82 ); + } + +} diff --git a/core/Registration.java b/core/Registration.java index ca96efca2..0771f89dd 100644 --- a/core/Registration.java +++ b/core/Registration.java @@ -34,6 +34,7 @@ import appeng.block.grindstone.BlockGrinder; import appeng.block.misc.BlockCellWorkbench; import appeng.block.misc.BlockCharger; import appeng.block.misc.BlockCondenser; +import appeng.block.misc.BlockInscriber; import appeng.block.misc.BlockInterface; import appeng.block.misc.BlockQuartzGrowthAccelerator; import appeng.block.misc.BlockQuartzTorch; @@ -276,22 +277,10 @@ public class Registration blocks.blockGrindStone = addFeature( BlockGrinder.class ); blocks.blockCrankHandle = addFeature( BlockCrank.class ); - // blocks.blockInscriber = addFeature( BlockInscriber.class ); + blocks.blockInscriber = addFeature( BlockInscriber.class ); blocks.blockWireless = addFeature( BlockWireless.class ); blocks.blockTinyTNT = addFeature( BlockTinyTNT.class ); - // blocks.blockQuartzCrystalizer = addFeature( - // BlockQuartzCrystalizer.class ); - // blocks.blockNetworkEmitter = addFeature( BlockNetworkEmitter.class ); - - // blocks.blockPatternProvider = addFeature( BlockPatternProvider.class - // ); - // blocks.blockAssemblerFieldWall = addFeature( - // BlockContainmentWall.class ); - // blocks.blockHeatVent = addFeature( BlockHeatVent.class ); - // blocks.blockCraftingCPU = addFeature( BlockCraftingAccelerator.class - // ); - blocks.blockQuantumRing = addFeature( BlockQuantumRing.class ); blocks.blockQuantumLink = addFeature( BlockQuantumLinkChamber.class ); @@ -314,9 +303,6 @@ public class Registration blocks.blockSecurity = addFeature( BlockSecurity.class ); - // items.itemEncodedAsemblerPattern = addFeature( - // ItemEncodedPattern.class ); - items.itemCellCreative = addFeature( ItemCreativeStorageCell.class ); items.itemViewCell = addFeature( ItemViewCell.class ); diff --git a/core/sync/GuiBridge.java b/core/sync/GuiBridge.java index 4c8965404..5d2eb4534 100644 --- a/core/sync/GuiBridge.java +++ b/core/sync/GuiBridge.java @@ -36,6 +36,7 @@ import appeng.container.implementations.ContainerDrive; import appeng.container.implementations.ContainerFormationPlane; import appeng.container.implementations.ContainerGrinder; import appeng.container.implementations.ContainerIOPort; +import appeng.container.implementations.ContainerInscriber; import appeng.container.implementations.ContainerInterface; import appeng.container.implementations.ContainerLevelEmitter; import appeng.container.implementations.ContainerMEMonitorable; @@ -65,6 +66,7 @@ import appeng.server.AccessType; import appeng.tile.grindstone.TileGrinder; import appeng.tile.misc.TileCellWorkbench; import appeng.tile.misc.TileCondenser; +import appeng.tile.misc.TileInscriber; import appeng.tile.misc.TileSecurity; import appeng.tile.misc.TileVibrationChamber; import appeng.tile.networking.TileWireless; @@ -131,7 +133,7 @@ public enum GuiBridge implements IGuiHandler GUI_SPATIALIOPORT(ContainerSpatialIOPort.class, TileSpatialIOPort.class, false, SecurityPermissions.BUILD), - // GUI_INSCRIBER + GUI_INSCRIBER(ContainerInscriber.class, TileInscriber.class, false, null), GUI_CELLWORKBENCH(ContainerCellWorkbench.class, TileCellWorkbench.class, false, null); diff --git a/tile/misc/TileInscriber.java b/tile/misc/TileInscriber.java index c047ce8dd..b20c6e68f 100644 --- a/tile/misc/TileInscriber.java +++ b/tile/misc/TileInscriber.java @@ -7,19 +7,26 @@ import java.util.EnumSet; import net.minecraft.inventory.IInventory; import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; import net.minecraftforge.common.util.ForgeDirection; import appeng.api.util.AECableType; +import appeng.recipes.handlers.Inscriber; import appeng.tile.events.AETileEventHandler; import appeng.tile.events.TileEventType; import appeng.tile.grid.AENetworkPowerTile; import appeng.tile.inventory.AppEngInternalInventory; import appeng.tile.inventory.InvOperation; +import appeng.util.Platform; +import appeng.util.item.AEItemStack; public class TileInscriber extends AENetworkPowerTile { - final int sides[] = new int[] { 0, 1 }; - AppEngInternalInventory inv = new AppEngInternalInventory( this, 2 ); + final int top[] = new int[] { 0 }; + final int bottom[] = new int[] { 1 }; + final int sides[] = new int[] { 2, 3 }; + + AppEngInternalInventory inv = new AppEngInternalInventory( this, 4 ); int processingTime = 0; @Override @@ -32,12 +39,33 @@ public class TileInscriber extends AENetworkPowerTile { public TileInscriberHandler() { - super( TileEventType.TICK, TileEventType.NETWORK ); + super( TileEventType.TICK, TileEventType.WORLD_NBT, TileEventType.NETWORK ); + } + + @Override + public void writeToNBT(NBTTagCompound data) + { + inv.writeToNBT( data, "inscriberInv" ); + } + + @Override + public void readFromNBT(NBTTagCompound data) + { + inv.readFromNBT( data, "inscriberInv" ); } @Override public boolean readFromStream(ByteBuf data) throws IOException { + int slot = data.readByte(); + + for (int num = 0; num < inv.getSizeInventory(); num++) + { + if ( (slot | (1 << num)) > 0 ) + inv.setInventorySlotContents( num, AEItemStack.loadItemStackFromPacket( data ).getItemStack() ); + else + inv.setInventorySlotContents( num, null ); + } return false; } @@ -45,7 +73,22 @@ public class TileInscriber extends AENetworkPowerTile @Override public void writeToStream(ByteBuf data) throws IOException { + int slot = 0; + for (int num = 0; num < inv.getSizeInventory(); num++) + { + if ( inv.getStackInSlot( num ) != null ) + slot = slot | (1 << num); + } + + for (int num = 0; num < inv.getSizeInventory(); num++) + { + if ( (slot | (1 << num)) > 0 ) + { + AEItemStack st = AEItemStack.create( inv.getStackInSlot( num ) ); + st.writeToPacket( data ); + } + } } @Override @@ -80,6 +123,14 @@ public class TileInscriber extends AENetworkPowerTile @Override public int[] getAccessibleSlotsFromSide(int side) { + ForgeDirection d = ForgeDirection.getOrientation( side ); + + if ( d == ForgeDirection.UP ) + return top; + + if ( d == ForgeDirection.DOWN ) + return bottom; + return sides; } @@ -92,13 +143,27 @@ public class TileInscriber extends AENetworkPowerTile @Override public boolean isItemValidForSlot(int i, ItemStack itemstack) { - return i == 0; + if ( i == 0 || i == 1 ) + { + for (ItemStack s : Inscriber.plates) + if ( Platform.isSameItemPrecise( s, itemstack ) ) + return true; + } + + if ( i == 2 ) + { + for (ItemStack s : Inscriber.inputs) + if ( Platform.isSameItemPrecise( s, itemstack ) ) + return true; + } + + return false; } @Override public boolean canExtractItem(int i, ItemStack itemstack, int j) { - return i == 1; + return i == 0 || i == 1 || i == 3; } @Override