Fubar Posted September 2, 2016 Posted September 2, 2016 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. Quote
Animefan8888 Posted September 2, 2016 Posted September 2, 2016 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. Quote 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.
Choonster Posted September 3, 2016 Posted September 3, 2016 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. Quote 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.
Draco18s Posted September 3, 2016 Posted September 3, 2016 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). Quote 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.
Egietje Posted September 3, 2016 Posted September 3, 2016 U can take a look at the code of the barrier block and learn how it is done the vanilla way Quote http://i.imgur.com/J4rrGt6.png[/img]
Draco18s Posted September 3, 2016 Posted September 3, 2016 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. Quote 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.
Draco18s Posted September 3, 2016 Posted September 3, 2016 Right, just that vanilla isn't a reference point any more. Quote 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.
Recommended Posts
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.