From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: YatopiaMC Date: Fri, 23 Oct 2020 09:20:01 -0700 Subject: [PATCH] Utilities This patch includes all utilities required by the Yatopia project and its patches. Co-authored-by: Mykyta Komarnytskyy Co-authored-by: Ivan Pekov diff --git a/pom.xml b/pom.xml index 4f56aa4ae78b9d3756983cde52bc1d1adda0c9d4..d8ec87143370144c04502cd7bddf57f2f5e25168 100644 --- a/pom.xml +++ b/pom.xml @@ -176,6 +176,12 @@ commons-math3 3.6.1 + + + org.apache.commons + commons-rng-core + 1.3 + diff --git a/src/main/java/org/yatopiamc/yatopia/server/util/Constants.java b/src/main/java/org/yatopiamc/yatopia/server/util/Constants.java new file mode 100644 index 0000000000000000000000000000000000000000..ac5235155eb1b5515165fc9648b7c9d7a0713b44 --- /dev/null +++ b/src/main/java/org/yatopiamc/yatopia/server/util/Constants.java @@ -0,0 +1,7 @@ +package org.yatopiamc.yatopia.server.util; + +public class Constants { + + public static final int[] EMPTY_ARRAY = new int[0]; + public static final int[] ZERO_ARRAY = new int[]{0}; +} diff --git a/src/main/java/org/yatopiamc/yatopia/server/util/FastRandom.java b/src/main/java/org/yatopiamc/yatopia/server/util/FastRandom.java new file mode 100644 index 0000000000000000000000000000000000000000..e41c1e3fa656d8f595733897ab05089c3b0976a7 --- /dev/null +++ b/src/main/java/org/yatopiamc/yatopia/server/util/FastRandom.java @@ -0,0 +1,64 @@ +package org.yatopiamc.yatopia.server.util; + +import org.apache.commons.rng.core.source64.XoRoShiRo128PlusPlus; + +import java.util.Random; +import java.util.SplittableRandom; + +public class FastRandom extends Random { + + private XoRoShiRo128PlusPlus random; + + public FastRandom() { + super(); + SplittableRandom randomseed = new SplittableRandom(); + this.random = new XoRoShiRo128PlusPlus(randomseed.nextLong(), randomseed.nextLong()); + } + + public FastRandom(long seed) { + super(seed); + SplittableRandom randomseed = new SplittableRandom(seed); + this.random = new XoRoShiRo128PlusPlus(randomseed.nextLong(), randomseed.nextLong()); + } + + @Override + public boolean nextBoolean() { + return random.nextBoolean(); + } + + @Override + public int nextInt() { + return random.nextInt(); + } + + @Override + public float nextFloat() { + return (float) random.nextDouble(); + } + + @Override + public double nextDouble() { + return random.nextDouble(); + } + + @Override + public synchronized void setSeed(long seed) { + SplittableRandom randomseed = new SplittableRandom(seed); + this.random = new XoRoShiRo128PlusPlus(randomseed.nextLong(), randomseed.nextLong()); + } + + @Override + public void nextBytes(byte[] bytes) { + random.nextBytes(bytes); + } + + @Override + public int nextInt(int bound) { + return random.nextInt(bound); + } + + @Override + public long nextLong() { + return random.nextLong(); + } +} diff --git a/src/main/java/org/yatopiamc/yatopia/server/util/TimeUtils.java b/src/main/java/org/yatopiamc/yatopia/server/util/TimeUtils.java new file mode 100644 index 0000000000000000000000000000000000000000..acdf3d60738791b767a3bafa2c9511342a8c18df --- /dev/null +++ b/src/main/java/org/yatopiamc/yatopia/server/util/TimeUtils.java @@ -0,0 +1,27 @@ +package org.yatopiamc.yatopia.server.util; + +import java.util.concurrent.TimeUnit; + +public class TimeUtils { + + public static String getFriendlyName(TimeUnit unit) { + switch (unit) { + case NANOSECONDS: + return "ns"; + case MILLISECONDS: + return "ms"; + case MICROSECONDS: + return "micros"; + case SECONDS: + return "s"; + case MINUTES: + return "m"; + case DAYS: + return "d"; + case HOURS: + return "h"; + default: + throw new AssertionError(); + } + } +}