Jump to content

[1.7.10] Entity rendering pure black while moving through a block


Blargerist

Recommended Posts

Rendering code defeats me. I am currently working on a mod which adds the ability for one to add physics movement to any block.

 

At times when the entities created for these moving blocks are required to move through blocks placed within the world using noClip. While an entity is passing through a block, it is rendered as a pure black cube. While an entity is not passing through a block, it is rendered perfectly.

 

As this mod is meant to be compatible with any block(vanilla or modded), I am editing base EntityFallingBlock classes and making changed/calling my own classes as required. Therefore, most code being used is purely vanilla.

 

Modified version of net/minecraft/client/renderer/entity/RenderFallingBlock.doRender method:

public void doRender(EntityFallingBlock p_76986_1_, double p_76986_2_, double p_76986_4_, double p_76986_6_, float p_76986_8_, float p_76986_9_)
{
World world = p_76986_1_.func_145807_e();
Block block = p_76986_1_.func_145805_f();
int i = MathHelper.floor_double(p_76986_1_.posX);
int j = MathHelper.floor_double(p_76986_1_.posY);
int k = MathHelper.floor_double(p_76986_1_.posZ);

GL11.glPushMatrix();
GL11.glTranslatef((float) p_76986_2_, (float) p_76986_4_, (float) p_76986_6_);
this.bindEntityTexture(p_76986_1_);
GL11.glDisable(GL11.GL_LIGHTING);
Tessellator tessellator;

if (block instanceof BlockAnvil)
{
	this.field_147920_a.blockAccess = world;
	tessellator = Tessellator.instance;
	tessellator.startDrawingQuads();
	tessellator.setTranslation((double) ((float) (-i) - 0.5F), (double) ((float) (-j) - 0.5F), (double) ((float) (-k) - 0.5F));
	this.field_147920_a.renderBlockAnvilMetadata((BlockAnvil) block, i, j, k, p_76986_1_.field_145814_a);
	tessellator.setTranslation(0.0D, 0.0D, 0.0D);
	tessellator.draw();
}
else if (block instanceof BlockDragonEgg)
{
	this.field_147920_a.blockAccess = world;
	tessellator = Tessellator.instance;
	tessellator.startDrawingQuads();
	tessellator.setTranslation((double) ((float) (-i) - 0.5F), (double) ((float) (-j) - 0.5F), (double) ((float) (-k) - 0.5F));
	this.field_147920_a.renderBlockDragonEgg((BlockDragonEgg) block, i, j, k);
	tessellator.setTranslation(0.0D, 0.0D, 0.0D);
	tessellator.draw();
}
else
{
	this.field_147920_a.setRenderBoundsFromBlock(block);
	RenderFallingBlocks.renderBlockSandFalling(this.field_147920_a, block, world, i, j, k, p_76986_1_.field_145814_a);
}

GL11.glEnable(GL11.GL_LIGHTING);
GL11.glPopMatrix();
}

 

 

My RenderFallingBlock class:

