Jump to content

[1.6.4] How to rotate only the texture you sticked on block's base texture?


Recommended Posts

Posted

Hi guys, it's me again. I have a blocks that has one asphalt texture and it says here. In my renderer I "stick" some texture on it's top face, but they don't render and by the way how can I make them able to rotate only themselves, not touching the base texture?

Here's the code:

RenderBlocksOfAsphalt_Yellow_0

package trafficStuffMod.client;

import org.lwjgl.opengl.GL11;

import trafficStuffMod.common.*;
import net.minecraft.block.Block;
import net.minecraft.client.renderer.RenderBlocks;
import net.minecraft.client.renderer.Tessellator;
import net.minecraft.util.Icon;
import net.minecraft.world.IBlockAccess;
import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler;
import cpw.mods.fml.client.registry.RenderingRegistry;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;

public class RenderBlocksOfAsphalt_Yellow_0 implements ISimpleBlockRenderingHandler
{

public static int blocksOfAsphalt_Yellow_0_renderID;

public RenderBlocksOfAsphalt_Yellow_0()
{
	RenderBlocksOfAsphalt_Yellow_0.blocksOfAsphalt_Yellow_0_renderID = RenderingRegistry.getNextAvailableRenderId();

}

@Override
public void renderInventoryBlock(Block block, int metadata, int modelID, RenderBlocks renderBlocks)
{
	/** Tessellator tessellator = Tessellator.instance;
	GL11.glTranslatef(-0.5F, -0.5F, -0.5F);
	tessellator.startDrawingQuads();
	renderBlocksOfAsphalt_Yellow_0(0, 0, 0, renderBlocks);
	tessellator.draw();
	GL11.glTranslatef(0.5F, 0.5F, 0.5F); */
}

@Override
public boolean renderWorldBlock(IBlockAccess IBlockAccess, int X, int Y, int Z, Block block, int modelID, RenderBlocks renderBlocks)
{
	Tessellator tessellator = Tessellator.instance;
	TileEntityBlocksOfAsphalt_Yellow_0 BOA_Yellow_0 = (TileEntityBlocksOfAsphalt_Yellow_0) IBlockAccess.getBlockTileEntity(X, Y, Z);
	BlocksOfAsphalt_Yellow_0 blocksOfAsphalt_Yellow_0 = (BlocksOfAsphalt_Yellow_0) TrafficStuffMod.blocksOfAsphalt_Yellow_0;
	int subtype = BOA_Yellow_0.getSubtype();
	int age = BOA_Yellow_0.getAge();

	switch (subtype)
	{
		case 1: renderBlocks.renderFaceYPos(blocksOfAsphalt_Yellow_0, X, Y, Z, BlocksOfAsphalt_Yellow_0.AY_1); renderBlocks.uvRotateTop = 0; break;
		case 2: renderBlocks.renderFaceYPos(blocksOfAsphalt_Yellow_0, X, Y, Z, BlocksOfAsphalt_Yellow_0.AY_2); renderBlocks.uvRotateTop = 0; break;
		case 3: renderBlocks.renderFaceYPos(blocksOfAsphalt_Yellow_0, X, Y, Z, BlocksOfAsphalt_Yellow_0.AY_1); renderBlocks.uvRotateTop = 1; break;
		case 4: renderBlocks.renderFaceYPos(blocksOfAsphalt_Yellow_0, X, Y, Z, BlocksOfAsphalt_Yellow_0.AY_2); renderBlocks.uvRotateTop = 1; break;
		case 5: renderBlocks.renderFaceYPos(blocksOfAsphalt_Yellow_0, X, Y, Z, BlocksOfAsphalt_Yellow_0.AY_1); renderBlocks.uvRotateTop = 3; break;
		case 6: renderBlocks.renderFaceYPos(blocksOfAsphalt_Yellow_0, X, Y, Z, BlocksOfAsphalt_Yellow_0.AY_2); renderBlocks.uvRotateTop = 3; break;
		case 7: renderBlocks.renderFaceYPos(blocksOfAsphalt_Yellow_0, X, Y, Z, BlocksOfAsphalt_Yellow_0.AY_1); renderBlocks.uvRotateTop = 2; break;
		case 8: renderBlocks.renderFaceYPos(blocksOfAsphalt_Yellow_0, X, Y, Z, BlocksOfAsphalt_Yellow_0.AY_2); renderBlocks.uvRotateTop = 2; break;
	}

    boolean flag = renderBlocks.renderStandardBlock(blocksOfAsphalt_Yellow_0, X, Y, Z);
    renderBlocks.uvRotateSouth = 0;
    renderBlocks.uvRotateEast = 0;
    renderBlocks.uvRotateWest = 0;
    renderBlocks.uvRotateNorth = 0;
    renderBlocks.uvRotateTop = 0;
    renderBlocks.uvRotateBottom = 0;
	return flag;
}

@Override
public boolean shouldRender3DInInventory()
{
	return true;
}

@Override
public int getRenderId()
{
	return ClientProxy.BOA_Yellow_0_renderID;
}

private void renderBlocksOfAsphalt_Yellow_0(int X, int Y, int Z, RenderBlocks renderBlocks)
{

}

}

