klinbee / Aetherial-Islands

Whimsical floating islands with mountains, rivers, and floating ocean pools!
0 stars 4 forks source link

Structure/Feature/Biome/Terrain Compatibility Discussion #2

Open DenisMasterHerobrine opened 2 weeks ago

DenisMasterHerobrine commented 2 weeks ago

Hello! I'm currently using Aetherial Islands datapack as a core worldgen datapack in my pack and it looks so cool and neat, so I decided to make a pack around it. Great work, it is something I was looking for some time after the islands generation was being stuck on 1.12.2 version and there were no proper island generator packs. Looks very promising.

However, I just got stuck around several bugs/incompatibilities that I would like to solve before getting the pack into the heavy development stage with my team and wanted to provide some feedback, so I could minimize modpack player's inconvinience and so on. So, this issue is more about feedback and mod compatibility issues, rather than bug, but let's begin with that!

I'll create several issues here and there, just to make sure that each bug is documented properly and have it own thread to discuss it if you don't mind.

Modpack Environment

Tested mods: (I had randomly picked and scrambled around to find out inconsistencies) Minecraft: 1.21.1 NeoForge: 21.1.72 Sinytra Connector: 2.0.0-beta.3 Connector Extras: 1.12.1+1.21.1 Forgified Fabric API: 0.104.0+2.0.15+1.21.1 Aetherial Islands: 1.0.3+mod [Fabric] Nature's Spirit: 1.6.3 Biomes O' Plenty: 21.1.0.7-neoforge ChoiceTheorem's Ovehauled Villages: 3.5.3a Moog's Soaring Structures: 1.2.5 Oh The Biomes We've Gone: 2.1.5 Regions Unexplored: 0.5.6.1 Structory: 1.3.6 Sky Villages: 1.0.6-1.21.x Lithostitched: 1.21-1.3.1a (yes, I used it already)

Overall Feedback: Biomes

The mod is perfect for the idea of the pack with islands generation. I've tested with a bunch of different biome mods. Maybe you'll find this list useful. It works mostly perfectly. However, there are some issues with vegetation when islands meet another islands on different Y levels. See #3 for that.

Works perfectly:

However, as a modpack developer, do note, that if you scramble around a lot of biome mods, you probably will need Biome Replacer mod to replace some weird biomes that are looking very weird with the Aetherial Islands, such as Lush Stacks from the Biomes We've Gone and so on.***

Somewhat Compatible:

Incompatible:

Overall Feedback: Structures

What's regarding the structures. Vanilla structures are just floating around and that's not cool, but I noticed that there a mod called No Void Structures. I have tried to port it to NeoForge & Fabric 1.21.1 by myself, which solved my issue (well, it is now looks better atleast) (If you want I can provide you a PR with a more stable version if you wish). However, this does not solve the issue that MOST of the structures are not being relocated to islands, meaning that 60-80% of structures are being lost at all. They spawned in the void and now they're gone forever, while I wanted to spawn them on the islands. Probably I need more practical skills around worldgen to do so, I just started working with this recently, sadly. Gonna investigate this a bit later.

Structory (and any other structure mods) works somewhat ok, mostly nice, but everything the same with the MOST of other modded structures have the same "void" effect meaning that most of the structures aren't spawning properly and to find ANY structure makes a huge pain to player. Player needs to go more than 100k blocks to find one if the No Void Structure presents. (I just want to provide a various wide range of dungeons and activities to player on the islands, why the player need to go SO far? Maybe somehow detect the datapack islands and try to move structures to islands, rather than setting the Y value of the StructurePieceProvider?)

However, there are some datapacks and mods which allows to spawn them on islands, yay! Great news, Moog's Soaring Structures was what I wanted... but there's another issue... You know, that a structure should not "eating" the islands and reset the blocks to air... Well, I got this. 2024-11-08_03 39 11 2024-11-08_03 39 49

Also I could sometimes reproduce the same behaviour with Biomes O' Plenty and some modded villages if they're actually met the islands properly and spawned as expected, but they're mostly 90% of time was spawning just in the void, making that any mod adding their own villages and so on useless without No Void Structures.

Working perfectly:

Somewhat Compatible:

Incompatible:

They spawn a village purely in the void. As far as I tested, none of the structures found were on the island at all or broken, sadly. 2024-11-09_03 37 47 2024-11-09_03 38 16

Conclusion and Solutions

Overall, very impressive work! I would like to see if I could help you test everything and find out more things that can be much more polished. I would like to see any option to get mod support for this datapack somewhere in the future.

As a theoretical solution, maybe islands could have their boundaries set by the feature generator, so I could somehow detect as a placed structure? If the island could have their tags or any non data-driven data, then it would be possible to control, whether the structure can be placed, whether not. If the 80-90% of modded structure's provider pieces are located in the area of the island, then place it. (we cannot guarantee 100% because sometimes the structure can be much larger than the islands) Otherwise, not spawn to prevent the structure spawning in the void?

I need to think about it a bit more, but the main idea and concept is to give the islands their own boundaries that can be gathered on each structure spawn attempt, so the structure generation point could be moved from the void to island.

If you need more info, let me know through the ping on the GitHub, so I could answer to you much faster. I tried my best to cover most of my feedback. If you find some confusing parts of the issue, let me know, so I could rephrase them for you!

klinbee commented 2 weeks ago

Somewhat compatible biome mods

These are based on how the developers coded specific terrain features in the biomes to work, which relies entirely upon normal world generation. This is a non-trivial issue, and it is not in my hands to fix. Likely their code relies on normal generation, and not floating island style.

Incompatible Data Packs

No terrain generation data pack will ever be compatible with another without completely coding their terrain in an entirely different worldgen system than the one provided by data packs, or by specifically making a terrain function that combines the two terrain functions. And that further raises the question, how would you even apply the terrain specific changes from tectonic to aetherial islands, or any other data pack? "Oh it would just make the islands look different or more mountain-y" Yes. So you're saying you literally need to change fundamentally the core of how the islands generate. It's just not how the system works remotely.

They spawned in the void and now they're gone forever, while I wanted to spawn them on the islands.

This is a very technical issue to solve, as Minecraft doesn't natively support consideration of terrain values for structure placement. It chooses a position based on the biome/structure parameters, and attempts to place it there. It does not look around to see if the terrain works. It just places it. Yeah it would be cool to spawn them on the islands, but it is not a trivial issue.

You know, that a structure should not "eating" the islands and reset the blocks to air... Well, I got this.

This is clearly the structure not using structure voids for generation (structure voids act as air that terrain can override the in the structure). Clearly air is in the structure file there, and is replacing the island's terrain. This is not my issue.

Incompatible Structures

These are likely structures that needed to code their own structure type logic for placement, rather than using the data pack jigsaw structure type (which many structure packs do use, and I have accounted for). This is not an issue I can solve trivially and would need to be done on a case-by-case basis for whatever code logic they implemented for their placement.

As a theoretical solution, maybe islands could have their boundaries set by the feature generator, so I could somehow detect as a placed structure?

I have no clue how you would do this, other than just basing it off of the final_density, like in the potato April Fool's snapshot, but that's for structures. The islands don't have "boundaries", all terrain is, is noise maps and math. They are not features.

klinbee commented 2 weeks ago

I do also want to clarify to you, that a lot of the issues you mentioned with structures/features can be solved with data packs, but it would need to be done on an individual basis like I mentioned, and relies on the mod developer making their structure/feature able to be modified via data packs / configs (which is the case if it is uses one of the vanilla placed_feature placements, or if it uses a vanilla structure type). But otherwise, that would need to be coded in with a mod.

A lot of data packs/mods do use the normal placed_feature placements though for features, as Minecraft thankfully made these very flexible. But there are just inherently limitations sometimes, which may lead someone to just code in their own placement method that you may have no control over, except through modding.

klinbee commented 2 weeks ago

Oh, I guess the most important note for this last comment is that you can feel free to look at how Aetherial Island changes the vanilla features to be able to be placed on every level. This typically involves using count_on_every_layer rather than the heightmap type of placement. Height provider and downward scanning (like used for the cave_vines of lush cave glowberry features) are another option for placement. Additionally, some cases require block predicate filters for air to be added (notably, when they use the surface_depth_water_filter which only checks water from aquifers/sea-level, rather than water in general)

Additionally those .nbt structures that use air instead of structure voids can be changed with data packs of course. Would be important though to ensure that you aren't violating any licensing of course. Usually they don't care as long as it is an add-on, rather than a standalone.

If you have any other specific questions or encounter any other issues, feel free to ask here. And THANK YOU for how well you organized your issues, and how well you documented them.

DenisMasterHerobrine commented 2 weeks ago

I have read all the messages. Sorry for the possible misconfusion. I'm still learning how the Minecraft worldgen works properly. 🤔

I'll look into the air problem of the NBT structure files, and I'll see if I could try to fix the issue simply by replacing the air in the structure to nothing, so the structure could not destroy the islands. (will also look into any problems with the licensing of creating an addon datapacks and permissions for sure)

I do also want to clarify to you, that a lot of the issues you mentioned with structures/features can be solved with data packs, but it would need to be done on an individual basis like I mentioned, and relies on the mod developer making their structure/feature able to be modified via data packs / configs (which is the case if it is uses one of the vanilla placed_feature placements, or if it uses a vanilla structure type). But otherwise, that would need to be coded in with a mod.

Probably my best bet right now is to go learn more datapack basics and try to write the compatibility packs for all the mods I selected for the pack. Thank you for clarification!

These are based on how the developers coded specific terrain features in the biomes to work, which relies entirely upon normal world generation. This is a non-trivial issue, and it is not in my hands to fix. Likely their code relies on normal generation, and not floating island style.

Already got the same idea when testing. I had some several ideas for the modpack mechanics on certain biomes, but will try my best to do something with datapacks to solve some issues regarding that and probably will do something to replace/remove some of them for smoother player experience.

I have no clue how you would do this, other than just basing it off of the final_density, like in the potato April Fool's snapshot, but that's for structures. The islands don't have "boundaries", all terrain is, is noise maps and math. They are not features.

I still have some kind of hope that I will be able to try to somehow track density functions and shift the structures based on the data from the seed and the functions. It sounds extremely scary, but I want to try something unusual for myself and improve my MC worldgen knowledge and play around it. Maybe I will be able, if not to completely solve the problem, then at least increase the player's chances to encounter the structure he needs and make the exploration more interesting. However, I can fail with that, I'm just mostly a modpack developer, rather than mod developer, who have fun modding and playing around stuff.

Thank you for the clarified information!

unnecessarymb commented 2 weeks ago

@DenisMasterHerobrine It's worth noting that Sparse Structures should be able to be used to fix your structure sparseness issue.

klinbee commented 2 weeks ago

I have read all the messages. Sorry for the possible misconfusion. I'm still learning how the Minecraft worldgen works properly. 🤔

Of course! No problem. I apologize if I came across as harsh in some ways. Just trying to be to the point, it just can be frustrating in ways when people make claims about your mod about mechanics that they don't understand. It happens a lot, people blaming one mod for something they have no influence on.

I'll see if I could try to fix the issue simply by replacing the air in the structure to nothing

I believe that's how structure void blocks are coded yeah, they just replace the entry that should be there with air, with nothing. You may want to be careful though, as some areas (like the inside of a house) would be better to have air, so you don't have terrain inside the house being replaced.

Already got the same idea when testing. I had some several ideas for the modpack mechanics on certain biomes, but will try my best to do something with data packs to solve some issues regarding that and probably will do something to replace/remove some of them for smoother player experience.

Definitely. A lot of research needs to go into stuff like that, highly dependent on what exactly it is, how exactly they've done it. For some things with Terralith, it may be very complicated and dive into density function (terrain changes) territory. Or it could just be a feature behaving oddly. You never know until you investigate it.

I still have some kind of hope that I will be able to try to somehow track density functions and shift the structures based on the data from the seed and the functions... However, I can fail with that, I'm just mostly a modpack developer, rather than mod developer, who have fun modding and playing around stuff.

If you do choose to do this, good luck! But yeah, mainly what @unnecessarymb said, and also this can be done through data pack files. You can increase the amount of structures that generate to get more generating on islands. That does lead into one thing I've been meaning to change about No Void Structures which is to completely stop the structure from generating, when it chooses to in the void, rather than just stopping the structure itself from generating (the difference is, that the /locate structure position will still map to an area in the void).