Jump to content

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


Blargerist
 Share

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
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.

 Share



  • Recently Browsing

    • No registered users viewing this page.
  • Posts

    • I made a huge forge 1.7.10 mod pack but whenever I try to create a singleplayer world I get the error saying "A fatal error has occurred, this connection is terminated." Does anyone know what the issue could be?  Here is my fml-client-latest.log from when it crashes: https://paste.ubuntu.com/p/3rKSJSqnrX/ and here is the list of mods: https://imgur.com/a/AZifMbg    
    • Im trying to host a minecraft server using the curseforge serverpack from FTB Direwolf20 and when I try to start the server I run into an error The Error: Starting server A problem occurred running the Server launcher.java.lang.reflect.InvocationTargetException         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)         at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)         at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)         at java.lang.reflect.Method.invoke(Unknown Source)         at cpw.mods.fml.relauncher.ServerLaunchWrapper.run(ServerLaunchWrapper.java:43)         at cpw.mods.fml.relauncher.ServerLaunchWrapper.main(ServerLaunchWrapper.java:12) Caused by: java.lang.NoClassDefFoundError: org/apache/logging/log4j/Level         at net.minecraft.launchwrapper.Launch.launch(Launch.java:94)         at net.minecraft.launchwrapper.Launch.main(Launch.java:28)         ... 6 more Caused by: java.lang.ClassNotFoundException: org.apache.logging.log4j.Level         at java.net.URLClassLoader$1.run(Unknown Source)         at java.net.URLClassLoader$1.run(Unknown Source)         at java.security.AccessController.doPrivileged(Native Method)         at java.net.URLClassLoader.findClass(Unknown Source)         at java.lang.ClassLoader.loadClass(Unknown Source)         at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)         at java.lang.ClassLoader.loadClass(Unknown Source)         ... 8 more   I'have tried deleting and downloading the newset version of java wich didnt work and now im using an older version which is the 1.7.0_80 Here is what my Server folder looks like: https://ibb.co/jkbfRY7 Here is what the ServerStart.bat file looks like: @if NOT "%FTB_VERBOSE%"=="yes" ( @echo off ) call settings.bat if NOT EXIST minecraft_server.1.7.10.jar ( goto install ) if NOT EXIST libraries\%LAUNCHWRAPPER% ( goto install ) goto skipinstall :install echo running install script! call FTBInstall.bat :skipinstall REM Check if java in path REM TODO: use %JAVACMD% where java > NUL 2>&1 if %ERRORLEVEL% NEQ 0 ( echo No java binary in path. Can't run server, exiting... pause exit /B ) REM Test JVM REM e.g. 32-bit JVM does not have server\jvm.dll library java -server -version > java-test.log 2>&1 if %ERRORLEVEL% NEQ 0 ( echo Detected following JVM error: echo ======================================= more java-test.log echo ======================================= echo JVM test failed. Can't run server, Exiting... pause exit /B ) if not exist eula.txt ( echo Missing eula.txt. Startup will fail and eula.txt will be created echo Make sure to read eula.txt before playing! goto startserver ) find "eula=false" eula.txt 1 > NUL 2>&1 if %ERRORLEVEL% EQU 0 ( echo Make sure to read eula.txt before playing! Exiting. pause exit /B ) del /f /q autostart.stamp > nul 2>1 :startserver echo Starting server java -server -Xms512M -Xmx2048M -XX:PermSize=256M -XX:+UseParNewGC -XX:+CMSIncrementalPacing -XX:+CMSClassUnloadingEnabled -XX:ParallelGCThreads=2 -XX:MinHeapFreeRatio=5 -XX:MaxHeapFreeRatio=10 -jar FTBServer-1.7.10-1558.jar nogui :server_loop if exist autostart.stamp ( del /f /q autostart.stamp > nul 2>1 echo If you want to completely stop the server process now, press Ctrl+C before the time is up! for /l %%i in (5,-1,1) do ( echo Restarting server in %%i choice /t 1 /d y > nul ) echo Starting server now java -server -Xms512M -Xmx2048M -XX:PermSize=256M -XX:+UseParNewGC -XX:+CMSIncrementalPacing -XX:+CMSClassUnloadingEnabled -XX:ParallelGCThreads=2 -XX:MinHeapFreeRatio=5 -XX:MaxHeapFreeRatio=10 -jar FTBServer-1.7.10-1558.jar nogui echo Server process finished goto :server_loop ) echo Exiting... pause  
    • Made a modpack (Well Rounded Blockheads, in case the modlist on curseforge helps) and server to host it, worked fine until last night. The issue that pops up after some days being up/working is when you leave a world (singleplayer) or shutdown a server, the process hangs and jumps to 8.5gb ram used, eats up CPU usage (50-60% in taskman on a 3800x) and just sits there. If done on a single player world, the game doesnt fully crash, (e.g. if you alt+f4 buttons like save and quit, options stay in the window, are still clickable but they do nothing) Saving seems to still happen, as location/inventory updates if I restart server or client and play the world again.   If I start the currently afflicted server but dont login the server closes properly, its only once I log back in the problem occurs. Its a priv server and I dont have anyone else to test atm so Idk if its a prob with my player or players/area in general. Only recent changes in game are the additions of a pnuematicraft pressure chamber, an enchanting table, and bookshelves from builders crafts and additions.... I've been trying to get help on this all day, so ANY assistance goes a long way, even if its a way to debug this myself >~< Debug/Latest logs
    • Thanks warjort. I was afraid, that this is because they are entities. Now I know where to dig. But what about water, for example? I have checked via debug code, that there is no entity there (appropriate method return null). What is wrong with liquids?
  • Topics

×
×
  • Create New...

Important Information

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