Posted

Thanks. Now the textures I wanted to stick on the block really do stick, but how do I rotate them

 

NEW CODE:

RenderBlocksOfAsphalt_Yellow_0

package trafficStuffMod.client;

import org.lwjgl.opengl.GL11;

import trafficStuffMod.common.*;
import net.minecraft.block.Block;
import net.minecraft.client.renderer.RenderBlocks;
import net.minecraft.client.renderer.Tessellator;
import net.minecraft.util.Icon;
import net.minecraft.world.IBlockAccess;
import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler;
import cpw.mods.fml.client.registry.RenderingRegistry;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;

public class RenderBlocksOfAsphalt_Yellow_0 implements ISimpleBlockRenderingHandler
{

public static int blocksOfAsphalt_Yellow_0_renderID;

public RenderBlocksOfAsphalt_Yellow_0()
{
	RenderBlocksOfAsphalt_Yellow_0.blocksOfAsphalt_Yellow_0_renderID = RenderingRegistry.getNextAvailableRenderId();

}

@Override
public void renderInventoryBlock(Block block, int metadata, int modelID, RenderBlocks renderBlocks)
{
	/** Tessellator tessellator = Tessellator.instance;
	GL11.glTranslatef(-0.5F, -0.5F, -0.5F);
	tessellator.startDrawingQuads();
	renderBlocksOfAsphalt_Yellow_0(0, 0, 0, renderBlocks);
	tessellator.draw();
	GL11.glTranslatef(0.5F, 0.5F, 0.5F); */
}

@Override
public boolean renderWorldBlock(IBlockAccess IBlockAccess, int X, int Y, int Z, Block block, int modelID, RenderBlocks renderBlocks)
{
	Tessellator tessellator = Tessellator.instance;
	TileEntityBlocksOfAsphalt_Yellow_0 BOA_Yellow_0 = (TileEntityBlocksOfAsphalt_Yellow_0) IBlockAccess.getBlockTileEntity(X, Y, Z);
	BlocksOfAsphalt_Yellow_0 blocksOfAsphalt_Yellow_0 = (BlocksOfAsphalt_Yellow_0) TrafficStuffMod.blocksOfAsphalt_Yellow_0;
	int subtype = BOA_Yellow_0.getSubtype();
	int age = BOA_Yellow_0.getAge();
	double D = 0.000000000000001D;
    int l = blocksOfAsphalt_Yellow_0.getMixedBrightnessForBlock(IBlockAccess, X, Y, Z);
	renderBlocks.setRenderBounds(0.0D + D, 0.0D + D, 0.0D + D, 1.0D - D, 1.0D - D, 1.0D - D);
	boolean flag = renderBlocks.renderStandardBlock(blocksOfAsphalt_Yellow_0, X, Y, Z);
	renderBlocks.setRenderBounds(0.0D, 0.0D, 0.0D, 1.0D, 1.0D, 1.0D);
	tessellator.setBrightness(l);
	renderBlocks.renderStandardBlockWithColorMultiplier(blocksOfAsphalt_Yellow_0, X, Y, Z, l, l, l);
	if (subtype == 1) { renderBlocks.renderFaceYPos(blocksOfAsphalt_Yellow_0, X, Y, Z, BlocksOfAsphalt_Yellow_0.AY_1); renderBlocks.uvRotateTop = 0; }
	if (subtype == 2) { renderBlocks.renderFaceYPos(blocksOfAsphalt_Yellow_0, X, Y, Z, BlocksOfAsphalt_Yellow_0.AY_2); renderBlocks.uvRotateTop = 0; }
	if (subtype == 3) { renderBlocks.renderFaceYPos(blocksOfAsphalt_Yellow_0, X, Y, Z, BlocksOfAsphalt_Yellow_0.AY_1); renderBlocks.uvRotateTop = 1; }
	if (subtype == 4) { renderBlocks.renderFaceYPos(blocksOfAsphalt_Yellow_0, X, Y, Z, BlocksOfAsphalt_Yellow_0.AY_2); renderBlocks.uvRotateTop = 1; }
	if (subtype == 5) { renderBlocks.renderFaceYPos(blocksOfAsphalt_Yellow_0, X, Y, Z, BlocksOfAsphalt_Yellow_0.AY_1); renderBlocks.uvRotateTop = 3; }
	if (subtype == 6) { renderBlocks.renderFaceYPos(blocksOfAsphalt_Yellow_0, X, Y, Z, BlocksOfAsphalt_Yellow_0.AY_2); renderBlocks.uvRotateTop = 3; }
	if (subtype == 7) { renderBlocks.renderFaceYPos(blocksOfAsphalt_Yellow_0, X, Y, Z, BlocksOfAsphalt_Yellow_0.AY_1); renderBlocks.uvRotateTop = 2; }
	if (subtype ==  { renderBlocks.renderFaceYPos(blocksOfAsphalt_Yellow_0, X, Y, Z, BlocksOfAsphalt_Yellow_0.AY_2); renderBlocks.uvRotateTop = 2; }


    renderBlocks.uvRotateSouth = 0;
    renderBlocks.uvRotateEast = 0;
    renderBlocks.uvRotateWest = 0;
    renderBlocks.uvRotateNorth = 0;
    renderBlocks.uvRotateTop = 0;
    renderBlocks.uvRotateBottom = 0;

	return flag;
}

@Override
public boolean shouldRender3DInInventory()
{
	return true;
}

@Override
public int getRenderId()
{
	return ClientProxy.BOA_Yellow_0_renderID;
}

private void renderBlocksOfAsphalt_Yellow_0(int X, int Y, int Z, RenderBlocks renderBlocks)
{

}

}

Posted

Hi

 

If you want your item to be rendered in the inventory as a 3D block using the ISBRH, you should define it as an ItemBlock.

 

so for example

 

/*
This is the item that corresponds to BlockPyramid.
*/
public class ItemBlockPyramid extends ItemBlock {

