summaryrefslogtreecommitdiffstats
path: root/src/main/java/net/minecraft/server/ChunkProviderFlat.java
blob: c2ab482f85cd8653730cdeaddc07542d8dd8e864 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
package net.minecraft.server;

import java.util.List;
import java.util.Random;

public class ChunkProviderFlat implements IChunkProvider {

    private World a;
    private Random b;
    private final boolean c;
    private WorldGenVillage d = new WorldGenVillage(1);

    public ChunkProviderFlat(World world, long i, boolean flag) {
        this.a = world;
        this.c = flag;
        this.b = new Random(i);
    }

    private void a(byte[] abyte) {
        int i = abyte.length / 256;

        for (int j = 0; j < 16; ++j) {
            for (int k = 0; k < 16; ++k) {
                for (int l = 0; l < i; ++l) {
                    int i1 = 0;

                    if (l == 0) {
                        i1 = Block.BEDROCK.id;
                    } else if (l <= 2) {
                        i1 = Block.DIRT.id;
                    } else if (l == 3) {
                        i1 = Block.GRASS.id;
                    }

                    abyte[j << 11 | k << 7 | l] = (byte) i1;
                }
            }
        }
    }

    public Chunk getChunkAt(int i, int j) {
        return this.getOrCreateChunk(i, j);
    }

    public Chunk getOrCreateChunk(int i, int j) {
        byte[] abyte = new byte['\u8000'];

        this.a(abyte);
        Chunk chunk = new Chunk(this.a, abyte, i, j);

        if (this.c) {
            this.d.a(this, this.a, i, j, abyte);
        }
        // CraftBukkit start - prime biome data to prevent uninitialized values racing to client
        BiomeBase[] bb = this.a.getWorldChunkManager().getBiomeBlock(null, i * 16, j * 16, 16, 16);
        byte[] biomes = chunk.l();
        for(int idx = 0; idx < biomes.length; idx++) {
            biomes[idx] = (byte) bb[idx].id;
        }
        // CraftBukkit end

        chunk.initLighting();
        return chunk;
    }

    public boolean isChunkLoaded(int i, int j) {
        return true;
    }

    public void getChunkAt(IChunkProvider ichunkprovider, int i, int j) {
        this.b.setSeed(this.a.getSeed());
        long k = this.b.nextLong() / 2L * 2L + 1L;
        long l = this.b.nextLong() / 2L * 2L + 1L;

        this.b.setSeed((long) i * k + (long) j * l ^ this.a.getSeed());
        if (this.c) {
            this.d.a(this.a, this.b, i, j);
        }
    }

    public boolean saveChunks(boolean flag, IProgressUpdate iprogressupdate) {
        return true;
    }

    public boolean unloadChunks() {
        return false;
    }

    public boolean canSave() {
        return true;
    }

    public List getMobsFor(EnumCreatureType enumcreaturetype, int i, int j, int k) {
        BiomeBase biomebase = this.a.getBiome(i, k);

        return biomebase == null ? null : biomebase.getMobs(enumcreaturetype);
    }

    public ChunkPosition findNearestMapFeature(World world, String s, int i, int j, int k) {
        return null;
    }
}