Jump to content

Rendering Blocks While Inside Them


Syric

Recommended Posts

I have a block which extends HalfTransparentBlock so that it is not visible through other copies of itself. (I intend it to be placed in groups, and I don't want the interior faces to be visible.) However, it also does not have collision - players are intended to enter it. When they do so, the block becomes invisible. Can I prevent this somehow? I would like to preserve the block's texture when looking out from inside it.

An acceptable alternative would be a screen overlay, but I'm not sure how to do that.

Link to comment
Share on other sites

You need the faces to be double sided. I'm not sure how this is done with the json format, however.

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

I can successfully get faces to render while inside the block... but those new faces also render from outside the block, which really negates the whole HalfTransparentBlock business.

I'm also not having any luck with particles. Does anyone know if there's a way to make a particle render after blocks do?

Current avenue of investigation is rendering it like water, which is translucent, visible from inside itself, and not visible through other water blocks, while also displaying particles inside it. Water rendering is tricky to imitate, though.

Edit: water doesn't display particles while you're outside it. Nor do any other translucent blocks I can find.

Edited by Syric
Link to comment
Share on other sites

2 hours ago, Syric said:

Does anyone know if there's a way to make a particle render after blocks do?

https://github.com/Draco18s/ReasonableRealism/blob/1.14.4/src/main/java/com/draco18s/harderores/client/ProspectorParticle.java#L46

Mind, that's old code and there's almost certainly a vanilla class wrapper method that does the same thing. Note that this will cause the particle to always draw on top of blocks, even opaque ones. So you might want to clarify a bit.

2 hours ago, Syric said:

but those new faces also render from outside the block, which really negates the whole HalfTransparentBlock business.

Right right. I know water does what you want, but its been a while since I looked at the fluid render code (as in, I fixed the issue you're having on Forge fluids back on like 1.6.4 or 1.7.10)

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

6 minutes ago, Draco18s said:

Mind, that's old code and there's almost certainly a vanilla class wrapper method that does the same thing. Note that this will cause the particle to always draw on top of blocks, even opaque ones. So you might want to clarify a bit.

Hmmm. I think you're right; that might not be what I want - I want these particles to be inside a specific block and visible from the outside of that block alone, but not through other block types.

The block I'm doing is a jelly-like block that the player immerses themself in. I want it to be placed in groups, hence the translucency (don't want the jelly pile to have a nice grid pattern visible inside it). I want it to be visible from the inside, hence the culling issue (don't want it to disappear as soon as you sink in). Finally, I wanted there to be floating particles in it, which is possibly the hardest issue of them all.

I think I might be close to a solution on the culling feature, but I'm not sure if there's gonna be a reasonable option for the particles thing.

Link to comment
Share on other sites

I have successfully created a translucent block model visible from the inside. It works in groups. The only thing I think I might change is that when placed on a solid block of a different type, that block is visible clearly - if I fix that, it'll be by adding a blockstate that doesn't cull the bottom texture and trying to get that to only activate when the block is placed on a solid block that isn't another one of itself.

Posting the block model .json here for if anyone ever has the same issue. If you deleted all the "cullface", it would also be suitable for use as a nontranslucent block visible from inside itself.

{
	"credit": "Made with Blockbench",
	"parent": "block/block",
	"textures": {
		"0": "alchemine:block/vita_slime",
		"particle": "alchemine:block/vita_slime"
	},
	"elements": [
		{
			"from": [0, 0, 0],
			"to": [16, 16, 16],
			"faces": {
				"north": {"uv": [0, 0, 16, 16], "texture": "#0", "cullface": "north"},
				"east": {"uv": [0, 0, 16, 16], "texture": "#0", "cullface": "east"},
				"south": {"uv": [0, 0, 16, 16], "texture": "#0", "cullface": "south"},
				"west": {"uv": [0, 0, 16, 16], "texture": "#0", "cullface": "west"},
				"up": {"uv": [0, 0, 16, 16], "texture": "#0", "cullface": "up"},
				"down": {"uv": [0, 0, 16, 16], "texture": "#0", "cullface": "down"}
			}
		},
		{
			"name": "northinner",
			"from": [0, 0, 0],
			"to": [16, 16, 0],
			"faces": {
				"east": {"uv": [0, 0, 0, 16], "texture": "#missing"},
				"south": {"uv": [16, 0, 0, 16], "texture": "#0", "cullface": "north"},
				"west": {"uv": [0, 0, 0, 16], "texture": "#missing"},
				"up": {"uv": [0, 0, 16, 0], "texture": "#missing"},
				"down": {"uv": [0, 0, 16, 0], "texture": "#missing"}
			}
		},
		{
			"name": "southinner",
			"from": [0, 0, 16],
			"to": [16, 16, 16],
			"faces": {
				"north": {"uv": [16, 0, 0, 16], "texture": "#0", "cullface": "south"},
				"east": {"uv": [0, 0, 0, 16], "texture": "#missing"},
				"west": {"uv": [0, 0, 0, 16], "texture": "#missing"},
				"up": {"uv": [0, 0, 16, 0], "texture": "#missing"},
				"down": {"uv": [0, 0, 16, 0], "texture": "#missing"}
			}
		},
		{
			"name": "westinner",
			"from": [0, 0, 0],
			"to": [0, 16, 16],
			"faces": {
				"north": {"uv": [0, 0, 0, 16], "texture": "#missing"},
				"east": {"uv": [16, 0, 0, 16], "texture": "#0", "cullface": "west"},
				"south": {"uv": [0, 0, 0, 16], "texture": "#missing"},
				"up": {"uv": [0, 0, 0, 16], "texture": "#missing"},
				"down": {"uv": [0, 0, 0, 16], "texture": "#missing"}
			}
		},
		{
			"name": "eastinner",
			"from": [16, 0, 0],
			"to": [16, 16, 16],
			"faces": {
				"north": {"uv": [0, 0, 0, 16], "texture": "#missing"},
				"south": {"uv": [0, 0, 0, 16], "texture": "#missing"},
				"west": {"uv": [16, 0, 0, 16], "texture": "#0", "cullface": "east"},
				"up": {"uv": [0, 0, 0, 16], "texture": "#missing"},
				"down": {"uv": [0, 0, 0, 16], "texture": "#missing"}
			}
		},
		{
			"name": "bottominner",
			"from": [0, 0, 0],
			"to": [16, 0, 16],
			"faces": {
				"north": {"uv": [0, 0, 16, 0], "texture": "#missing"},
				"east": {"uv": [0, 0, 16, 0], "texture": "#missing"},
				"south": {"uv": [0, 0, 16, 0], "texture": "#missing"},
				"west": {"uv": [0, 0, 16, 0], "texture": "#missing"},
				"up": {"uv": [0, 0, 16, 16], "texture": "#0", "cullface": "down"}
			}
		},
		{
			"name": "topinner",
			"from": [0, 16, 0],
			"to": [16, 16, 16],
			"faces": {
				"north": {"uv": [0, 0, 16, 0], "texture": "#missing"},
				"east": {"uv": [0, 0, 16, 0], "texture": "#missing"},
				"south": {"uv": [0, 0, 16, 0], "texture": "#missing"},
				"west": {"uv": [0, 0, 16, 0], "texture": "#missing"},
				"down": {"uv": [0, 0, 16, 16], "texture": "#0", "cullface": "up"}
			}
		}
	],
	"display": {},
	"groups": [
		{
			"name": "vita_slime_new",
			"origin": [8, 8, 8],
			"color": 0,
			"children": [0, 1, 2, 3, 4, 5, 6]
		}
	]
}

 

Link to comment
Share on other sites

As it happens, turning off the inner faces' culling in order to display them over adjacent blocks causes z-fighting. Further, doing this for any possible combination of adjacent non-identical blocks would require six boolean blockstates, for a total of sixty-four independent states and models, which is a pain. I'm going to leave off with this for now and suggest that anyone attempting this use the model file above and, if necessary, augment with a visual overlay. I'll figure out how to do that later.

Link to comment
Share on other sites

Powder snow does almost exactly what I want with the single and easily-remedied exception that it's opaque. Using its model (and borrowing skipRendering() from its block class) makes everything work. Is easier but does not actually provide full functionality. It cleanly and easily renders from outside and inside, but this method does not duplicate powder snow's ability to render on top of adjacent blocks. I don't know how it does that.

Edited by Syric
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.