Search in sources :

Example 1 with ServerAboutToStartEvent

use of net.minecraftforge.event.server.ServerAboutToStartEvent in project MinecraftForge by MinecraftForge.

the class ServerLifecycleHooks method handleServerAboutToStart.

public static boolean handleServerAboutToStart(final MinecraftServer server) {
    currentServer = server;
    // gathers NetworkRegistry data
    currentServer.getStatus().setForgeData(new ServerStatusPing());
    // on the dedi server we need to force the stuff to setup properly
    LogicalSidedProvider.setServer(() -> server);
    ConfigTracker.INSTANCE.loadConfigs(ModConfig.Type.SERVER, getServerConfigPath(server));
    return !MinecraftForge.EVENT_BUS.post(new ServerAboutToStartEvent(server));
}
Also used : ServerAboutToStartEvent(net.minecraftforge.event.server.ServerAboutToStartEvent) ServerStatusPing(net.minecraftforge.network.ServerStatusPing)

Example 2 with ServerAboutToStartEvent

use of net.minecraftforge.event.server.ServerAboutToStartEvent in project blueprint by team-abnormals.

the class BiomeSourceModificationManager method onServerAboutToStart.

@SuppressWarnings("unchecked")
@SubscribeEvent
public static void onServerAboutToStart(ServerAboutToStartEvent event) {
    if (INSTANCE == null)
        return;
    List<BiomeSourceModifier> modifiers = INSTANCE.modifiers;
    if (modifiers.isEmpty())
        return;
    MinecraftServer server = event.getServer();
    WorldGenSettings worldGenSettings = server.getWorldData().worldGenSettings();
    var dimensions = worldGenSettings.dimensions();
    var keySet = dimensions.keySet();
    SelectionSpace selectionSpace = (consumer) -> keySet.forEach(location -> consumer.accept(location, null));
    HashMap<ResourceLocation, ArrayList<BiomeUtil.ModdedBiomeProvider>> map = new HashMap<>();
    for (BiomeSourceModifier modifier : modifiers) {
        BiomeUtil.ModdedBiomeProvider provider = modifier.provider();
        if (provider.getWeight() <= 0)
            return;
        modifier.targetSelector().getTargetNames(selectionSpace).forEach(location -> {
            map.computeIfAbsent(location, __ -> new ArrayList<>()).add(provider);
        });
    }
    long seed = worldGenSettings.seed();
    RegistryAccess registryAccess = server.registryAccess();
    Registry<Biome> biomeRegistry = registryAccess.registryOrThrow(Registry.BIOME_REGISTRY);
    Registry<NormalNoise.NoiseParameters> noiseParametersRegistry = registryAccess.registryOrThrow(Registry.NOISE_REGISTRY);
    Registry<DensityFunction> densityFunctionRegistry = registryAccess.registryOrThrow(Registry.DENSITY_FUNCTION_REGISTRY);
    NoiseSettings defaultNoiseSettings = registryAccess.registryOrThrow(Registry.NOISE_GENERATOR_SETTINGS_REGISTRY).getOrThrow(NoiseGeneratorSettings.OVERWORLD).noiseSettings();
    DensityFunction defaultModdedness = densityFunctionRegistry.getOrThrow(ModdedBiomeSource.DEFAULT_MODDEDNESS);
    for (Map.Entry<ResourceKey<LevelStem>, LevelStem> entry : dimensions.entrySet()) {
        ResourceLocation location = entry.getKey().location();
        ArrayList<BiomeUtil.ModdedBiomeProvider> providersForKey = map.get(location);
        if (providersForKey != null && !providersForKey.isEmpty()) {
            ChunkGenerator chunkGenerator = entry.getValue().generator();
            BiomeSource source = chunkGenerator.getBiomeSource();
            // TODO: Mostly experimental! Works with Terralith, Biomes O' Plenty, and more, but still needs more testing!
            if (!(source instanceof FixedBiomeSource) && !(source instanceof CheckerboardColumnBiomeSource)) {
                boolean legacy = false;
                boolean noiseBased = chunkGenerator instanceof NoiseBasedChunkGenerator;
                NoiseSettings noiseSettings = defaultNoiseSettings;
                if (noiseBased) {
                    try {
                        NoiseGeneratorSettings settings = ((Holder<NoiseGeneratorSettings>) NOISE_GENERATOR_SETTINGS.get(chunkGenerator)).value();
                        if (settings != null) {
                            legacy = settings.useLegacyRandomSource();
                            noiseSettings = settings.noiseSettings();
                        }
                    } catch (IllegalAccessException ignored) {
                    }
                }
                DensityFunction moddedness = densityFunctionRegistry.get(new ResourceLocation(Blueprint.MOD_ID, "moddedness/" + location.getNamespace() + "/" + location.getPath()));
                ModdedBiomeSource moddedBiomeSource = new ModdedBiomeSource(biomeRegistry, noiseParametersRegistry, densityFunctionRegistry, source, noiseSettings, seed, legacy, moddedness != null ? moddedness : defaultModdedness, new ModdedBiomeSource.WeightedBiomeSlices(providersForKey.toArray(new BiomeUtil.ModdedBiomeProvider[0])));
                chunkGenerator.biomeSource = moddedBiomeSource;
                chunkGenerator.runtimeBiomeSource = moddedBiomeSource;
                if (noiseBased)
                    ((ModdedSurfaceSystem) ((NoiseBasedChunkGenerator) chunkGenerator).surfaceSystem).setModdedBiomeSource(moddedBiomeSource);
            }
        }
    }
}
Also used : JsonParseException(com.google.gson.JsonParseException) SelectionSpace(com.teamabnormals.blueprint.core.util.modification.targeting.SelectionSpace) ResourceLocation(net.minecraft.resources.ResourceLocation) BiomeSource(net.minecraft.world.level.biome.BiomeSource) HashMap(java.util.HashMap) Biome(net.minecraft.world.level.biome.Biome) AddReloadListenerEvent(net.minecraftforge.event.AddReloadListenerEvent) ArrayList(java.util.ArrayList) JsonElement(com.google.gson.JsonElement) Registry(net.minecraft.core.Registry) FixedBiomeSource(net.minecraft.world.level.biome.FixedBiomeSource) NormalNoise(net.minecraft.world.level.levelgen.synth.NormalNoise) ObfuscationReflectionHelper(net.minecraftforge.fml.util.ObfuscationReflectionHelper) MinecraftServer(net.minecraft.server.MinecraftServer) Holder(net.minecraft.core.Holder) SimpleJsonResourceReloadListener(net.minecraft.server.packs.resources.SimpleJsonResourceReloadListener) Gson(com.google.gson.Gson) Map(java.util.Map) Mod(net.minecraftforge.fml.common.Mod) SubscribeEvent(net.minecraftforge.eventbus.api.SubscribeEvent) DataUtil(com.teamabnormals.blueprint.core.util.DataUtil) ServerAboutToStartEvent(net.minecraftforge.event.server.ServerAboutToStartEvent) LinkedList(java.util.LinkedList) RegistryOps(net.minecraft.resources.RegistryOps) ProfilerFiller(net.minecraft.util.profiling.ProfilerFiller) net.minecraft.world.level.levelgen(net.minecraft.world.level.levelgen) ResourceManager(net.minecraft.server.packs.resources.ResourceManager) RegistryAccess(net.minecraft.core.RegistryAccess) Field(java.lang.reflect.Field) BiomeUtil(com.teamabnormals.blueprint.core.util.BiomeUtil) ResourceKey(net.minecraft.resources.ResourceKey) Blueprint(com.teamabnormals.blueprint.core.Blueprint) ChunkGenerator(net.minecraft.world.level.chunk.ChunkGenerator) List(java.util.List) CheckerboardColumnBiomeSource(net.minecraft.world.level.biome.CheckerboardColumnBiomeSource) LevelStem(net.minecraft.world.level.dimension.LevelStem) HashMap(java.util.HashMap) RegistryAccess(net.minecraft.core.RegistryAccess) ArrayList(java.util.ArrayList) Biome(net.minecraft.world.level.biome.Biome) ResourceLocation(net.minecraft.resources.ResourceLocation) BiomeSource(net.minecraft.world.level.biome.BiomeSource) FixedBiomeSource(net.minecraft.world.level.biome.FixedBiomeSource) CheckerboardColumnBiomeSource(net.minecraft.world.level.biome.CheckerboardColumnBiomeSource) SelectionSpace(com.teamabnormals.blueprint.core.util.modification.targeting.SelectionSpace) Holder(net.minecraft.core.Holder) BiomeUtil(com.teamabnormals.blueprint.core.util.BiomeUtil) CheckerboardColumnBiomeSource(net.minecraft.world.level.biome.CheckerboardColumnBiomeSource) MinecraftServer(net.minecraft.server.MinecraftServer) ResourceKey(net.minecraft.resources.ResourceKey) LevelStem(net.minecraft.world.level.dimension.LevelStem) ChunkGenerator(net.minecraft.world.level.chunk.ChunkGenerator) HashMap(java.util.HashMap) Map(java.util.Map) FixedBiomeSource(net.minecraft.world.level.biome.FixedBiomeSource) SubscribeEvent(net.minecraftforge.eventbus.api.SubscribeEvent)

Aggregations

ServerAboutToStartEvent (net.minecraftforge.event.server.ServerAboutToStartEvent)2 Gson (com.google.gson.Gson)1 JsonElement (com.google.gson.JsonElement)1 JsonParseException (com.google.gson.JsonParseException)1 Blueprint (com.teamabnormals.blueprint.core.Blueprint)1 BiomeUtil (com.teamabnormals.blueprint.core.util.BiomeUtil)1 DataUtil (com.teamabnormals.blueprint.core.util.DataUtil)1 SelectionSpace (com.teamabnormals.blueprint.core.util.modification.targeting.SelectionSpace)1 Field (java.lang.reflect.Field)1 ArrayList (java.util.ArrayList)1 HashMap (java.util.HashMap)1 LinkedList (java.util.LinkedList)1 List (java.util.List)1 Map (java.util.Map)1 Holder (net.minecraft.core.Holder)1 Registry (net.minecraft.core.Registry)1 RegistryAccess (net.minecraft.core.RegistryAccess)1 RegistryOps (net.minecraft.resources.RegistryOps)1 ResourceKey (net.minecraft.resources.ResourceKey)1 ResourceLocation (net.minecraft.resources.ResourceLocation)1