Guest User

Untitled

a guest
Oct 17th, 2017
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.24 KB | None | 0 0
  1. package com.ubempire.map;
  2.  
  3. import java.util.Random;
  4. import org.bukkit.Chunk;
  5. import org.bukkit.Material;
  6. import org.bukkit.World;
  7. import org.bukkit.block.Block;
  8. import org.bukkit.generator.BlockPopulator;
  9.  
  10. /**
  11. * BlockPopulator that adds trees based on the biome.
  12. */
  13.  
  14. public class TreePopulator extends BlockPopulator {
  15.  
  16. @Override
  17. public void populate(World world, Random random, Chunk chunk) {
  18. int centerX = (chunk.getX() << 4) + random.nextInt(16);
  19. int centerZ = (chunk.getZ() << 4) + random.nextInt(16);
  20.  
  21. byte data = 0;
  22. int chance = 0;
  23. int height = 4 + random.nextInt(3);
  24. int multiplier = 1;
  25.  
  26. if (random.nextBoolean()) {
  27. data = 2;
  28. height = 5 + random.nextInt(3);;
  29. }
  30.  
  31. switch (world.getBlockAt(centerX, 0, centerZ).getBiome()) {
  32. case FOREST:
  33. chance = 160;
  34. multiplier = 8;
  35. break;
  36. case PLAINS:
  37. chance = 40;
  38. break;
  39. case RAINFOREST:
  40. chance = 200;
  41. multiplier = 20;
  42. break;
  43. case SAVANNA:
  44. chance = 20;
  45. break;
  46. case SEASONAL_FOREST:
  47. chance = 175;
  48. multiplier = 12;
  49. break;
  50. case SHRUBLAND:
  51. chance = 60;
  52. break;
  53. case SWAMPLAND:
  54. chance = 120;
  55. break;
  56. case TAIGA:
  57. chance = 120;
  58. data = 1;
  59. height = 8 + random.nextInt(3);
  60. multiplier = 3;
  61. break;
  62. case TUNDRA:
  63. chance = 5;
  64. data = 1;
  65. height = 7 + random.nextInt(3);
  66. break;
  67. }
  68.  
  69. for (int i = 0; i < multiplier; i++) {
  70. if (random.nextInt(200) < chance) {
  71. int x = (chunk.getX() << 4) + random.nextInt(16);
  72. int z = (chunk.getZ() << 4) + random.nextInt(16);
  73. int centerY = world.getHighestBlockYAt(x, z) - 1;
  74. Block sourceBlock = world.getBlockAt(x, centerY, z);
  75.  
  76. if (sourceBlock.getType() == Material.GRASS) {
  77. world.getBlockAt(centerX, centerY + height + 1, centerZ).setTypeIdAndData(18, data, true);
  78. for (int j = 0; j < 4; j++) {
  79. world.getBlockAt(centerX, centerY + height + 1 - j, centerZ - 1).setTypeIdAndData(18, data, true);
  80. world.getBlockAt(centerX, centerY + height + 1 - j, centerZ + 1).setTypeIdAndData(18, data, true);
  81. world.getBlockAt(centerX - 1, centerY + height + 1 - j, centerZ).setTypeIdAndData(18, data, true);
  82. world.getBlockAt(centerX + 1, centerY + height + 1 - j, centerZ).setTypeIdAndData(18, data, true);
  83. }
  84.  
  85. if (random.nextBoolean()) {
  86. world.getBlockAt(centerX + 1, centerY + height, centerZ + 1).setTypeIdAndData(18, data, true);
  87. }
  88. if (random.nextBoolean()) {
  89. world.getBlockAt(centerX + 1, centerY + height, centerZ - 1).setTypeIdAndData(18, data, true);
  90. }
  91. if (random.nextBoolean()) {
  92. world.getBlockAt(centerX - 1, centerY + height, centerZ + 1).setTypeIdAndData(18, data, true);
  93. }
  94. if (random.nextBoolean()) {
  95. world.getBlockAt(centerX - 1, centerY + height, centerZ - 1).setTypeIdAndData(18, data, true);
  96. }
  97.  
  98. world.getBlockAt(centerX + 1, centerY + height - 1, centerZ + 1).setTypeIdAndData(18, data, true);
  99. world.getBlockAt(centerX + 1, centerY + height - 1, centerZ - 1).setTypeIdAndData(18, data, true);
  100. world.getBlockAt(centerX - 1, centerY + height - 1, centerZ + 1).setTypeIdAndData(18, data, true);
  101. world.getBlockAt(centerX - 1, centerY + height - 1, centerZ - 1).setTypeIdAndData(18, data, true);
  102. world.getBlockAt(centerX + 1, centerY + height - 2, centerZ + 1).setTypeIdAndData(18, data, true);
  103. world.getBlockAt(centerX + 1, centerY + height - 2, centerZ - 1).setTypeIdAndData(18, data, true);
  104. world.getBlockAt(centerX - 1, centerY + height - 2, centerZ + 1).setTypeIdAndData(18, data, true);
  105. world.getBlockAt(centerX - 1, centerY + height - 2, centerZ - 1).setTypeIdAndData(18, data, true);
  106.  
  107. for (int j = 0; j < 2; j++) {
  108. for (int k = -2; k <= 2; k++) {
  109. for (int l = -2; l <= 2; l++) {
  110. world.getBlockAt(centerX + k, centerY + height - 1 - j, centerZ + l).setTypeIdAndData(18, data, true);
  111. }
  112. }
  113. }
  114.  
  115. for (int j = 0; j < 2; j++) {
  116. if (random.nextBoolean()) {
  117. world.getBlockAt(centerX + 2, centerY + height - 1 - j, centerZ + 2).setTypeIdAndData(0, (byte) 0, true);
  118. }
  119. if (random.nextBoolean()) {
  120. world.getBlockAt(centerX + 2, centerY + height - 1 - j, centerZ - 2).setTypeIdAndData(0, (byte) 0, true);
  121. }
  122. if (random.nextBoolean()) {
  123. world.getBlockAt(centerX - 2, centerY + height - 1 - j, centerZ + 2).setTypeIdAndData(0, (byte) 0, true);
  124. }
  125. if (random.nextBoolean()) {
  126. world.getBlockAt(centerX - 2, centerY + height - 1 - j, centerZ - 2).setTypeIdAndData(0, (byte) 0, true);
  127. }
  128. }
  129.  
  130. // Trunk
  131. for (int y = 1; y <= height; y++) {
  132. world.getBlockAt(centerX, centerY + y, centerZ).setTypeIdAndData(17, data, true);
  133. }
  134. }
  135. }
  136. }
  137. }
  138.  
  139. }
Add Comment
Please, Sign In to add comment