Advertisement
Ineentho

wgen

Mar 16th, 2014
159
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.02 KB | None | 0 0
  1. package northrend.world;
  2.  
  3. import net.minecraft.block.Block;
  4. import net.minecraft.entity.EnumCreatureType;
  5. import net.minecraft.init.Blocks;
  6. import net.minecraft.util.IProgressUpdate;
  7. import net.minecraft.world.ChunkPosition;
  8. import net.minecraft.world.World;
  9. import net.minecraft.world.chunk.Chunk;
  10. import net.minecraft.world.chunk.IChunkProvider;
  11.  
  12. import javax.vecmath.Vector2d;
  13. import java.util.List;
  14. import java.util.Random;
  15.  
  16. public class ChunkProviderNorthrend implements IChunkProvider
  17. {
  18.     World world;
  19.  
  20.     public ChunkProviderNorthrend(World world) {
  21.         this.world = world;
  22.     }
  23.  
  24.     @Override
  25.     public boolean chunkExists(int var1, int var2) {
  26.         return true;
  27.     }
  28.  
  29.     private byte[] getHillPeak(int chunkX, int chunkZ) {
  30.         Random r = new Random(world.getSeed() + chunkX * 154 - chunkZ * 162);
  31.         byte x = (byte)r.nextInt(16);
  32.         byte z = (byte)r.nextInt(16);
  33.         byte height = (byte)(40 + r.nextInt(200));
  34.         byte hilly = (byte)(50 + r.nextInt(256 - 50));
  35.  
  36.         //System.out.println("Peak (" + chunkX + ", " + chunkZ + "): (" + x + ", " + z);
  37.  
  38.         return new byte[] {x, z, height, hilly};
  39.     }
  40.  
  41.     private double getDistance(byte[] a, byte[] b) {
  42.         return Math.sqrt(Math.pow(a[0] - b[0], 2) + Math.pow(a[1] - b[1], 2));
  43.     }
  44.  
  45.     private byte[][] getPeaks(int chunkX, int chunkZ) {
  46.         int area = 9;
  47.         byte[][] peaks = new byte[(int)Math.pow (area*2 + 1, 2)][];
  48.         int i = 0;
  49.         for(int x = - area; x <= area; x++){
  50.             for(int z = - area; z <= area; z++){
  51.                 byte[] peak = getHillPeak(chunkX + x, chunkZ +  z);
  52.                 peak[0] += 16 * x;
  53.                 peak[1] += 16 * z;
  54.                 peaks[i] = peak;
  55.                 i++;
  56.             }
  57.         }
  58.  
  59.         return peaks;
  60.     }
  61.  
  62.     @Override
  63.     public Chunk provideChunk(int chunkX, int chunkZ) {
  64.         Block[] blocks = new Block[16 * 16 * 256];
  65.  
  66.         byte[][] peaks = getPeaks(chunkX, chunkZ);
  67.  
  68.         for(int x = 0; x < 16; x ++) {
  69.             for(int z = 0; z < 16; z ++) {
  70.                 byte[] here = new byte[] {(byte)x, (byte)z};
  71.  
  72.                 int maxHeight = 0;
  73.  
  74.                 for(int i = 0; i < peaks.length; i++){
  75.                     double distance = getDistance(peaks[i], here);
  76.                     double hillyness = peaks[i][3] & 0xFF;
  77.                     int height = peaks[i][2] - (int)(distance * hillyness / 256);
  78.                     if(height > maxHeight)
  79.                         maxHeight = height;
  80.  
  81.                 }
  82.  
  83.                 for(int y = 0; y < 128; y++){
  84.                     int block = x * 128 * 16 + z * 128 + y;
  85.                     if(y < maxHeight)
  86.                         blocks[block] = Blocks.stone;
  87.                 }
  88.             }
  89.         }
  90.  
  91.         byte[] metaData = new byte[65536];
  92.  
  93.         Chunk chunk = new Chunk(world, blocks, metaData, chunkX, chunkZ);
  94.         chunk.generateSkylightMap();
  95.         return chunk;
  96.     }
  97.  
  98.     @Override
  99.     public Chunk loadChunk(int x, int z) {
  100.         return provideChunk(x, z);
  101.     }
  102.  
  103.     @Override
  104.     public void populate(IChunkProvider var1, int var2, int var3) {
  105.  
  106.     }
  107.  
  108.     @Override
  109.     public boolean saveChunks(boolean var1, IProgressUpdate var2) {
  110.         return true;
  111.     }
  112.  
  113.     @Override
  114.     public boolean unloadQueuedChunks() {
  115.         return false;
  116.     }
  117.  
  118.     @Override
  119.     public boolean canSave() {
  120.         return false;
  121.     }
  122.  
  123.     @Override
  124.     public String makeString() {
  125.         return "NorthendWorld";
  126.     }
  127.  
  128.     @Override
  129.     public List getPossibleCreatures(EnumCreatureType var1, int var2, int var3, int var4) {
  130.         return null;
  131.     }
  132.  
  133.     @Override
  134.     public ChunkPosition func_147416_a(World var1, String var2, int var3, int var4, int var5) {
  135.         return null;
  136.     }
  137.  
  138.     @Override
  139.     public int getLoadedChunkCount() {
  140.         return 0;
  141.     }
  142.  
  143.     @Override
  144.     public void recreateStructures(int x, int z) {
  145.  
  146.     }
  147.  
  148.     @Override
  149.     public void saveExtraData() {
  150.  
  151.     }
  152. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement