Generation conflict with Bountiful Mods
MLMII opened this issue ยท 7 comments
- Forge version: 1.15.2-31.1.25
- Bountiful version: 3.0.0-1.15.2
- Waystones version: 1.15.2-6.0.1
When Waystones are set to generate inside of villages; "bounty boards" from bountiful do not generate at all; but when Waystones are not set to generate inside villages, they do. I tested this on two different worlds using the same seed.
This was not the case in the last version of Waystones (where multiple Waystones would sometimes generate); as both Bounty Boards and Waystones were generating properly.
I also posted this issue on the Bountiful issue page.
Thanks,
Next version will also add the piece to the unused weighted list to prevent the scenario described above.
As for the actual issue, I'm not sure if this is really fixable with the way the village generation works. No matter what, unless you're the starting point (for villages, that is the well), since it is based on random generation, there is no guarantee that your structure (be it the waystone, or the bounty board) will spawn exactly once.
That however is unrelated to this issue, so continuing that in #259 and marking this one as "nothing I can do".
This is waiting on a Forge PR to be merged which will bring more control over Village generation. Right now it's best to just not enable village generation of waystones because they simply don't work well yet.
The problem here is that you adds the new JigsawPiece to JigsawPattern#jigsawpieces and not to JigsawPattern#field_214952_d, because no one will check the long list for added items. Therefor the sourcePairs must be edited for other mods to recognize changes. This can be easily be fixed.
If you want i can write a PR.
Can you explain further? Looking at the decompiled code, getRandomPiece
only queries jigsawPieces
and field_214952_d
doesn't seem to be used at all.
First of all field_214952_d
contains the source pairs of the Jigsawpieces and their weight. which are used to build jigsawPieces
.
Like Bountiful, i my self modify field_214952_d
and rebuild jigsawPieces
from this list, because searching jigsawPieces
for changes is unnecessary if you can have a better way.
List<Pair<JigsawPiece,Integer>> pieces = Lists.newArrayList(houses.field_214952_d); pieces.add(Pair.of(new SingleJigsawPiece(waystoneStructure.toString(), Collections.emptyList(), JigsawPattern.PlacementBehaviour.RIGID), 1)); houses.field_214952_d = ImmutableList.copyOf(pieces); houses.jigsawPieces.add(new SingleJigsawPiece(waystoneStructure.toString(), Collections.emptyList(), JigsawPattern.PlacementBehaviour.RIGID));
with this AT entry
public-f net.minecraft.world.gen.feature.jigsaw.JigsawPattern field_214952_d
would suffice in your case.
Why do other mods care about field_214952_d
? I understand it'd be more "correct" to add my piece to that field too, but the effective way of adding new jigsaw pieces right now seems to be by having them added to jigsawPieces
.
If anything, I don't see how simply adding something to only jigsawPieces would cause someone else's structure not to be generated (I just assumed it was a probability issue, which MinecraftForge/MinecraftForge#6324 would give us the tools to solve).
Because some mods, Bountiful for example, don't care about changes to jigsawPieces
and only takes field_214952_d
. And if your mod is loaded before those mods your changes to jigsawPieces
are reverted.
Why your structure is generated while theirs not i don't know.
But do what you want