Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.util.Random;
- public class SeedPool {
- int seedDataA[];
- int seedDataB[];
- public SeedPool(int seedData[]) {
- assert(seedData.length == 8);
- this.seedDataA = new int[4];
- this.seedDataB = new int[4];
- int i;
- for (i = 0; i < 4; ++i) {
- seedDataA[i] = seedData[i];
- seedDataB[i] = seedData[i + 4];
- }
- }
- public long seedForPurpose(SeedPool.Purpose purpose) {
- // Expand purpose in to integer pair
- Random random = new Random(purpose.getCode());
- return randomSeed(random);
- }
- public long randomSeed(Random random) {
- int[] data = new int[2];
- int i;
- for (i = 0; i < 2; i++) {
- data[i] = random.nextInt();
- }
- // Encrypt integer pair with seed data
- data = run_xtea(seedDataA, data);
- data = run_xtea(seedDataB, data);
- // Turn integer pair in to long seed
- return (((long) data[0]) << 32) | ((long) data[1]);
- }
- /* Encrypt the purpose using the seed data */
- private int[] run_xtea(int[] key, int[] data) {
- int i;
- int[] v = new int[2];
- v[0] = data[0];
- v[1] = data[1];
- int sum = 0;
- int delta = 0x9E3779B9;
- for (i=0; i < 20; i++) {
- v[0] += (((v[1] << 4) ^ (v[1] >> 5)) + v[1]) ^ (sum + key[sum & 3]);
- sum += delta;
- v[1] += (((v[0] << 4) ^ (v[0] >> 5)) + v[0]) ^ (sum + key[(sum>>11) & 3]);
- }
- return v;
- }
- public enum Purpose {
- HEIGHT_MAP(1),
- COAL_VEINS(2),
- LAPIS_VEINS(3);
- private int code;
- private Purpose(int code) {
- this.code = code;
- }
- public int getCode() {
- return code;
- }
- };
- public static void main(String[] argv) {
- int[] testSeedData = {221442586, 1725827729, 373678985, 1759486438, 1799993957, 1448443797, 60942502, 2112571401};
- SeedPool testPool = new SeedPool(testSeedData);
- long seedForHeightMap = testPool.seedForPurpose(SeedPool.Purpose.HEIGHT_MAP);
- System.out.println(String.format("Height map seed: %d", seedForHeightMap));
- long seedForCoalVeins = testPool.seedForPurpose(SeedPool.Purpose.COAL_VEINS);
- System.out.println(String.format("Coal vein seed: %d", seedForCoalVeins));
- long seedForLapisVeins = testPool.seedForPurpose(SeedPool.Purpose.LAPIS_VEINS);
- System.out.println(String.format("Lapis vein seed: %d", seedForLapisVeins));
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment