diff --git a/gradle.properties b/gradle.properties index 35c054f..98f6887 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,10 +1,10 @@ group=fun.bm.lophine version=1.21.8-R0.1-SNAPSHOT mcVersion=1.21.8 -release=2 +release=1 # 0 for skip release, 1 for pre-release, 2 for release -luminolRef=e324edacf6651633674a0abce91ffbd290943dd5 +luminolRef=9c26aef77646059a4c2f8e099ecd8fbb2a790dcc org.gradle.configuration-cache=true org.gradle.caching=true diff --git a/lophine-server/minecraft-patches/features/0002-Add-config-to-enable-cross-region-damage-trace.patch b/lophine-server/minecraft-patches/features/0002-Add-config-to-enable-cross-region-damage-trace.patch index 5260461..7561604 100644 --- a/lophine-server/minecraft-patches/features/0002-Add-config-to-enable-cross-region-damage-trace.patch +++ b/lophine-server/minecraft-patches/features/0002-Add-config-to-enable-cross-region-damage-trace.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add config to enable cross region damage trace diff --git a/net/minecraft/server/level/ServerPlayer.java b/net/minecraft/server/level/ServerPlayer.java -index 11e6197dec541b28733715f0d7eaa4c7b834d632..de1263404395c28209234a556347284fa557f81c 100644 +index fc34f1a104b81ae7a8c4d04b94b4e9943b4e5c33..a4512980da36744a37936521781a45e0a5c5c430 100644 --- a/net/minecraft/server/level/ServerPlayer.java +++ b/net/minecraft/server/level/ServerPlayer.java -@@ -1345,6 +1345,13 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc +@@ -1346,6 +1346,13 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc this.awardStat(Stats.ENTITY_KILLED_BY.get(killCredit.getType())); killCredit.awardKillScore(this, cause); this.createWitherRose(killCredit); @@ -22,7 +22,7 @@ index 11e6197dec541b28733715f0d7eaa4c7b834d632..de1263404395c28209234a556347284f } this.level().broadcastEntityEvent(this, (byte)3); -@@ -1368,6 +1375,24 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc +@@ -1369,6 +1376,24 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc } // Leaves end - exp fix 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 2918125..b248c77 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 e1842ab8f20271a8b20ab8462b09a4745a612a9a..8405157ec35a443e238fa6866772c839621d73d7 100644 +index ed0966b0576d2d90dead0f770811ccea9b3d69c7..3e541007a004e4e032df5c82afe3b1e9b3e121dd 100644 --- a/io/papermc/paper/threadedregions/RegionizedServer.java +++ b/io/papermc/paper/threadedregions/RegionizedServer.java -@@ -299,6 +299,11 @@ public final class RegionizedServer { +@@ -315,6 +315,11 @@ public final class RegionizedServer { this.randomWalk(); */ ++this.tickCount; @@ -20,7 +20,7 @@ index e1842ab8f20271a8b20ab8462b09a4745a612a9a..8405157ec35a443e238fa6866772c839 // 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 -@@ -322,6 +327,13 @@ public final class RegionizedServer { +@@ -338,6 +343,13 @@ public final class RegionizedServer { this.globalTick(world, tickCount); } @@ -34,7 +34,7 @@ index e1842ab8f20271a8b20ab8462b09a4745a612a9a..8405157ec35a443e238fa6866772c839 // tick connections this.tickConnections(); -@@ -455,7 +467,7 @@ public final class RegionizedServer { +@@ -471,7 +483,7 @@ public final class RegionizedServer { } private void tickTime(final ServerLevel world, final int tickCount) { @@ -44,7 +44,7 @@ index e1842ab8f20271a8b20ab8462b09a4745a612a9a..8405157ec35a443e238fa6866772c839 world.setDayTime(world.levelData.getDayTime() + (long)tickCount); } diff --git a/io/papermc/paper/threadedregions/TickRegionScheduler.java b/io/papermc/paper/threadedregions/TickRegionScheduler.java -index c485d5b3ba95f2a969bdf0dab9654ac284976f8d..b957585cf7cf7f845e20f59c7b355722880f3b4e 100644 +index 74603dff963500e9bea417d667ebfe8c7b06096a..1906eef3f3f1b1a1de818f35874d46924186edf2 100644 --- a/io/papermc/paper/threadedregions/TickRegionScheduler.java +++ b/io/papermc/paper/threadedregions/TickRegionScheduler.java @@ -31,8 +31,8 @@ public final class TickRegionScheduler { @@ -58,7 +58,7 @@ index c485d5b3ba95f2a969bdf0dab9654ac284976f8d..b957585cf7cf7f845e20f59c7b355722 // Folia start - watchdog public static final FoliaWatchdogThread WATCHDOG_THREAD = new FoliaWatchdogThread(); -@@ -394,8 +394,23 @@ public final class TickRegionScheduler { +@@ -399,8 +399,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 c485d5b3ba95f2a969bdf0dab9654ac284976f8d..b957585cf7cf7f845e20f59c7b355722 if (!this.tryMarkTicking()) { if (!this.cancelled.get()) { -@@ -435,6 +450,11 @@ public final class TickRegionScheduler { +@@ -440,6 +455,11 @@ public final class TickRegionScheduler { try { // next start isn't updated until the end of this tick this.tickRegion(tickCount, tickStart, scheduledEnd); @@ -114,7 +114,7 @@ index 22d211bee83e3ef34d6ac81dd89c0e73924bee90..1fb359073342a657e9e493403263b56b 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 75027e73859c955a54034640f905cb5d91a6a2f4..2f4970242c754cfba8ff5656a63af07d9d0a723c 100644 +index 56d193c287357e3a34dea52f3b1ff1429d18fa5a..b3cc3b05771049d29e6932955140932741f2e6ab 100644 --- a/net/minecraft/server/MinecraftServer.java +++ b/net/minecraft/server/MinecraftServer.java @@ -267,7 +267,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop 0) { this.invulnerableTime--; } -@@ -1435,6 +1437,13 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc +@@ -1436,6 +1438,13 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc if (this.isInvulnerableTo(level, damageSource)) { return false; } else { diff --git a/lophine-server/minecraft-patches/features/0023-Leaves-Fakeplayer.patch b/lophine-server/minecraft-patches/features/0023-Leaves-Fakeplayer.patch index 9ca642d..c07dbb1 100644 --- a/lophine-server/minecraft-patches/features/0023-Leaves-Fakeplayer.patch +++ b/lophine-server/minecraft-patches/features/0023-Leaves-Fakeplayer.patch @@ -33,7 +33,7 @@ index 66ec0424a46dcd49cf44467357d80b1a2d84d3b2..58694e28b3ff85ef038fe2ada2672e6d private DisconnectionDetails disconnectionDetails; private boolean encrypted; diff --git a/net/minecraft/server/MinecraftServer.java b/net/minecraft/server/MinecraftServer.java -index b156b5c635f931a3d4abc0584591f90476d011a6..81726e5782d25ff35a2bea8820a62786e46148b1 100644 +index 6ef0459423fe9d6c79ef7614e7522278817319fb..380ae7b3048508534939ca8ad606689ee569e51c 100644 --- a/net/minecraft/server/MinecraftServer.java +++ b/net/minecraft/server/MinecraftServer.java @@ -347,6 +347,8 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop 0) --this.spawnInvulnerableTime; // Lophine - spawn invulnerable time -@@ -2029,6 +2034,11 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc +@@ -2030,6 +2035,11 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc this.lastSentHealth = -1.0F; this.lastSentFood = -1; this.teleportSpectators(teleportTransition, serverLevel); @@ -375,7 +375,7 @@ index 44f0e3a675c612e9ca2bc40cc3898bdbca0f6718..4b2dba8b30b72fb3acc00957b3e19d6f // CraftBukkit start org.bukkit.event.player.PlayerChangedWorldEvent changeEvent = new org.bukkit.event.player.PlayerChangedWorldEvent(this.getBukkitEntity(), serverLevel.getWorld()); this.level().getCraftServer().getPluginManager().callEvent(changeEvent); -@@ -3577,4 +3587,31 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc +@@ -3578,4 +3588,31 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc return (org.bukkit.craftbukkit.entity.CraftPlayer) super.getBukkitEntity(); } // CraftBukkit end @@ -425,7 +425,7 @@ index 144a2644c15f276f02bb3be859dc5d05a677ac55..c6a89e8936cffa49b3de153ed3c40e3c boolean stateLocked = true; try { this.stateLock.lock(); // Paper - Fix GameProfileCache concurrency GameProfileCache.GameProfileInfo gameProfileInfo = this.profilesByName.get(string); diff --git a/net/minecraft/server/players/PlayerList.java b/net/minecraft/server/players/PlayerList.java -index 8e2775e873c92beed6a0e4e8ce1304ab8ca6e8d1..580f114fd99b017403c61e994d0c947d00e5115d 100644 +index ccfc119ca680c7d9d3d08df84299f6b908fc12b5..30b85a4e4ea4dd5961334a2e0a157646c66f01a6 100644 --- a/net/minecraft/server/players/PlayerList.java +++ b/net/minecraft/server/players/PlayerList.java @@ -425,6 +425,19 @@ public abstract class PlayerList { @@ -448,7 +448,7 @@ index 8e2775e873c92beed6a0e4e8ce1304ab8ca6e8d1..580f114fd99b017403c61e994d0c947d final net.kyori.adventure.text.Component jm = playerJoinEvent.joinMessage(); if (jm != null && !jm.equals(net.kyori.adventure.text.Component.empty())) { // Paper - Adventure -@@ -922,6 +935,12 @@ public abstract class PlayerList { +@@ -923,6 +936,12 @@ public abstract class PlayerList { } // Paper end - Add PlayerPostRespawnEvent @@ -461,7 +461,7 @@ index 8e2775e873c92beed6a0e4e8ce1304ab8ca6e8d1..580f114fd99b017403c61e994d0c947d // CraftBukkit end return serverPlayer; -@@ -1026,11 +1045,16 @@ public abstract class PlayerList { +@@ -1027,11 +1046,16 @@ public abstract class PlayerList { public String[] getPlayerNamesArray() { List players = new java.util.ArrayList<>(this.players); // Folia - region threading @@ -479,7 +479,7 @@ index 8e2775e873c92beed6a0e4e8ce1304ab8ca6e8d1..580f114fd99b017403c61e994d0c947d return strings; } -@@ -1141,7 +1165,14 @@ public abstract class PlayerList { +@@ -1142,7 +1166,14 @@ public abstract class PlayerList { @Nullable public ServerPlayer getPlayerByName(String username) { @@ -495,7 +495,7 @@ index 8e2775e873c92beed6a0e4e8ce1304ab8ca6e8d1..580f114fd99b017403c61e994d0c947d } public void broadcast(@Nullable Player except, double x, double y, double z, double radius, ResourceKey dimension, Packet packet) { -@@ -1482,7 +1513,13 @@ public abstract class PlayerList { +@@ -1483,7 +1514,13 @@ public abstract class PlayerList { @Nullable public ServerPlayer getPlayer(UUID playerUUID) { diff --git a/lophine-server/minecraft-patches/features/0028-Leaves-Xaero-Map-Protocol.patch b/lophine-server/minecraft-patches/features/0028-Leaves-Xaero-Map-Protocol.patch index 786785a..d54c47c 100644 --- a/lophine-server/minecraft-patches/features/0028-Leaves-Xaero-Map-Protocol.patch +++ b/lophine-server/minecraft-patches/features/0028-Leaves-Xaero-Map-Protocol.patch @@ -8,10 +8,10 @@ As a part of : Leaves (https://github.com/LeavesMC/Leaves) Licensed under: GPL-3.0 (https://www.gnu.org/licenses/gpl-3.0.html) diff --git a/net/minecraft/server/players/PlayerList.java b/net/minecraft/server/players/PlayerList.java -index 580f114fd99b017403c61e994d0c947d00e5115d..11c1eb6995ec3aa896815efa59477096c39089d1 100644 +index 30b85a4e4ea4dd5961334a2e0a157646c66f01a6..242badf4c0ad084926c89c3554b2ee7d74021c47 100644 --- a/net/minecraft/server/players/PlayerList.java +++ b/net/minecraft/server/players/PlayerList.java -@@ -1247,6 +1247,7 @@ public abstract class PlayerList { +@@ -1248,6 +1248,7 @@ public abstract class PlayerList { player.connection.send(new ClientboundInitializeBorderPacket(worldBorder)); player.connection.send(new ClientboundSetTimePacket(level.getGameTime(), level.getDayTime(), level.getGameRules().getBoolean(GameRules.RULE_DAYLIGHT))); player.connection.send(new ClientboundSetDefaultSpawnPositionPacket(level.getSharedSpawnPos(), level.getSharedSpawnAngle())); diff --git a/lophine-server/minecraft-patches/features/0032-Leaves-Replay-Mod-API.patch b/lophine-server/minecraft-patches/features/0032-Leaves-Replay-Mod-API.patch index 5fb0f7b..089bbc8 100644 --- a/lophine-server/minecraft-patches/features/0032-Leaves-Replay-Mod-API.patch +++ b/lophine-server/minecraft-patches/features/0032-Leaves-Replay-Mod-API.patch @@ -84,10 +84,10 @@ index 514f8fbdeb776087608665c35de95294aadf5cf0..b75772897cabc3e7c59301d451685378 players.add(serverPlayer1); if (players.size() >= resultLimit) { diff --git a/net/minecraft/server/MinecraftServer.java b/net/minecraft/server/MinecraftServer.java -index 81726e5782d25ff35a2bea8820a62786e46148b1..3c94631f468f4ee1b46de9981c17171e5901d745 100644 +index 380ae7b3048508534939ca8ad606689ee569e51c..27f9049b85ffda7e43f70527e6581adf79d2328d 100644 --- a/net/minecraft/server/MinecraftServer.java +++ b/net/minecraft/server/MinecraftServer.java -@@ -1800,7 +1800,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop(world::isPositionTickingWithEntitiesLoaded, world, true); this.fluidLevelTicks = new LevelTicks<>(world::isPositionTickingWithEntitiesLoaded, world, false); diff --git a/lophine-server/minecraft-patches/features/0041-Global-Entities-Counter.patch b/lophine-server/minecraft-patches/features/0041-Global-Entities-Counter.patch index c2ebe88..63b4fb2 100644 --- a/lophine-server/minecraft-patches/features/0041-Global-Entities-Counter.patch +++ b/lophine-server/minecraft-patches/features/0041-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 29a85585716e9c993a325d9d7830f5d8a305f34d..b0e98f704393b8db9e773c38623f5dfc87e951c2 100644 --- a/io/papermc/paper/threadedregions/RegionizedWorldData.java +++ b/io/papermc/paper/threadedregions/RegionizedWorldData.java -@@ -520,6 +520,9 @@ public final class RegionizedWorldData { +@@ -525,6 +525,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 TickRegionData regionData; + + public RegionizedWorldData(final ServerLevel world, final TickRegionData regionData) { +@@ -537,6 +540,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/0042-Add-null-check-in-RegionizedWorldData-conections.patch b/lophine-server/minecraft-patches/features/0042-Add-null-check-in-RegionizedWorldData-conections.patch index 25051df..5c2f156 100644 --- a/lophine-server/minecraft-patches/features/0042-Add-null-check-in-RegionizedWorldData-conections.patch +++ b/lophine-server/minecraft-patches/features/0042-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 b0e98f704393b8db9e773c38623f5dfc87e951c2..44ea4866e453d6bbbfca71f6d5683867196128c1 100644 --- a/io/papermc/paper/threadedregions/RegionizedWorldData.java +++ b/io/papermc/paper/threadedregions/RegionizedWorldData.java -@@ -230,14 +230,17 @@ public final class RegionizedWorldData { +@@ -233,14 +233,17 @@ public final class RegionizedWorldData { regionToData.get(CoordinateUtils.getChunkKey(pos.x >> chunkToRegionShift, pos.z >> chunkToRegionShift)).itemEntityMovementTrackerMap.put(key, tracker); } // Luminol end @@ -27,9 +27,9 @@ 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)); +@@ -251,6 +254,13 @@ public final class RegionizedWorldData { 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 { +@@ -585,6 +595,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/0006-Leaves-Replay-Mod-API.patch b/lophine-server/paper-patches/features/0006-Leaves-Replay-Mod-API.patch index ec5a2b5..0e140d2 100644 --- a/lophine-server/paper-patches/features/0006-Leaves-Replay-Mod-API.patch +++ b/lophine-server/paper-patches/features/0006-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 0a96721797b9bbc643f68677bbb1d10c3c89e815..7e2d870dc8b77c58270542f8916b9c9b88588809 100644 +index d6557bc6c525a925a730f1e477bbfaa7b5a1388f..910c053291c5339000f70847c132a38a716a3986 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java @@ -317,6 +317,7 @@ public final class CraftServer implements Server { @@ -66,10 +66,10 @@ index 8eb5d014d9ed688ffebaffb4ce0bb40896961a04..634bd74449c6991ad72330d10f42ddbb // 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 7883b7973570b5f275a03c6aac4d3b4392e7fa6e..18d066c605f8027d9b1170b64ef1428fb969631b 100644 +index 80a025a777462900a5970da56bc48a1486f00db5..591e943b6e6ce26c23557e4964bd44d38601609b 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -@@ -2214,7 +2214,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player, PluginMessa +@@ -2255,7 +2255,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player, PluginMessa @Override public boolean canSee(Player player) {