Jump to content

[1.20] Add custom entity to custom biome


Robin Roloff

Recommended Posts

Hello,

I created a mod with a custom biome and custom entities. https://github.com/robinroloff/alpinemod/
I want these entities (in this case alpinechicken) to spawn in my custom biome (alpinemod:alps_valley) 

However, when I add it using my biome modifier, it doesn't work. Currently in the forge/biome_modifiers/alpinechicken.json, the biome is set to minecraft:plains and that works, but if I change it to my custom biome, it doesn't work.

I can, however, add mobs that are not from my mod. Meaning that normal cows, chicken etc. spawn.

It really doesn't make sense to me, does anyone else know?

Link to comment
Share on other sites

On 1/11/2024 at 8:18 PM, Robin Roloff said:

Hello,

I created a mod with a custom biome and custom entities. https://github.com/robinroloff/alpinemod/
I want these entities (in this case alpinechicken) to spawn in my custom biome (alpinemod:alps_valley) 

However, when I add it using my biome modifier, it doesn't work. Currently in the forge/biome_modifiers/alpinechicken.json, the biome is set to minecraft:plains and that works, but if I change it to my custom biome, it doesn't work.

I can, however, add mobs that are not from my mod. Meaning that normal cows, chicken etc. spawn.

It really doesn't make sense to me, does anyone else know?

bump

Link to comment
Share on other sites

If you're adding mobs to your own biomes its better to add them in that biomes .json file rather than adding via the biome modifier (It probably doesn't work because of the order in which forge will load modded biomes vs biome modifiers but I'm not sure). 

The easiest solution should be to add the mob to the `MobSpawnSettings.Builder` when bootstrapping the biome here:

https://github.com/robinroloff/alpinemod/blob/master/src/main/java/de/robin/alpine/worldgen/biome/AlpineBiomes.java

Hope this helps!

Link to comment
Share on other sites

16 hours ago, InvictusSlayer said:

If you're adding mobs to your own biomes its better to add them in that biomes .json file rather than adding via the biome modifier (It probably doesn't work because of the order in which forge will load modded biomes vs biome modifiers but I'm not sure). 

The easiest solution should be to add the mob to the `MobSpawnSettings.Builder` when bootstrapping the biome here:

https://github.com/robinroloff/alpinemod/blob/master/src/main/java/de/robin/alpine/worldgen/biome/AlpineBiomes.java

Hope this helps!

I have tried that as well, it didn't work either. The biome modifier definitely works, as I said other mobs working using the same method and e.g. adding worldgen features also work.
I'm starting to believe this is a bug with forge/terrablender

Link to comment
Share on other sites

On 1/19/2024 at 5:37 PM, Robin Roloff said:

I have tried that as well, it didn't work either. The biome modifier definitely works, as I said other mobs working using the same method and e.g. adding worldgen features also work.
I'm starting to believe this is a bug with forge/terrablender

Sorry, have to bump this again.
Does anybody know what's wrong? 

If it's actually a bug with forge or terrablender, I'm gonna have to write a bug report, but I want to confirm it first.

Link to comment
Share on other sites

4 minutes ago, InvictusSlayer said:

I'm confident it's not terrablender as I am a frequent user and have never encountered an issue like this. I'll test out your code to see if I can find the root of the problem.

Thank you very much! I'm really desperate right now

Link to comment
Share on other sites

6 hours ago, Robin Roloff said:

Does anybody know what's wrong? 

They will only spawn on grass blocks because of the ANIMALS_SPAWNABLE_ON block tag. So if your biome does not have grass blocks then they won't spawn. Could this be the problem?

Link to comment
Share on other sites

On 1/27/2024 at 4:26 PM, InvictusSlayer said:

I'm confident it's not terrablender as I am a frequent user and have never encountered an issue like this. I'll test out your code to see if I can find the root of the problem.

hey, do you have an update?

Link to comment
Share on other sites

The problem seems to be with the `VanillaParameterOverlayBuilder` (so you are right there is a bug with TerraBlender). However there is an easy fix which also runs marginally faster which is to use the "Consumer.accept()" method to add your custom biomes.

@Override
public void addBiomes(Registry<Biome> registry, Consumer<Pair<Climate.ParameterPoint, ResourceKey<Biome>>> mapper) {
    biome(mapper, AlpineBiomes.ALPS, Temperature.FROZEN.parameter(), Humidity.HUMID.parameter(), Continentalness.FAR_INLAND.parameter(), Erosion.EROSION_0.parameter(), Weirdness.FULL_RANGE.parameter());
    biome(mapper, AlpineBiomes.ALPS_VALLEY, Temperature.NEUTRAL.parameter(), Humidity.NEUTRAL.parameter(), Continentalness.FAR_INLAND.parameter(), Climate.Parameter.span(0.5F, 1F), Climate.Parameter.span(-0.35F, 0.35F));
}

private void biome(Consumer<Pair<Climate.ParameterPoint, ResourceKey<Biome>>> mapper, ResourceKey<Biome> biome, Climate.Parameter temperature, Climate.Parameter humidity, Climate.Parameter continentalness, Climate.Parameter erosion, Climate.Parameter weirdness) {
    mapper.accept(Pair.of(Climate.parameters(temperature, humidity, continentalness, erosion, Depth.FLOOR.parameter(), weirdness, 0F), biome));
    mapper.accept(Pair.of(Climate.parameters(temperature, humidity, continentalness, erosion, Depth.SURFACE.parameter(), weirdness, 0F), biome));
}

Here's an example I made from your code which runs fine but feel free to manipulate this however you wish.

Link to comment
Share on other sites

13 hours ago, InvictusSlayer said:

The problem seems to be with the `VanillaParameterOverlayBuilder` (so you are right there is a bug with TerraBlender). However there is an easy fix which also runs marginally faster which is to use the "Consumer.accept()" method to add your custom biomes.

@Override
public void addBiomes(Registry<Biome> registry, Consumer<Pair<Climate.ParameterPoint, ResourceKey<Biome>>> mapper) {
    biome(mapper, AlpineBiomes.ALPS, Temperature.FROZEN.parameter(), Humidity.HUMID.parameter(), Continentalness.FAR_INLAND.parameter(), Erosion.EROSION_0.parameter(), Weirdness.FULL_RANGE.parameter());
    biome(mapper, AlpineBiomes.ALPS_VALLEY, Temperature.NEUTRAL.parameter(), Humidity.NEUTRAL.parameter(), Continentalness.FAR_INLAND.parameter(), Climate.Parameter.span(0.5F, 1F), Climate.Parameter.span(-0.35F, 0.35F));
}

private void biome(Consumer<Pair<Climate.ParameterPoint, ResourceKey<Biome>>> mapper, ResourceKey<Biome> biome, Climate.Parameter temperature, Climate.Parameter humidity, Climate.Parameter continentalness, Climate.Parameter erosion, Climate.Parameter weirdness) {
    mapper.accept(Pair.of(Climate.parameters(temperature, humidity, continentalness, erosion, Depth.FLOOR.parameter(), weirdness, 0F), biome));
    mapper.accept(Pair.of(Climate.parameters(temperature, humidity, continentalness, erosion, Depth.SURFACE.parameter(), weirdness, 0F), biome));
}

Here's an example I made from your code which runs fine but feel free to manipulate this however you wish.

Just tested it... and it works!
Thank you so much, you really saved me

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.



×
×
  • Create New...

Important Information

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