Newer
Older
void-pack-super-server / work / decompile-ee3ecae0 / net / minecraft / server / ChunkProviderFlat.java
package net.minecraft.server;

import com.google.common.collect.Lists;
import java.util.Iterator;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import javax.annotation.Nullable;

public class ChunkProviderFlat extends ChunkGenerator<GeneratorSettingsFlat> {

    private final BiomeBase e = this.g();
    private final MobSpawnerPhantom f = new MobSpawnerPhantom();
    private final MobSpawnerCat g = new MobSpawnerCat();

    public ChunkProviderFlat(GeneratorAccess generatoraccess, WorldChunkManager worldchunkmanager, GeneratorSettingsFlat generatorsettingsflat) {
        super(generatoraccess, worldchunkmanager, generatorsettingsflat);
    }

    private BiomeBase g() {
        BiomeBase biomebase = ((GeneratorSettingsFlat) this.settings).v();
        ChunkProviderFlat.a chunkproviderflat_a = new ChunkProviderFlat.a(biomebase.r(), biomebase.d(), biomebase.q(), biomebase.i(), biomebase.m(), biomebase.getTemperature(), biomebase.getHumidity(), biomebase.o(), biomebase.p(), biomebase.t());
        Map<String, Map<String, String>> map = ((GeneratorSettingsFlat) this.settings).w();
        Iterator iterator = map.keySet().iterator();

        int i;
        WorldGenFeatureConfigured worldgenfeatureconfigured;

        while (iterator.hasNext()) {
            String s = (String) iterator.next();
            WorldGenFeatureConfigured<?, ?>[] aworldgenfeatureconfigured = (WorldGenFeatureConfigured[]) GeneratorSettingsFlat.u.get(s);

            if (aworldgenfeatureconfigured != null) {
                WorldGenFeatureConfigured[] aworldgenfeatureconfigured1 = aworldgenfeatureconfigured;

                i = aworldgenfeatureconfigured.length;

                for (int j = 0; j < i; ++j) {
                    WorldGenFeatureConfigured<?, ?> worldgenfeatureconfigured1 = aworldgenfeatureconfigured1[j];

                    chunkproviderflat_a.a((WorldGenStage.Decoration) GeneratorSettingsFlat.t.get(worldgenfeatureconfigured1), worldgenfeatureconfigured1);
                    worldgenfeatureconfigured = ((WorldGenFeatureCompositeConfiguration) worldgenfeatureconfigured1.c).a;
                    if (worldgenfeatureconfigured.b instanceof StructureGenerator) {
                        StructureGenerator<WorldGenFeatureConfiguration> structuregenerator = (StructureGenerator) worldgenfeatureconfigured.b;
                        WorldGenFeatureConfiguration worldgenfeatureconfiguration = biomebase.b(structuregenerator);
                        WorldGenFeatureConfiguration worldgenfeatureconfiguration1 = worldgenfeatureconfiguration != null ? worldgenfeatureconfiguration : (WorldGenFeatureConfiguration) GeneratorSettingsFlat.v.get(worldgenfeatureconfigured1);

                        chunkproviderflat_a.a(structuregenerator.b(worldgenfeatureconfiguration1));
                    }
                }
            }
        }

        boolean flag = (!((GeneratorSettingsFlat) this.settings).A() || biomebase == Biomes.THE_VOID) && map.containsKey("decoration");

        if (flag) {
            List<WorldGenStage.Decoration> list = Lists.newArrayList();

            list.add(WorldGenStage.Decoration.UNDERGROUND_STRUCTURES);
            list.add(WorldGenStage.Decoration.SURFACE_STRUCTURES);
            WorldGenStage.Decoration[] aworldgenstage_decoration = WorldGenStage.Decoration.values();
            int k = aworldgenstage_decoration.length;

            for (i = 0; i < k; ++i) {
                WorldGenStage.Decoration worldgenstage_decoration = aworldgenstage_decoration[i];

                if (!list.contains(worldgenstage_decoration)) {
                    Iterator iterator1 = biomebase.a(worldgenstage_decoration).iterator();

                    while (iterator1.hasNext()) {
                        worldgenfeatureconfigured = (WorldGenFeatureConfigured) iterator1.next();
                        chunkproviderflat_a.a(worldgenstage_decoration, worldgenfeatureconfigured);
                    }
                }
            }
        }

        IBlockData[] aiblockdata = ((GeneratorSettingsFlat) this.settings).C();

        for (int l = 0; l < aiblockdata.length; ++l) {
            IBlockData iblockdata = aiblockdata[l];

            if (iblockdata != null && !HeightMap.Type.MOTION_BLOCKING.d().test(iblockdata)) {
                ((GeneratorSettingsFlat) this.settings).a(l);
                chunkproviderflat_a.a(WorldGenStage.Decoration.TOP_LAYER_MODIFICATION, WorldGenerator.FILL_LAYER.b((WorldGenFeatureConfiguration) (new WorldGenFeatureFillConfiguration(l, iblockdata))).a(WorldGenDecorator.a.a((WorldGenFeatureDecoratorConfiguration) WorldGenFeatureDecoratorConfiguration.e)));
            }
        }

        return chunkproviderflat_a;
    }

