From 27f085f57a6d04005a1b7d4efc2a87e0d4fed0f9 Mon Sep 17 00:00:00 2001 From: Etil <81570777+etil2jz@users.noreply.github.com> Date: Wed, 5 Jan 2022 19:04:19 +0100 Subject: [PATCH] Revert "Don't load chunks for block break packets" Isn't working right now --- .../server/0001-Mirai-Branding-Changes.patch | 4 +- patches/server/0006-reduce-allocs.patch | 8 +- ...017-Use-faster-random-implementation.patch | 142 +++++++++--------- patches/server/0019-Remove-TickTask.patch | 6 +- .../server/0020-Remove-VersionFetcher.patch | 4 +- ...023-Don-t-create-new-random-instance.patch | 44 +++--- .../0026-Better-handling-of-async-tasks.patch | 10 +- .../0033-Configurable-flight-checks.patch | 6 +- ...hat-commands-before-player-has-joine.patch | 4 +- .../0054-Alternative-Keepalive-Handling.patch | 8 +- .../server/0060-Signs-allow-color-codes.patch | 6 +- ...Converter-for-itemstack-entity-deser.patch | 6 +- ...-spawning-outside-hard-despawn-range.patch | 4 +- patches/server/0080-lithium-fast-math.patch | 10 +- patches/server/0092-lithium-tag.patch | 50 ++---- ...-load-chunks-for-block-break-packets.patch | 140 ----------------- 16 files changed, 147 insertions(+), 305 deletions(-) delete mode 100644 patches/server/0093-servercore-Don-t-load-chunks-for-block-break-packets.patch diff --git a/patches/server/0001-Mirai-Branding-Changes.patch b/patches/server/0001-Mirai-Branding-Changes.patch index ceffd69..456c297 100644 --- a/patches/server/0001-Mirai-Branding-Changes.patch +++ b/patches/server/0001-Mirai-Branding-Changes.patch @@ -231,10 +231,10 @@ index 041ebfefca8f944f457a269f0e0b450b21949e73..88568bf2fe1572cce0fe7985bbcf4dce private final String bukkitVersion = Versioning.getBukkitVersion(); private final Logger logger = Logger.getLogger("Minecraft"); diff --git a/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java b/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java -index 7de9bf9790dce0e3866d71cc30e61e0323c037ca..dd0250d461ea5f658b7c2934332864a6b7e1ef48 100644 +index 98d396658bd7547e6b6f850529cab216e83c6c62..0c13463b8b28b099be323969a9535359f41f5541 100644 --- a/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java +++ b/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java -@@ -399,7 +399,7 @@ public final class CraftMagicNumbers implements UnsafeValues { +@@ -421,7 +421,7 @@ public final class CraftMagicNumbers implements UnsafeValues { @Override public com.destroystokyo.paper.util.VersionFetcher getVersionFetcher() { diff --git a/patches/server/0006-reduce-allocs.patch b/patches/server/0006-reduce-allocs.patch index 0f9b81b..fc73d25 100644 --- a/patches/server/0006-reduce-allocs.patch +++ b/patches/server/0006-reduce-allocs.patch @@ -210,7 +210,7 @@ index e2c8f716af55ebb7e4233c2a3d6515f8f4a239fa..2f5c021b6849acb81064d55418707921 OptionSpec optionspec11 = optionparser.accepts("port").withRequiredArg().ofType(Integer.class).defaultsTo(-1, new Integer[0]); OptionSpec optionspec12 = optionparser.accepts("serverId").withRequiredArg(); diff --git a/src/main/java/net/minecraft/server/level/ServerChunkCache.java b/src/main/java/net/minecraft/server/level/ServerChunkCache.java -index 406bfe20a7b8786bbc6bee46151be91dadec6180..d9c8e103546a9dee56e6e7a5db5a57d5158fc4ad 100644 +index f51fcaba69c9ddc27130ab615526e05b1b4f0e07..401326bfd610302a5b073cec646b435a861ad109 100644 --- a/src/main/java/net/minecraft/server/level/ServerChunkCache.java +++ b/src/main/java/net/minecraft/server/level/ServerChunkCache.java @@ -76,6 +76,8 @@ public class ServerChunkCache extends ChunkSource { @@ -239,7 +239,7 @@ index 406bfe20a7b8786bbc6bee46151be91dadec6180..d9c8e103546a9dee56e6e7a5db5a57d5 private void tickChunks() { long i = this.level.getGameTime(); long j = i - this.lastInhabitedUpdate; -@@ -1028,7 +1040,7 @@ public class ServerChunkCache extends ChunkSource { +@@ -1024,7 +1036,7 @@ public class ServerChunkCache extends ChunkSource { iterator1 = this.entityTickingChunks.iterator(); } else { iterator1 = this.entityTickingChunks.unsafeIterator(); @@ -332,7 +332,7 @@ index 5d8e9bdf5538b19681f21949368d862fab8a89ad..97c744508cc535418eba65fa722859c8 public ZeroBitStorage(int size) { diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index af9c58944b38e8aeeca5dca75c9f97e49f2895f2..33670ff2369962836783feb37804532bed7b2857 100644 +index 2c988e05299d530d483e21ab452de0a03e5bdcbd..fcbbe52452f3e9ad4dcdbcc5d2dc20fa5d098746 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java @@ -3022,7 +3022,7 @@ public abstract class LivingEntity extends Entity { @@ -345,7 +345,7 @@ index af9c58944b38e8aeeca5dca75c9f97e49f2895f2..33670ff2369962836783feb37804532b for (int j = 0; j < i; ++j) { diff --git a/src/main/java/net/minecraft/world/entity/Mob.java b/src/main/java/net/minecraft/world/entity/Mob.java -index 4e8b3f94dc990cd05d69e74db6c706e290dca702..7e0d653eaf459430459a1c19dc86a787ef12bd63 100644 +index 607e78c24edabb26fd7494855087f7f19cfdc576..dfe1758aeb113a18339f1dbc5e71a9d6ef5ff99b 100644 --- a/src/main/java/net/minecraft/world/entity/Mob.java +++ b/src/main/java/net/minecraft/world/entity/Mob.java @@ -1009,7 +1009,7 @@ public abstract class Mob extends LivingEntity { diff --git a/patches/server/0017-Use-faster-random-implementation.patch b/patches/server/0017-Use-faster-random-implementation.patch index 163e11a..ec18752 100644 --- a/patches/server/0017-Use-faster-random-implementation.patch +++ b/patches/server/0017-Use-faster-random-implementation.patch @@ -7,7 +7,7 @@ Original code by YatopiaMC, licensed under MIT You can find the original code on https://github.com/YatopiaMC/Yatopia diff --git a/src/main/java/com/destroystokyo/paper/loottable/PaperLootableInventoryData.java b/src/main/java/com/destroystokyo/paper/loottable/PaperLootableInventoryData.java -index 20cfe7b9b7127ddeb97aa91d759fc17b4a548eaf..5cadd485b3987eec21743f3315cd226930646eac 100644 +index 20cfe7b9b7127ddeb97aa91d759fc17b4a548eaf..ad89f296c6cde5698326891183d3c55bd8c9ed7a 100644 --- a/src/main/java/com/destroystokyo/paper/loottable/PaperLootableInventoryData.java +++ b/src/main/java/com/destroystokyo/paper/loottable/PaperLootableInventoryData.java @@ -13,7 +13,7 @@ import java.util.UUID; @@ -15,12 +15,12 @@ index 20cfe7b9b7127ddeb97aa91d759fc17b4a548eaf..5cadd485b3987eec21743f3315cd2269 public class PaperLootableInventoryData { - private static final Random RANDOM = new Random(); -+ private static final Random RANDOM = new org.yatopiamc.yatopia.server.util.FastRandom(); ++ private static final Random RANDOM = new org.yatopiamc.yatopia.server.util.FastRandom(); // Mirai private long lastFill = -1; private long nextRefill = -1; diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 40fe4111a52ab754094d462b0d1889e740797d4d..c691ee6208521b1570f0f25c8bbfd05146bd155c 100644 +index 40fe4111a52ab754094d462b0d1889e740797d4d..98bebaab40390418681b2ee42af0dd4b14df6330 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java @@ -415,7 +415,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop players) throws CommandSyntaxException { - Random random = new Random(); -+ Random random = new org.yatopiamc.yatopia.server.util.FastRandom(); ++ Random random = new org.yatopiamc.yatopia.server.util.FastRandom(); // Mirai double d0 = (double) (center.x - maxRange); double d1 = (double) (center.y - maxRange); double d2 = (double) (center.x + maxRange); diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java -index 7b23535a680d2a8534dcb8dd87770f66fb982c13..ab06dd398bdf52656123eecdfe4daebe2a3b07e6 100644 +index 7b23535a680d2a8534dcb8dd87770f66fb982c13..1615be3540b878ce3182676d235365046d636c12 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java @@ -368,7 +368,7 @@ public class ServerPlayer extends Player { @@ -72,7 +72,7 @@ index 7b23535a680d2a8534dcb8dd87770f66fb982c13..ab06dd398bdf52656123eecdfe4daebe int i1 = l > 2147483647L ? Integer.MAX_VALUE : (int) l; int j1 = this.getCoprime(i1); - int k1 = (new Random()).nextInt(i1); -+ int k1 = (new org.yatopiamc.yatopia.server.util.FastRandom()).nextInt(i1); ++ int k1 = (new org.yatopiamc.yatopia.server.util.FastRandom()).nextInt(i1); // Mirai for (int l1 = 0; l1 < i1; ++l1) { int i2 = (k1 + j1 * l1) % i1; @@ -81,12 +81,12 @@ index 7b23535a680d2a8534dcb8dd87770f66fb982c13..ab06dd398bdf52656123eecdfe4daebe int i1 = l > 2147483647L ? Integer.MAX_VALUE : (int) l; int j1 = this.getCoprime(i1); - int k1 = (new Random()).nextInt(i1); -+ int k1 = (new org.yatopiamc.yatopia.server.util.FastRandom()).nextInt(i1); ++ int k1 = (new org.yatopiamc.yatopia.server.util.FastRandom()).nextInt(i1); // Mirai for (int l1 = 0; l1 < i1; ++l1) { int i2 = (k1 + j1 * l1) % i1; diff --git a/src/main/java/net/minecraft/server/network/ServerLoginPacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerLoginPacketListenerImpl.java -index 33a29890435d6065a2cc4f8e8bf8209c01d5d114..f1c865c415243f50a9c82b96cca023274897193e 100644 +index 462d8c36166c63a4dc8fa74ac7f82859e6f4b83a..9dcae48cd94c411176368312adf9f44b11af5760 100644 --- a/src/main/java/net/minecraft/server/network/ServerLoginPacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerLoginPacketListenerImpl.java @@ -52,7 +52,7 @@ public class ServerLoginPacketListenerImpl implements ServerLoginPacketListener @@ -94,12 +94,12 @@ index 33a29890435d6065a2cc4f8e8bf8209c01d5d114..f1c865c415243f50a9c82b96cca02327 static final Logger LOGGER = LogManager.getLogger(); private static final int MAX_TICKS_BEFORE_LOGIN = 600; - private static final Random RANDOM = new Random(); -+ private static final Random RANDOM = new org.yatopiamc.yatopia.server.util.FastRandom(); ++ private static final Random RANDOM = new org.yatopiamc.yatopia.server.util.FastRandom(); // Mirai private final byte[] nonce = new byte[4]; final MinecraftServer server; public final Connection connection; diff --git a/src/main/java/net/minecraft/server/rcon/thread/QueryThreadGs4.java b/src/main/java/net/minecraft/server/rcon/thread/QueryThreadGs4.java -index 25ae440839f1d286550a77d0a4c61e1dc02b369d..b0cbe7d42eef1865e84211844b351027a26a5956 100644 +index 25ae440839f1d286550a77d0a4c61e1dc02b369d..4c6d10d3ce7a9b5cc4cc04d57fe06ec07a2793e2 100644 --- a/src/main/java/net/minecraft/server/rcon/thread/QueryThreadGs4.java +++ b/src/main/java/net/minecraft/server/rcon/thread/QueryThreadGs4.java @@ -348,7 +348,7 @@ public class QueryThreadGs4 extends GenericThread { @@ -107,12 +107,12 @@ index 25ae440839f1d286550a77d0a4c61e1dc02b369d..b0cbe7d42eef1865e84211844b351027 this.identBytes[3] = bs[6]; this.ident = new String(this.identBytes, StandardCharsets.UTF_8); - this.challenge = (new Random()).nextInt(16777216); -+ this.challenge = (new org.yatopiamc.yatopia.server.util.FastRandom()).nextInt(16777216); ++ this.challenge = (new org.yatopiamc.yatopia.server.util.FastRandom()).nextInt(16777216); // Mirai this.challengeBytes = String.format("\t%s%d\u0000", this.ident, this.challenge).getBytes(StandardCharsets.UTF_8); } diff --git a/src/main/java/net/minecraft/util/Mth.java b/src/main/java/net/minecraft/util/Mth.java -index 19f77e377342ee461f0da8bc5378f2002fb9e94a..e6799eb40ec5e8c9f58aaafb7841a9066ac299c8 100644 +index 19f77e377342ee461f0da8bc5378f2002fb9e94a..37364bcaab17be5dddea25f12ccb853f712bfe33 100644 --- a/src/main/java/net/minecraft/util/Mth.java +++ b/src/main/java/net/minecraft/util/Mth.java @@ -31,7 +31,7 @@ public class Mth { @@ -120,7 +120,7 @@ index 19f77e377342ee461f0da8bc5378f2002fb9e94a..e6799eb40ec5e8c9f58aaafb7841a906 }); - private static final Random RANDOM = new Random(); -+ private static final Random RANDOM = new org.yatopiamc.yatopia.server.util.FastRandom(); ++ private static final Random RANDOM = new org.yatopiamc.yatopia.server.util.FastRandom(); // Mirai public static float[] getSinTable() { return SIN; } private static final int[] MULTIPLY_DE_BRUIJN_BIT_POSITION = new int[]{0, 1, 28, 2, 29, 14, 24, 3, 30, 22, 20, 15, 25, 17, 4, 8, 31, 27, 13, 23, 21, 19, 16, 7, 26, 12, 18, 6, 11, 5, 10, 9}; private static final double ONE_SIXTH = 0.16666666666666666D; @@ -129,12 +129,12 @@ index 19f77e377342ee461f0da8bc5378f2002fb9e94a..e6799eb40ec5e8c9f58aaafb7841a906 public static double wobble(double d) { - return d + (2.0D * (new Random((long)floor(d * 3000.0D))).nextDouble() - 1.0D) * 1.0E-7D / 2.0D; -+ return d + (2.0D * (new org.yatopiamc.yatopia.server.util.FastRandom((long)floor(d * 3000.0D))).nextDouble() - 1.0D) * 1.0E-7D / 2.0D; ++ return d + (2.0D * (new org.yatopiamc.yatopia.server.util.FastRandom((long)floor(d * 3000.0D))).nextDouble() - 1.0D) * 1.0E-7D / 2.0D; // Mirai } public static int roundToward(int value, int divisor) { diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 136ec7851f26c39b5b9a02ec791682fd5be2dbf1..ffcdd6c88aaae17075a491f35ebea3625e4914d2 100644 +index 136ec7851f26c39b5b9a02ec791682fd5be2dbf1..879cf684753ba9cb0d5d1803651c93a230c531c2 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java @@ -158,7 +158,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, i @@ -142,12 +142,12 @@ index 136ec7851f26c39b5b9a02ec791682fd5be2dbf1..ffcdd6c88aaae17075a491f35ebea362 // Paper start - public static Random SHARED_RANDOM = new Random() { -+ public static Random SHARED_RANDOM = new org.yatopiamc.yatopia.server.util.FastRandom() { ++ public static Random SHARED_RANDOM = new org.yatopiamc.yatopia.server.util.FastRandom() { // Mirai private boolean locked = false; @Override public synchronized void setSeed(long seed) { diff --git a/src/main/java/net/minecraft/world/entity/ai/behavior/ShufflingList.java b/src/main/java/net/minecraft/world/entity/ai/behavior/ShufflingList.java -index 204ca4fbd89bdadd902529f1f191df46fce3cace..2b8cf6819c4a76fb558607f8d111f27e01781a15 100644 +index 204ca4fbd89bdadd902529f1f191df46fce3cace..087dc4fdb0ce52fdd531d6dcb3e089948906f9ad 100644 --- a/src/main/java/net/minecraft/world/entity/ai/behavior/ShufflingList.java +++ b/src/main/java/net/minecraft/world/entity/ai/behavior/ShufflingList.java @@ -13,7 +13,7 @@ import java.util.stream.Stream; @@ -155,12 +155,12 @@ index 204ca4fbd89bdadd902529f1f191df46fce3cace..2b8cf6819c4a76fb558607f8d111f27e public class ShufflingList { public final List> entries; // Paper - public - private final Random random = new Random(); -+ private final Random random = new org.yatopiamc.yatopia.server.util.FastRandom(); ++ private final Random random = new org.yatopiamc.yatopia.server.util.FastRandom(); // Mirai private final boolean isUnsafe; // Paper public ShufflingList() { diff --git a/src/main/java/net/minecraft/world/entity/ai/sensing/Sensor.java b/src/main/java/net/minecraft/world/entity/ai/sensing/Sensor.java -index f3b8e253a5bfc3f68121dbe656ae7e2ac0f0eb1c..325e7725f0105076c7f865db550cfd4e2866b8d2 100644 +index f3b8e253a5bfc3f68121dbe656ae7e2ac0f0eb1c..888bc1c81cef04679e0e55614d5c111d7d210ba5 100644 --- a/src/main/java/net/minecraft/world/entity/ai/sensing/Sensor.java +++ b/src/main/java/net/minecraft/world/entity/ai/sensing/Sensor.java @@ -8,7 +8,7 @@ import net.minecraft.world.entity.ai.memory.MemoryModuleType; @@ -168,12 +168,12 @@ index f3b8e253a5bfc3f68121dbe656ae7e2ac0f0eb1c..325e7725f0105076c7f865db550cfd4e public abstract class Sensor { - private static final Random RANDOM = new Random(); -+ private static final Random RANDOM = new org.yatopiamc.yatopia.server.util.FastRandom(); ++ private static final Random RANDOM = new org.yatopiamc.yatopia.server.util.FastRandom(); // Mirai private static final int DEFAULT_SCAN_RATE = 20; protected static final int TARGETING_RANGE = 16; private static final TargetingConditions TARGET_CONDITIONS = TargetingConditions.forNonCombat().range(16.0D); diff --git a/src/main/java/net/minecraft/world/entity/monster/piglin/PiglinAi.java b/src/main/java/net/minecraft/world/entity/monster/piglin/PiglinAi.java -index f362e007aece208036a37d9bda8bb481a78eeaff..ae4e5258b92ff480f9c098a561160fe0595a7bbf 100644 +index f362e007aece208036a37d9bda8bb481a78eeaff..dd41941fbd4a568dcf2239eca03be593c9782af9 100644 --- a/src/main/java/net/minecraft/world/entity/monster/piglin/PiglinAi.java +++ b/src/main/java/net/minecraft/world/entity/monster/piglin/PiglinAi.java @@ -374,7 +374,7 @@ public class PiglinAi { @@ -181,12 +181,12 @@ index f362e007aece208036a37d9bda8bb481a78eeaff..ae4e5258b92ff480f9c098a561160fe0 private static boolean wantsToDance(LivingEntity piglin, LivingEntity target) { - return target.getType() != EntityType.HOGLIN ? false : (new Random(piglin.level.getGameTime())).nextFloat() < 0.1F; -+ return target.getType() != EntityType.HOGLIN ? false : (new org.yatopiamc.yatopia.server.util.FastRandom(piglin.level.getGameTime())).nextFloat() < 0.1F; ++ return target.getType() != EntityType.HOGLIN ? false : (new org.yatopiamc.yatopia.server.util.FastRandom(piglin.level.getGameTime())).nextFloat() < 0.1F; // Mirai } protected static boolean wantsToPickup(Piglin piglin, ItemStack stack) { diff --git a/src/main/java/net/minecraft/world/entity/npc/WanderingTraderSpawner.java b/src/main/java/net/minecraft/world/entity/npc/WanderingTraderSpawner.java -index 323eea2bccacfcc85849b5d82c2b30d991e0c0d8..78104373a57616fd38d96c727a4ee3b79d874316 100644 +index 323eea2bccacfcc85849b5d82c2b30d991e0c0d8..6a4e2d8c2d53e4dedea71e7ee82132a7abfb2cd3 100644 --- a/src/main/java/net/minecraft/world/entity/npc/WanderingTraderSpawner.java +++ b/src/main/java/net/minecraft/world/entity/npc/WanderingTraderSpawner.java @@ -35,7 +35,7 @@ public class WanderingTraderSpawner implements CustomSpawner { @@ -194,12 +194,12 @@ index 323eea2bccacfcc85849b5d82c2b30d991e0c0d8..78104373a57616fd38d96c727a4ee3b7 private static final int SPAWN_ONE_IN_X_CHANCE = 10; private static final int NUMBER_OF_SPAWN_ATTEMPTS = 10; - private final Random random = new Random(); -+ private final Random random = new org.yatopiamc.yatopia.server.util.FastRandom(); ++ private final Random random = new org.yatopiamc.yatopia.server.util.FastRandom(); // Mirai private final ServerLevelData serverLevelData; private int tickDelay; private int spawnDelay; diff --git a/src/main/java/net/minecraft/world/entity/projectile/FishingHook.java b/src/main/java/net/minecraft/world/entity/projectile/FishingHook.java -index 1037d0a0cdd4fd7aa99a958ee969759c5883fdc0..99ab7bf2829b1355de452a368ac9971dec04064c 100644 +index 2015223c1703935faef52a8b88263ab3f1fbe92a..d312dcdce3e1c8a8e0cdb5c5fdf019504c50dc48 100644 --- a/src/main/java/net/minecraft/world/entity/projectile/FishingHook.java +++ b/src/main/java/net/minecraft/world/entity/projectile/FishingHook.java @@ -76,7 +76,7 @@ public class FishingHook extends Projectile { @@ -207,12 +207,12 @@ index 1037d0a0cdd4fd7aa99a958ee969759c5883fdc0..99ab7bf2829b1355de452a368ac9971d private FishingHook(EntityType type, Level world, int luckOfTheSeaLevel, int lureLevel) { super(type, world); - this.syncronizedRandom = new Random(); -+ this.syncronizedRandom = new org.yatopiamc.yatopia.server.util.FastRandom(); ++ this.syncronizedRandom = new org.yatopiamc.yatopia.server.util.FastRandom(); // Mirai this.openWater = true; this.currentState = FishingHook.FishHookState.FLYING; this.noCulling = true; diff --git a/src/main/java/net/minecraft/world/entity/raid/Raid.java b/src/main/java/net/minecraft/world/entity/raid/Raid.java -index 7131226de05bc57830f7a68ba545ebfd19d33a59..d41bdd71ae1f722b5f108bed9282bf5bde348e90 100644 +index 7131226de05bc57830f7a68ba545ebfd19d33a59..c7665038764e626dcac40f3e577c268090b89741 100644 --- a/src/main/java/net/minecraft/world/entity/raid/Raid.java +++ b/src/main/java/net/minecraft/world/entity/raid/Raid.java @@ -110,7 +110,7 @@ public class Raid { @@ -220,7 +220,7 @@ index 7131226de05bc57830f7a68ba545ebfd19d33a59..d41bdd71ae1f722b5f108bed9282bf5b public Raid(int id, ServerLevel world, BlockPos pos) { this.raidEvent = new ServerBossEvent(Raid.RAID_NAME_COMPONENT, BossEvent.BossBarColor.RED, BossEvent.BossBarOverlay.NOTCHED_10); - this.random = new Random(); -+ this.random = new org.yatopiamc.yatopia.server.util.FastRandom(); ++ this.random = new org.yatopiamc.yatopia.server.util.FastRandom(); // Mirai this.waveSpawnPos = Optional.empty(); this.id = id; this.level = world; @@ -229,12 +229,12 @@ index 7131226de05bc57830f7a68ba545ebfd19d33a59..d41bdd71ae1f722b5f108bed9282bf5b public Raid(ServerLevel world, CompoundTag nbt) { this.raidEvent = new ServerBossEvent(Raid.RAID_NAME_COMPONENT, BossEvent.BossBarColor.RED, BossEvent.BossBarOverlay.NOTCHED_10); - this.random = new Random(); -+ this.random = new org.yatopiamc.yatopia.server.util.FastRandom(); ++ this.random = new org.yatopiamc.yatopia.server.util.FastRandom(); // Mirai this.waveSpawnPos = Optional.empty(); this.level = world; this.id = nbt.getInt("Id"); diff --git a/src/main/java/net/minecraft/world/inventory/EnchantmentMenu.java b/src/main/java/net/minecraft/world/inventory/EnchantmentMenu.java -index d75f14e23d94deee2b6af20c8af3bcd42c1fbbc3..cac4584ea634e0461d05908cbfd88ef66ea75c4e 100644 +index d75f14e23d94deee2b6af20c8af3bcd42c1fbbc3..9a9b88b76f9a94256ade95fe0edc407f2e4ee57e 100644 --- a/src/main/java/net/minecraft/world/inventory/EnchantmentMenu.java +++ b/src/main/java/net/minecraft/world/inventory/EnchantmentMenu.java @@ -68,7 +68,7 @@ public class EnchantmentMenu extends AbstractContainerMenu { @@ -242,12 +242,12 @@ index d75f14e23d94deee2b6af20c8af3bcd42c1fbbc3..cac4584ea634e0461d05908cbfd88ef6 // CraftBukkit end }; - this.random = new Random(); -+ this.random = new org.yatopiamc.yatopia.server.util.FastRandom(); ++ this.random = new org.yatopiamc.yatopia.server.util.FastRandom(); // Mirai this.enchantmentSeed = DataSlot.standalone(); this.costs = new int[3]; this.enchantClue = new int[]{-1, -1, -1}; diff --git a/src/main/java/net/minecraft/world/level/BaseSpawner.java b/src/main/java/net/minecraft/world/level/BaseSpawner.java -index 03726227fdd60e9cf77213d50184abff438e01ef..2f38fd48dd3798b25758028c04e4ec9546166108 100644 +index 03726227fdd60e9cf77213d50184abff438e01ef..3c37becef230e85fb84a9d39eee0190e3061c4f9 100644 --- a/src/main/java/net/minecraft/world/level/BaseSpawner.java +++ b/src/main/java/net/minecraft/world/level/BaseSpawner.java @@ -41,7 +41,7 @@ public abstract class BaseSpawner { @@ -255,12 +255,12 @@ index 03726227fdd60e9cf77213d50184abff438e01ef..2f38fd48dd3798b25758028c04e4ec95 public int requiredPlayerRange = 16; public int spawnRange = 4; - private final Random random = new Random(); -+ private final Random random = new org.yatopiamc.yatopia.server.util.FastRandom(); ++ private final Random random = new org.yatopiamc.yatopia.server.util.FastRandom(); // Mirai private int tickDelay = 0; // Paper public BaseSpawner() {} diff --git a/src/main/java/net/minecraft/world/level/Explosion.java b/src/main/java/net/minecraft/world/level/Explosion.java -index 6795132318a4e8b4c7a33b6f4b89a730ea66b97f..eebbf0b9d646ee5ae1bd48c821f122a7c4f4a0c6 100644 +index 6795132318a4e8b4c7a33b6f4b89a730ea66b97f..9f045f2dc7b9677dfd62ddcb2f3d277ba0c1076c 100644 --- a/src/main/java/net/minecraft/world/level/Explosion.java +++ b/src/main/java/net/minecraft/world/level/Explosion.java @@ -88,7 +88,7 @@ public class Explosion { @@ -268,12 +268,12 @@ index 6795132318a4e8b4c7a33b6f4b89a730ea66b97f..eebbf0b9d646ee5ae1bd48c821f122a7 public Explosion(Level world, @Nullable Entity entity, @Nullable DamageSource damageSource, @Nullable ExplosionDamageCalculator behavior, double x, double y, double z, float power, boolean createFire, Explosion.BlockInteraction destructionType) { - this.random = new Random(); -+ this.random = new org.yatopiamc.yatopia.server.util.FastRandom(); ++ this.random = new org.yatopiamc.yatopia.server.util.FastRandom(); // Mirai this.toBlow = Lists.newArrayList(); this.hitPlayers = Maps.newHashMap(); this.level = world; diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java -index 96c6ef03a64e425472c64884c91ac4951950362b..2d3cdb47c80af4044bd42b0061d722da5596cd34 100644 +index 96c6ef03a64e425472c64884c91ac4951950362b..519010d391853629b752ffa1bdbe70f5ef6f1b32 100644 --- a/src/main/java/net/minecraft/world/level/Level.java +++ b/src/main/java/net/minecraft/world/level/Level.java @@ -123,13 +123,13 @@ public abstract class Level implements LevelAccessor, AutoCloseable { @@ -281,19 +281,19 @@ index 96c6ef03a64e425472c64884c91ac4951950362b..2d3cdb47c80af4044bd42b0061d722da private final boolean isDebug; private int skyDarken; - protected int randValue = (new Random()).nextInt(); -+ protected int randValue = (new org.yatopiamc.yatopia.server.util.FastRandom()).nextInt(); ++ protected int randValue = (new org.yatopiamc.yatopia.server.util.FastRandom()).nextInt(); // Mirai protected final int addend = 1013904223; protected float oRainLevel; public float rainLevel; protected float oThunderLevel; public float thunderLevel; - public final Random random = new Random(); -+ public final Random random = new org.yatopiamc.yatopia.server.util.FastRandom(); ++ public final Random random = new org.yatopiamc.yatopia.server.util.FastRandom(); // Mirai private final DimensionType dimensionType; public final WritableLevelData levelData; private final Supplier profiler; diff --git a/src/main/java/net/minecraft/world/level/block/entity/DispenserBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/DispenserBlockEntity.java -index f74c5bb8e1ba42c77c59d481b871fd992483b128..610e2ec624516684007fb53bf084b95b4fcadc1d 100644 +index f74c5bb8e1ba42c77c59d481b871fd992483b128..2c7df921e948de9d7747dd32b9c4ed84c2b8196e 100644 --- a/src/main/java/net/minecraft/world/level/block/entity/DispenserBlockEntity.java +++ b/src/main/java/net/minecraft/world/level/block/entity/DispenserBlockEntity.java @@ -21,7 +21,7 @@ import org.bukkit.entity.HumanEntity; @@ -301,12 +301,12 @@ index f74c5bb8e1ba42c77c59d481b871fd992483b128..610e2ec624516684007fb53bf084b95b public class DispenserBlockEntity extends RandomizableContainerBlockEntity { - private static final Random RANDOM = new Random(); -+ private static final Random RANDOM = new org.yatopiamc.yatopia.server.util.FastRandom(); ++ private static final Random RANDOM = new org.yatopiamc.yatopia.server.util.FastRandom(); // Mirai public static final int CONTAINER_SIZE = 9; private NonNullList items; diff --git a/src/main/java/net/minecraft/world/level/block/entity/TheEndGatewayBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/TheEndGatewayBlockEntity.java -index 6278115e3511fe2176b29122e2c733498f31bb5a..f25a0b94a001d13b698c9e9c1140e2dd290192a0 100644 +index 6278115e3511fe2176b29122e2c733498f31bb5a..85abf95d161101b5632bc8f871136938600f2448 100644 --- a/src/main/java/net/minecraft/world/level/block/entity/TheEndGatewayBlockEntity.java +++ b/src/main/java/net/minecraft/world/level/block/entity/TheEndGatewayBlockEntity.java @@ -265,7 +265,7 @@ public class TheEndGatewayBlockEntity extends TheEndPortalBlockEntity { @@ -314,7 +314,7 @@ index 6278115e3511fe2176b29122e2c733498f31bb5a..f25a0b94a001d13b698c9e9c1140e2dd blockposition1 = new BlockPos(vec3d.x + 0.5D, 75.0D, vec3d.z + 0.5D); TheEndGatewayBlockEntity.LOGGER.debug("Failed to find a suitable block to teleport to, spawning an island on {}", blockposition1); - EndFeatures.END_ISLAND.place(world, world.getChunkSource().getGenerator(), new Random(blockposition1.asLong()), blockposition1); -+ EndFeatures.END_ISLAND.place(world, world.getChunkSource().getGenerator(), new org.yatopiamc.yatopia.server.util.FastRandom(blockposition1.asLong()), blockposition1); ++ EndFeatures.END_ISLAND.place(world, world.getChunkSource().getGenerator(), new org.yatopiamc.yatopia.server.util.FastRandom(blockposition1.asLong()), blockposition1); // Mirai } else { TheEndGatewayBlockEntity.LOGGER.debug("Found suitable block to teleport to: {}", blockposition1); } @@ -323,12 +323,12 @@ index 6278115e3511fe2176b29122e2c733498f31bb5a..f25a0b94a001d13b698c9e9c1140e2dd private static void spawnGatewayPortal(ServerLevel world, BlockPos pos, EndGatewayConfiguration config) { - Feature.END_GATEWAY.configured(config).place(world, world.getChunkSource().getGenerator(), new Random(), pos); -+ Feature.END_GATEWAY.configured(config).place(world, world.getChunkSource().getGenerator(), new org.yatopiamc.yatopia.server.util.FastRandom(), pos); ++ Feature.END_GATEWAY.configured(config).place(world, world.getChunkSource().getGenerator(), new org.yatopiamc.yatopia.server.util.FastRandom(), pos); // Mirai } @Override diff --git a/src/main/java/net/minecraft/world/level/chunk/ChunkGenerator.java b/src/main/java/net/minecraft/world/level/chunk/ChunkGenerator.java -index e4591c0b3c8547cc6f4e2a0891fc378ee4334d9e..f4f964a2ef28840944b11404cdc6e41684e46af3 100644 +index e4591c0b3c8547cc6f4e2a0891fc378ee4334d9e..d8b790f0288cfffbc2720b31c6686a3524e76436 100644 --- a/src/main/java/net/minecraft/world/level/chunk/ChunkGenerator.java +++ b/src/main/java/net/minecraft/world/level/chunk/ChunkGenerator.java @@ -109,7 +109,7 @@ public abstract class ChunkGenerator implements BiomeManager.NoiseBiomeSource { @@ -336,12 +336,12 @@ index e4591c0b3c8547cc6f4e2a0891fc378ee4334d9e..f4f964a2ef28840944b11404cdc6e416 int j = structuresettingsstronghold.count(); int k = structuresettingsstronghold.spread(); - Random random = new Random(); -+ Random random = new org.yatopiamc.yatopia.server.util.FastRandom(); ++ Random random = new org.yatopiamc.yatopia.server.util.FastRandom(); // Mirai random.setSeed(this.strongholdSeed); double d0 = random.nextDouble() * 3.141592653589793D * 2.0D; diff --git a/src/main/java/net/minecraft/world/level/dimension/end/EndDragonFight.java b/src/main/java/net/minecraft/world/level/dimension/end/EndDragonFight.java -index be5952133720bf0ac3483cc2fed334967e6fc0c4..037b091bafd378493e35d2a816cfc59318362b4e 100644 +index be5952133720bf0ac3483cc2fed334967e6fc0c4..de00b1d45c13b0cdfc7eb78a667fe0d356e0507e 100644 --- a/src/main/java/net/minecraft/world/level/dimension/end/EndDragonFight.java +++ b/src/main/java/net/minecraft/world/level/dimension/end/EndDragonFight.java @@ -124,7 +124,7 @@ public class EndDragonFight { @@ -349,7 +349,7 @@ index be5952133720bf0ac3483cc2fed334967e6fc0c4..037b091bafd378493e35d2a816cfc593 } else { this.gateways.addAll(ContiguousSet.create(Range.closedOpen(0, 20), DiscreteDomain.integers())); - Collections.shuffle(this.gateways, new Random(gatewaysSeed)); -+ Collections.shuffle(this.gateways, new org.yatopiamc.yatopia.server.util.FastRandom(gatewaysSeed)); ++ Collections.shuffle(this.gateways, new org.yatopiamc.yatopia.server.util.FastRandom(gatewaysSeed)); // Mirai } this.exitPortalPattern = BlockPatternBuilder.start().aisle(" ", " ", " ", " # ", " ", " ", " ").aisle(" ", " ", " ", " # ", " ", " ", " ").aisle(" ", " ", " ", " # ", " ", " ", " ").aisle(" ### ", " # # ", "# #", "# # #", "# #", " # # ", " ### ").aisle(" ", " ### ", " ##### ", " ##### ", " ##### ", " ### ", " ").where('#', BlockInWorld.hasState(BlockPredicate.forBlock(Blocks.BEDROCK))).build(); @@ -358,7 +358,7 @@ index be5952133720bf0ac3483cc2fed334967e6fc0c4..037b091bafd378493e35d2a816cfc593 private void spawnNewGateway(BlockPos pos) { this.level.levelEvent(3000, pos, 0); - EndFeatures.END_GATEWAY_DELAYED.place(this.level, this.level.getChunkSource().getGenerator(), new Random(), pos); -+ EndFeatures.END_GATEWAY_DELAYED.place(this.level, this.level.getChunkSource().getGenerator(), new org.yatopiamc.yatopia.server.util.FastRandom(), pos); ++ EndFeatures.END_GATEWAY_DELAYED.place(this.level, this.level.getChunkSource().getGenerator(), new org.yatopiamc.yatopia.server.util.FastRandom(), pos); // Mirai } public void spawnExitPortal(boolean previouslyKilled) { @@ -367,12 +367,12 @@ index be5952133720bf0ac3483cc2fed334967e6fc0c4..037b091bafd378493e35d2a816cfc593 // Paper end - endPodiumFeature.configured(FeatureConfiguration.NONE).place(this.level, this.level.getChunkSource().getGenerator(), new Random(), this.portalLocation); -+ endPodiumFeature.configured(FeatureConfiguration.NONE).place(this.level, this.level.getChunkSource().getGenerator(), new org.yatopiamc.yatopia.server.util.FastRandom(), this.portalLocation); ++ endPodiumFeature.configured(FeatureConfiguration.NONE).place(this.level, this.level.getChunkSource().getGenerator(), new org.yatopiamc.yatopia.server.util.FastRandom(), this.portalLocation); // Mirai } private EnderDragon createNewDragon() { diff --git a/src/main/java/net/minecraft/world/level/levelgen/WorldGenSettings.java b/src/main/java/net/minecraft/world/level/levelgen/WorldGenSettings.java -index 286c75989282c6d370ca64ac714ab15d784210ab..e3a2919e214c63aa8cc2334d30dade3daf39b92d 100644 +index 286c75989282c6d370ca64ac714ab15d784210ab..4c4c9ea4575306d08a34e19bba06a4a63f562809 100644 --- a/src/main/java/net/minecraft/world/level/levelgen/WorldGenSettings.java +++ b/src/main/java/net/minecraft/world/level/levelgen/WorldGenSettings.java @@ -86,7 +86,7 @@ public class WorldGenSettings { @@ -380,7 +380,7 @@ index 286c75989282c6d370ca64ac714ab15d784210ab..e3a2919e214c63aa8cc2334d30dade3d public static WorldGenSettings makeDefault(RegistryAccess registryManager) { - long i = (new Random()).nextLong(); -+ long i = (new org.yatopiamc.yatopia.server.util.FastRandom()).nextLong(); ++ long i = (new org.yatopiamc.yatopia.server.util.FastRandom()).nextLong(); // Mirai return new WorldGenSettings(i, true, false, WorldGenSettings.withOverworld(registryManager.registryOrThrow(Registry.DIMENSION_TYPE_REGISTRY), DimensionType.defaultDimensions(registryManager, i), WorldGenSettings.makeDefaultOverworld(registryManager, i))); } @@ -389,12 +389,12 @@ index 286c75989282c6d370ca64ac714ab15d784210ab..e3a2919e214c63aa8cc2334d30dade3d properties.put("level-type", s4); - long i = (new Random()).nextLong(); -+ long i = (new org.yatopiamc.yatopia.server.util.FastRandom()).nextLong(); ++ long i = (new org.yatopiamc.yatopia.server.util.FastRandom()).nextLong(); // Mirai if (!s1.isEmpty()) { try { diff --git a/src/main/java/net/minecraft/world/level/levelgen/feature/SpikeFeature.java b/src/main/java/net/minecraft/world/level/levelgen/feature/SpikeFeature.java -index c03bf5bdb67b00c75f9fcfead882c4d944282244..300c994cd3cc0995eeb4914590afce8b6ad1d92b 100644 +index c03bf5bdb67b00c75f9fcfead882c4d944282244..36af2ab1d6b80ec6d27a41371c52618ba2717a22 100644 --- a/src/main/java/net/minecraft/world/level/levelgen/feature/SpikeFeature.java +++ b/src/main/java/net/minecraft/world/level/levelgen/feature/SpikeFeature.java @@ -36,7 +36,7 @@ public class SpikeFeature extends Feature { @@ -402,7 +402,7 @@ index c03bf5bdb67b00c75f9fcfead882c4d944282244..300c994cd3cc0995eeb4914590afce8b public static List getSpikesForLevel(WorldGenLevel world) { - Random random = new Random(world.getSeed()); -+ Random random = new org.yatopiamc.yatopia.server.util.FastRandom(world.getSeed()); ++ Random random = new org.yatopiamc.yatopia.server.util.FastRandom(world.getSeed()); // Mirai long l = random.nextLong() & 65535L; return SPIKE_CACHE.getUnchecked(l); } @@ -411,12 +411,12 @@ index c03bf5bdb67b00c75f9fcfead882c4d944282244..300c994cd3cc0995eeb4914590afce8b public List load(Long long_) { List list = IntStream.range(0, 10).boxed().collect(Collectors.toList()); - Collections.shuffle(list, new Random(long_)); -+ Collections.shuffle(list, new org.yatopiamc.yatopia.server.util.FastRandom(long_)); ++ Collections.shuffle(list, new org.yatopiamc.yatopia.server.util.FastRandom(long_)); // Mirai List list2 = Lists.newArrayList(); for(int i = 0; i < 10; ++i) { diff --git a/src/main/java/net/minecraft/world/level/levelgen/structure/templatesystem/StructurePlaceSettings.java b/src/main/java/net/minecraft/world/level/levelgen/structure/templatesystem/StructurePlaceSettings.java -index c75141f96bdbee9ec070e81bd4f1ce0e7f1054fa..dbd46f0467f402fdde61831b49b4b7c1ba2d3af1 100644 +index c75141f96bdbee9ec070e81bd4f1ce0e7f1054fa..d10d9e4a45852555cd037247cd66ceb0e0e14c73 100644 --- a/src/main/java/net/minecraft/world/level/levelgen/structure/templatesystem/StructurePlaceSettings.java +++ b/src/main/java/net/minecraft/world/level/levelgen/structure/templatesystem/StructurePlaceSettings.java @@ -120,7 +120,7 @@ public class StructurePlaceSettings { @@ -424,12 +424,12 @@ index c75141f96bdbee9ec070e81bd4f1ce0e7f1054fa..dbd46f0467f402fdde61831b49b4b7c1 public Random getRandom(@Nullable BlockPos pos) { - return this.random != null ? this.random : (pos == null ? new Random(Util.getMillis()) : new Random(Mth.getSeed(pos))); -+ return this.random != null ? this.random : (pos == null ? new org.yatopiamc.yatopia.server.util.FastRandom(Util.getMillis()) : new org.yatopiamc.yatopia.server.util.FastRandom(Mth.getSeed(pos))); ++ return this.random != null ? this.random : (pos == null ? new org.yatopiamc.yatopia.server.util.FastRandom(Util.getMillis()) : new org.yatopiamc.yatopia.server.util.FastRandom(Mth.getSeed(pos))); // Mirai } public boolean isIgnoreEntities() { diff --git a/src/main/java/net/minecraft/world/level/storage/loot/LootContext.java b/src/main/java/net/minecraft/world/level/storage/loot/LootContext.java -index d33af84300db18ea2b71dba2c9ed43390a293500..14ef922c3f8d8f0867614fb0fd1faee73319a993 100644 +index d33af84300db18ea2b71dba2c9ed43390a293500..91fcdd628f487599f051edaa6a529cddec22fd15 100644 --- a/src/main/java/net/minecraft/world/level/storage/loot/LootContext.java +++ b/src/main/java/net/minecraft/world/level/storage/loot/LootContext.java @@ -127,7 +127,7 @@ public class LootContext { @@ -437,7 +437,7 @@ index d33af84300db18ea2b71dba2c9ed43390a293500..14ef922c3f8d8f0867614fb0fd1faee7 public LootContext.Builder withOptionalRandomSeed(long seed) { if (seed != 0L) { - this.random = new Random(seed); -+ this.random = new org.yatopiamc.yatopia.server.util.FastRandom(seed); ++ this.random = new org.yatopiamc.yatopia.server.util.FastRandom(seed); // Mirai } return this; @@ -446,7 +446,7 @@ index d33af84300db18ea2b71dba2c9ed43390a293500..14ef922c3f8d8f0867614fb0fd1faee7 this.random = random; } else { - this.random = new Random(seed); -+ this.random = new org.yatopiamc.yatopia.server.util.FastRandom(seed); ++ this.random = new org.yatopiamc.yatopia.server.util.FastRandom(seed); // Mirai } return this; @@ -455,7 +455,7 @@ index d33af84300db18ea2b71dba2c9ed43390a293500..14ef922c3f8d8f0867614fb0fd1faee7 Random random = this.random; if (random == null) { - random = new Random(); -+ random = new org.yatopiamc.yatopia.server.util.FastRandom(); ++ random = new org.yatopiamc.yatopia.server.util.FastRandom(); // Mirai } MinecraftServer minecraftServer = this.level.getServer(); @@ -473,7 +473,7 @@ index 6f885434f0576d2738b9c74fa9cc202e66ede262..0ab224b093e18f7e49c366c9e4862e0a dimensionmanager = worlddimension.type(); chunkgenerator = worlddimension.generator(); diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java -index ac41bc23d2f7e16bbacdc9b33fcf6c0d706fa023..5520b78f182e9e3281b12d6a2f93ce171e4b1151 100644 +index ac41bc23d2f7e16bbacdc9b33fcf6c0d706fa023..f9b8cc877649436b9d7bf93b429661b76e3b53cf 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java @@ -204,7 +204,7 @@ public class CraftWorld extends CraftRegionAccessor implements World { @@ -481,12 +481,12 @@ index ac41bc23d2f7e16bbacdc9b33fcf6c0d706fa023..5520b78f182e9e3281b12d6a2f93ce17 // Paper end - private static final Random rand = new Random(); -+ private static final Random rand = new org.yatopiamc.yatopia.server.util.FastRandom(); ++ private static final Random rand = new org.yatopiamc.yatopia.server.util.FastRandom(); // Mirai public CraftWorld(ServerLevel world, ChunkGenerator gen, BiomeProvider biomeProvider, Environment env) { this.world = world; diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftFirework.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftFirework.java -index be86114eac3975b82ca74d4d6ed3f0402a642e8a..e369d3a67c375e39c9ca58b44b71ab3963943c1f 100644 +index be86114eac3975b82ca74d4d6ed3f0402a642e8a..09332333c0b39f11da2953e343e7eedcc17f02c9 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftFirework.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftFirework.java @@ -13,7 +13,7 @@ import org.bukkit.inventory.meta.FireworkMeta; @@ -494,12 +494,12 @@ index be86114eac3975b82ca74d4d6ed3f0402a642e8a..e369d3a67c375e39c9ca58b44b71ab39 public class CraftFirework extends CraftProjectile implements Firework { - private final Random random = new Random(); -+ private final Random random = new org.yatopiamc.yatopia.server.util.FastRandom(); ++ private final Random random = new org.yatopiamc.yatopia.server.util.FastRandom(); // Mirai private final CraftItemStack item; public CraftFirework(CraftServer server, FireworkRocketEntity entity) { diff --git a/src/main/java/org/bukkit/craftbukkit/generator/CustomChunkGenerator.java b/src/main/java/org/bukkit/craftbukkit/generator/CustomChunkGenerator.java -index dd453548e1a1ac26ce611f5a96bd3ea81b0971da..a2b03655e571d5c8e5a04566a300b1c2142cc097 100644 +index dd453548e1a1ac26ce611f5a96bd3ea81b0971da..be3c3ff10d81327c7869948de191ddcdec6acc9b 100644 --- a/src/main/java/org/bukkit/craftbukkit/generator/CustomChunkGenerator.java +++ b/src/main/java/org/bukkit/craftbukkit/generator/CustomChunkGenerator.java @@ -44,7 +44,7 @@ public class CustomChunkGenerator extends InternalChunkGenerator { @@ -507,7 +507,7 @@ index dd453548e1a1ac26ce611f5a96bd3ea81b0971da..a2b03655e571d5c8e5a04566a300b1c2 private final ChunkGenerator generator; private final ServerLevel world; - private final Random random = new Random(); -+ private final Random random = new org.yatopiamc.yatopia.server.util.FastRandom(); ++ private final Random random = new org.yatopiamc.yatopia.server.util.FastRandom(); // Mirai private boolean newApi; private boolean implementBaseHeight = true; diff --git a/patches/server/0019-Remove-TickTask.patch b/patches/server/0019-Remove-TickTask.patch index 8dacde2..307bb97 100644 --- a/patches/server/0019-Remove-TickTask.patch +++ b/patches/server/0019-Remove-TickTask.patch @@ -7,7 +7,7 @@ Original code by PatinaMC, licensed under GNU General Public License v3.0 You can find the original code on https://github.com/PatinaMC/Patina diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index c691ee6208521b1570f0f25c8bbfd05146bd155c..1fe78da9a07bb2cadcd18ad4d30f9b101c696c36 100644 +index 98bebaab40390418681b2ee42af0dd4b14df6330..66b67c42d223dab3daf98e9088f1277b17342ac5 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java @@ -186,7 +186,7 @@ import org.bukkit.event.server.ServerLoadEvent; @@ -57,10 +57,10 @@ index c691ee6208521b1570f0f25c8bbfd05146bd155c..1fe78da9a07bb2cadcd18ad4d30f9b10 private void updateStatusIcon(ServerStatus metadata) { Optional optional = Optional.of(this.getFile("server-icon.png")).filter(File::isFile); diff --git a/src/main/java/net/minecraft/server/level/ServerChunkCache.java b/src/main/java/net/minecraft/server/level/ServerChunkCache.java -index d9c8e103546a9dee56e6e7a5db5a57d5158fc4ad..15b6dd0c39a1de09dd7aad88ec6054bf83b2a943 100644 +index 401326bfd610302a5b073cec646b435a861ad109..325ad14a55fbcfde73c061a03ca3592196360363 100644 --- a/src/main/java/net/minecraft/server/level/ServerChunkCache.java +++ b/src/main/java/net/minecraft/server/level/ServerChunkCache.java -@@ -1274,10 +1274,12 @@ public class ServerChunkCache extends ChunkSource { +@@ -1270,10 +1270,12 @@ public class ServerChunkCache extends ChunkSource { return runnable; } diff --git a/patches/server/0020-Remove-VersionFetcher.patch b/patches/server/0020-Remove-VersionFetcher.patch index a3cdac1..bc2a389 100644 --- a/patches/server/0020-Remove-VersionFetcher.patch +++ b/patches/server/0020-Remove-VersionFetcher.patch @@ -162,10 +162,10 @@ index ece77f5ea4b14bbed7c070131b3251ea86764538..00000000000000000000000000000000 - } -} diff --git a/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java b/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java -index dd0250d461ea5f658b7c2934332864a6b7e1ef48..40991b5ad2d2e8ffca1698ce13d5619e1f56b24b 100644 +index 0c13463b8b28b099be323969a9535359f41f5541..a71208f6f1d25bad2033c124938a3c25d3ed9997 100644 --- a/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java +++ b/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java -@@ -397,10 +397,12 @@ public final class CraftMagicNumbers implements UnsafeValues { +@@ -419,10 +419,12 @@ public final class CraftMagicNumbers implements UnsafeValues { return com.destroystokyo.paper.PaperConfig.timingsServerName; } diff --git a/patches/server/0023-Don-t-create-new-random-instance.patch b/patches/server/0023-Don-t-create-new-random-instance.patch index 3aaac45..1d9d11a 100644 --- a/patches/server/0023-Don-t-create-new-random-instance.patch +++ b/patches/server/0023-Don-t-create-new-random-instance.patch @@ -7,28 +7,28 @@ Original code by PatinaMC, licensed under GNU General Public License v3.0 You can find the original code on https://github.com/PatinaMC/Patina diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 1fe78da9a07bb2cadcd18ad4d30f9b101c696c36..a16c569cf0c8dba0b2bc61dedf5394a941696d56 100644 +index 66b67c42d223dab3daf98e9088f1277b17342ac5..41557a97b1bc1d4986efa9d4a5d7691ec250882f 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java @@ -650,7 +650,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop 2147483647L ? Integer.MAX_VALUE : (int) l; int j1 = this.getCoprime(i1); -- int k1 = (new org.yatopiamc.yatopia.server.util.FastRandom()).nextInt(i1); -+ int k1 = worldserver.random.nextInt(i1); // Patina - don't create new random instance +- int k1 = (new org.yatopiamc.yatopia.server.util.FastRandom()).nextInt(i1); // Mirai ++ int k1 = worldserver.random.nextInt(i1); // Mirai // Patina - don't create new random instance for (int l1 = 0; l1 < i1; ++l1) { int i2 = (k1 + j1 * l1) % i1; @@ -36,54 +36,54 @@ index ab06dd398bdf52656123eecdfe4daebe2a3b07e6..0011192cdba6dcb7ca125ae4a49ca89a long l = k * k; int i1 = l > 2147483647L ? Integer.MAX_VALUE : (int) l; int j1 = this.getCoprime(i1); -- int k1 = (new org.yatopiamc.yatopia.server.util.FastRandom()).nextInt(i1); -+ int k1 = world.random.nextInt(i1); // Patina - don't create new random instance +- int k1 = (new org.yatopiamc.yatopia.server.util.FastRandom()).nextInt(i1); // Mirai ++ int k1 = world.random.nextInt(i1); // Mirai // Patina - don't create new random instance for (int l1 = 0; l1 < i1; ++l1) { int i2 = (k1 + j1 * l1) % i1; diff --git a/src/main/java/net/minecraft/server/rcon/thread/QueryThreadGs4.java b/src/main/java/net/minecraft/server/rcon/thread/QueryThreadGs4.java -index b0cbe7d42eef1865e84211844b351027a26a5956..711d5dc2a8b3a5f2a2a35cab59b5ecfdeb152141 100644 +index 4c6d10d3ce7a9b5cc4cc04d57fe06ec07a2793e2..e02c1ee3c0ec3c9e32902d61ea12fa227996ad4c 100644 --- a/src/main/java/net/minecraft/server/rcon/thread/QueryThreadGs4.java +++ b/src/main/java/net/minecraft/server/rcon/thread/QueryThreadGs4.java @@ -348,7 +348,7 @@ public class QueryThreadGs4 extends GenericThread { this.identBytes[2] = bs[5]; this.identBytes[3] = bs[6]; this.ident = new String(this.identBytes, StandardCharsets.UTF_8); -- this.challenge = (new org.yatopiamc.yatopia.server.util.FastRandom()).nextInt(16777216); -+ this.challenge = java.util.concurrent.ThreadLocalRandom.current().nextInt(16777216); // Patina - don't create new random instance +- this.challenge = (new org.yatopiamc.yatopia.server.util.FastRandom()).nextInt(16777216); // Mirai ++ this.challenge = java.util.concurrent.ThreadLocalRandom.current().nextInt(16777216); // Mirai // Patina - don't create new random instance this.challengeBytes = String.format("\t%s%d\u0000", this.ident, this.challenge).getBytes(StandardCharsets.UTF_8); } diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java -index 2d3cdb47c80af4044bd42b0061d722da5596cd34..74d8edf5a558948233674c78c70135e8fdea469a 100644 +index 519010d391853629b752ffa1bdbe70f5ef6f1b32..d4704fb641e25679367ffa92be485bc329c97e2c 100644 --- a/src/main/java/net/minecraft/world/level/Level.java +++ b/src/main/java/net/minecraft/world/level/Level.java @@ -123,13 +123,14 @@ public abstract class Level implements LevelAccessor, AutoCloseable { public final Thread thread; private final boolean isDebug; private int skyDarken; -- protected int randValue = (new org.yatopiamc.yatopia.server.util.FastRandom()).nextInt(); -+ //protected int randValue = (new org.yatopiamc.yatopia.server.util.FastRandom()).nextInt(); // Patina - moved down +- protected int randValue = (new org.yatopiamc.yatopia.server.util.FastRandom()).nextInt(); // Mirai ++ //protected int randValue = (new org.yatopiamc.yatopia.server.util.FastRandom()).nextInt(); // Mirai // Patina - moved down protected final int addend = 1013904223; protected float oRainLevel; public float rainLevel; protected float oThunderLevel; public float thunderLevel; - public final Random random = new org.yatopiamc.yatopia.server.util.FastRandom(); + public final Random random = new org.yatopiamc.yatopia.server.util.FastRandom(); // Mirai + protected int randValue = random.nextInt(); // Patina - don't create new random instance private final DimensionType dimensionType; public final WritableLevelData levelData; private final Supplier profiler; diff --git a/src/main/java/net/minecraft/world/level/levelgen/WorldGenSettings.java b/src/main/java/net/minecraft/world/level/levelgen/WorldGenSettings.java -index e3a2919e214c63aa8cc2334d30dade3daf39b92d..a580c191a0450c1088c32344b30a3f452913ac5e 100644 +index 4c4c9ea4575306d08a34e19bba06a4a63f562809..e06db106202d1227e3ca061d98c1006783fe7dde 100644 --- a/src/main/java/net/minecraft/world/level/levelgen/WorldGenSettings.java +++ b/src/main/java/net/minecraft/world/level/levelgen/WorldGenSettings.java @@ -86,7 +86,7 @@ public class WorldGenSettings { } public static WorldGenSettings makeDefault(RegistryAccess registryManager) { -- long i = (new org.yatopiamc.yatopia.server.util.FastRandom()).nextLong(); -+ long i = java.util.concurrent.ThreadLocalRandom.current().nextLong(); // Patina - don't create new random instance +- long i = (new org.yatopiamc.yatopia.server.util.FastRandom()).nextLong(); // Mirai ++ long i = java.util.concurrent.ThreadLocalRandom.current().nextLong(); // Mirai // Patina - don't create new random instance return new WorldGenSettings(i, true, false, WorldGenSettings.withOverworld(registryManager.registryOrThrow(Registry.DIMENSION_TYPE_REGISTRY), DimensionType.defaultDimensions(registryManager, i), WorldGenSettings.makeDefaultOverworld(registryManager, i))); } @@ -91,13 +91,13 @@ index e3a2919e214c63aa8cc2334d30dade3daf39b92d..a580c191a0450c1088c32344b30a3f45 }).orElse("default"); properties.put("level-type", s4); -- long i = (new org.yatopiamc.yatopia.server.util.FastRandom()).nextLong(); -+ long i = java.util.concurrent.ThreadLocalRandom.current().nextLong(); // Patina - don't create new random instance +- long i = (new org.yatopiamc.yatopia.server.util.FastRandom()).nextLong(); // Mirai ++ long i = java.util.concurrent.ThreadLocalRandom.current().nextLong(); // Mirai // Patina - don't create new random instance if (!s1.isEmpty()) { try { diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index 0ab224b093e18f7e49c366c9e4862e0a97e7573c..e9545ca9c043a366ad60b14b4318504b6e71bb5e 100644 +index 0ab224b093e18f7e49c366c9e4862e0a97e7573c..8219faec47215d7ac618d54ae996d156e3a631ff 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java @@ -1237,7 +1237,7 @@ public final class CraftServer implements Server { @@ -105,7 +105,7 @@ index 0ab224b093e18f7e49c366c9e4862e0a97e7573c..e9545ca9c043a366ad60b14b4318504b if (worlddimension == null) { dimensionmanager = (DimensionType) console.registryHolder.registryOrThrow(Registry.DIMENSION_TYPE_REGISTRY).getOrThrow(DimensionType.OVERWORLD_LOCATION); - chunkgenerator = WorldGenSettings.makeDefaultOverworld(console.registryHolder, (new org.yatopiamc.yatopia.server.util.FastRandom()).nextLong()); -+ chunkgenerator = WorldGenSettings.makeDefaultOverworld(console.registryHolder, java.util.concurrent.ThreadLocalRandom.current().nextLong()); // Patina - don't create new random instance ++ chunkgenerator = WorldGenSettings.makeDefaultOverworld(console.registryHolder, java.util.concurrent.ThreadLocalRandom.current().nextLong()); // Mirai // Patina - don't create new random instance } else { dimensionmanager = worlddimension.type(); chunkgenerator = worlddimension.generator(); diff --git a/patches/server/0026-Better-handling-of-async-tasks.patch b/patches/server/0026-Better-handling-of-async-tasks.patch index a2a1113..950c3db 100644 --- a/patches/server/0026-Better-handling-of-async-tasks.patch +++ b/patches/server/0026-Better-handling-of-async-tasks.patch @@ -58,7 +58,7 @@ index f99d189f461921d37581e2fc1382af60921b0660..c0f65d6c73773e4872b30126775e5b02 public static Runnable once(Runnable run) { AtomicBoolean ran = new AtomicBoolean(false); diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index a16c569cf0c8dba0b2bc61dedf5394a941696d56..bde44438a2af1f7faaa655191c45ed2b4a6b8da0 100644 +index 41557a97b1bc1d4986efa9d4a5d7691ec250882f..1866d0a01cf921d306d4a3e251076f20b60463a1 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java @@ -372,6 +372,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop= KEEPALIVE_LIMIT) { // check keepalive limit, don't fire if already disconnected ServerGamePacketListenerImpl.LOGGER.warn("{} was kicked due to keepalive timeout!", this.player.getScoreboardName()); // more info -@@ -3084,6 +3100,16 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Ser +@@ -3101,6 +3117,16 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Ser @Override public void handleKeepAlive(ServerboundKeepAlivePacket packet) { diff --git a/patches/server/0060-Signs-allow-color-codes.patch b/patches/server/0060-Signs-allow-color-codes.patch index c2a0409..884b1f3 100644 --- a/patches/server/0060-Signs-allow-color-codes.patch +++ b/patches/server/0060-Signs-allow-color-codes.patch @@ -7,7 +7,7 @@ Original code by PurpurMC, licensed under MIT You can find the original code on https://github.com/PurpurMC/Purpur diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java -index ade6a3d0e90e8c82e3e90bd2d12369ccd0760eca..c93c3c3f83a60aa1769607a26148f2eb754cbda6 100644 +index f5087576843b23f2b1537f2062db74a10778d4a4..04ea3dfacf2f6a133bd635326a7b818f8038fccb 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java @@ -1460,6 +1460,7 @@ public class ServerPlayer extends Player { @@ -19,10 +19,10 @@ index ade6a3d0e90e8c82e3e90bd2d12369ccd0760eca..c93c3c3f83a60aa1769607a26148f2eb this.connection.send(new ClientboundBlockUpdatePacket(this.level, sign.getBlockPos())); this.connection.send(new ClientboundOpenSignEditorPacket(sign.getBlockPos())); diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index 86c213ae5733d407c534e5b5e75e1330c61c8289..4707ab9c34f814906a9d638d5c3b956f539c5479 100644 +index 5564118497f6c0c04e95602b7f56756272a62f76..9570706dcb5218f03766c0dd9ecd371992ad29ce 100644 --- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -@@ -3074,11 +3074,15 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Ser +@@ -3091,11 +3091,15 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Ser } // Paper end diff --git a/patches/server/0063-PaperPR-Use-DataConverter-for-itemstack-entity-deser.patch b/patches/server/0063-PaperPR-Use-DataConverter-for-itemstack-entity-deser.patch index 2b1a520..e5a84ea 100644 --- a/patches/server/0063-PaperPR-Use-DataConverter-for-itemstack-entity-deser.patch +++ b/patches/server/0063-PaperPR-Use-DataConverter-for-itemstack-entity-deser.patch @@ -6,10 +6,10 @@ Subject: [PATCH] PaperPR Use DataConverter for itemstack/entity diff --git a/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java b/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java -index 40991b5ad2d2e8ffca1698ce13d5619e1f56b24b..7747c50edb3aab3a6eb3cf70eef37a00e00595ca 100644 +index a71208f6f1d25bad2033c124938a3c25d3ed9997..761e93c87212ef888ed6f8ca1c42a5d7daa16ca9 100644 --- a/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java +++ b/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java -@@ -424,8 +424,8 @@ public final class CraftMagicNumbers implements UnsafeValues { +@@ -446,8 +446,8 @@ public final class CraftMagicNumbers implements UnsafeValues { CompoundTag compound = deserializeNbtFromBytes(data); int dataVersion = compound.getInt("DataVersion"); @@ -20,7 +20,7 @@ index 40991b5ad2d2e8ffca1698ce13d5619e1f56b24b..7747c50edb3aab3a6eb3cf70eef37a00 } @Override -@@ -445,8 +445,7 @@ public final class CraftMagicNumbers implements UnsafeValues { +@@ -467,8 +467,7 @@ public final class CraftMagicNumbers implements UnsafeValues { CompoundTag compound = deserializeNbtFromBytes(data); int dataVersion = compound.getInt("DataVersion"); diff --git a/patches/server/0073-PaperPR-Fix-mobs-spawning-outside-hard-despawn-range.patch b/patches/server/0073-PaperPR-Fix-mobs-spawning-outside-hard-despawn-range.patch index 17e4092..8aa181f 100644 --- a/patches/server/0073-PaperPR-Fix-mobs-spawning-outside-hard-despawn-range.patch +++ b/patches/server/0073-PaperPR-Fix-mobs-spawning-outside-hard-despawn-range.patch @@ -5,10 +5,10 @@ Subject: [PATCH] PaperPR Fix mobs spawning outside hard despawn range diff --git a/src/main/java/net/minecraft/world/level/NaturalSpawner.java b/src/main/java/net/minecraft/world/level/NaturalSpawner.java -index 387b8b158dfe7a3832dff84b0bde97fd4c3a863b..a4107dff1492c2234d0e3205714571f6b982b8e5 100644 +index 434bdc40ddd92700211076965d97a473706e7351..35c58ee4e780f57681674ee871cb009e085753af 100644 --- a/src/main/java/net/minecraft/world/level/NaturalSpawner.java +++ b/src/main/java/net/minecraft/world/level/NaturalSpawner.java -@@ -403,7 +403,10 @@ public final class NaturalSpawner { +@@ -410,7 +410,10 @@ public final class NaturalSpawner { } private static boolean isValidPositionForMob(ServerLevel world, Mob entity, double squaredDistance) { diff --git a/patches/server/0080-lithium-fast-math.patch b/patches/server/0080-lithium-fast-math.patch index b5bbc24..7454dad 100644 --- a/patches/server/0080-lithium-fast-math.patch +++ b/patches/server/0080-lithium-fast-math.patch @@ -65,7 +65,7 @@ index 40447d00aefb5ffedb8a2ee87155a04088f0649f..3a8c0aedb51c65c3b5cc6922068ece77 } } diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 5b17832ffcf0f21ce8dcfd943df2915079a4e907..e71e915c9c82cc5e3ec3e12404e7d91da3a18d46 100644 +index db5279dd944214802bafc75af7ec46c9eead605c..79a5bfab6c91900e40cb125ae2f77d405641bbf6 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java @@ -393,7 +393,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop +From: JellySquid Date: Wed, 23 Sep 2020 16:33:58 +0200 Subject: [PATCH] lithium: tag @@ -7,10 +7,10 @@ Original code by CaffeineMC, licensed under GNU Lesser General Public License v3 You can find the original code on https://github.com/CaffeineMC/lithium-fabric (Yarn mappings) diff --git a/src/main/java/net/minecraft/tags/SetTag.java b/src/main/java/net/minecraft/tags/SetTag.java -index d0c4a1dd2b11cfdbd3972dec5b5622e2f013ab48..91257c689e53f85ee518cd2196795a3282593210 100644 +index d0c4a1dd2b11cfdbd3972dec5b5622e2f013ab48..9444e3dcdf3fa307c93adb2f790876fcd9ad88e7 100644 --- a/src/main/java/net/minecraft/tags/SetTag.java +++ b/src/main/java/net/minecraft/tags/SetTag.java -@@ -3,12 +3,16 @@ package net.minecraft.tags; +@@ -3,6 +3,8 @@ package net.minecraft.tags; import com.google.common.annotations.VisibleForTesting; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableSet; @@ -18,38 +18,20 @@ index d0c4a1dd2b11cfdbd3972dec5b5622e2f013ab48..91257c689e53f85ee518cd2196795a32 +import it.unimi.dsi.fastutil.objects.ReferenceOpenHashSet; // Mirai import java.util.List; import java.util.Set; -+import net.minecraft.tags.Tag; // Mirai - public class SetTag implements Tag { - private final ImmutableList valuesList; - private final Set values; -+ private Set valueSet; // Mirai - @VisibleForTesting - protected final Class closestCommonSuperType; +@@ -14,8 +16,14 @@ public class SetTag implements Tag { -@@ -61,4 +65,25 @@ public class SetTag implements Tag { - - return first; - } -+ -+ // Mirai start -+ /** -+ * If the number of elements in a tag is very small (<=3), it can be significantly faster to use simple linear scanning -+ * across an array to check if an element is contained by the tag. We mix into the implementation type for Tag -+ * and try replacing the type of set after the constructor has ran. If the set is too large, we still replace it -+ * with a faster set type which has reference equality semantics. -+ * -+ * @reason Use specialized implementations -+ * @author JellySquid -+ */ -+ private void init(Set values, Class var2) { -+ // Reference equality is safe for tag values -+ // Use linear-scanning when the number of items in the tag is small -+ if (this.valueSet.size() <= 3) { -+ this.valueSet = new ReferenceArraySet<>(this.valueSet); + protected SetTag(Set values, Class type) { + this.closestCommonSuperType = type; +- this.values = values; + this.valuesList = ImmutableList.copyOf(values); ++ // Mirai start ++ if (values.size() <= 3) { ++ this.values = new ReferenceArraySet<>(values); + } else { -+ this.valueSet = new ReferenceOpenHashSet<>(this.valueSet); ++ this.values = new ReferenceOpenHashSet<>(values); + } -+ } -+ // Mirai end - } ++ // Mirai end + } + + public static SetTag empty() { diff --git a/patches/server/0093-servercore-Don-t-load-chunks-for-block-break-packets.patch b/patches/server/0093-servercore-Don-t-load-chunks-for-block-break-packets.patch deleted file mode 100644 index d4360b0..0000000 --- a/patches/server/0093-servercore-Don-t-load-chunks-for-block-break-packets.patch +++ /dev/null @@ -1,140 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Wesley1808 <> -Date: Fri, 3 Dec 2021 15:53:06 +0100 -Subject: [PATCH] servercore: Don't load chunks for block break packets - -Original code by Wesley1808, licensed under MIT -You can find the original code on https://github.com/Wesley1808/ServerCore - -diff --git a/src/main/java/net/minecraft/server/level/ServerChunkCache.java b/src/main/java/net/minecraft/server/level/ServerChunkCache.java -index 15b6dd0c39a1de09dd7aad88ec6054bf83b2a943..97bcdc2af01f1b9d9f0a9e6045bab0ce56b95e60 100644 ---- a/src/main/java/net/minecraft/server/level/ServerChunkCache.java -+++ b/src/main/java/net/minecraft/server/level/ServerChunkCache.java -@@ -445,7 +445,7 @@ public class ServerChunkCache extends ChunkSource { - } - - @Nullable -- private ChunkHolder getVisibleChunkIfPresent(long pos) { -+ public ChunkHolder getVisibleChunkIfPresent(long pos) { // Mirai - private->public - return this.chunkMap.getVisibleChunkIfPresent(pos); - } - -diff --git a/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java b/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java -index 534c7a702e96523bd2e3cf0bc20c7c63929b4f07..7f584576b390bef9ad4255c332884b2617f5302a 100644 ---- a/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java -+++ b/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java -@@ -45,6 +45,11 @@ import org.bukkit.event.player.PlayerGameModeChangeEvent; - import org.bukkit.event.player.PlayerInteractEvent; - // CraftBukkit end - -+// Mirai start -+import net.minecraft.server.level.ServerLevel; -+import org.provim.servercore.utils.ChunkManager; -+// Mirai end -+ - public class ServerPlayerGameMode { - - private static final Logger LOGGER = LogManager.getLogger(); -@@ -616,4 +621,10 @@ public class ServerPlayerGameMode { - public void setLevel(ServerLevel world) { - this.level = world; - } -+ -+ // Mirai start -+ private BlockState onlyProcessIfLoaded(ServerLevel level, BlockPos pos) { -+ return ChunkManager.getStateIfLoaded(level, pos); -+ } -+ // Mirai end - } -diff --git a/src/main/java/org/provim/servercore/utils/ChunkManager.java b/src/main/java/org/provim/servercore/utils/ChunkManager.java -new file mode 100644 -index 0000000000000000000000000000000000000000..fd272da74610862e38b128dade0f3f2422649cf8 ---- /dev/null -+++ b/src/main/java/org/provim/servercore/utils/ChunkManager.java -@@ -0,0 +1,85 @@ -+package org.provim.servercore.utils; -+ -+import net.minecraft.core.BlockPos; -+import net.minecraft.server.level.ChunkHolder; -+import net.minecraft.server.level.ServerChunkCache; -+import net.minecraft.util.Mth; -+import net.minecraft.world.level.ChunkPos; -+import net.minecraft.world.level.Level; -+import net.minecraft.world.level.block.Blocks; -+import net.minecraft.world.level.block.state.BlockState; -+import net.minecraft.world.level.chunk.LevelChunk; -+import net.minecraft.world.phys.AABB; -+import org.jetbrains.annotations.Nullable; -+ -+public final class ChunkManager { -+ -+ /** -+ * Returns the BlockState at {@param pos} in {@param level} if the position is loaded. -+ */ -+ -+ public static BlockState getStateIfLoaded(Level level, BlockPos pos) { -+ final LevelChunk chunk = getChunkIfLoaded(level, pos); -+ return chunk != null ? chunk.getBlockState(pos) : Blocks.VOID_AIR.defaultBlockState(); -+ } -+ -+ /** -+ * Returns the chunk at {@param pos} in {@param level} if the position is loaded. -+ */ -+ -+ @Nullable -+ public static LevelChunk getChunkIfLoaded(Level level, BlockPos pos) { -+ return getChunkIfLoaded(level, pos.getX() >> 4, pos.getZ() >> 4); -+ } -+ -+ @Nullable -+ public static LevelChunk getChunkIfLoaded(Level level, int chunkX, int chunkZ) { -+ if (!level.isClientSide) { -+ final ChunkHolder holder = getChunkHolder(level, chunkX, chunkZ); -+ return holder != null ? holder.getFullChunkFuture().getNow(ChunkHolder.UNLOADED_LEVEL_CHUNK).left().orElse(null) : null; -+ } else { -+ return level.getChunk(chunkX, chunkZ); -+ } -+ } -+ -+ /** -+ * Returns a boolean that decides whether the chunk at {@param pos} in {@param level} is loaded. -+ */ -+ -+ public static boolean isChunkLoaded(Level level, BlockPos pos) { -+ return isChunkLoaded(level, pos.getX() >> 4, pos.getZ() >> 4); -+ } -+ -+ public static boolean isChunkLoaded(Level level, int chunkX, int chunkZ) { -+ return level.isClientSide || isChunkLoaded(getChunkHolder(level, chunkX, chunkZ)); -+ } -+ -+ private static boolean isChunkLoaded(ChunkHolder holder) { -+ return holder != null && holder.getFullChunkFuture().getNow(ChunkHolder.UNLOADED_LEVEL_CHUNK).left().isPresent(); -+ } -+ -+ public static boolean isTouchingUnloadedChunk(Level level, AABB box) { -+ final int minX = Mth.floor(box.minX) >> 4; -+ final int maxX = Mth.ceil(box.maxX) >> 4; -+ final int minZ = Mth.floor(box.minZ) >> 4; -+ final int maxZ = Mth.ceil(box.maxZ) >> 4; -+ -+ for (int x = minX; x <= maxX; x++) { -+ for (int z = minZ; z <= maxZ; z++) { -+ if (!ChunkManager.isChunkLoaded(level, x, z)) { -+ return true; -+ } -+ } -+ } -+ return false; -+ } -+ -+ /** -+ * Returns the ChunkHolder at chunk coordinate X / Z in {@param level} if the location is loaded. -+ */ -+ -+ @Nullable -+ private static ChunkHolder getChunkHolder(Level level, int chunkX, int chunkZ) { -+ return level.getChunkSource() instanceof ServerChunkCache chunkCache ? chunkCache.getVisibleChunkIfPresent(ChunkPos.asLong(chunkX, chunkZ)) : null; -+ } -+} -\ No newline at end of file