Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package northrend.world;
- import net.minecraft.block.Block;
- import net.minecraft.entity.EnumCreatureType;
- import net.minecraft.init.Blocks;
- import net.minecraft.util.IProgressUpdate;
- import net.minecraft.world.ChunkPosition;
- import net.minecraft.world.World;
- import net.minecraft.world.chunk.Chunk;
- import net.minecraft.world.chunk.IChunkProvider;
- import javax.vecmath.Vector2d;
- import java.util.List;
- import java.util.Random;
- public class ChunkProviderNorthrend implements IChunkProvider
- {
- World world;
- public ChunkProviderNorthrend(World world) {
- this.world = world;
- }
- @Override
- public boolean chunkExists(int var1, int var2) {
- return true;
- }
- private byte[] getHillPeak(int chunkX, int chunkZ) {
- Random r = new Random(world.getSeed() + chunkX * 154 - chunkZ * 162);
- byte x = (byte)r.nextInt(16);
- byte z = (byte)r.nextInt(16);
- byte height = (byte)(40 + r.nextInt(200));
- byte hilly = (byte)(50 + r.nextInt(256 - 50));
- //System.out.println("Peak (" + chunkX + ", " + chunkZ + "): (" + x + ", " + z);
- return new byte[] {x, z, height, hilly};
- }
- private double getDistance(byte[] a, byte[] b) {
- return Math.sqrt(Math.pow(a[0] - b[0], 2) + Math.pow(a[1] - b[1], 2));
- }
- private byte[][] getPeaks(int chunkX, int chunkZ) {
- int area = 9;
- byte[][] peaks = new byte[(int)Math.pow (area*2 + 1, 2)][];
- int i = 0;
- for(int x = - area; x <= area; x++){
- for(int z = - area; z <= area; z++){
- byte[] peak = getHillPeak(chunkX + x, chunkZ + z);
- peak[0] += 16 * x;
- peak[1] += 16 * z;
- peaks[i] = peak;
- i++;
- }
- }
- return peaks;
- }
- @Override
- public Chunk provideChunk(int chunkX, int chunkZ) {
- Block[] blocks = new Block[16 * 16 * 256];
- byte[][] peaks = getPeaks(chunkX, chunkZ);
- for(int x = 0; x < 16; x ++) {
- for(int z = 0; z < 16; z ++) {
- byte[] here = new byte[] {(byte)x, (byte)z};
- int maxHeight = 0;
- for(int i = 0; i < peaks.length; i++){
- double distance = getDistance(peaks[i], here);
- double hillyness = peaks[i][3] & 0xFF;
- int height = peaks[i][2] - (int)(distance * hillyness / 256);
- if(height > maxHeight)
- maxHeight = height;
- }
- for(int y = 0; y < 128; y++){
- int block = x * 128 * 16 + z * 128 + y;
- if(y < maxHeight)
- blocks[block] = Blocks.stone;
- }
- }
- }
- byte[] metaData = new byte[65536];
- Chunk chunk = new Chunk(world, blocks, metaData, chunkX, chunkZ);
- chunk.generateSkylightMap();
- return chunk;
- }
- @Override
- public Chunk loadChunk(int x, int z) {
- return provideChunk(x, z);
- }
- @Override
- public void populate(IChunkProvider var1, int var2, int var3) {
- }
- @Override
- public boolean saveChunks(boolean var1, IProgressUpdate var2) {
- return true;
- }
- @Override
- public boolean unloadQueuedChunks() {
- return false;
- }
- @Override
- public boolean canSave() {
- return false;
- }
- @Override
- public String makeString() {
- return "NorthendWorld";
- }
- @Override
- public List getPossibleCreatures(EnumCreatureType var1, int var2, int var3, int var4) {
- return null;
- }
- @Override
- public ChunkPosition func_147416_a(World var1, String var2, int var3, int var4, int var5) {
- return null;
- }
- @Override
- public int getLoadedChunkCount() {
- return 0;
- }
- @Override
- public void recreateStructures(int x, int z) {
- }
- @Override
- public void saveExtraData() {
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement