[add] mob spawning

This commit is contained in:
2026-09-28 11:34:15 +02:00
parent dab4010d6c
commit 5a24ad98ba
16 changed files with 370 additions and 0 deletions
@@ -1,9 +1,14 @@
package ovh.glitchlabs.masterwild.event;
import net.minecraft.world.entity.SpawnPlacementType;
import net.minecraft.world.entity.SpawnPlacementTypes;
import net.minecraft.world.entity.animal.Animal;
import net.minecraft.world.level.levelgen.Heightmap;
import net.neoforged.bus.api.SubscribeEvent;
import net.neoforged.fml.common.EventBusSubscriber;
import net.neoforged.neoforge.client.event.EntityRenderersEvent;
import net.neoforged.neoforge.event.entity.EntityAttributeCreationEvent;
import net.neoforged.neoforge.event.entity.RegisterSpawnPlacementsEvent;
import ovh.glitchlabs.masterwild.Masterwild;
import ovh.glitchlabs.masterwild.entity.ModEntities;
import ovh.glitchlabs.masterwild.entity.client.Pinguin.PinguinModel;
@@ -40,4 +45,10 @@ public class ModEventBusEvents {
event.put(ModEntities.RED_PANDA.get(), Red_PandaEntity.createAttributes().build());
event.put(ModEntities.RACCOON.get(), RaccoonEntity.createAttributes().build());
}
@SubscribeEvent
public static void registerSpawnPlacements(RegisterSpawnPlacementsEvent event) {
event.register(ModEntities.RACCOON.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES,
Animal::checkAnimalSpawnRules, RegisterSpawnPlacementsEvent.Operation.REPLACE);
}
}
@@ -0,0 +1,47 @@
package ovh.glitchlabs.masterwild.event;
import net.minecraft.world.entity.SpawnPlacementTypes;
import net.minecraft.world.entity.animal.Animal;
import net.minecraft.world.entity.animal.WaterAnimal;
import net.minecraft.world.level.levelgen.Heightmap;
import net.neoforged.bus.api.SubscribeEvent;
import net.neoforged.fml.common.EventBusSubscriber;
import net.neoforged.neoforge.event.entity.RegisterSpawnPlacementsEvent;
import ovh.glitchlabs.masterwild.Masterwild;
import ovh.glitchlabs.masterwild.entity.ModEntities;
@EventBusSubscriber(modid = Masterwild.MODID)
public class ModSpawnPlacements {
@SubscribeEvent
public static void registerSpawnPlacements(RegisterSpawnPlacementsEvent event) {
event.register(ModEntities.RACCOON.get(), SpawnPlacementTypes.ON_GROUND,
Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, Animal::checkAnimalSpawnRules,
RegisterSpawnPlacementsEvent.Operation.OR);
event.register(ModEntities.PINGUIN.get(), SpawnPlacementTypes.ON_GROUND,
Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, Animal::checkAnimalSpawnRules,
RegisterSpawnPlacementsEvent.Operation.OR);
event.register(ModEntities.ROOSTER.get(), SpawnPlacementTypes.ON_GROUND,
Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, Animal::checkAnimalSpawnRules,
RegisterSpawnPlacementsEvent.Operation.OR);
event.register(ModEntities.HEDGEHOG.get(), SpawnPlacementTypes.ON_GROUND,
Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, Animal::checkAnimalSpawnRules,
RegisterSpawnPlacementsEvent.Operation.OR);
event.register(ModEntities.RED_PANDA.get(), SpawnPlacementTypes.ON_GROUND,
Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, Animal::checkAnimalSpawnRules,
RegisterSpawnPlacementsEvent.Operation.OR);
event.register(ModEntities.SHARK.get(), SpawnPlacementTypes.IN_WATER,
Heightmap.Types.OCEAN_FLOOR, WaterAnimal::checkSurfaceWaterAnimalSpawnRules,
RegisterSpawnPlacementsEvent.Operation.OR);
event.register(ModEntities.FIREFLY.get(), SpawnPlacementTypes.NO_RESTRICTIONS,
Heightmap.Types.MOTION_BLOCKING,
(type, level, reason, pos, random) -> level.getLevel().isNight() && level.canSeeSky(pos),
RegisterSpawnPlacementsEvent.Operation.OR);
event.register(ModEntities.BUTTERFLY.get(), SpawnPlacementTypes.NO_RESTRICTIONS,
Heightmap.Types.MOTION_BLOCKING,
(type, level, reason, pos, random) -> level.getLevel().isDay() && level.canSeeSky(pos),
RegisterSpawnPlacementsEvent.Operation.OR);
}
}