Jump to content

[1.10.2] Only render block if player holds a specified item


Fubar

Recommended Posts

Hello there.

 

I'm currently trying to render a block invisible unless the player holds a specified item - for example an apple.

As long as the player is holding said item the block will be visible for that player.

It's a simple block and has no entity.

It could also be used as a building block which means you could have many of them at once in the same chunk.

 

I tried overriding render methods in the block class like shouldSideBeRendered and returned true/false depending on the held item, but since those methods get only called after a block update/placement they are not suitable for my situation.

 

So my guess is I need to register my own render type and return it in the getRenderType method ?

 

I'm a bit lost here and would like someone to point me in the right direction on how to implement that.

 

Thank you for your time.

Link to comment
Share on other sites

You could override getActualState(...) then return the state that is not visible on the server, and if it is client side use Minecratf.getMinecraft().thePlayer to check if the client side player is holding the item and if so switch the blockstate to the visible one only client side. This will work I assume unless you plan on changing something other than the rending of the block, if you need some psuedocode ask.

VANILLA MINECRAFT CLASSES ARE THE BEST RESOURCES WHEN MODDING

I will be posting 1.15.2 modding tutorials on this channel. If you want to be notified of it do the normal YouTube stuff like subscribing, ect.

Forge and vanilla BlockState generator.

Link to comment
Share on other sites

I implemented this here using a per-tick check to see if the player's held item reveals hidden blocks (using a capability) and re-rendering chunks containing hidden blocks when the player starts or stops revealing them. This is based on the code that allows EnderIO's Yeta Wrench to hide Conduit Facades.

 

I had to use a ticking

TileEntity

, but I tried to keep it as lean as possible.

 

There was a small FPS drop when starting or stopping the revealing due to the chunks re-rendering, but FPS seemed stable once the chunks had been rendered.

 

This may or may not be as performant as the

TextureAtlasSprite

method suggested by diesieben07.

Please don't PM me to ask for help. Asking your question in a public thread preserves it for people who are having the same problem in the future.

Link to comment
Share on other sites

I'd use the TextureAtlasSprite method.  They're real easy to use, unless you're doing crazy shit like trying to generate a runtime texture.  Just go look at the TextureAtlasSpriteClock and TextureAtlasSpriteCompas classes.  What they do is override

updateAnimation

, look at player/world information, and determine which frame of the animation should be used and update it.  Dirt simple.

 

The hard part is letting Minecraft know there's a custom TextureAtlasSprite class involved (you may have to dig around in the compass/clock item classes and related code; I haven't done this for 1.10 yet).

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

Just go look at the TextureAtlasSpriteClock and TextureAtlasSpriteCompas classes.

These don't actually exist anymore, the item override mechanic is used instead of the hardcoded texture classes.

 

Ah, thanks diesieben07.

I think I'd glimpsed that, but didn't look very far into it. Also, away from my dev environ.

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

Right, just that vanilla isn't a reference point any more.

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

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.