pruby

SeedPool.java

Apr 15th, 2013
138
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.37 KB | None | 0 0
  1. import java.util.Random;
  2.  
  3. public class SeedPool {
  4. int seedDataA[];
  5. int seedDataB[];
  6.  
  7. public SeedPool(int seedData[]) {
  8. assert(seedData.length == 8);
  9.  
  10. this.seedDataA = new int[4];
  11. this.seedDataB = new int[4];
  12. int i;
  13. for (i = 0; i < 4; ++i) {
  14. seedDataA[i] = seedData[i];
  15. seedDataB[i] = seedData[i + 4];
  16. }
  17. }
  18.  
  19. public long seedForPurpose(SeedPool.Purpose purpose) {
  20. // Expand purpose in to integer pair
  21. Random random = new Random(purpose.getCode());
  22. return randomSeed(random);
  23. }
  24.  
  25. public long randomSeed(Random random) {
  26. int[] data = new int[2];
  27. int i;
  28. for (i = 0; i < 2; i++) {
  29. data[i] = random.nextInt();
  30. }
  31.  
  32. // Encrypt integer pair with seed data
  33. data = run_xtea(seedDataA, data);
  34. data = run_xtea(seedDataB, data);
  35.  
  36. // Turn integer pair in to long seed
  37. return (((long) data[0]) << 32) | ((long) data[1]);
  38. }
  39.  
  40. /* Encrypt the purpose using the seed data */
  41. private int[] run_xtea(int[] key, int[] data) {
  42. int i;
  43. int[] v = new int[2];
  44. v[0] = data[0];
  45. v[1] = data[1];
  46. int sum = 0;
  47. int delta = 0x9E3779B9;
  48. for (i=0; i < 20; i++) {
  49. v[0] += (((v[1] << 4) ^ (v[1] >> 5)) + v[1]) ^ (sum + key[sum & 3]);
  50. sum += delta;
  51. v[1] += (((v[0] << 4) ^ (v[0] >> 5)) + v[0]) ^ (sum + key[(sum>>11) & 3]);
  52. }
  53. return v;
  54. }
  55.  
  56. public enum Purpose {
  57. HEIGHT_MAP(1),
  58. COAL_VEINS(2),
  59. LAPIS_VEINS(3);
  60.  
  61. private int code;
  62.  
  63. private Purpose(int code) {
  64. this.code = code;
  65. }
  66. public int getCode() {
  67. return code;
  68. }
  69. };
  70.  
  71. public static void main(String[] argv) {
  72. int[] testSeedData = {221442586, 1725827729, 373678985, 1759486438, 1799993957, 1448443797, 60942502, 2112571401};
  73. SeedPool testPool = new SeedPool(testSeedData);
  74.  
  75. long seedForHeightMap = testPool.seedForPurpose(SeedPool.Purpose.HEIGHT_MAP);
  76. System.out.println(String.format("Height map seed: %d", seedForHeightMap));
  77.  
  78. long seedForCoalVeins = testPool.seedForPurpose(SeedPool.Purpose.COAL_VEINS);
  79. System.out.println(String.format("Coal vein seed: %d", seedForCoalVeins));
  80.  
  81. long seedForLapisVeins = testPool.seedForPurpose(SeedPool.Purpose.LAPIS_VEINS);
  82. System.out.println(String.format("Lapis vein seed: %d", seedForLapisVeins));
  83. }
  84. }
Advertisement
Add Comment
Please, Sign In to add comment