package net.glowstone.generator.biomegrid;
import net.glowstone.constants.GlowBiome;
import static org.bukkit.block.Biome.*;
public class BiomeMapLayer extends MapLayer {
private static final int[] WARM = new int[] {GlowBiome.getId(DESERT), GlowBiome.getId(DESERT), GlowBiome.getId(DESERT),
GlowBiome.getId(SAVANNA), GlowBiome.getId(SAVANNA), GlowBiome.getId(PLAINS)};
private static final int[] WET = new int[] {GlowBiome.getId(PLAINS), GlowBiome.getId(PLAINS), GlowBiome.getId(FOREST),
GlowBiome.getId(BIRCH_FOREST), GlowBiome.getId(ROOFED_FOREST), GlowBiome.getId(EXTREME_HILLS),
GlowBiome.getId(SWAMPLAND)};
private static final int[] DRY = new int[] {GlowBiome.getId(PLAINS), GlowBiome.getId(FOREST), GlowBiome.getId(TAIGA),
GlowBiome.getId(EXTREME_HILLS)};
private static final int[] COLD = new int[] {GlowBiome.getId(ICE_PLAINS), GlowBiome.getId(ICE_PLAINS),
GlowBiome.getId(COLD_TAIGA)};
private static final int[] WARM_LARGE = new int[] {GlowBiome.getId(MESA_PLATEAU_FOREST), GlowBiome.getId(MESA_PLATEAU_FOREST),
GlowBiome.getId(MESA_PLATEAU)};
private static final int[] DRY_LARGE = new int[] {GlowBiome.getId(MEGA_TAIGA)};
private static final int[] WET_LARGE = new int[] {GlowBiome.getId(JUNGLE)};
private final MapLayer belowLayer;
public BiomeMapLayer(long seed, MapLayer belowLayer) {
super(seed);
this.belowLayer = belowLayer;
}
@Override
public int[] generateValues(int x, int z, int sizeX, int sizeZ) {
int[] values = belowLayer.generateValues(x, z, sizeX, sizeZ);
int[] finalValues = new int[sizeX * sizeZ];
for (int i = 0; i < sizeZ; i++) {
for (int j = 0; j < sizeX; j++) {
int val = values[j + i * sizeX];
if (val != 0) {
setCoordsSeed(x + j, z + i);
switch (val) {
case 1:
val = DRY[nextInt(DRY.length)];
break;
case 2:
val = WARM[nextInt(WARM.length)];
break;
case 3:
case 1003:
val = COLD[nextInt(COLD.length)];
break;
case 4:
val = WET[nextInt(WET.length)];
break;
case 1001:
val = DRY_LARGE[nextInt(DRY_LARGE.length)];
break;
case 1002:
val = WARM_LARGE[nextInt(WARM_LARGE.length)];
break;
case 1004:
val = WET_LARGE[nextInt(WET_LARGE.length)];
break;
default:
break;
}
}
finalValues[j + i * sizeX] = val;
}
}
return finalValues;
}
}