Jump to content

itsonlydan

Members
  • Posts

    8
  • Joined

  • Last visited

Converted

  • Gender
    Undisclosed

itsonlydan's Achievements

Tree Puncher

Tree Puncher (2/8)

0

Reputation

  1. Thank you! That was a stupid oversight on my part. I've got it working now. That wasn't the only step to fixing this, so just in case anyone in the future is having trouble doing a similar thing, my rendering code now looks like this: @Override public void renderTileEntityAt(TileEntity tileEntity, double d0, double d1, double d2, float f) { TileEntityCamouflaged te = (TileEntityCamouflaged)tileEntity; Block block = te.getTextureBlock(); Minecraft.getMinecraft().renderEngine.func_110577_a(TextureMap.field_110575_b); //Disable standard lighting. This is done the same as in TileEntityRendererPiston. RenderHelper.disableStandardItemLighting(); GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); GL11.glEnable(GL11.GL_BLEND); //GL11.glDisable(GL11.GL_CULL_FACE); This was initially part of the code that was taken from the piston, but it was causing some of the rendering to look of, e.g. with a cobweb (it would look thicker as both sides were rendering due to this being disabled). if (Minecraft.isAmbientOcclusionEnabled()) { GL11.glShadeModel(GL11.GL_SMOOTH); } else { GL11.glShadeModel(GL11.GL_FLAT); } GL11.glPushMatrix(); GL11.glTranslated(d0, d1, d2); Tessellator tessellator = Tessellator.instance; tessellator.startDrawingQuads(); RenderBlocks renderBlocks = new RenderBlocks(tileEntity.worldObj); //To get the block to render in the right place, I had to pass in 0, 0, 0 as the coordinates for renderBlockByRenderType. This however means that it will use the properties of the block at 0, 0, 0 for some things. This translation allows for the actual block coordinates to be passed in. tessellator.setTranslation(-te.xCoord, -te.yCoord, -te.zCoord); renderBlocks.renderBlockByRenderType(block, te.xCoord, te.yCoord, te.zCoord); tessellator.draw(); tessellator.setTranslation(0, 0, 0); GL11.glPopMatrix(); //Reset to standard lighting RenderHelper.enableStandardItemLighting(); }
  2. It gets the render type of the block passed in, and then goes on to add vertexes to the tessellator instance based on the block passed in as the first parameter. It does call the right method (e.g. if I pass in a cobweb, then it calls the renderCrossedSquares function), and the methods are being called to add coordinates to the tessellator. I'm still not sure what I'm doing wrong.
  3. That is how I stopped the block from rendering as 1mx1mx1m cubes, but now I'm finding that my TESR rendering code is drawing nothing despite being called, and I can't figure out why.
  4. Check if the icon that you're about to return is null. If it isn't, return that icon, otherwise return the blockIcon
  5. The block was rendering with a render type of 0 without the use of the special renderer as I had done nothing to stop this - that is why they took up a 1mx1m cube. Having stopped this, my render code does nothing.
  6. I overrode those because I wanted the collision box to match up with what was shown, and at the moment that is working in the sense that the collision boxes are matching up with what is meant to be shown. Thanks for the quick reply.
  7. Have a look at net.minecraftforge.event.entity.living.LivingDeathEvent, and net.minecraft.util.EntityDamageSource. On a LivingDeathEvent, you could check if the entity is an instance of EntityPlayer, and if the DamageSource is of the type in DamageSource.causePlayerDamage I hope that this helped.
  8. I am attempting to make a block that will appear as another block in the game, depending on the id passed into it. To do this I am using a TileEntitySpecialRenderer, and calling RenderBlocks.renderBlockByRenderType, as shown below. This works perfectly for all 1mx1mx1m blocks, but it renders everything else at that size. For items that are not full blocks, but are using textures that are from full block (e.g. half slabs and fences), this just renders a full block using that texture (so a fence appears as oak planks). For other blocks (such as a cactus), there are just gaps between the textures. I don't have much experience with custom rendering in minecraft/forge, and was hoping that somebody could help. From my TileEntitySpecialRenderer subclass: @Override public void renderTileEntityAt(TileEntity tileEntity, double d0, double d1, double d2, float f) { TileEntityCamouflaged te = (TileEntityCamouflaged)tileEntity; Block block = te.getTextureBlock(); RenderBlocks renderBlocks = new RenderBlocks(tileEntity.worldObj); renderBlocks.renderBlockByRenderType(block, te.xCoord, te.yCoord, te.zCoord); } Methods overwritten in my block class: @Override public boolean renderAsNormalBlock() { return false; } @Override public boolean isOpaqueCube() { return false; } @Override public boolean shouldSideBeRendered(IBlockAccess blockAccess, int x, int y, int z, int side) { System.out.println("shouldSideBeRendered at " + x + ", " + y + ", " + z + " on side " + side); int newX = x; int newY = y; int newZ = z; //The x, y and z coordinates appear to change because of the side switch (side) { case 0: ++newY; break; case 1: --newY; break; case 2: ++newZ; break; case 3: --newZ; break; case 4: ++newX; break; case 5: --newX; break; } TileEntityCamouflaged tileEntity = (TileEntityCamouflaged)blockAccess.getBlockTileEntity(newX, newY, newZ); if (tileEntity == null) return false; return tileEntity.getTextureBlock().shouldSideBeRendered(blockAccess, x, y, z, side); } @Override public Icon getBlockTexture(IBlockAccess blockAccess, int x, int y, int z, int side) { TileEntityCamouflaged tileEntity = (TileEntityCamouflaged)blockAccess.getBlockTileEntity(x, y, z); return tileEntity.getTextureBlock().getBlockTexture(blockAccess, x, y, z, side); } @Override public boolean isBlockSolid(IBlockAccess blockAccess, int x, int y, int z, int side) { TileEntityCamouflaged tileEntity = (TileEntityCamouflaged)blockAccess.getBlockTileEntity(x, y, z); return tileEntity.getTextureBlock().isBlockSolid(blockAccess, x, y, z, side); } @Override public int colorMultiplier(IBlockAccess blockAccess, int x, int y, int z) { System.out.println("colorMultiplier at " + x + ", " + y + ", " + z); TileEntityCamouflaged tileEntity = (TileEntityCamouflaged)blockAccess.getBlockTileEntity(x, y, z); return tileEntity.getTextureBlock().colorMultiplier(blockAccess, x, y, z); } @Override public void setBlockBoundsBasedOnState(IBlockAccess blockAccess, int x, int y, int z) { TileEntityCamouflaged tileEntity = (TileEntityCamouflaged)blockAccess.getBlockTileEntity(x, y, z); tileEntity.getTextureBlock().setBlockBoundsBasedOnState(blockAccess, x, y, z); } @Override public AxisAlignedBB getCollisionBoundingBoxFromPool(World world, int x, int y, int z) { Block block = ((TileEntityCamouflaged)world.getBlockTileEntity(x, y, z)).getTextureBlock(); return block.getCollisionBoundingBoxFromPool(world, x, y, z); } @Override public int getLightOpacity(World world, int x, int y, int z) { Block block = ((TileEntityCamouflaged)world.getBlockTileEntity(x, y, z)).getTextureBlock(); return block.getLightOpacity(world, x, y, z); } @Override public AxisAlignedBB getSelectedBoundingBoxFromPool(World world, int x, int y, int z) { Block block = ((TileEntityCamouflaged)world.getBlockTileEntity(x, y, z)).getTextureBlock(); return block.getSelectedBoundingBoxFromPool(world, x, y, z); } @Override public boolean isBlockNormalCube(World world, int x, int y, int z) { Block block = ((TileEntityCamouflaged)world.getBlockTileEntity(x, y, z)).getTextureBlock(); return block.isBlockNormalCube(world, x, y, z); } @Override public boolean isBlockSolidOnSide(World world, int x, int y, int z, ForgeDirection side) { Block block = ((TileEntityCamouflaged)world.getBlockTileEntity(x, y, z)).getTextureBlock(); return block.isBlockSolidOnSide(world, x, y, z, side); } //I am not sure about this one, though it fixes the rendering of ice, and doesn't appear to cause problems with anything that already worked. @Override public int getRenderBlockPass() { return 1; }
×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.