Path: blob/1.21.x/src/test_old/java/net/minecraftforge/debug/entity/SpawnPlacementTest.java
7444 views
/*1* Copyright (c) Forge Development LLC and contributors2* SPDX-License-Identifier: LGPL-2.1-only3*/45package net.minecraftforge.debug.entity;67import net.minecraft.core.BlockPos;8import net.minecraft.world.Difficulty;9import net.minecraft.world.entity.EntityType;10import net.minecraft.world.level.ServerLevelAccessor;11import net.minecraft.world.level.biome.Biomes;12import net.minecraftforge.event.entity.SpawnPlacementRegisterEvent;13import net.minecraftforge.fml.common.Mod;14import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext;1516import com.mojang.logging.LogUtils;17import org.slf4j.Logger;1819@Mod("spawn_placement_test")20public class SpawnPlacementTest21{22public static final boolean ENABLED = false;23public static final Logger LOGGER = LogUtils.getLogger();2425public SpawnPlacementTest()26{27if (ENABLED)28{29FMLJavaModLoadingContext.get().getModEventBus().addListener(this::onSpawnPlacementRegister);30}31}3233private void onSpawnPlacementRegister(SpawnPlacementRegisterEvent event)34{35LOGGER.info("Modifying spawn placements!");36// AND: require zombies to spawn below y 4037event.register(EntityType.ZOMBIE, ((entityType, level, spawnType, pos, random) -> pos.getY() < 40 && validMonsterSpawn(level, pos, entityType)), SpawnPlacementRegisterEvent.Operation.AND);38// REPLACE: don't require darkness to spawn creepers39event.register(EntityType.CREEPER, ((entityType, level, spawnType, pos, random) -> validMonsterSpawn(level, pos, entityType)), SpawnPlacementRegisterEvent.Operation.REPLACE);40// OR: allow slimes to spawn in plains41event.register(EntityType.SLIME, (entityType, level, spawnType, pos, random) -> validMonsterSpawn(level, pos, entityType) && level.getBiome(pos).is(Biomes.PLAINS));42}4344private static boolean validMonsterSpawn(ServerLevelAccessor level, BlockPos pos, EntityType<?> type)45{46return level.getDifficulty() != Difficulty.PEACEFUL && level.getBlockState(pos.below()).isValidSpawn(level, pos.below(), type);47}48}495051