public class RenderFallingBlocks
{
public static void renderBlockSandFalling(RenderBlocks renderBlocks, Block block, World world, int x, int y, int z, int meta)
{
	if (!block.renderAsNormalBlock())
	{
		if (block.getRenderType() == 18)
		{
			renderBlocks.renderBlockSandFalling(block, world, x, y, z, meta);
		}
		else
		{
			renderBlocks.renderBlockAsItem(block, meta, 0.8F);
		}
	}
	else
	{
		int colormult;
		if (block instanceof BlockLeaves)
		{
			colormult = colorLeaves(world, x, z, meta);
		}
		else
		{
			colormult = block.colorMultiplier(world, x, y, z);
		}

		float cm1 = (float) (colormult >> 16 & 255) / 255.0F;
		float cm2 = (float) (colormult >> 8 & 255) / 255.0F;
		float cm3 = (float) (colormult & 255) / 255.0F;

		renderBlocks.enableAO = false;
		boolean var9 = false;
		float var10 = 0.5F;
		float var11 = 1.0F;
		float var12 = 0.8F;
		float var13 = 0.6F;
		float var14 = var11 * cm1;
		float var15 = var11 * cm2;
		float var16 = var11 * cm3;
		float var17 = var10 * cm1;
		float var18 = var12 * cm1;
		float var19 = var13 * cm1;
		float var20 = var10 * cm2;
		float var21 = var12 * cm2;
		float var22 = var13 * cm2;
		float var23 = var10 * cm3;
		float var24 = var12 * cm3;
		float var25 = var13 * cm3;

		Tessellator tesselator = Tessellator.instance;

		tesselator.setBrightness(block.getMixedBrightnessForBlock(world, x, y, z));
		tesselator.startDrawingQuads();

		tesselator.setColorOpaque_F(var17, var20, var23);
		renderBlocks.renderFaceYNeg(block, -0.5D, -0.5D, -0.5D, block.getIcon(0, meta));

		tesselator.setColorOpaque_F(var14, var15, var16);
		renderBlocks.renderFaceYPos(block, -0.5D, -0.5D, -0.5D, block.getIcon(1, meta));

		tesselator.setColorOpaque_F(var18, var21, var24);
		renderBlocks.renderFaceZNeg(block, -0.5D, -0.5D, -0.5D, block.getIcon(2, meta));

		tesselator.setColorOpaque_F(var18, var21, var24);
		renderBlocks.renderFaceZPos(block, -0.5D, -0.5D, -0.5D, block.getIcon(3, meta));

		tesselator.setColorOpaque_F(var19, var22, var25);
		renderBlocks.renderFaceXNeg(block, -0.5D, -0.5D, -0.5D, block.getIcon(4, meta));

		tesselator.setColorOpaque_F(var19, var22, var25);
		renderBlocks.renderFaceXPos(block, -0.5D, -0.5D, -0.5D, block.getIcon(5, meta));

		tesselator.draw();
	}
}

public static int colorLeaves(World par1World, int par2, int par4, int var5)
{

	if ((var5 & 3) == 1)
	{
		return ColorizerFoliage.getFoliageColorPine();
	}
	else if ((var5 & 3) == 2)
	{
		return ColorizerFoliage.getFoliageColorBirch();
	}
	else
	{
		int var6 = 0;
		int var7 = 0;
		int var8 = 0;

		for (int var9 = -1; var9 <= 1; ++var9)
		{
			for (int var10 = -1; var10 <= 1; ++var10)
			{//64 Is a guess 
				int var11 = par1World.getBiomeGenForCoords(par2 + var10, par4 + var9).getBiomeFoliageColor(par2 + var10, 64, par4 + var9);
				var6 += (var11 & 16711680) >> 16;
				var7 += (var11 & 65280) >> 8;
				var8 += var11 & 255;
			}
		}

		return (var6 / 9 & 255) << 16 | (var7 / 9 & 255) << 8 | var8 / 9 & 255;
	}
}
}

 

I believe all other rendering related code is vanilla. Any ideas on how to cause the entity to render properly while passing through blocks would be apreciated. I imagine code related to the EnderDragon contains what I require, but I can't exactly find it.

 

Simple problem explanation: Entity moving through a block in the world renders as pure black.

Link to comment
Share on other sites

Entities that have an origin inside a block will receive no light because the lighting value at their location is inside a block where no light shines.  Sorry, but that's the way it is.

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.

Link to comment
Share on other sites

Well, tested things a bit because it appeared the dragon could still render properly while moving through blocks. It seems that even my entity is able to properly render while moving through blocks in the end dimension.

 

Happen to know what it is about the end dimension that allows this?

Link to comment
Share on other sites

I assume the happenings in my last post has to do with the "minimum light level" of sorts that the end dimension has, and is therefore utterly useless in this situation.

 

Is there no way to set the brightness of an entity regardless of it's position partially inside a block in the world? Not that I haven't tried and failed to do such with things like tesselator.setBrightness(255);. It would be highly unfortunate if it's simply a reality that cannot be circumvented in any way short of changing the minimum light level of the dimension. Very much ruins the aesthetic....

Link to comment
Share on other sites

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.



×
×
  • Create New...

Important Information

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