Jump to content

TheMattyBoy

Forge Modder
  • Posts

    40
  • Joined

  • Last visited

Everything posted by TheMattyBoy

  1. I would recommend checking out MrCrayfish's Model Creator (assuming you're in 1.8+). It does mean you have to remake the model in that software instead, but what it does is generate a json file for you. This means you don't need a TileEntity and you don't get that pink and black box.
  2. So someone requested I downgraded my post-1.8 mod to 1.7.10. Unfortunately, block models didn't exist in 1.7.10, so I decided to use ISimpleBlockRenderingHadler (ISBRH) to render my custom block. I got the whole model working in all 16 states it can be in (each state changes the blocks appearance), but then a new problem arose: the block would stop rendering if there where no other blocks present in the same chunk. I suspect it might have something to do with that I never use RenderBlocks#renderStandardBlock , instead I render each face individually. Problem is that I can't use RenderBlocks#renderStandardBlock for this because I have more textures than faces and they are designed for a 1.8 block model, where you can choose what part of the UV you want where on the model, and not for a RenderBlocks#renderStandardBlock where it fits the texture on the model in a very specific way. Here's the code for the ISBRH: package themattyboy.gadgetsngoodies.blocks.renders; import net.minecraft.block.Block; import net.minecraft.client.renderer.EntityRenderer; import net.minecraft.client.renderer.RenderBlocks; import net.minecraft.client.renderer.Tessellator; import net.minecraft.init.Blocks; import net.minecraft.util.IIcon; import net.minecraft.world.IBlockAccess; import themattyboy.gadgetsngoodies.blocks.BlockPlacedTNTCannon; import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler; public class RenderPlacedTNTCannon implements ISimpleBlockRenderingHandler { @Override public void renderInventoryBlock(Block block, int metadata, int modelId, RenderBlocks renderer) { } @Override public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block block, int modelId, RenderBlocks renderer) { return this.renderBlockTNTCannon(world, x, y, z, (BlockPlacedTNTCannon)block, modelId, renderer); } public boolean renderBlockTNTCannon(IBlockAccess world, int x, int y, int z, BlockPlacedTNTCannon block, int modelId, RenderBlocks renderer) { int meta = world.getBlockMetadata(x, y, z); boolean flag; float f = 0.125F; float f1 = 0.0625F; Tessellator tessellator = Tessellator.instance; IIcon iicon = renderer.getBlockIconFromSideAndMetadata(block, 1, meta); double d0 = iicon.getInterpolatedU(6); double d1 = iicon.getMinV(); double d2 = iicon.getInterpolatedU(10); double d3 = iicon.getInterpolatedV(; tessellator.setBrightness(block.getMixedBrightnessForBlock(world, x, y, z)); int l = block.colorMultiplier(world, x, y, z); float f2 = (float)(l >> 16 & 255) / 255.0F; float f3 = (float)(l >> 8 & 255) / 255.0F; float f4 = (float)(l & 255) / 255.0F; if (EntityRenderer.anaglyphEnable) { float f5 = (f2 * 30.0F + f3 * 59.0F + f4 * 11.0F) / 100.0F; float f6 = (f2 * 30.0F + f3 * 70.0F) / 100.0F; float f7 = (f2 * 30.0F + f4 * 70.0F) / 100.0F; f2 = f5; f3 = f6; f4 = f7; } tessellator.setColorOpaque_F(f2, f3, f4); if(meta >= 0 && meta <= 3) { renderer.setRenderBounds(0.5 + f, 0, 0.0F, 1.0F - f, 0.25F + f1, 1.0F - f1); renderer.renderFaceXNeg(block, x, y + f1, z, renderer.getBlockIconFromSideAndMetadata(block, 4, meta)); renderer.renderFaceYPos(block, x, y, z, renderer.getBlockIconFromSideAndMetadata(block, 1, meta)); renderer.setRenderBounds(f, 0, 0.0F, 0.5F - f, 0.25 + f1, 1.0F - f1); renderer.flipTexture = true; renderer.renderFaceXPos(block, x, y + f1, z, renderer.getBlockIconFromSideAndMetadata(block, 5, meta)); renderer.flipTexture = false; renderer.renderFaceYPos(block, x, y, z, renderer.getBlockIconFromSideAndMetadata(block, 1, meta)); renderer.setRenderBounds(f, 0, 0, 1 - f, f1, 1 - f1); renderer.renderFaceYPos(block, x, y, z, renderer.getBlockIconFromSideAndMetadata(block, 0, meta)); renderer.uvRotateEast = 3; renderer.uvRotateWest = 3; renderer.renderFaceZPos(block, x, y, z, renderer.getBlockIconFromSideAndMetadata(block, 0, meta)); renderer.renderFaceZNeg(block, x, y, z, renderer.getBlockIconFromSideAndMetadata(block, 0, meta)); renderer.uvRotateEast = 0; renderer.uvRotateWest = 0; renderer.setRenderBounds(f, 0, 0, 1 - f, 1.5 * f, 1 - f1); renderer.uvRotateNorth = 2; renderer.uvRotateSouth = 1; renderer.renderFaceXPos(block, x, y, z, renderer.getBlockIconFromSideAndMetadata(block, 0, meta)); renderer.renderFaceXNeg(block, x, y, z, renderer.getBlockIconFromSideAndMetadata(block, 0, meta)); renderer.uvRotateNorth = 0; renderer.uvRotateSouth = 0; renderer.setRenderBounds(0.5F - f, f1, 0.75F, 0.5F + f, 0.25F + f1, 1 - f1); renderer.renderFaceYPos(block, x, y, z, renderer.getBlockIconFromSideAndMetadata(block, 1, meta)); renderer.renderFaceZNeg(block, x, y, z, renderer.getBlockIconFromSideAndMetadata(block, 0, meta)); renderer.setRenderBounds(0.5F - f, f1, 0.5F, 0.5F + f, 0.25F, 0.75F); renderer.renderFaceYPos(block, x, y, z, renderer.getBlockIconFromSideAndMetadata(block, 1, meta)); renderer.setRenderBounds(0.5 - f1, f1, f1, 0.5 + f1, 1.5 * f, 1.5 * f); renderer.renderFaceXPos(block, x, y, z, block.iconWood); renderer.renderFaceXNeg(block, x, y, z, block.iconWood); renderer.renderFaceZPos(block, x, y, z, block.iconWood); renderer.renderFaceZNeg(block, x, y, z, block.iconWood); renderer.setRenderBounds(0.5 - f, 1.5 * f, 0, 0.5 + f, 0.25F, 0.25); renderer.renderFaceYPos(block, x, y, z, block.iconWood); renderer.renderFaceYNeg(block, x, y, z, block.iconWood); renderer.renderFaceZPos(block, x, y, z, block.iconWood); renderer.renderFaceZNeg(block, x, y, z, block.iconWood); renderer.setRenderBounds(5 * f, f1, 1 - f1, 1 - 3 * f1, 0.25F - f1, 1); renderer.flipTexture = true; renderer.renderFaceXPos(block, x, y + f1, z, renderer.getBlockIconFromSideAndMetadata(block, 5, meta)); renderer.flipTexture = false; renderer.renderFaceXNeg(block, x, y + f1, z, renderer.getBlockIconFromSideAndMetadata(block, 4, meta)); renderer.renderFaceYPos(block, x, y + f1, z, renderer.getBlockIconFromSideAndMetadata(block, 1, meta)); renderer.renderFaceYNeg(block, x, y + f1, z, renderer.getBlockIconFromSideAndMetadata(block, 1, meta)); renderer.renderFaceZPos(block, x, y + f1, z, renderer.getBlockIconFromSideAndMetadata(block, 3, meta)); renderer.setRenderBounds(f, 0.0F, 0.0F, 1.0F - f, 0.25F + f1, 1.0F - f1); renderer.flipTexture = true; renderer.renderFaceXPos(block, x, y + f1, z, renderer.getBlockIconFromSideAndMetadata(block, 5, meta)); renderer.flipTexture = false; renderer.renderFaceXNeg(block, x, y + f1, z, renderer.getBlockIconFromSideAndMetadata(block, 4, meta)); renderer.renderFaceYNeg(block, x, y, z, renderer.getBlockIconFromSideAndMetadata(block, 0, meta)); renderer.renderFaceZPos(block, x, y + f1, z, renderer.getBlockIconFromSideAndMetadata(block, 3, meta)); renderer.renderFaceZNeg(block, x, y + f1, z, renderer.getBlockIconFromSideAndMetadata(block, 2, meta)); if(meta == 0) { tessellator.addVertexWithUV(x + (0.5 - f), y + f1, z, d0, d1); tessellator.addVertexWithUV(x + (0.5 - f), y + 0.25, z + 0.5, d0, d3); tessellator.addVertexWithUV(x + (0.5 + f), y + 0.25, z + 0.5, d2, d3); tessellator.addVertexWithUV(x + (0.5 + f), y + f1, z, d2, d1); } if(meta >= 1 && meta <= 2) { renderer.setRenderBounds(0, 0, 0, 1, 1, 1); renderer.renderFaceXPos(block, x - 0.5 + f, y + f1, z - f, block.iconTNTSide); renderer.renderFaceXNeg(block, x + 0.5 - f, y + f1, z - f, block.iconTNTSide); renderer.renderFaceYPos(block, x, y - 0.75 + f1, z - f, block.iconTNTTop); renderer.renderFaceZPos(block, x, y + f1, z - 0.5, block.iconTNTSide); renderer.renderFaceZNeg(block, x, y + f1, z + 0.25, block.iconTNTSide); } if(meta >= 2 && meta <= 3) { renderer.setRenderBounds(0, 0, 0, 1, 1, 1); renderer.renderFaceXPos(block, x - 0.5 + f, y + 0.25, z - 0.25 - f, block.iconTNTSide); renderer.renderFaceXNeg(block, x + 0.5 - f, y + 0.25, z - 0.25 - f, block.iconTNTSide); renderer.renderFaceYPos(block, x, y - 0.5, z - 0.25 - f, block.iconTNTTop); renderer.renderFaceZPos(block, x, y + 0.25, z - 0.75, block.iconTNTSide); renderer.renderFaceZNeg(block, x, y + 0.25, z, block.iconTNTSide); } flag = true; } else if (meta >= 4 && meta <= 7) { renderer.uvRotateTop = 1; renderer.uvRotateBottom = 2; renderer.setRenderBounds(f1, 0, 0.5 + f, 1.0F, 0.25F + f, 1.0F - f); renderer.flipTexture = true; renderer.uvRotateEast = 2; renderer.renderFaceZNeg(block, x, y + f1, z, renderer.getBlockIconFromSideAndMetadata(block, 0, meta)); renderer.uvRotateEast = 0; renderer.flipTexture = false; renderer.renderFaceYPos(block, x, y - f1, z, renderer.getBlockIconFromSideAndMetadata(block, 1, meta)); renderer.setRenderBounds(f1, 0, f, 1.0F, 0.25 + f, 0.5F - f); renderer.uvRotateWest = 1; renderer.renderFaceZPos(block, x, y + f1, z, renderer.getBlockIconFromSideAndMetadata(block, 0, meta)); renderer.uvRotateWest = 0; renderer.renderFaceYPos(block, x, y - f1, z, renderer.getBlockIconFromSideAndMetadata(block, 1, meta)); renderer.setRenderBounds(f1, 0, f, 1, f1, 1 - f); renderer.renderFaceYPos(block, x, y, z, renderer.getBlockIconFromSideAndMetadata(block, 0, meta)); renderer.uvRotateNorth = 3; renderer.uvRotateSouth = 3; renderer.renderFaceXPos(block, x, y, z, renderer.getBlockIconFromSideAndMetadata(block, 0, meta)); renderer.renderFaceXNeg(block, x, y, z, renderer.getBlockIconFromSideAndMetadata(block, 0, meta)); renderer.uvRotateNorth = 0; renderer.uvRotateSouth = 0; renderer.setRenderBounds(f1, 0, f, 1, 1.5 * f, 1 - f); renderer.uvRotateEast = 2; renderer.uvRotateWest = 1; renderer.renderFaceZPos(block, x, y, z, renderer.getBlockIconFromSideAndMetadata(block, 0, meta)); renderer.renderFaceZNeg(block, x, y, z, renderer.getBlockIconFromSideAndMetadata(block, 0, meta)); renderer.uvRotateEast = 0; renderer.uvRotateWest = 0; renderer.setRenderBounds(f1, f1, 0.5F - f, 0.25, 0.25F + f1, 0.5F + f); renderer.renderFaceYPos(block, x, y, z, renderer.getBlockIconFromSideAndMetadata(block, 1, meta)); renderer.renderFaceXPos(block, x, y, z, renderer.getBlockIconFromSideAndMetadata(block, 0, meta)); renderer.setRenderBounds(0.25F, f1, 0.5F - f, 0.5F, 0.25F, 0.5F + f); renderer.renderFaceYPos(block, x, y, z, renderer.getBlockIconFromSideAndMetadata(block, 1, meta)); renderer.setRenderBounds(0.75 + f1, f1, 0.5 - f1, 1 - f1, 1.5 * f, 0.5 + f1); renderer.renderFaceZPos(block, x, y, z, block.iconWood); renderer.renderFaceZNeg(block, x, y, z, block.iconWood); renderer.renderFaceXPos(block, x, y, z, block.iconWood); renderer.renderFaceXNeg(block, x, y, z, block.iconWood); renderer.setRenderBounds(0.75, 1.5 * f, 0.5 - f, 1, 0.25F, 0.5 + f); renderer.renderFaceYPos(block, x, y, z, block.iconWood); renderer.renderFaceYNeg(block, x, y, z, block.iconWood); renderer.renderFaceXPos(block, x, y, z, block.iconWood); renderer.renderFaceXNeg(block, x, y, z, block.iconWood); renderer.setRenderBounds(0, f1, 5 * f, f1, 0.25F - f1, 1 - 3 * f1); renderer.renderFaceZPos(block, x, y + f1, z, renderer.getBlockIconFromSideAndMetadata(Blocks.stone, 0, meta)); renderer.flipTexture = true; renderer.renderFaceZNeg(block, x, y + f1, z, renderer.getBlockIconFromSideAndMetadata(Blocks.stone, 0, meta)); renderer.flipTexture = false; renderer.renderFaceYPos(block, x, y + f1, z, renderer.getBlockIconFromSideAndMetadata(block, 1, meta)); renderer.renderFaceYNeg(block, x, y + f1, z, renderer.getBlockIconFromSideAndMetadata(block, 1, meta)); renderer.renderFaceXNeg(block, x, y + f1, z, renderer.getBlockIconFromSideAndMetadata(block, 4, meta)); renderer.setRenderBounds(f1, 0.0F, f, 1.0F, 0.25F + f, 1.0F - f); renderer.flipTexture = true; renderer.uvRotateEast = 2; renderer.renderFaceZNeg(block, x, y + f1, z, renderer.getBlockIconFromSideAndMetadata(block, 0, meta)); renderer.uvRotateEast = 0; renderer.flipTexture = false; renderer.uvRotateWest = 1; renderer.renderFaceZPos(block, x, y + f1, z, renderer.getBlockIconFromSideAndMetadata(block, 0, meta)); renderer.uvRotateWest = 0; renderer.renderFaceYNeg(block, x, y, z, renderer.getBlockIconFromSideAndMetadata(block, 0, meta)); renderer.renderFaceXPos(block, x, y + f1, z, renderer.getBlockIconFromSideAndMetadata(block, 5, meta)); renderer.renderFaceXNeg(block, x, y + f1, z, renderer.getBlockIconFromSideAndMetadata(block, 4, meta)); if(meta == 4) { tessellator.addVertexWithUV(x + 1, y + f1, z + (0.5 - f), d0, d1); tessellator.addVertexWithUV(x + 0.5, y + 0.25, z + (0.5 - f), d0, d3); tessellator.addVertexWithUV(x + 0.5, y + 0.25, z + (0.5 + f), d2, d3); tessellator.addVertexWithUV(x + 1, y + f1, z + (0.5 + f), d2, d1); } if(meta >= 5 && meta <= 6) { renderer.setRenderBounds(0, 0, 0, 1, 1, 1); renderer.renderFaceXPos(block, x - 0.25, y + f1, z, block.iconTNTSide); renderer.renderFaceXNeg(block, x + 0.5, y + f1, z, block.iconTNTSide); renderer.renderFaceYPos(block, x + 0.25 - f, y - 0.75 + f1, z, block.iconTNTTop); renderer.renderFaceZPos(block, x + 0.25 - f, y + f1, z - 0.5 + f, block.iconTNTSide); renderer.renderFaceZNeg(block, x + 0.25 - f, y + f1, z + 0.5 - f, block.iconTNTSide); } if(meta >= 6 && meta <= 7) { renderer.setRenderBounds(0, 0, 0, 1, 1, 1); renderer.renderFaceXPos(block, x, y + 0.25, z, block.iconTNTSide); renderer.renderFaceXNeg(block, x + 0.75, y + 0.25, z, block.iconTNTSide); renderer.renderFaceYPos(block, x + 0.5 - f, y - 0.5, z, block.iconTNTTop); renderer.renderFaceZPos(block, x + 0.5 - f, y + 0.25, z - 0.5 + f, block.iconTNTSide); renderer.renderFaceZNeg(block, x + 0.5 - f, y + 0.25, z + 0.5 - f, block.iconTNTSide); } flag = true; } else if (meta >= 8 && meta <= 11) { renderer.uvRotateTop = 3; renderer.uvRotateBottom = 3; renderer.setRenderBounds(0.5 + f, 0, f1, 1.0F - f, 0.25F + f, 1.0F); renderer.flipTexture = true; renderer.uvRotateNorth = 1; renderer.renderFaceXNeg(block, x, y + f1, z, renderer.getBlockIconFromSideAndMetadata(block, 0, meta)); renderer.uvRotateNorth = 0; renderer.flipTexture = false; renderer.renderFaceYPos(block, x, y - f1, z, renderer.getBlockIconFromSideAndMetadata(block, 1, meta)); renderer.setRenderBounds(f, 0, f1, 0.5F - f, 0.25 + f, 1.0F); renderer.uvRotateSouth = 2; renderer.renderFaceXPos(block, x, y + f1, z, renderer.getBlockIconFromSideAndMetadata(block, 0, meta)); renderer.uvRotateSouth = 0; renderer.renderFaceYPos(block, x, y - f1, z, renderer.getBlockIconFromSideAndMetadata(block, 1, meta)); renderer.setRenderBounds(f, 0, f1, 1 - f, f1, 1); renderer.renderFaceYPos(block, x, y, z, renderer.getBlockIconFromSideAndMetadata(block, 0, meta)); renderer.uvRotateEast = 3; renderer.uvRotateWest = 3; renderer.renderFaceZPos(block, x, y, z, renderer.getBlockIconFromSideAndMetadata(block, 0, meta)); renderer.renderFaceZNeg(block, x, y, z, renderer.getBlockIconFromSideAndMetadata(block, 0, meta)); renderer.uvRotateEast = 0; renderer.uvRotateWest = 0; renderer.setRenderBounds(f, 0, f1, 1 - f, 1.5 * f, 1); renderer.uvRotateNorth = 1; renderer.uvRotateSouth = 2; renderer.renderFaceXPos(block, x, y, z, renderer.getBlockIconFromSideAndMetadata(block, 0, meta)); renderer.renderFaceXNeg(block, x, y, z, renderer.getBlockIconFromSideAndMetadata(block, 0, meta)); renderer.uvRotateNorth = 0; renderer.uvRotateSouth = 0; renderer.setRenderBounds(0.5F - f, f1, f1, 0.5F + f, 0.25F + f1, 0.25); renderer.renderFaceYPos(block, x, y, z, renderer.getBlockIconFromSideAndMetadata(block, 1, meta)); renderer.renderFaceZPos(block, x, y, z, renderer.getBlockIconFromSideAndMetadata(block, 0, meta)); renderer.setRenderBounds(0.5F - f, f1, 0.25F, 0.5F + f, 0.25F, 0.5F); renderer.renderFaceYPos(block, x, y, z, renderer.getBlockIconFromSideAndMetadata(block, 1, meta)); renderer.setRenderBounds(0.5 - f1, f1, 0.75 + f1, 0.5 + f1, 1.5 * f, 1 - f1); renderer.renderFaceXPos(block, x, y, z, block.iconWood); renderer.renderFaceXNeg(block, x, y, z, block.iconWood); renderer.renderFaceZPos(block, x, y, z, block.iconWood); renderer.renderFaceZNeg(block, x, y, z, block.iconWood); renderer.setRenderBounds(0.5 - f, 1.5 * f, 0.75, 0.5 + f, 0.25F, 1); renderer.renderFaceYPos(block, x, y, z, block.iconWood); renderer.renderFaceYNeg(block, x, y, z, block.iconWood); renderer.renderFaceZPos(block, x, y, z, block.iconWood); renderer.renderFaceZNeg(block, x, y, z, block.iconWood); renderer.setRenderBounds(3 * f1, f1, 0, 3 * f, 0.25F - f1, f1); renderer.renderFaceXPos(block, x, y + f1, z, renderer.getBlockIconFromSideAndMetadata(Blocks.stone, 0, meta)); renderer.flipTexture = true; renderer.renderFaceXNeg(block, x, y + f1, z, renderer.getBlockIconFromSideAndMetadata(Blocks.stone, 0, meta)); renderer.flipTexture = false; renderer.renderFaceYPos(block, x, y + f1, z, renderer.getBlockIconFromSideAndMetadata(block, 1, meta)); renderer.renderFaceYNeg(block, x, y + f1, z, renderer.getBlockIconFromSideAndMetadata(block, 1, meta)); renderer.renderFaceZNeg(block, x, y + f1, z, renderer.getBlockIconFromSideAndMetadata(Blocks.stone, 0, meta)); renderer.setRenderBounds(f, 0.0F, f1, 1.0F - f, 0.25F + f, 1.0F); renderer.flipTexture = true; renderer.uvRotateNorth = 1; renderer.renderFaceXNeg(block, x, y + f1, z, renderer.getBlockIconFromSideAndMetadata(block, 0, meta)); renderer.uvRotateNorth = 0; renderer.flipTexture = false; renderer.uvRotateSouth = 2; renderer.renderFaceXPos(block, x, y + f1, z, renderer.getBlockIconFromSideAndMetadata(block, 0, meta)); renderer.uvRotateSouth = 0; renderer.renderFaceYNeg(block, x, y, z, renderer.getBlockIconFromSideAndMetadata(block, 0, meta)); renderer.renderFaceZPos(block, x, y + f1, z, renderer.getBlockIconFromSideAndMetadata(block, 3, meta)); renderer.renderFaceZNeg(block, x, y + f1, z, renderer.getBlockIconFromSideAndMetadata(block, 2, meta)); if(meta == { tessellator.addVertexWithUV(x + (0.5 + f), y + f1, z + 1, d0, d1); tessellator.addVertexWithUV(x + (0.5 + f), y + 0.25, z + 0.5, d0, d3); tessellator.addVertexWithUV(x + (0.5 - f), y + 0.25, z + 0.5, d2, d3); tessellator.addVertexWithUV(x + (0.5 - f), y + f1, z + 1, d2, d1); } if(meta >= 9 && meta <= 10) { renderer.setRenderBounds(0, 0, 0, 1, 1, 1); renderer.renderFaceXPos(block, x - 0.5 + f, y + f1, z + f, block.iconTNTSide); renderer.renderFaceXNeg(block, x + 0.5 - f, y + f1, z + f, block.iconTNTSide); renderer.renderFaceYPos(block, x, y - 0.75 + f1, z + f, block.iconTNTTop); renderer.renderFaceZPos(block, x, y + f1, z - 0.25, block.iconTNTSide); renderer.renderFaceZNeg(block, x, y + f1, z + 0.5, block.iconTNTSide); } if(meta >= 10 && meta <= 11) { renderer.setRenderBounds(0, 0, 0, 1, 1, 1); renderer.renderFaceXPos(block, x - 0.5 + f, y + 0.25, z + 0.25 + f, block.iconTNTSide); renderer.renderFaceXNeg(block, x + 0.5 - f, y + 0.25, z + 0.25 + f, block.iconTNTSide); renderer.renderFaceYPos(block, x, y - 0.5, z + 0.25 + f, block.iconTNTTop); renderer.renderFaceZPos(block, x, y + 0.25, z, block.iconTNTSide); renderer.renderFaceZNeg(block, x, y + 0.25, z + 0.75, block.iconTNTSide); } flag = true; } else if (meta >= 12 && meta <= 15) { renderer.uvRotateTop = 2; renderer.uvRotateBottom = 1; renderer.setRenderBounds(0.0F, 0, 0.5 + f, 1.0F - f1, 0.25F + f1, 1.0F - f); renderer.renderFaceZNeg(block, x, y + f1, z, renderer.getBlockIconFromSideAndMetadata(block, 2, meta)); renderer.renderFaceYPos(block, x, y, z, renderer.getBlockIconFromSideAndMetadata(block, 1, meta)); renderer.setRenderBounds(0.0F, 0, f, 1.0F - f1, 0.25 + f1, 0.5F - f); renderer.flipTexture = true; renderer.renderFaceZPos(block, x, y + f1, z, renderer.getBlockIconFromSideAndMetadata(block, 3, meta)); renderer.flipTexture = false; renderer.renderFaceYPos(block, x, y, z, renderer.getBlockIconFromSideAndMetadata(block, 1, meta)); renderer.setRenderBounds(0, 0, f, 1 - f1, f1, 1 - f); renderer.renderFaceYPos(block, x, y, z, renderer.getBlockIconFromSideAndMetadata(block, 0, meta)); renderer.uvRotateSouth = 3; renderer.uvRotateNorth = 3; renderer.renderFaceXPos(block, x, y, z, renderer.getBlockIconFromSideAndMetadata(block, 0, meta)); renderer.renderFaceXNeg(block, x, y, z, renderer.getBlockIconFromSideAndMetadata(block, 0, meta)); renderer.uvRotateSouth = 0; renderer.uvRotateNorth = 0; renderer.setRenderBounds(0, 0, f, 1 - f1, 1.5 * f, 1 - f); renderer.uvRotateWest = 2; renderer.uvRotateEast = 1; renderer.renderFaceZPos(block, x, y, z, renderer.getBlockIconFromSideAndMetadata(block, 0, meta)); renderer.renderFaceZNeg(block, x, y, z, renderer.getBlockIconFromSideAndMetadata(block, 0, meta)); renderer.uvRotateWest = 0; renderer.uvRotateEast = 0; renderer.setRenderBounds(0.75F, f1, 0.5F - f, 1 - f1, 0.25F + f1, 0.5F + f); renderer.renderFaceYPos(block, x, y, z, renderer.getBlockIconFromSideAndMetadata(block, 1, meta)); renderer.renderFaceXNeg(block, x, y, z, renderer.getBlockIconFromSideAndMetadata(block, 0, meta)); renderer.setRenderBounds(0.5F, f1, 0.5F - f, 0.75F, 0.25F, 0.5F + f); renderer.renderFaceYPos(block, x, y, z, renderer.getBlockIconFromSideAndMetadata(block, 1, meta)); renderer.setRenderBounds(f1, f1, 0.5 - f1, 1.5 * f, 1.5 * f, 0.5 + f1); renderer.renderFaceZPos(block, x, y, z, block.iconWood); renderer.renderFaceZNeg(block, x, y, z, block.iconWood); renderer.renderFaceXPos(block, x, y, z, block.iconWood); renderer.renderFaceXNeg(block, x, y, z, block.iconWood); renderer.setRenderBounds(0, 1.5 * f, 0.5 - f, 0.25, 0.25F, 0.5 + f); renderer.renderFaceYPos(block, x, y, z, block.iconWood); renderer.renderFaceYNeg(block, x, y, z, block.iconWood); renderer.renderFaceXPos(block, x, y, z, block.iconWood); renderer.renderFaceXNeg(block, x, y, z, block.iconWood); renderer.setRenderBounds(1 - f1, f1, 3 * f1, 1, 0.25F - f1, 6 * f1); renderer.flipTexture = true; renderer.renderFaceZPos(block, x, y + f1, z, renderer.getBlockIconFromSideAndMetadata(block, 3, meta)); renderer.flipTexture = false; renderer.renderFaceZNeg(block, x, y + f1, z, renderer.getBlockIconFromSideAndMetadata(block, 2, meta)); renderer.renderFaceYPos(block, x, y + f1, z, renderer.getBlockIconFromSideAndMetadata(block, 1, meta)); renderer.renderFaceYNeg(block, x, y + f1, z, renderer.getBlockIconFromSideAndMetadata(block, 1, meta)); renderer.renderFaceXPos(block, x, y + f1, z, renderer.getBlockIconFromSideAndMetadata(Blocks.stone, 0, meta)); renderer.setRenderBounds(0.0F, 0.0F, f, 1.0F - f1, 0.25F + f1, 1.0F - f); renderer.flipTexture = true; renderer.renderFaceZPos(block, x, y + f1, z, renderer.getBlockIconFromSideAndMetadata(block, 3, meta)); renderer.flipTexture = false; renderer.renderFaceZNeg(block, x, y + f1, z, renderer.getBlockIconFromSideAndMetadata(block, 2, meta)); renderer.renderFaceYNeg(block, x, y, z, renderer.getBlockIconFromSideAndMetadata(block, 0, meta)); renderer.renderFaceXPos(block, x, y + f1, z, renderer.getBlockIconFromSideAndMetadata(block, 5, meta)); renderer.renderFaceXNeg(block, x, y + f1, z, renderer.getBlockIconFromSideAndMetadata(block, 4, meta)); if(meta == 12) { tessellator.addVertexWithUV(x, y + f1, z + (0.5 + f), d0, d1); tessellator.addVertexWithUV(x + 0.5, y + 0.25, z + (0.5 + f), d0, d3); tessellator.addVertexWithUV(x + 0.5, y + 0.25, z + (0.5 - f), d2, d3); tessellator.addVertexWithUV(x, y + f1, z + (0.5 - f), d2, d1); } if(meta >= 13 && meta <= 14) { renderer.setRenderBounds(0, 0, 0, 1, 1, 1); renderer.renderFaceXPos(block, x - 0.5, y + f1, z, block.iconTNTSide); renderer.renderFaceXNeg(block, x + 0.25, y + f1, z, block.iconTNTSide); renderer.renderFaceYPos(block, x - f, y - 0.75 + f1, z, block.iconTNTTop); renderer.renderFaceZPos(block, x - f, y + f1, z - 0.5 + f, block.iconTNTSide); renderer.renderFaceZNeg(block, x - f, y + f1, z + 0.5 - f, block.iconTNTSide); } if(meta >= 14 && meta <= 15) { renderer.setRenderBounds(0, 0, 0, 1, 1, 1); renderer.renderFaceXPos(block, x - 0.75, y + 0.25, z, block.iconTNTSide); renderer.renderFaceXNeg(block, x, y + 0.25, z, block.iconTNTSide); renderer.renderFaceYPos(block, x - 0.25 - f, y - 0.5, z, block.iconTNTTop); renderer.renderFaceZPos(block, x - 0.25 - f, y + 0.25, z - 0.5 + f, block.iconTNTSide); renderer.renderFaceZNeg(block, x - 0.25 - f, y + 0.25, z + 0.5 - f, block.iconTNTSide); } flag = true; } renderer.uvRotateSouth = 0; renderer.uvRotateEast = 0; renderer.uvRotateWest = 0; renderer.uvRotateNorth = 0; renderer.uvRotateTop = 0; renderer.uvRotateBottom = 0; flag = false; return flag; } @Override public boolean shouldRender3DInInventory(int modelId) { return false; } @Override public int getRenderId() { return 50; } }
  3. I want to spawn particles based on a given item stack ( EnumParticleTypes.ITEM_CRACK / EnumParticleTypes.BLOCK_CRACK ), trouble is, particles are client sided and the places in the code where I want the effects are all server sided. I created a method to spawn them so I didn't have to type out the code over and over, but that doesn't help the fact that it's the wrong side. I'm aware of DataParameter s, although since I need a given ItemStack and they only take booleans, ints, floats etc. (right?), I don't think they will be much use. Here's the method so far, please help improve upon it @SideOnly(Side.CLIENT) public void spawnEatParticles(ItemStack stack) { if(stack.getItem() instanceof ItemBlock) { Block block = ((ItemBlock)stack.getItem()).getBlock(); for(int i = 0; i < 20; i++) { this.worldObj.spawnParticle(EnumParticleTypes.BLOCK_CRACK, this.headPosition.getX() + (double)this.rand.nextFloat() - (this.getPosition().getX() - this.posX) - 0.5, this.headPosition.getY() + (double)this.rand.nextFloat() - (this.getPosition().getY() - this.posY), this.headPosition.getZ() + (double)this.rand.nextFloat() - (this.getPosition().getZ() - this.posZ) - 0.5, (this.rand.nextInt(6) - 3) / 5, 0.1, (this.rand.nextInt(6) - 3) / 5, new int[] {Block.getIdFromBlock(block)}); } } else { for(int i = 0; i < 20; i++) { this.worldObj.spawnParticle(EnumParticleTypes.ITEM_CRACK, this.headPosition.getX() + (double)this.rand.nextFloat() - (this.getPosition().getX() - this.posX) - 0.5, this.headPosition.getY() + (double)this.rand.nextFloat() - (this.getPosition().getY() - this.posY), this.headPosition.getZ() + (double)this.rand.nextFloat() - (this.getPosition().getZ() - this.posZ) - 0.5, (this.rand.nextInt(6) - 3) / 5, 0.1, (this.rand.nextInt(6) - 3) / 5, new int[] {Item.getIdFromItem(stack.getItem()), stack.getMetadata()}); } } }
  4. Add this after where you add the motion: mc.thePlayer.velocityChanged = true; So now it should look like this: mc.thePlayer.motionZ *= 0.5; mc.thePlayer.motionX *= 0.5; mc.thePlayer.velocityChanged = true;
  5. That was it. Thank you! As for the singleton; I am aware of it, and now that I have this fixed I will be dealing with it, but my main focus was on fixing setDead(); .
  6. I am trying to make a grappling hook (well, I already have but I'm improving the existing one) and the .setDead(); method is acting very strangely. On one place in my code it works fine and kills the hook as it should (marked with "//this works fine."), so I don't think the fault is in the entity class, but in another place (marked with "//this doesn't work."), it sortof works because an if() statement would tell me it's dead, but it's still in the world and can, for some reason, still be killed with the /kill command. I've tried everything: putting the setDead(); method in client side only, server side only and no specific side (which is where it's at in my code right now), I've tried replicating the /kill command by not using the setDead(); method directly but instead using the onKillCommand(); method in the entity class and even creating my own similar method in my entity class. And nothing works! It's like it gets marked as being dead but then all the other things that should happen when it's dead don't bother to happen! Can someone please explain what's going on? Here's my code: package themattyboy.gadgetsngoodies.items; import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.world.World; import themattyboy.gadgetsngoodies.achievements.GadgetAchievements; import themattyboy.gadgetsngoodies.entity.projectile.EntityGrapplingHook; public class ItemGrapplingHook extends Item { private EntityGrapplingHook hook; private EntityPlayer player; private boolean isShot = false; @Override public ItemStack onItemRightClick(ItemStack stack, World worldIn, EntityPlayer playerIn) { worldIn.playSoundAtEntity(playerIn, "random.bow", 1.0F, 1.0F / (itemRand.nextFloat() * 0.4F + 0.8F)); hook = new EntityGrapplingHook(worldIn, playerIn, 1.5F); if(!this.isShot) { if(!worldIn.isRemote) { worldIn.spawnEntityInWorld(hook); this.isShot = true; } stack.damageItem(1, playerIn); } else { hook.setDead(); //this doesn't work. if(!worldIn.isRemote) { this.isShot = false; } } player = playerIn; return stack; } @Override public void onUpdate(ItemStack stack, World worldIn, Entity entityIn, int itemSlot, boolean isSelected) { if(hook != null && hook.getInGround() && !hook.isDead) { if(hook.destdistX <= 32 && hook.destdistX >= -32 && hook.destdistY <= 32 && hook.destdistY >= -32 && hook.destdistZ <= 32 && hook.destdistZ >= -32) { entityIn.motionX = hook.destdistX / 5; entityIn.motionY = hook.destdistY / 5; entityIn.motionZ = hook.destdistZ / 5; if(hook.destdistY >= 25 && entityIn instanceof EntityPlayer) { player.triggerAchievement(GadgetAchievements.high_flier); } } else { hook.setDead(); //this works fine. this.isShot = false; } } } }
  7. I'm trying to make both the players arms go forward when they hold a specific item, but I can only get the left arm forward using 'heldItem[Left/Right]' due to the heldItemRight's switch() statement: switch (this.heldItemRight) { case 0: case 2: default: break; case 1: this.bipedRightArm.rotateAngleX = this.bipedRightArm.rotateAngleX * 0.5F - ((float)Math.PI / 10F) * (float)this.heldItemRight; break; case 3: this.bipedRightArm.rotateAngleX = this.bipedRightArm.rotateAngleX * 0.5F - ((float)Math.PI / 10F) * (float)this.heldItemRight; this.bipedRightArm.rotateAngleY = -0.5235988F; } rather than heldItemLeft's if() statement: if (this.heldItemLeft != 0) { this.bipedLeftArm.rotateAngleX = this.bipedLeftArm.rotateAngleX * 0.5F - ((float)Math.PI / 10F) * (float)this.heldItemLeft; } Well, this is what happens in RenderLivingEvent.Pre , in RenderLivingEvent.Post both arms render like on a regular item. Any suggestions? Here's my code: @SubscribeEvent public void onLivingRender(RenderLivingEvent.Pre event) { if(event.entity instanceof EntityPlayer) { EntityPlayer player = (EntityPlayer)event.entity; if(player.getHeldItem() != null) { ItemStack stack = player.getHeldItem(); if(stack.getItem() == GadgetItems.hang_glider) { ModelPlayer model = (ModelPlayer)event.renderer.getMainModel(); model.heldItemLeft = 5; model.heldItemRight = 1; //this is 1 because of the switch() statement. If it's 5 it will render as 0. } } } }
  8. I never really got the hang of events, but I'm guessing this is wrong, as it didn't work @SubscribeEvent public void onUpdate(TickEvent.WorldTickEvent event) { System.out.println("Hello World!"); //Some example code } Edit: nvm I'm stupid, I forgot to register the event in the EventHandler
  9. Hi! I'm creating a new class that doesn't extend any existing classes and I want to have an onUpdate() method in it that will run every tick while the game is running (not like in the title screen or anything, only in-game). I know all the existing onUpdate() methods are in some way linked to the run() method in the base Minecraft.class class, but it's never a good idea to edit the source code of Minecraft. So, I was wondering if forge has any annotations I can put over the method to update it every tick and make my life easier, or any classes I can extend that are linked to the world and contains an onUpdate() method that will run when the game is running? I'd like to not have to make a new run() method by implementing Runnable, as it might mess with Minecraft's ticking system or something like that. Thanks
  10. BTW, I maybe expressed myself a little unclear; what I want to do is to change the 'heldItemLeft' and 'heldItemRight' values of the player model when you hold the specific item. Is there no simple way of doing that without messing with the whole player model? Is it possible to access the model of the player that is holding the item from the onUpdate function of the item?
  11. Hello! I want to do so that when you hold an item I'm working on at the moment and look in third-person mode, both of the players arms go up and hold it, without jiggling around when the player walks - sort of like when you charge a bow, except it does it all the time when you hold the item. I have looked around everywhere I could think of; the bow and sword classes (cause they both change the players limb rotation when they are used), the player class, the player model class and even the main Minecraft class. Any help would be highly appreciated. Thanks
×
×
  • Create New...

Important Information

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