Jump to content

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


LeBonCharlie

Recommended Posts

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
Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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
Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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
Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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.

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



  • Recently Browsing

    • No registered users viewing this page.
  • Posts

    • The game crashed whilst exception ticking world Error: java.lang.NullPointerException: Cannot invoke "net.minecraft.resources.ResourceLocation.equals(Object)" because "this.lootTableId" is null Error given is above. I was already playing for around 15 minutes and wasn't doing anything specific or even breaking anything when the crashed happened. This is update 1.19.2 forge: 43.2.23 Mod list: ESSENTIAL Mod (by SparkUniverse_) Traveler's Titles (Forge) (by YUNGNICKYOUNG) Resourceful Config (by ThatGravyBoat) Dynamic Lights (by atomicstrykergrumpy) TenzinLib (by CommodoreThrawn) Nature's Compass (by Chaosyr) Library Ferret - Forge (by jtl_elisa) Cold Sweat (by Mikul) Simple Voice Chat (by henkelmax) Waystones (by BlayTheNinth) Carry On (by Tschipp) [Let's Do] Meadow (by satisfy) Creeper Overhaul (by joosh_7889) AutoRegLib (by Vazkii) Moonlight Lib (by MehVahdJukaar) AppleSkin (by squeek502) Xaero's World Map (by xaero96) Rotten Creatures (by fusionstudiomc) YUNG's API (Forge) (by YUNGNICKYOUNG) Village Artifacts (by Lothrazar) Right Click, Get Crops (by TeamCoFH) Supplementaries (by MehVahdJukaar) Automatic Tool Swap (by MelanX) Better Third Person (by Socolio) Supplementaries Squared (by plantspookable) Traveler's Backpack (by Tiviacz1337) Caelus API (Forge/NeoForge) (by TheIllusiveC4) Creatures and Beasts (by joosh_7889) Architectury API (Fabric/Forge/NeoForge) (by shedaniel) Quark Oddities (by Vazkii) Origins (Forge) (by EdwinMindcraft) Villager Names (by Serilum) GeckoLib (by Gecko) Realistic Bees (by Serilum) Illuminations Forge 🔥 (by dimadencep) Serene Seasons (by TheAdubbz) Critters and Companions (by joosh_7889) [Let's Do] Bakery (by satisfy) Falling Leaves (Forge) (by Cheaterpaul) Jade 🔍 (by Snownee) Collective (by Serilum) TerraBlender (Forge) (by TheAdubbz) [Let's Do] API (by Cristelknight) Towns and Towers (by Biban_Auriu) More Villagers (by SameDifferent) Biomes O' Plenty (by Forstride) Goblin Traders (by MrCrayfish) Corpse (by henkelmax) Tree Harvester (by Serilum) Balm (Forge Edition) (by BlayTheNinth) Mouse Tweaks (by YaLTeR) Sound Physics Remastered (by henkelmax) Xaero's Minimap (by xaero96) Just Enough Items (JEI) (by mezz) Terralith (by Starmute) Quark (by Vazkii) [Let's Do] Vinery (by satisfy) [Let's Do] Candlelight (by satisfy) Repurposed Structures (Neoforge/Forge) (by telepathicgrunt) Dusty Decorations (by flint_mischiff) Immersive Armors [Fabric/Forge] (by Conczin) Serene Seasons Fix (by Or_OS) Shutup Experimental Settings! (by Corgi_Taco) Skin Layers 3D (Fabric/Forge) (by tr7zw)
    • Make sure Java is running via Nvidia GPU https://windowsreport.com/minecraft-not-using-gpu/  
    • Also make a test with other Custom Launchers like AT Launcher, MultiMC or Technic Launcher
    • Embeddium and valkyrienskies are not working together - remove one of these mods With removing Embeddium, also remove Oculus, TexTrue's Embeddium Options and Embeddium Extras Or use Rubidium instead
  • Topics

×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.