- package bukkit.techguard.christmas.world;
- import bukkit.techguard.christmas.Properties;
- import java.util.Arrays;
- import java.util.List;
- import java.util.Random;
- import org.bukkit.Material;
- import org.bukkit.World;
- import org.bukkit.generator.BlockPopulator;
- import org.bukkit.generator.ChunkGenerator;
- public class ChristmasGenerator extends ChunkGenerator
- {
- public byte[] generate(World world, Random rand, int x, int z)
- {
- byte[] blocks = new byte[32768];
- for (int i = 0; i < 16; i++) {
- for (int k = 0; k < 16; k++) {
- int maxHeight = (int)(get(x * 16 + i, z * 16 + k) * 42.0D) + 42;
- for (int j = maxHeight; j > 0; j--) {
- if ((j == maxHeight) && (j > 46)) {
- blocks[toByte(i, j + 1, k)] = (byte)Material.SNOW.getId();
- blocks[toByte(i, j, k)] = (byte)Material.GRASS.getId();
- }
- else if (j == 1) {
- blocks[toByte(i, j, k)] = (byte)Material.BEDROCK.getId();
- }
- else if ((j < maxHeight) && (j > maxHeight - 4)) {
- blocks[toByte(i, j, k)] = (byte)Material.DIRT.getId();
- }
- else if (j < maxHeight - 21) {
- blocks[toByte(i, j, k)] = (byte)Material.ICE.getId();
- } else {
- blocks[toByte(i, j, k)] = (byte)Material.SNOW_BLOCK.getId();
- }
- }
- if (maxHeight < 48) {
- for (int j = 47; j > 42; j--) {
- if (blocks[toByte(i, j, k)] == 0) {
- blocks[toByte(i, j, k)] = (byte)Material.ICE.getId();
- }
- }
- }
- }
- }
- return blocks;
- }
- public double normalise(int x) {
- int conv = x % 360;
- if (conv >= 1)
- x %= 360;
- return Math.toRadians(x);
- }
- public double get(int x, int z) {
- double calc =
- Math.sin(normalise(x / 4)) +
- Math.sin(normalise(z / 5)) +
- Math.sin(normalise(x - z)) +
- Math.sin(normalise(z)) / (Math.sin(normalise(z)) + 2.0D) * 2.0D +
- Math.sin(normalise((int)(Math.sin(normalise(x) + Math.sin(normalise(z))) + Math.sin(normalise(z)))) + Math.sin(normalise(z / 2)) +
- Math.sin(normalise(x) +
- Math.sin(normalise(z))) +
- Math.sin(normalise(z)) +
- Math.sin(normalise(z)) +
- Math.sin(normalise(x))) +
- Math.sin(normalise((x + z) / 4)) +
- Math.sin(normalise((int)(x + Math.sin(normalise(z) * Math.sin(normalise(x))))));
- calc = Math.abs(calc / 6.0D);
- if (calc > 1.0D) calc = 1.0D;
- return calc;
- }
- public boolean canSpawn(World world, int x, int z) {
- return true;
- }
- public int toByte(int x, int y, int z) {
- return (x * 16 + z) * 128 + y;
- }
- public List<BlockPopulator> getDefaultPopulators(World world) {
- if (Properties.GEN_STRUCTURES) {
- return Arrays.asList(new BlockPopulator[] { new XMasTree(), new SnowCastlePopulator(), new TreePopulator() });
- }
- return Arrays.asList(new BlockPopulator[] { new TreePopulator() });
- }
- }