diff --git a/README.md b/README.md index c57477d..2e0f37d 100644 --- a/README.md +++ b/README.md @@ -10,8 +10,15 @@ Purple = End This mod utilizes vanilla scoreboard teams to color nicknames. To opt-out of detection you can join any other team. -[CurseForge](https://legacy.curseforge.com/minecraft/mc-mods/dimensional-tracker), [Modrinth](https://modrinth.com/mod/dimensionaltracker) +## [CurseForge](https://legacy.curseforge.com/minecraft/mc-mods/dimensional-tracker), [Modrinth](https://modrinth.com/mod/dimensionaltracker) [Discord](https://discord.gg/UY4nhvUzaK) +### Why this mod instead of datapacks? +Because of how datapacks work they should check dimensions every tick. It's okay for singleplayer, but on servers it can cause lag. +In testing, I saw that it can take up to 30% of MSPT for 10 players: +![img.png](datapack.webp) + +### Example of how it works using Immersive Portals + ![image.webp](image.webp) \ No newline at end of file diff --git a/datapack.webp b/datapack.webp new file mode 100644 index 0000000..6f423c6 Binary files /dev/null and b/datapack.webp differ diff --git a/gradle.properties b/gradle.properties index 345562f..04effa9 100644 --- a/gradle.properties +++ b/gradle.properties @@ -9,7 +9,7 @@ yarn_mappings=1.20.2+build.1 loader_version=0.14.22 # Mod Properties -mod_version=1.0.0 +mod_version=1.1.0 maven_group=xyz.nikitacartes archives_base_name=dimensionalTracker diff --git a/src/main/java/xyz/nikitacartes/dimensionaltracker/DimensionalTracker.java b/src/main/java/xyz/nikitacartes/dimensionaltracker/DimensionalTracker.java index 4de3094..061ed49 100644 --- a/src/main/java/xyz/nikitacartes/dimensionaltracker/DimensionalTracker.java +++ b/src/main/java/xyz/nikitacartes/dimensionaltracker/DimensionalTracker.java @@ -36,7 +36,9 @@ private void onServerTick(MinecraftServer server) { if (playerCache.isEmpty()) { return; } - playerCache.forEach(playerName -> { + LinkedHashSet temp = new LinkedHashSet<>(playerCache); + playerCache.clear(); + temp.forEach(playerName -> { ServerPlayerEntity player = server.getPlayerManager().getPlayer(playerName); if (player != null) { if (server.getScoreboard().getTeam(player.getEntityName()) == null) { @@ -54,7 +56,6 @@ private void onServerTick(MinecraftServer server) { } } }); - playerCache.clear(); } private void onServerStarted(MinecraftServer minecraftServer) {