Jump to content

[Solved][1.14.4] Best way to modify blocks in vanilla trees ?


Recommended Posts

Posted (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 by LeBonCharlie
Posted

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)?

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.

Posted (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 by Draco18s

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.

Posted

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 ?

Posted (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 by LeBonCharlie
error
Posted
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

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.

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

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.

Posted (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 by LeBonCharlie
missing words lel
Posted
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.

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.

Posted
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

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

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.