    @Override
    public void buildBase(RegionLimitedWorldAccess regionlimitedworldaccess, IChunkAccess ichunkaccess) {}

    @Override
    public int getSpawnHeight() {
        IChunkAccess ichunkaccess = this.a.getChunkAt(0, 0);

        return ichunkaccess.a(HeightMap.Type.MOTION_BLOCKING, 8, 8);
    }

    @Override
    protected BiomeBase getBiome(BiomeManager biomemanager, BlockPosition blockposition) {
        return this.e;
    }

    @Override
    public void buildNoise(GeneratorAccess generatoraccess, IChunkAccess ichunkaccess) {
        IBlockData[] aiblockdata = ((GeneratorSettingsFlat) this.settings).C();
        BlockPosition.MutableBlockPosition blockposition_mutableblockposition = new BlockPosition.MutableBlockPosition();
        HeightMap heightmap = ichunkaccess.a(HeightMap.Type.OCEAN_FLOOR_WG);
        HeightMap heightmap1 = ichunkaccess.a(HeightMap.Type.WORLD_SURFACE_WG);

        for (int i = 0; i < aiblockdata.length; ++i) {
            IBlockData iblockdata = aiblockdata[i];

            if (iblockdata != null) {
                for (int j = 0; j < 16; ++j) {
                    for (int k = 0; k < 16; ++k) {
                        ichunkaccess.setType(blockposition_mutableblockposition.d(j, i, k), iblockdata, false);
                        heightmap.a(j, i, k, iblockdata);
                        heightmap1.a(j, i, k, iblockdata);
                    }
                }
            }
        }

    }

    @Override
    public int getBaseHeight(int i, int j, HeightMap.Type heightmap_type) {
        IBlockData[] aiblockdata = ((GeneratorSettingsFlat) this.settings).C();

        for (int k = aiblockdata.length - 1; k >= 0; --k) {
            IBlockData iblockdata = aiblockdata[k];

            if (iblockdata != null && heightmap_type.d().test(iblockdata)) {
                return k + 1;
            }
        }

        return 0;
    }

    @Override
    public void doMobSpawning(WorldServer worldserver, boolean flag, boolean flag1) {
        this.f.a(worldserver, flag, flag1);
        this.g.a(worldserver, flag, flag1);
    }

    @Override
    public boolean canSpawnStructure(BiomeBase biomebase, StructureGenerator<? extends WorldGenFeatureConfiguration> structuregenerator) {
        return this.e.a(structuregenerator);
    }

    @Nullable
    @Override
    public <C extends WorldGenFeatureConfiguration> C getFeatureConfiguration(BiomeBase biomebase, StructureGenerator<C> structuregenerator) {
        return this.e.b(structuregenerator);
    }

    @Nullable
    @Override
    public BlockPosition findNearestMapFeature(World world, String s, BlockPosition blockposition, int i, boolean flag) {
        return !((GeneratorSettingsFlat) this.settings).w().keySet().contains(s.toLowerCase(Locale.ROOT)) ? null : super.findNearestMapFeature(world, s, blockposition, i, flag);
    }

    class a extends BiomeBase {

        protected a(WorldGenSurfaceComposite worldgensurfacecomposite, BiomeBase.Precipitation biomebase_precipitation, BiomeBase.Geography biomebase_geography, float f, float f1, float f2, float f3, int i, int j, String s) {
            super((new BiomeBase.a()).a(worldgensurfacecomposite).a(biomebase_precipitation).a(biomebase_geography).a(f).b(f1).c(f2).d(f3).a(i).b(j).a(s));
        }
    }
}