Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
MinecraftForge
GitHub Repository: MinecraftForge/MinecraftForge
Path: blob/1.21.x/src/test_old/java/net/minecraftforge/debug/entity/SpawnPlacementTest.java
7444 views
1
/*
2
* Copyright (c) Forge Development LLC and contributors
3
* SPDX-License-Identifier: LGPL-2.1-only
4
*/
5
6
package net.minecraftforge.debug.entity;
7
8
import net.minecraft.core.BlockPos;
9
import net.minecraft.world.Difficulty;
10
import net.minecraft.world.entity.EntityType;
11
import net.minecraft.world.level.ServerLevelAccessor;
12
import net.minecraft.world.level.biome.Biomes;
13
import net.minecraftforge.event.entity.SpawnPlacementRegisterEvent;
14
import net.minecraftforge.fml.common.Mod;
15
import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext;
16
17
import com.mojang.logging.LogUtils;
18
import org.slf4j.Logger;
19
20
@Mod("spawn_placement_test")
21
public class SpawnPlacementTest
22
{
23
public static final boolean ENABLED = false;
24
public static final Logger LOGGER = LogUtils.getLogger();
25
26
public SpawnPlacementTest()
27
{
28
if (ENABLED)
29
{
30
FMLJavaModLoadingContext.get().getModEventBus().addListener(this::onSpawnPlacementRegister);
31
}
32
}
33
34
private void onSpawnPlacementRegister(SpawnPlacementRegisterEvent event)
35
{
36
LOGGER.info("Modifying spawn placements!");
37
// AND: require zombies to spawn below y 40
38
event.register(EntityType.ZOMBIE, ((entityType, level, spawnType, pos, random) -> pos.getY() < 40 && validMonsterSpawn(level, pos, entityType)), SpawnPlacementRegisterEvent.Operation.AND);
39
// REPLACE: don't require darkness to spawn creepers
40
event.register(EntityType.CREEPER, ((entityType, level, spawnType, pos, random) -> validMonsterSpawn(level, pos, entityType)), SpawnPlacementRegisterEvent.Operation.REPLACE);
41
// OR: allow slimes to spawn in plains
42
event.register(EntityType.SLIME, (entityType, level, spawnType, pos, random) -> validMonsterSpawn(level, pos, entityType) && level.getBiome(pos).is(Biomes.PLAINS));
43
}
44
45
private static boolean validMonsterSpawn(ServerLevelAccessor level, BlockPos pos, EntityType<?> type)
46
{
47
return level.getDifficulty() != Difficulty.PEACEFUL && level.getBlockState(pos.below()).isValidSpawn(level, pos.below(), type);
48
}
49
}
50
51