Advertisement
Guest User

Untitled

a guest
Oct 23rd, 2017
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 12.64 KB | None | 0 0
  1. package gregtech.common;
  2.  
  3. import gregtech.api.unification.material.Materials;
  4. import gregtech.api.unification.material.type.DustMaterial;
  5. import gregtech.common.blocks.BlockOre;
  6. import gregtech.common.blocks.MetaBlocks;
  7. import net.minecraft.block.state.IBlockState;
  8. import net.minecraft.init.Blocks;
  9. import net.minecraft.util.math.BlockPos;
  10. import net.minecraft.world.World;
  11. import net.minecraft.world.chunk.IChunkProvider;
  12. import net.minecraft.world.gen.IChunkGenerator;
  13. import net.minecraftforge.fml.common.IWorldGenerator;
  14. import net.minecraftforge.fml.common.registry.GameRegistry;
  15.  
  16. import java.util.*;
  17.  
  18. import static gregtech.api.unification.material.type.Material.MATERIAL_REGISTRY;
  19.  
  20. public class GTWorldGenerator implements IWorldGenerator {
  21. private final static Map<Integer, List<OreVeinConfig>> configs = new HashMap<>();
  22.  
  23. private static int w = 0;
  24. private static int wn = 0;
  25. private static int we = 0;
  26. static {
  27. List<OreVeinConfig> overworld = new ArrayList<>();
  28. overworld.add(new OreVeinConfig(1000, 32, Materials.Aluminium, Materials.Bauxite));
  29. overworld.add(new OreVeinConfig(16000, 16, Materials.Platinum, Materials.Platinum, Materials.Iridium));
  30.  
  31. List<OreVeinConfig> nether = new ArrayList<>();
  32.  
  33. List<OreVeinConfig> end = new ArrayList<>();
  34.  
  35. configs.put(0, overworld);
  36. configs.put(-1, nether);
  37. configs.put(1, end);
  38.  
  39. addOldOreRecordToConfig("naquadah", 10, 60, 10, 5, 32, false, false, true, false, true, true, Materials.Naquadah, Materials.Naquadah, Materials.Naquadah, Materials.NaquadahEnriched);
  40. addOldOreRecordToConfig("lignite", 50, 130, 160, 8, 32, true, false, false, false, false, false, Materials.Lignite, Materials.Lignite, Materials.Lignite, Materials.Coal);
  41. addOldOreRecordToConfig("coal", 50, 80, 80, 6, 32, true, false, false, false, false, false, Materials.Coal, Materials.Coal, Materials.Coal, Materials.Lignite);
  42. addOldOreRecordToConfig("magnetite", 50, 120, 160, 3, 32, true, true, false, true, true, false, Materials.Magnetite, Materials.Magnetite, Materials.Iron, Materials.VanadiumMagnetite);
  43. addOldOreRecordToConfig("gold", 60, 80, 160, 3, 32, true, false, false, true, true, true, Materials.Magnetite, Materials.Magnetite, Materials.VanadiumMagnetite, Materials.Gold);
  44. addOldOreRecordToConfig("iron", 10, 40, 120, 4, 24, true, true, false, true, true, false, Materials.BrownLimonite, Materials.YellowLimonite, Materials.BandedIron, Materials.Malachite);
  45. addOldOreRecordToConfig("cassiterite", 40, 120, 50, 5, 24, true, false, true, true, true, true, Materials.Tin, Materials.Tin, Materials.Cassiterite, Materials.Tin);
  46. addOldOreRecordToConfig("tetrahedrite", 80, 120, 70, 4, 24, true, true, false, true, true, true, Materials.Tetrahedrite, Materials.Tetrahedrite, Materials.Copper, Materials.Stibnite);
  47. addOldOreRecordToConfig("netherquartz", 40, 80, 80, 5, 24, false, true, false, false, false, false, Materials.NetherQuartz, Materials.NetherQuartz, Materials.NetherQuartz, Materials.NetherQuartz);
  48. addOldOreRecordToConfig("sulfur", 5, 20, 100, 5, 24, false, true, false, false, true, false, Materials.Sulfur, Materials.Sulfur, Materials.Pyrite, Materials.Sphalerite);
  49. addOldOreRecordToConfig("copper", 10, 30, 80, 4, 24, true, true, false, true, true, false, Materials.Chalcopyrite, Materials.Iron, Materials.Pyrite, Materials.Copper);
  50. addOldOreRecordToConfig("bauxite", 50, 90, 80, 4, 24, true, false, false, true, true, true, Materials.Bauxite, Materials.Bauxite, Materials.Aluminium, Materials.Ilmenite);
  51. addOldOreRecordToConfig("salts", 50, 60, 50, 3, 24, true, false, false, true, false, false, Materials.RockSalt, Materials.Salt, Materials.Lepidolite, Materials.Spodumene);
  52. addOldOreRecordToConfig("redstone", 10, 40, 60, 3, 24, true, true, false, true, true, true, Materials.Redstone, Materials.Redstone, Materials.Ruby, Materials.Cinnabar);
  53. addOldOreRecordToConfig("soapstone", 10, 40, 40, 3, 16, true, false, false, true, true, false, Materials.Soapstone, Materials.Talc, Materials.Glauconite, Materials.Pentlandite);
  54. addOldOreRecordToConfig("nickel", 10, 40, 40, 3, 16, true, true, true, true, true, true, Materials.Garnierite, Materials.Nickel, Materials.Cobaltite, Materials.Pentlandite);
  55. addOldOreRecordToConfig("platinum", 40, 50, 5, 3, 16, true, false, true, false, true, true, Materials.Cooperite, Materials.Palladium, Materials.Platinum, Materials.Iridium);
  56. addOldOreRecordToConfig("pitchblende", 10, 40, 40, 3, 16, true, false, false, true, true, true, Materials.Pitchblende, Materials.Pitchblende, Materials.Uraninite, Materials.Uraninite);
  57. addOldOreRecordToConfig("uranium", 20, 30, 20, 3, 16, true, false, false, true, true, true, Materials.Uraninite, Materials.Uraninite, Materials.Uranium, Materials.Uranium);
  58. addOldOreRecordToConfig("monazite", 20, 40, 30, 3, 16, true, false, false, true, true, true, Materials.Bastnasite, Materials.Bastnasite, Materials.Monazite, Materials.Neodymium);
  59. addOldOreRecordToConfig("molybdenum", 20, 50, 5, 3, 16, true, false, true, true, true, true, Materials.Wulfenite, Materials.Molybdenite, Materials.Molybdenum, Materials.Powellite);
  60. addOldOreRecordToConfig("tungstate", 20, 50, 10, 3, 16, true, false, true, true, true, true, Materials.Scheelite, Materials.Scheelite, Materials.Tungstate, Materials.Lithium);
  61. addOldOreRecordToConfig("sapphire", 10, 40, 60, 3, 16, true, false, false, true, true, true, Materials.Almandine, Materials.Pyrope, Materials.Sapphire, Materials.GreenSapphire);
  62. addOldOreRecordToConfig("manganese", 20, 30, 20, 3, 16, true, false, true, true, false, true, Materials.Grossular, Materials.Spessartine, Materials.Pyrolusite, Materials.Tantalite);
  63. addOldOreRecordToConfig("quartz", 40, 80, 60, 3, 16, true, false, false, true, true, true, Materials.Quartzite, Materials.Barite, Materials.CertusQuartz, Materials.CertusQuartz);
  64. addOldOreRecordToConfig("diamond", 5, 20, 40, 2, 16, true, false, false, true, true, true, Materials.Graphite, Materials.Graphite, Materials.Diamond, Materials.Coal);
  65. addOldOreRecordToConfig("olivine", 10, 40, 60, 3, 16, true, false, true, true, true, true, Materials.Bentonite, Materials.Magnesite, Materials.Olivine, Materials.Glauconite);
  66. addOldOreRecordToConfig("apatite", 40, 60, 60, 3, 16, true, false, false, false, false, false, Materials.Apatite, Materials.Apatite, Materials.Phosphorus, Materials.Phosphate);
  67. addOldOreRecordToConfig("galena", 30, 60, 40, 5, 16, true, false, false, true, true, true, Materials.Galena, Materials.Galena, Materials.Silver, Materials.Lead);
  68. addOldOreRecordToConfig("lapis", 20, 50, 40, 5, 16, true, false, true, true, true, true, Materials.Lazurite, Materials.Sodalite, Materials.Lapis, Materials.Calcite);
  69. addOldOreRecordToConfig("beryllium", 5, 30, 30, 3, 16, true, false, true, true, true, true, Materials.Beryllium, Materials.Beryllium, Materials.Emerald, Materials.Thorium);
  70. addOldOreRecordToConfig("oilsand", 50, 80, 80, 6, 32, true, false, false, false, false, false, Materials.Oilsands, Materials.Oilsands, Materials.Oilsands, Materials.Oilsands);
  71.  
  72. System.out.println(w + " " + wn + " " + we);
  73. }
  74. public static void addOldOreRecordToConfig(String name, int minY, int maxY, int weight, int density, int size, boolean over, boolean nether, boolean end, boolean moon, boolean mars, boolean asteroids, DustMaterial p, DustMaterial s, DustMaterial b, DustMaterial a) {
  75. if (over) {
  76. w += weight;
  77. System.out.println("overworld.add(new OreVeinConfig(48*coef*totalW/" + weight + "," + (size + 8) + ", " + minY + ", " + maxY
  78. + ", " + density + ", Materials."+MATERIAL_REGISTRY.getNameForObject(p)+", Materials.Bauxite));");
  79. }
  80. //psba
  81. if (nether) {
  82. wn += weight;
  83. System.out.println("nether.add(new OreVeinConfig(48*coef*totalWn/" + weight + "," + (size + 8) + ", " + minY + ", " + maxY
  84. + ", " + density + ", Materials.Aluminium, Materials.Bauxite));");
  85. }
  86. if (end) {
  87. we += weight;
  88. System.out.println("end.add(new OreVeinConfig(48*coef*totalWe/" + weight + "," + (size + 8) + ", " + minY + ", " + maxY
  89. + ", " + density + ", Materials.Aluminium, Materials.Bauxite));");
  90. }
  91.  
  92. }
  93.  
  94. public GTWorldGenerator() {
  95. GameRegistry.registerWorldGenerator(this, 0x3fffffff);
  96. }
  97.  
  98. @Override
  99. public void generate(Random random, int chunkX, int chunkZ, World world, IChunkGenerator chunkGenerator, IChunkProvider chunkProvider) {
  100. generateOreVeins(random, chunkX, chunkZ, world, chunkGenerator, chunkProvider);
  101. generateSmallOres(random, chunkX, chunkZ, world, chunkGenerator, chunkProvider);
  102. }
  103.  
  104. private void generateOreVeins(Random chunkRandom, int chunkX, int chunkZ, World world, IChunkGenerator chunkGenerator, IChunkProvider chunkProvider) {
  105. List<OreVeinConfig> oreVeinConfigs = configs.get(world.provider.getDimensionType().getId());
  106. if (oreVeinConfigs == null) return;
  107.  
  108. //convert to positive coordinates
  109. final long shift = 0x80000000L;
  110. long xPositive = (chunkX << 4) + shift;
  111. long zPositive = (chunkZ << 4) + shift;
  112.  
  113. Random worldRandom = new Random(world.getSeed());
  114.  
  115. for (OreVeinConfig config : oreVeinConfigs) {
  116. Random veinRandom = new Random(worldRandom.nextLong());
  117.  
  118. //int xOffset = veinRandom.nextInt(config.distance);
  119. //int zOffset = veinRandom.nextInt(config.distance);
  120. int xOffset = 0;
  121. int zOffset = 0;
  122. int distance = config.distance;
  123. long xGrid = getGridCoordinate(xPositive, xOffset, distance);
  124. long zGrid = getGridCoordinate(zPositive, zOffset, distance);
  125.  
  126. //ignore chunks on the grid
  127. if (xGrid != getGridCoordinate(xPositive + 15, xOffset, distance)
  128. || zGrid != getGridCoordinate(zPositive + 15, zOffset, distance)) continue;
  129.  
  130. Random gridRandom = new Random(xGrid * veinRandom.nextInt() + zGrid * veinRandom.nextInt() ^ veinRandom.nextLong());
  131. int xVein = (int) (xGrid + distance / 4 + gridRandom.nextInt(distance / 2) - shift);
  132. int zVein = (int) (zGrid + distance / 4 + gridRandom.nextInt(distance / 2) - shift);
  133.  
  134. //Random random = nearestCenter.getRandom(veinConfigSeed); //todo random size
  135. int xMax = xVein + config.radius, xMin = xVein - config.radius, zMax = zVein + config.radius, zMin = zVein - config.radius;
  136.  
  137. if (inChunk(xVein, chunkX) && inChunk(zVein, chunkZ))
  138. for (int y = 35; y < 40; y++)
  139. world.setBlockState(new BlockPos(xVein, y, zVein), Blocks.REDSTONE_BLOCK.getDefaultState(), 2);
  140.  
  141. for (int x = xMin; x <= xMax; x++) {
  142. if (!inChunk(x, chunkX)) continue;
  143. for (int z = zMin; z <= zMax; z++) {
  144. if (!inChunk(z, chunkZ)) continue;
  145. for (int y = 30; y < 35; y++) {
  146. int i = chunkRandom.nextInt(config.materials.length);
  147. world.setBlockState(new BlockPos(x, y, z), getNormalOreBlockStateFor(config.materials[i]), 2);
  148. }
  149. }
  150. }
  151. }
  152. }
  153.  
  154. private boolean inChunk(int coordinate, int chunkCoordinate) {
  155. return coordinate >> 4 == chunkCoordinate;
  156. }
  157.  
  158. private IBlockState getNormalOreBlockStateFor(DustMaterial material) {
  159. return MetaBlocks.ORES.get(material).getDefaultState().withProperty(BlockOre.SMALL, false);
  160. }
  161.  
  162. private long getGridCoordinate(long coordinate, int offset, int distance) {
  163. return (coordinate - offset) / distance * distance + offset;
  164. }
  165.  
  166. private void generateSmallOres(Random random, int chunkX, int chunkZ, World world, IChunkGenerator chunkGenerator, IChunkProvider chunkProvider) {
  167. //todo
  168. }
  169.  
  170. private static class OreVeinConfig {
  171. public int distance;
  172. public int radius;
  173. public int minY;
  174. public int maxY;
  175. public DustMaterial[] materials;
  176.  
  177. public OreVeinConfig(int distance, int radius, int minY, int maxY, int d, DustMaterial... materials) {
  178. this(distance, radius, materials);
  179. this.minY = minY;
  180. this.maxY = maxY;
  181. }
  182.  
  183. public OreVeinConfig(int distance, int radius, DustMaterial... materials) {
  184. this.distance = distance;
  185. this.radius = radius;
  186. this.materials = materials;
  187. }
  188. }
  189. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement