diff --git a/gradle.properties b/gradle.properties index b2b239f..2b6f196 100644 --- a/gradle.properties +++ b/gradle.properties @@ -7,7 +7,7 @@ apiVersion=1.21.11 release=1 # 0 for skip release, 1 for pre-release, 2 for release -luminolRef=699a3b59e3d5607bdfe9fe9147a143e24299814a +luminolRef=db42c568c4fb9addf797d797710fc8ad49daf3ba org.gradle.configuration-cache=true org.gradle.caching=true diff --git a/lophine-server/minecraft-patches/features/0003-Add-config-to-enable-raytracing-tracker.patch b/lophine-server/minecraft-patches/features/0003-Add-config-to-enable-raytracing-tracker.patch index 92ffb7c..82e310b 100644 --- a/lophine-server/minecraft-patches/features/0003-Add-config-to-enable-raytracing-tracker.patch +++ b/lophine-server/minecraft-patches/features/0003-Add-config-to-enable-raytracing-tracker.patch @@ -18,7 +18,7 @@ index bca2c5410aa543d2bb421e53893e9163508b3568..fdccb06c918d387e46c29ede7337159d double rangeY = level.paperConfig().entities.trackingRangeY.get(this.entity, -1); if (rangeY != -1) { diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java -index 486d492087d870c38eb7a9c2169b842885748510..dddd8757292e8a817b0f697ac9e8f4ea0a74f589 100644 +index 532a628de2d5eda29b503274bc323d71a57cf1cb..0f213d1cfab6066f6713c5b2124b76409510454c 100644 --- a/net/minecraft/world/entity/Entity.java +++ b/net/minecraft/world/entity/Entity.java @@ -152,7 +152,7 @@ import org.jetbrains.annotations.Contract; @@ -30,7 +30,7 @@ index 486d492087d870c38eb7a9c2169b842885748510..dddd8757292e8a817b0f697ac9e8f4ea // CraftBukkit start private static final int CURRENT_LEVEL = 2; static boolean isLevelAtLeast(ValueInput input, int level) { -@@ -6534,4 +6534,46 @@ public abstract class Entity implements SyncedDataHolder, DebugValueSource, Name +@@ -6536,4 +6536,46 @@ public abstract class Entity implements SyncedDataHolder, DebugValueSource, Name // Paper end - Expose entity id counter public boolean shouldTickHot() { return this.tickCount > 20 * 10 && this.isAlive(); } // KioCG diff --git a/lophine-server/minecraft-patches/features/0005-Add-config-to-enable-scoreboard-command.patch b/lophine-server/minecraft-patches/features/0005-Add-config-to-enable-scoreboard-command.patch index eb2ffd2..511101a 100644 --- a/lophine-server/minecraft-patches/features/0005-Add-config-to-enable-scoreboard-command.patch +++ b/lophine-server/minecraft-patches/features/0005-Add-config-to-enable-scoreboard-command.patch @@ -5,11 +5,11 @@ Subject: [PATCH] Add config to enable scoreboard command diff --git a/net/minecraft/commands/Commands.java b/net/minecraft/commands/Commands.java -index ddde2c3e7c8d9105202a7ff32e444f85485cdb7f..8779f16cde40676fcb441973f53c8648c2a5e405 100644 +index c347830fbd8fccbf3b6b536beaba818fb7c6be32..8d77d6f165a5883e997122d1c2f231287e0caebe 100644 --- a/net/minecraft/commands/Commands.java +++ b/net/minecraft/commands/Commands.java @@ -241,7 +241,11 @@ public class Commands { - RotateCommand.register(this.dispatcher); // Folia - region threading - TODO later + //RotateCommand.register(this.dispatcher); // Folia - region threading - TODO later // Luminol - Disable not correctly disabled unsupported commands SayCommand.register(this.dispatcher); //ScheduleCommand.register(this.dispatcher); // Folia - region threading - //ScoreboardCommand.register(this.dispatcher, context); // Folia - region threading diff --git a/lophine-server/minecraft-patches/features/0006-Add-config-to-enable-tick-command.patch b/lophine-server/minecraft-patches/features/0006-Add-config-to-enable-tick-command.patch index 954cd5f..d444bc8 100644 --- a/lophine-server/minecraft-patches/features/0006-Add-config-to-enable-tick-command.patch +++ b/lophine-server/minecraft-patches/features/0006-Add-config-to-enable-tick-command.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add config to enable tick command diff --git a/io/papermc/paper/threadedregions/RegionizedServer.java b/io/papermc/paper/threadedregions/RegionizedServer.java -index b29735af284493a011c0b3c1d07c7accce6fbde3..f7cc53bf3308771ab8d09010452e579485f6f1bc 100644 +index b3bc39ebe8d2f48d976de9cd4fcae46095523514..6df2b8cf3b902bb157ed5fa9eaf9ca062d9e5a39 100644 --- a/io/papermc/paper/threadedregions/RegionizedServer.java +++ b/io/papermc/paper/threadedregions/RegionizedServer.java -@@ -317,6 +317,11 @@ public final class RegionizedServer { +@@ -332,6 +332,11 @@ public final class RegionizedServer { this.randomWalk(); */ ++this.tickCount; @@ -20,7 +20,7 @@ index b29735af284493a011c0b3c1d07c7accce6fbde3..f7cc53bf3308771ab8d09010452e5794 // expire invalid click command callbacks io.papermc.paper.adventure.providers.ClickCallbackProviderImpl.ADVENTURE_CLICK_MANAGER.handleQueue((int)this.tickCount); // Paper // Folia - region threading - moved to global tick io.papermc.paper.adventure.providers.ClickCallbackProviderImpl.DIALOG_CLICK_MANAGER.handleQueue((int)this.tickCount); // Paper // Folia - region threading - moved to global tick -@@ -340,6 +345,13 @@ public final class RegionizedServer { +@@ -355,6 +360,13 @@ public final class RegionizedServer { this.globalTick(world, tickCount); } @@ -34,7 +34,7 @@ index b29735af284493a011c0b3c1d07c7accce6fbde3..f7cc53bf3308771ab8d09010452e5794 // tick connections this.tickConnections(); -@@ -473,7 +485,7 @@ public final class RegionizedServer { +@@ -488,7 +500,7 @@ public final class RegionizedServer { } private void tickTime(final ServerLevel world, final int tickCount) { @@ -44,10 +44,10 @@ index b29735af284493a011c0b3c1d07c7accce6fbde3..f7cc53bf3308771ab8d09010452e5794 world.setDayTime(world.levelData.getDayTime() + (long)tickCount); } diff --git a/io/papermc/paper/threadedregions/TickRegionScheduler.java b/io/papermc/paper/threadedregions/TickRegionScheduler.java -index 0457f0bd825c2d2287dc5ec9f81f0a266c30a869..5a224c5aba29f982d3650a78c29aeb7491d92a80 100644 +index e3df94bfd26b118cb8a7bdece75d611aaf27c606..bae2385b725c0ce551768f22945393ccf6e1e432 100644 --- a/io/papermc/paper/threadedregions/TickRegionScheduler.java +++ b/io/papermc/paper/threadedregions/TickRegionScheduler.java -@@ -33,8 +33,8 @@ public final class TickRegionScheduler { +@@ -39,8 +39,8 @@ public final class TickRegionScheduler { } } @@ -55,10 +55,10 @@ index 0457f0bd825c2d2287dc5ec9f81f0a266c30a869..5a224c5aba29f982d3650a78c29aeb74 - public static final long TIME_BETWEEN_TICKS = 1_000_000_000L / TICK_RATE; // ns + public static float TICK_RATE = 20; // Luminol - Add tick command support + public static long TIME_BETWEEN_TICKS = (long) (1_000_000_000L / TICK_RATE); // ns // Luminol - Add tick command support - // Folia start - watchdog public static final FoliaWatchdogThread WATCHDOG_THREAD = new FoliaWatchdogThread(); -@@ -389,8 +389,23 @@ public final class TickRegionScheduler { + static { +@@ -447,8 +447,23 @@ public final class TickRegionScheduler { final long cpuStart = MEASURE_CPU_TIME ? THREAD_MX_BEAN.getCurrentThreadCpuTime() : 0L; final long tickStart = System.nanoTime(); @@ -84,7 +84,7 @@ index 0457f0bd825c2d2287dc5ec9f81f0a266c30a869..5a224c5aba29f982d3650a78c29aeb74 if (!this.tryMarkTicking()) { if (!this.cancelled.get()) { -@@ -431,6 +446,11 @@ public final class TickRegionScheduler { +@@ -497,6 +512,11 @@ public final class TickRegionScheduler { try { // next start isn't updated until the end of this tick this.tickRegion(tickCount, tickStart, scheduledEnd); @@ -97,7 +97,7 @@ index 0457f0bd825c2d2287dc5ec9f81f0a266c30a869..5a224c5aba29f982d3650a78c29aeb74 this.scheduler.regionFailed(this, false, thr); // regionFailed will schedule a shutdown, so we should avoid letting this region tick further diff --git a/net/minecraft/commands/Commands.java b/net/minecraft/commands/Commands.java -index 8779f16cde40676fcb441973f53c8648c2a5e405..b9dc7dd77aeb6e3b59b6903cb5094b7eadee4d2d 100644 +index 8d77d6f165a5883e997122d1c2f231287e0caebe..23f047a47cdccc90a96153cc52bdedf91cd15db9 100644 --- a/net/minecraft/commands/Commands.java +++ b/net/minecraft/commands/Commands.java @@ -262,7 +262,11 @@ public class Commands { @@ -114,7 +114,7 @@ index 8779f16cde40676fcb441973f53c8648c2a5e405..b9dc7dd77aeb6e3b59b6903cb5094b7e TitleCommand.register(this.dispatcher, context); //TriggerCommand.register(this.dispatcher); // Folia - region threading - TODO later diff --git a/net/minecraft/server/MinecraftServer.java b/net/minecraft/server/MinecraftServer.java -index a36ed4b368ed9ee41eeb9fdf096aae41963a58cc..2f91e80f8c3df2775a793aa3c648c50007543192 100644 +index 1627a8f3ebf7bf1a750a62802f1187ad8c1a6a0f..6e18d988104c121d9683eb57e77a78acfdee3907 100644 --- a/net/minecraft/server/MinecraftServer.java +++ b/net/minecraft/server/MinecraftServer.java @@ -270,7 +270,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop> set = (Set) advancements.criterionData.get(this); // Paper - fix PlayerAdvancements leak if (set != null && !set.isEmpty()) { diff --git a/net/minecraft/network/Connection.java b/net/minecraft/network/Connection.java -index b4d6ddf02e72378022cc0a7cb6f8137fff3fa4f9..cb2ba07516ab931812987eaf5bb9222e9d279522 100644 +index d5e604bf18a223aa434bc9f78274e1f3ff7f203d..715976a49ca621ba40d9353b18d41d342315afd4 100644 --- a/net/minecraft/network/Connection.java +++ b/net/minecraft/network/Connection.java @@ -74,7 +74,7 @@ public class Connection extends SimpleChannelInboundHandler> { @@ -33,7 +33,7 @@ index b4d6ddf02e72378022cc0a7cb6f8137fff3fa4f9..cb2ba07516ab931812987eaf5bb9222e private boolean encrypted; private final java.util.concurrent.atomic.AtomicBoolean disconnectionHandled = new java.util.concurrent.atomic.AtomicBoolean(false); // Folia - region threading - may be called concurrently during configuration stage diff --git a/net/minecraft/server/MinecraftServer.java b/net/minecraft/server/MinecraftServer.java -index 6230c08d001aebc119900906aa557247261985a3..c6ff3d2a2e22be141e7a7a6999162a8ff74fa94a 100644 +index e4d1f0ae66aec2cdc625e3140da094c99350687d..324f9d259c6e0fd814ffe11b62d07fb4d2197da3 100644 --- a/net/minecraft/server/MinecraftServer.java +++ b/net/minecraft/server/MinecraftServer.java @@ -425,6 +425,8 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop players = new java.util.ArrayList<>(this.players); // Folia - region threading @@ -453,7 +453,7 @@ index e4debb1e86f1f325dc17b709c5c9f3c4aa224b83..b78edaae1693c96b6b114348ef0c6198 return strings; } -@@ -1015,7 +1040,14 @@ public abstract class PlayerList { +@@ -1016,7 +1041,14 @@ public abstract class PlayerList { } public @Nullable ServerPlayer getPlayerByName(String username) { @@ -469,7 +469,7 @@ index e4debb1e86f1f325dc17b709c5c9f3c4aa224b83..b78edaae1693c96b6b114348ef0c6198 } public void broadcast(@Nullable Player except, double x, double y, double z, double radius, ResourceKey dimension, Packet packet) { -@@ -1352,7 +1384,13 @@ public abstract class PlayerList { +@@ -1353,7 +1385,13 @@ public abstract class PlayerList { } public @Nullable ServerPlayer getPlayer(UUID playerUUID) { @@ -485,7 +485,7 @@ index e4debb1e86f1f325dc17b709c5c9f3c4aa224b83..b78edaae1693c96b6b114348ef0c6198 public @Nullable ServerPlayer getPlayer(String name) { diff --git a/net/minecraft/server/waypoints/ServerWaypointManager.java b/net/minecraft/server/waypoints/ServerWaypointManager.java -index 9492698541bfe704a1075a8fb58a9d7624895e48..5d304c468c99322e5ef6ea1c597fbbb1831e4020 100644 +index d2c0b532200f274e44f18147d294dfe5d3f52d1d..55133071b97400dfb3ed6615c30006003de492c5 100644 --- a/net/minecraft/server/waypoints/ServerWaypointManager.java +++ b/net/minecraft/server/waypoints/ServerWaypointManager.java @@ -24,6 +24,11 @@ public class ServerWaypointManager implements WaypointManager= resultLimit) { diff --git a/net/minecraft/server/MinecraftServer.java b/net/minecraft/server/MinecraftServer.java -index c6ff3d2a2e22be141e7a7a6999162a8ff74fa94a..367759edd3bd76345bc8cb46342abfd9f37cb2e9 100644 +index 324f9d259c6e0fd814ffe11b62d07fb4d2197da3..9d334ed3307f3c4c82bb5300219a465408bf341a 100644 --- a/net/minecraft/server/MinecraftServer.java +++ b/net/minecraft/server/MinecraftServer.java @@ -1894,7 +1894,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop ReportedException makeReportedException(Exception exception, Packet packet, T packetListener) { @@ -46,7 +46,7 @@ index 760e7c579410432776ae8b1d6f70f0747da0460b..f29b639693615df29908a14716e394d7 fillCrashReport(reportedException.getReport(), packetListener, packet); return reportedException; diff --git a/net/minecraft/server/MinecraftServer.java b/net/minecraft/server/MinecraftServer.java -index 367759edd3bd76345bc8cb46342abfd9f37cb2e9..323c5557984bd1361a0bb2de9e446b2e6b2cb301 100644 +index 9d334ed3307f3c4c82bb5300219a465408bf341a..f2f57cfcd7739a951123c81f82cac1c2bbd3a3bd 100644 --- a/net/minecraft/server/MinecraftServer.java +++ b/net/minecraft/server/MinecraftServer.java @@ -1973,8 +1973,17 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop capturedBlockStates = new java.util.LinkedHashMap<>(); // Paper -@@ -524,7 +524,7 @@ public final class RegionizedWorldData { +@@ -527,7 +527,7 @@ public final class RegionizedWorldData { this.world = world; this.blockLevelTicks = new LevelTicks<>(world::isPositionTickingWithEntitiesLoaded, world, true); this.fluidLevelTicks = new LevelTicks<>(world::isPositionTickingWithEntitiesLoaded, world, false); diff --git a/lophine-server/minecraft-patches/features/0040-Global-Entities-Counter.patch b/lophine-server/minecraft-patches/features/0040-Global-Entities-Counter.patch index a93726f..05ef16e 100644 --- a/lophine-server/minecraft-patches/features/0040-Global-Entities-Counter.patch +++ b/lophine-server/minecraft-patches/features/0040-Global-Entities-Counter.patch @@ -5,22 +5,22 @@ Subject: [PATCH] Global Entities Counter diff --git a/io/papermc/paper/threadedregions/RegionizedWorldData.java b/io/papermc/paper/threadedregions/RegionizedWorldData.java -index 3b39b8f7ccb278cf910e3cc4e00da29790465a81..7cc41630a39c1e29840d70eee78473d06b7c11cd 100644 +index 1480bd04597001cd7c54e53ded46d7f75908a65a..c49be29a91422bea393f0acd6daa6ef948bd77ec 100644 --- a/io/papermc/paper/threadedregions/RegionizedWorldData.java +++ b/io/papermc/paper/threadedregions/RegionizedWorldData.java -@@ -520,6 +520,9 @@ public final class RegionizedWorldData { +@@ -521,6 +521,9 @@ public final class RegionizedWorldData { public final Map itemEntityMovementTrackerMap = new it.unimi.dsi.fastutil.objects.Object2ObjectLinkedOpenHashMap<>(); // Luminol end + public int uniqueId = -1; // Lophine - Global Entities Counter + public boolean underGlobalEntitiesCounter = false; // Lophine - Global Entities Counter + - public RegionizedWorldData(final ServerLevel world) { - this.world = world; - this.blockLevelTicks = new LevelTicks<>(world::isPositionTickingWithEntitiesLoaded, world, true); -@@ -529,6 +532,15 @@ public final class RegionizedWorldData { - this.wireHandler = new alternate.current.wire.WireHandler(world); + public final TickRegions.TickRegionData regionData; + + public RegionizedWorldData(final ServerLevel world, final TickRegions.TickRegionData regionData) { +@@ -533,6 +536,15 @@ public final class RegionizedWorldData { this.turbo = new io.papermc.paper.redstone.RedstoneWireTurbo((RedStoneWireBlock)Blocks.REDSTONE_WIRE); + this.regionData = regionData; + // Lophine start - Global Entities Counter + if (fun.bm.lophine.config.modules.experiment.GlobalEntitiesCounter.enabled) { diff --git a/lophine-server/minecraft-patches/features/0041-Add-null-check-in-RegionizedWorldData-conections.patch b/lophine-server/minecraft-patches/features/0041-Add-null-check-in-RegionizedWorldData-conections.patch index 25051df..faf0f83 100644 --- a/lophine-server/minecraft-patches/features/0041-Add-null-check-in-RegionizedWorldData-conections.patch +++ b/lophine-server/minecraft-patches/features/0041-Add-null-check-in-RegionizedWorldData-conections.patch @@ -6,10 +6,10 @@ Subject: [PATCH] Add null check in RegionizedWorldData >> conections some of our function patches will crash because of get null in conn.getPlayer(), then when we process player.chunkPosition() will get NPE, so we need to fix it. diff --git a/io/papermc/paper/threadedregions/RegionizedWorldData.java b/io/papermc/paper/threadedregions/RegionizedWorldData.java -index 7cc41630a39c1e29840d70eee78473d06b7c11cd..d0ab09a77953c1ccd309637ba80c47a37114f082 100644 +index c49be29a91422bea393f0acd6daa6ef948bd77ec..9b25483472a606168e6860e0a96f05b78d3e5b02 100644 --- a/io/papermc/paper/threadedregions/RegionizedWorldData.java +++ b/io/papermc/paper/threadedregions/RegionizedWorldData.java -@@ -230,14 +230,17 @@ public final class RegionizedWorldData { +@@ -229,14 +229,17 @@ public final class RegionizedWorldData { regionToData.get(CoordinateUtils.getChunkKey(pos.x >> chunkToRegionShift, pos.z >> chunkToRegionShift)).itemEntityMovementTrackerMap.put(key, tracker); } // Luminol end @@ -28,8 +28,8 @@ index 7cc41630a39c1e29840d70eee78473d06b7c11cd..d0ab09a77953c1ccd309637ba80c47a3 // entities for (final ServerPlayer player : from.localPlayers) { @@ -247,6 +250,13 @@ public final class RegionizedWorldData { - final RegionizedWorldData into = regionToData.get(CoordinateUtils.getChunkKey(pos.x >> chunkToRegionShift, pos.z >> chunkToRegionShift)); into.localPlayers.add(player); + player.getBukkitEntity().updateRegion(into); into.nearbyPlayers.addPlayer(player); + // Lophine start - we need to process the connection if player's connection is not processed, if connection.player is null, next tick will clean up it + final Connection conn = player.connection.connection; @@ -41,7 +41,7 @@ index 7cc41630a39c1e29840d70eee78473d06b7c11cd..d0ab09a77953c1ccd309637ba80c47a3 } for (final Entity entity : from.allEntities) { final ChunkPos pos = entity.chunkPosition(); -@@ -577,6 +587,7 @@ public final class RegionizedWorldData { +@@ -581,6 +591,7 @@ public final class RegionizedWorldData { private static void cleanUpConnection(final Connection conn) { // note: ALL connections HERE have a player final ServerPlayer player = conn.getPlayer(); diff --git a/lophine-server/paper-patches/features/0007-Leaves-Replay-Mod-API.patch b/lophine-server/paper-patches/features/0007-Leaves-Replay-Mod-API.patch index 0939e43..04a434d 100644 --- a/lophine-server/paper-patches/features/0007-Leaves-Replay-Mod-API.patch +++ b/lophine-server/paper-patches/features/0007-Leaves-Replay-Mod-API.patch @@ -21,7 +21,7 @@ index e1f456b31ffda9370b63e51f343847d6f9f62263..8a0f85241cc1530aacccc8b6ea24b9de } // Leaves end - skip bot diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index 3b179b11441a9295698fa55cc4a020b4c1652616..2326fda32f279aa391a98943984ccb78e69ac686 100644 +index 401f977483b6e809b9b10c601900e35110ae7396..030a9cf9a95fcea1410e825df76f817f73d4db78 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java @@ -306,6 +306,7 @@ public final class CraftServer implements Server { @@ -66,10 +66,10 @@ index 6867064de52d810f1fd3869463ae27868ed0fb07..69a0de762cfde089e8aaa6e6be79a8c8 // Special case complex part, since there is no extra entity type for them if (entity instanceof EnderDragonPart complexPart) { diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index aa06b3cbea3e50c6a2567fb6a98d499648617517..948cdbe2883628c4583e3c1228a51fd0d9227c2b 100644 +index a8838e45dd7d44c25442c14d49b53583f9f2a2d2..effb56daac89b7cc3106ed4b394a6c583b654735 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -@@ -2064,7 +2064,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player, PluginMessa +@@ -2091,7 +2091,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player, PluginMessa @Override public boolean canSee(Player player) {