I have tried for a long time now, but can't seem to figure out how to spawn a custom entity in a custom biome.
I tried json, in the modbiomes folder and the modentitygeneration folder. Has anyone done this before and tell me how they've done it?
Or maybe see if there's a fix for my code, have been stuck on this for a long while now.
See code below.
Note that any other mob is spawning fine in the biome, my other mobs (bandit here) spawn fine in other biomes.
The entity I want to spawn in the custom biome (volcano monster), I've also tried to spawn in it in other vanilla biomes and it worked fine.
public class ModEntityGeneration
{
//entities that spawn in specific biomes
public static void onEntitySpawn(final BiomeLoadingEvent event)
{
RegistryKey key = RegistryKey.create(Registry.BIOME_REGISTRY, event.getName());
Set types = BiomeDictionary.getTypes(key);
if (types.contains(BiomeDictionary.Type.PLAINS) || types.contains(BiomeDictionary.Type.HOT) || types.contains(BiomeDictionary.Type.COLD)) // Only spawns in plains
{
//Weight of spawn: 100, minimum: 4, max: 6
event.getSpawns().addSpawn(EntityClassification.CREATURE, new MobSpawnInfo.Spawners(EntityInit.BANDIT.get(), 400, 3, 4)).build();
}
if (event.getName().equals(ModBiomes.GRAND_MAGIC_ZONE_VOLCANO.get().getRegistryName()))
{
event.getSpawns().addSpawn(EntityClassification.CREATURE, new MobSpawnInfo.Spawners(EntityInit.VOLCANO_MONSTER.get(), 600, 1, 2)).build();
}
}
//entities that spawn in specific structures
public static void onEntitySpawnInStructure(final StructureSpawnListGatherEvent event)
{
if (event.getEntitySpawns().containsKey(EntityClassification.CREATURE))
{
boolean isCamp = event.getStructure().equals(StructuresInit.BANDIT_CAMP.get());
if (isCamp)
{
event.addEntitySpawn(EntityClassification.CREATURE, new MobSpawnInfo.Spawners(EntityInit.BANDIT.get(), 200, 5, 5));
}
}
}
}
public class ModBiomes
{
public static final DeferredRegister<Biome> BIOMES = DeferredRegister.create(ForgeRegistries.BIOMES, Main.MODID);
public static final RegistryObject<Biome> GRAND_MAGIC_ZONE_VOLCANO = BIOMES.register("volcano_zone", () -> makeVolcanoBiome(() -> ModConfiguredSurfaceBuilders.GRAND_MAGIC_ZONE_VOLCANO, 0.18f, 0.15f));
private static Biome makeVolcanoBiome(final Supplier<ConfiguredSurfaceBuilder<?>> surfaceBuilder, float depth, float scale) {
MobSpawnInfo.Builder mobspawninfo$builder = new MobSpawnInfo.Builder();
DefaultBiomeFeatures.farmAnimals(mobspawninfo$builder);
DefaultBiomeFeatures.commonSpawns(mobspawninfo$builder);
mobspawninfo$builder.addSpawn(EntityClassification.MONSTER,
new MobSpawnInfo.Spawners(EntityType.BLAZE, 45, 7, 10));
//TODO make it generate
mobspawninfo$builder.addSpawn(EntityClassification.CREATURE,
new MobSpawnInfo.Spawners(EntityInit.VOLCANO_MONSTER.get(), 200, 1, 2));
mobspawninfo$builder.addSpawn(EntityClassification.CREATURE,
new MobSpawnInfo.Spawners(EntityInit.VOLCANO_MONSTER.get(), 40, 1, 2)).build();
BiomeGenerationSettings.Builder biomegenerationsettings$builder =
(new BiomeGenerationSettings.Builder()).surfaceBuilder(surfaceBuilder);
biomegenerationsettings$builder.addStructureStart(StructureFeatures.RUINED_PORTAL_SWAMP);
DefaultBiomeFeatures.addDefaultCarvers(biomegenerationsettings$builder);
DefaultBiomeFeatures.addDefaultMonsterRoom(biomegenerationsettings$builder);
DefaultBiomeFeatures.addDefaultUndergroundVariety(biomegenerationsettings$builder);
DefaultBiomeFeatures.addDefaultOres(biomegenerationsettings$builder);
DefaultBiomeFeatures.addSwampClayDisk(biomegenerationsettings$builder);
DefaultBiomeFeatures.addDefaultMushrooms(biomegenerationsettings$builder);
DefaultBiomeFeatures.addDesertExtraVegetation(biomegenerationsettings$builder);
biomegenerationsettings$builder.addFeature(GenerationStage.Decoration.LAKES, Features.LAKE_LAVA);
DefaultBiomeFeatures.addSurfaceFreezing(biomegenerationsettings$builder);
return (new Biome.Builder()).precipitation(Biome.RainType.NONE).biomeCategory(Biome.Category.DESERT).depth(depth).scale(scale)
.temperature(1.5F).downfall(0.9F).specialEffects((new BiomeAmbience.Builder()).waterColor(-3407872).waterFogColor(-16777216)
.fogColor(-65536).skyColor(getSkyColorWithTemperatureModifier(0.8F)).foliageColorOverride(-3407872).grassColorOverride(-3407872)
.ambientParticle(new ParticleEffectAmbience(ParticleTypes.LAVA, 0.003f)).skyColor(-65536)
.ambientLoopSound(SoundEvents.AMBIENT_CRIMSON_FOREST_LOOP)
.ambientMoodSound(new MoodSoundAmbience(SoundEvents.AMBIENT_WARPED_FOREST_MOOD, 6000, 8, 2.0D))
.ambientAdditionsSound(new SoundAdditionsAmbience(SoundEvents.AMBIENT_NETHER_WASTES_ADDITIONS, 0.0111D))
.backgroundMusic(BackgroundMusicTracks.createGameMusic(SoundEvents.AMBIENT_NETHER_WASTES_LOOP))
.build())
.mobSpawnSettings(mobspawninfo$builder.build()).generationSettings(biomegenerationsettings$builder.build()).build();
}
private static int getSkyColorWithTemperatureModifier(float temperature) {
float lvt_1_1_ = temperature / 3.0F;
lvt_1_1_ = MathHelper.clamp(lvt_1_1_, -1.0F, 1.0F);
return MathHelper.hsvToRgb(0.2460909F - lvt_1_1_ * 0.05F, 0.5F + lvt_1_1_ * 0.1F, 1.0F);
}
public static void register(IEventBus eventBus)
{
BIOMES.register(eventBus);
}
}
{
"spawners":
{
"creature":
[
{
"type": "blackclover:volcano_monster",
"weight": 40,
"minCount": 2,
"maxCount": 4
}
]
}
}
First time on the forum, but I think I'm on the right place?