  public ItemBlockPyramid(int id) {
    super(id);
    this.setMaxStackSize(64);
    this.setCreativeTab(CreativeTabs.tabBlock);
    this.setUnlocalizedName("ItemBlockPyramid");
  }
}

and register it properly...

 

    GameRegistry.registerBlock(blockPyramid, ItemBlockPyramid.class, "blockPyramid");

It should render fine in the inventory if you do that.

 

-TGG

 

for reference:

 

public class BlockPyramid extends Block {

  public BlockPyramid(int id) {
    super(id, Material.ground);
    this.setCreativeTab(CreativeTabs.tabBlock).setUnlocalizedName("BlockPyramid");
  }

  @Override
  public boolean isOpaqueCube() {
    return false;
  }

  // This icon is never actually displayed because we always render it using ISBRendererBlockPyramid, however when you 
  //   destroy a block the
  //   fragments that fly everywhere are derived from the block Icon, so we use something sensible..
  @Override
  public void registerIcons(IconRegister iconRegister) {
    blockIcon = Block.blockLapis.getIcon(0, 0);
  }

  @Override
  public boolean renderAsNormalBlock() {
    return false;
  }

  @Override
  public int getRenderType() {
    return ISBRendererBlockPyramid.myRenderID;
  }

}

 

Posted

yes because it causes crashes and it's there if I get an idea in the future

and the renderBlocksOfAsphalt_Yellow_0 method is empty because if I put all the rendeing stuff in there and then when the renderWorldBlock method is called it gives me a crash and a nullPointerException on that line, dunno why

Posted

I did all that, but it is still invincible.

 

I do not think that word means what you think it means.

Apparently I'm a complete and utter jerk and come to this forum just like to make fun of people, be confrontational, and make your personal life miserable.  If you think this is the case, JUST REPORT ME.  Otherwise you're just going to get reported when you reply to my posts and point it out, because odds are, I was trying to be nice.

 

Exception: If you do not understand Java, I WILL NOT HELP YOU and your thread will get locked.

 

DO NOT PM ME WITH PROBLEMS. No help will be given.

Posted

Hi

 

I'm not sure I understand - if you have commented out the code in renderIventoryBlock, how were you expecting it to render in the inventory?  Am I missing something?

 

	@Override
public void renderInventoryBlock(Block block, int metadata, int modelID, RenderBlocks renderBlocks)
{
	/** Tessellator tessellator = Tessellator.instance;
	GL11.glTranslatef(-0.5F, -0.5F, -0.5F);
	tessellator.startDrawingQuads();
	renderBlocksOfAsphalt_Yellow_0(0, 0, 0, renderBlocks);
	tessellator.draw();
	GL11.glTranslatef(0.5F, 0.5F, 0.5F); */
}

 

You should be able to use more-or-less the same rendering code in your renderInventoryBlock as in your renderWorldBlock, except that you will have to supply the TileEntity information some other way, since the Block passed in doesn't have a valid one.

 

Give it a shot and if you get an error, post it here and we can try to help more?

 

-TGG

 

Posted

Hi

 

ok, thanks I'll try to make it render the same and the reason the renderInvenotryBlock is commented is because it gives me crashes

 

Crash is good, that means your renderer is registered and being called.

Now you just need to figure out why it's crashing.

 

If you're having trouble with that, post the crash log and the code causing the crash.

 

-TGG

 

 

 

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Announcements



×
×
  • Create New...

Important Information

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