LeBonCharlie Posted October 17, 2019 Share Posted October 17, 2019 (edited) I've added a custom trunk block to my mod and I'd like to replace all log blocks used in vanilla trees with that block. What would be the easiest way to achieve that ? I've seen that some tree features, for example TreeFeature, have a constructor where you can input the blocks to use to generate the tree, so I can register custom trees quite easily, but then I would have to remove all the vanilla trees to all biomes (if that is even possible) and add the custom ones. Is that a good solution ? Edited October 18, 2019 by LeBonCharlie Quote Link to comment Share on other sites More sharing options...
jeffryfisher Posted October 17, 2019 Share Posted October 17, 2019 Some houses are built as if they have tree trunks laying horizontally. Do you want those logs replaced too (for appearances), or just living trees (for some behavior)? Quote The debugger is a powerful and necessary tool in any IDE, so learn how to use it. You'll be able to tell us more and get better help here if you investigate your runtime problems in the debugger before posting. Link to comment Share on other sites More sharing options...
LeBonCharlie Posted October 17, 2019 Author Share Posted October 17, 2019 Oh I hadn't thought about that ! Exactly the second option Quote Link to comment Share on other sites More sharing options...
Draco18s Posted October 17, 2019 Share Posted October 17, 2019 (edited) 20 minutes ago, LeBonCharlie said: Oh I hadn't thought about that ! Exactly the second option Oof, good luck. I did work that tried to detect "living" trees and there are so many edge-cases its insane. Does a tree that has the ground under it replaced by a lake count as "living"? Does a tree growing on gravel count as "living"? Do those 1-tall "bushes" in jungles count as "trees"? Are dark oak trees 1 tree or 4? Edited October 17, 2019 by Draco18s 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. Link to comment Share on other sites More sharing options...
LeBonCharlie Posted October 17, 2019 Author Share Posted October 17, 2019 I don't actually want to "detect" the trees but make them generate with my custom blocks. But maybe you're suggesting that it's possible to let the Vanilla trees generate as so and then detect them and replace the blocks ? Quote Link to comment Share on other sites More sharing options...
LeBonCharlie Posted October 17, 2019 Author Share Posted October 17, 2019 (edited) for my post to make more sense, my custom TrunkBlock propagates the destruction vertically, so that you'd only need to break one block to cut down a tree. With that conception the 2x2 trees are 4 trees. For that reason, and the fact that some trees (jungle, oak) have branches, i'll add a horizontal propagation Edited October 17, 2019 by LeBonCharlie error Quote Link to comment Share on other sites More sharing options...
Draco18s Posted October 17, 2019 Share Posted October 17, 2019 1 hour ago, LeBonCharlie said: and the fact that some trees (jungle, oak) have branches, i'll add a horizontal propagation That horizontal propagation will also work for dark oak (but you'd probably still want all four base blocks "tree" root blocks). Here's how I handled it: https://github.com/Draco18s/HarderStuff/blob/master/src/main/java/com/draco18s/wildlife/util/TreeDataHooks.java#L338 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. Link to comment Share on other sites More sharing options...
LeBonCharlie Posted October 17, 2019 Author Share Posted October 17, 2019 31 minutes ago, Draco18s said: Here's how I handled it: https://github.com/Draco18s/HarderStuff/blob/master/src/main/java/com/draco18s/wildlife/util/TreeDataHooks.java#L338 Thanks for the help, but this seems really complex for my needs... I'll keep looking. Really cool feature these aging trees though ! Quote Link to comment Share on other sites More sharing options...
Draco18s Posted October 17, 2019 Share Posted October 17, 2019 37 minutes ago, LeBonCharlie said: Thanks for the help, but this seems really complex for my needs... I'll keep looking. Really cool feature these aging trees though ! Oh yeah, a lot of it isn't relevant, I just meant the one-or-two functions (down to line 395) for propagating upwards from the "root" and making sure to catch every log. That's also old 1.10 code, but basically all it does is look at blocks above and blocks adjacent (as well as 1-above the 8 adjacent positions). That code absolutely catches every log in all the vanilla tree types. This function did the chunk scanning for generated trees (the task you've stated as still needing). https://github.com/Draco18s/HarderStuff/blob/master/src/main/java/com/draco18s/wildlife/util/TreeCountGenerator.java#L55 But it's not perfect. There's all kinds of weird edge cases that are hard to detect correctly (like the aforementioned floating trees). 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. Link to comment Share on other sites More sharing options...
LeBonCharlie Posted October 17, 2019 Author Share Posted October 17, 2019 (edited) Yeah I'll definitely take another look at it. I want to implement the fact that when you try to chop down a 5 blocks high tree, it takes 5 * log hardness. Right now, I implemented it as so in the TrunkBlock class: @Override public float getBlockHardness(BlockState blockState, IBlockReader worldIn, BlockPos blockPos) { return localTreeHeight(worldIn, blockPos) * super.blockHardness; } When the destruction propagation *is vertical*, the tree size is easy to compute, but if I add horizontal/diagonal propagation, I have to make sure that I don't count any log twice, and I think that one of your methods could solve that problem ! But anyway, my main issue right now is to have the vanilla trees use my TrunkBlock instead of vanilla <wood>_LOG Block. I think I could manage it by creating a custom Feature tree for each occurring tree in the calls to Biome#addFeature and somehow replace all of these occurrences but I don't know how yet Edited October 17, 2019 by LeBonCharlie missing words lel Quote Link to comment Share on other sites More sharing options...
Draco18s Posted October 17, 2019 Share Posted October 17, 2019 52 minutes ago, LeBonCharlie said: but if I add horizontal/diagonal propagation, I have to make sure that I don't count any log twice, and I think that one of your methods could solve that problem ! That's mostly just creating a list or other Set that contains unique blockpos locations for each tree. 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. Link to comment Share on other sites More sharing options...
LeBonCharlie Posted October 17, 2019 Author Share Posted October 17, 2019 41 minutes ago, Draco18s said: That's mostly just creating a list or other Set that contains unique blockpos locations for each tree. Oh yeah right, I'll definitely do that, thanks ! 1 hour ago, LeBonCharlie said: I think I could manage it by creating a custom Feature tree for each occurring tree in the calls to Biome#addFeature and somehow replace all of these occurrences but I don't know how yet Also, that worked ! It's pretty ugly but by exploring Biome#createDecoratedFeature, I managed to add the feature trees that I wanted. Finally, the thing I had not taken into account was that vanilla leaves would not recognize my TrunkBlocks as block it can attach to and hence despawn! I guess it's the normal process to find a new problem each time one is solved Quote Link to comment Share on other sites More sharing options...
LeBonCharlie Posted October 18, 2019 Author Share Posted October 18, 2019 12 hours ago, LeBonCharlie said: Finally, the thing I had not taken into account was that vanilla leaves would not recognize my TrunkBlocks as block it can attach to and hence despawn! For anyone interested, I fixed this by extending the data/minecraft/tags/blocks/logs.json file in my mod with my blocks ids. Quote Link to comment Share on other sites More sharing options...
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.