From b7097d4a64609fc964c8ea53ef20198714a2f675 Mon Sep 17 00:00:00 2001 From: Martin Sulikowski Date: Wed, 12 Feb 2025 20:32:23 +0100 Subject: [PATCH 1/4] fixed bypass check order, typo in AfkPlaceholderSetup, fixed placeholder formatting --- .../core/feature/afk/AfkCommand.java | 12 ++++----- ...derSetup.java => AfkPlaceholderSetup.java} | 4 +-- .../core/feature/afk/AfkServiceImpl.java | 9 +++---- .../eternalcode/core/feature/afk/AfkTask.java | 4 +-- .../feature/afk/messages/PLAfkMessages.java | 6 +++-- .../RandomTeleportSafeLocationService.java | 25 +++++++++++-------- .../RandomTeleportServiceImpl.java | 12 +++++++-- 7 files changed, 42 insertions(+), 30 deletions(-) rename eternalcore-core/src/main/java/com/eternalcode/core/feature/afk/{AftPlaceholderSetup.java => AfkPlaceholderSetup.java} (95%) diff --git a/eternalcore-core/src/main/java/com/eternalcode/core/feature/afk/AfkCommand.java b/eternalcore-core/src/main/java/com/eternalcode/core/feature/afk/AfkCommand.java index dad13df6d..a6bcc359f 100644 --- a/eternalcore-core/src/main/java/com/eternalcode/core/feature/afk/AfkCommand.java +++ b/eternalcore-core/src/main/java/com/eternalcode/core/feature/afk/AfkCommand.java @@ -38,10 +38,15 @@ class AfkCommand { } @Execute - @DescriptionDocs(description = "Marks you as AFK, if player has eternalcore.afk.bypass permission, eternalcore will be ignore afk delay") + @DescriptionDocs(description = "Marks you as AFK, if player has eternalcore.afk.bypass permission, eternalcore will ignore afk delay") void execute(@Context Player player) { UUID uuid = player.getUniqueId(); + if (player.hasPermission("eternalcore.afk.bypass")) { + this.afkService.switchAfk(uuid, AfkReason.COMMAND); + return; + } + if (this.delay.hasDelay(uuid)) { Duration time = this.delay.getDurationToExpire(uuid); @@ -56,11 +61,6 @@ void execute(@Context Player player) { } this.afkService.switchAfk(uuid, AfkReason.COMMAND); - - if (player.hasPermission("eternalcore.afk.bypass")) { - return; - } - this.delay.markDelay(uuid, this.pluginConfiguration.afk.getAfkDelay()); } } diff --git a/eternalcore-core/src/main/java/com/eternalcode/core/feature/afk/AftPlaceholderSetup.java b/eternalcore-core/src/main/java/com/eternalcode/core/feature/afk/AfkPlaceholderSetup.java similarity index 95% rename from eternalcore-core/src/main/java/com/eternalcode/core/feature/afk/AftPlaceholderSetup.java rename to eternalcore-core/src/main/java/com/eternalcode/core/feature/afk/AfkPlaceholderSetup.java index d5f167fb4..ac71db826 100644 --- a/eternalcore-core/src/main/java/com/eternalcode/core/feature/afk/AftPlaceholderSetup.java +++ b/eternalcore-core/src/main/java/com/eternalcode/core/feature/afk/AfkPlaceholderSetup.java @@ -14,12 +14,12 @@ import java.util.Optional; @Controller -class AftPlaceholderSetup { +class AfkPlaceholderSetup { private final TranslationManager translationManager; @Inject - AftPlaceholderSetup(TranslationManager translationManager) { + AfkPlaceholderSetup(TranslationManager translationManager) { this.translationManager = translationManager; } diff --git a/eternalcore-core/src/main/java/com/eternalcode/core/feature/afk/AfkServiceImpl.java b/eternalcore-core/src/main/java/com/eternalcode/core/feature/afk/AfkServiceImpl.java index 5228142ad..9a64b28d6 100644 --- a/eternalcore-core/src/main/java/com/eternalcode/core/feature/afk/AfkServiceImpl.java +++ b/eternalcore-core/src/main/java/com/eternalcode/core/feature/afk/AfkServiceImpl.java @@ -12,7 +12,7 @@ import java.time.Duration; import java.time.Instant; -import java.util.HashMap; +import java.util.concurrent.ConcurrentHashMap; import java.util.Map; import java.util.UUID; @@ -24,9 +24,9 @@ class AfkServiceImpl implements AfkService { private final UserManager userManager; private final EventCaller eventCaller; - private final Map afkByPlayer = new HashMap<>(); - private final Map interactionsCount = new HashMap<>(); - private final Map lastInteraction = new HashMap<>(); + private final Map afkByPlayer = new ConcurrentHashMap<>(); + private final Map interactionsCount = new ConcurrentHashMap<>(); + private final Map lastInteraction = new ConcurrentHashMap<>(); @Inject AfkServiceImpl(AfkSettings afkSettings, NoticeService noticeService, UserManager userManager, EventCaller eventCaller) { @@ -126,5 +126,4 @@ private void sendAfkNotification(UUID playerUniqueId, boolean afk) { .placeholder("{PLAYER}", this.userManager.getUser(playerUniqueId).map(User::getName)) .send(); } - } diff --git a/eternalcore-core/src/main/java/com/eternalcode/core/feature/afk/AfkTask.java b/eternalcore-core/src/main/java/com/eternalcode/core/feature/afk/AfkTask.java index 8d9621acc..f888a80f9 100644 --- a/eternalcore-core/src/main/java/com/eternalcode/core/feature/afk/AfkTask.java +++ b/eternalcore-core/src/main/java/com/eternalcode/core/feature/afk/AfkTask.java @@ -3,12 +3,11 @@ import com.eternalcode.core.feature.vanish.VanishService; import com.eternalcode.core.injector.annotations.Inject; import com.eternalcode.core.injector.annotations.component.Task; +import java.util.UUID; import java.util.concurrent.TimeUnit; import org.bukkit.Server; import org.bukkit.entity.Player; -import java.util.UUID; - @Task(delay = 1L, period = 1L, unit = TimeUnit.MINUTES) class AfkTask implements Runnable { @@ -55,5 +54,4 @@ void markAllInactivePlayers() { } } } - } diff --git a/eternalcore-core/src/main/java/com/eternalcode/core/feature/afk/messages/PLAfkMessages.java b/eternalcore-core/src/main/java/com/eternalcode/core/feature/afk/messages/PLAfkMessages.java index 7163327f2..1762f2277 100644 --- a/eternalcore-core/src/main/java/com/eternalcode/core/feature/afk/messages/PLAfkMessages.java +++ b/eternalcore-core/src/main/java/com/eternalcode/core/feature/afk/messages/PLAfkMessages.java @@ -13,16 +13,18 @@ public class PLAfkMessages implements AfkMessages { @Description("# {PLAYER} - Gracz ") public Notice afkOn = Notice.chat("{PLAYER} jest AFK!"); + + @Description("# {PLAYER} - Gracz ") public Notice afkOff = Notice.chat("{PLAYER} już nie jest AFK!"); @Description({" ", "# {TIME} - Czas po którym gracz może użyć komendy"}) public Notice afkDelay = Notice.chat("Możesz użyć tej komendy dopiero po {TIME}!"); @Description({" "}) - public String afkKickReason = "Zostałeś wyrzucone z powodu braku aktywności!"; + public String afkKickReason = "Zostałeś wyrzucony z powodu braku aktywności!"; @Description({" ", "# Używane w %eternalcore_afk_formatted% do wskazania statusu AFK"}) public String afkEnabledPlaceholder = "AFK"; - public String afkDisabledPlaceholder = ""; + public String afkDisabledPlaceholder = ""; } diff --git a/eternalcore-core/src/main/java/com/eternalcode/core/feature/randomteleport/RandomTeleportSafeLocationService.java b/eternalcore-core/src/main/java/com/eternalcode/core/feature/randomteleport/RandomTeleportSafeLocationService.java index bbb3be754..e85caaea7 100644 --- a/eternalcore-core/src/main/java/com/eternalcode/core/feature/randomteleport/RandomTeleportSafeLocationService.java +++ b/eternalcore-core/src/main/java/com/eternalcode/core/feature/randomteleport/RandomTeleportSafeLocationService.java @@ -20,7 +20,6 @@ @Service class RandomTeleportSafeLocationService { - private static final int DEFAULT_NETHER_HEIGHT = 125; private static final int NETHER_MAX_HEIGHT = 127; private final RandomTeleportSettings randomTeleportSettings; @@ -37,14 +36,11 @@ class RandomTeleportSafeLocationService { } public CompletableFuture getSafeRandomLocation(World world, RandomTeleportRadius radius, int attemptCount) { - if (attemptCount < 0) { + if (attemptCount <= 0) { return CompletableFuture.failedFuture(new RuntimeException("Cannot find safe location")); } - boolean noneWorld = this.locationsConfiguration.spawn.isNoneWorld(); - Location spawnLocation = !noneWorld - ? PositionAdapter.convert(this.locationsConfiguration.spawn) - : world.getSpawnLocation(); + Location spawnLocation = getSpawnLocation(world); int spawnX = spawnLocation.getBlockX(); int spawnZ = spawnLocation.getBlockZ(); @@ -55,10 +51,6 @@ public CompletableFuture getSafeRandomLocation(World world, RandomTele return PaperLib.getChunkAtAsync(new Location(world, randomX, 100, randomZ)).thenCompose(chunk -> { int randomY = chunk.getWorld().getHighestBlockYAt(randomX, randomZ); - if (world.getEnvironment() == World.Environment.NETHER) { - randomY = this.random.nextInt(DEFAULT_NETHER_HEIGHT); - } - RandomTeleportHeightRange heightRange = this.randomTeleportSettings.heightRange(); int minHeight = heightRange.getMinY(); int maxHeight = heightRange.getMaxY() - 1; @@ -74,6 +66,19 @@ public CompletableFuture getSafeRandomLocation(World world, RandomTele }); } + private Location getSpawnLocation(World targetWorld) { + if (this.locationsConfiguration.spawn.isNoneWorld()) { + return targetWorld.getSpawnLocation(); + } + + Location configSpawn = PositionAdapter.convert(this.locationsConfiguration.spawn); + if (configSpawn.getWorld().getName().equals(targetWorld.getName())) { + return configSpawn; + } + + return targetWorld.getSpawnLocation(); + } + private boolean isSafeLocation(Chunk chunk, Location location) { if (location.getWorld() == null) { return false; diff --git a/eternalcore-core/src/main/java/com/eternalcode/core/feature/randomteleport/RandomTeleportServiceImpl.java b/eternalcore-core/src/main/java/com/eternalcode/core/feature/randomteleport/RandomTeleportServiceImpl.java index 8f2260f19..5ba2b7c52 100644 --- a/eternalcore-core/src/main/java/com/eternalcode/core/feature/randomteleport/RandomTeleportServiceImpl.java +++ b/eternalcore-core/src/main/java/com/eternalcode/core/feature/randomteleport/RandomTeleportServiceImpl.java @@ -87,7 +87,15 @@ public CompletableFuture getSafeRandomLocationInWorldBorder(World worl private RandomTeleportRadius getWorldBorderRadius(World world) { WorldBorder worldBorder = world.getWorldBorder(); - int borderRadius = (int) (worldBorder.getSize() / 2); - return RandomTeleportRadius.of(-borderRadius, borderRadius, -borderRadius, borderRadius); + double size = worldBorder.getSize(); + double centerX = worldBorder.getCenter().getX(); + double centerZ = worldBorder.getCenter().getZ(); + + int minX = (int) (centerX - size/2); + int maxX = (int) (centerX + size/2); + int minZ = (int) (centerZ - size/2); + int maxZ = (int) (centerZ + size/2); + + return RandomTeleportRadius.of(minX, maxX, minZ, maxZ); } } From 3ca9dffa506a55d16c3e54a4218c38d67ddddf18 Mon Sep 17 00:00:00 2001 From: Martin Sulikowski Date: Wed, 12 Feb 2025 20:41:56 +0100 Subject: [PATCH 2/4] Add constant for permission. --- .../java/com/eternalcode/core/feature/afk/AfkCommand.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/eternalcore-core/src/main/java/com/eternalcode/core/feature/afk/AfkCommand.java b/eternalcore-core/src/main/java/com/eternalcode/core/feature/afk/AfkCommand.java index a6bcc359f..834e2447f 100644 --- a/eternalcore-core/src/main/java/com/eternalcode/core/feature/afk/AfkCommand.java +++ b/eternalcore-core/src/main/java/com/eternalcode/core/feature/afk/AfkCommand.java @@ -24,6 +24,8 @@ ) class AfkCommand { + private static final String AFK_BYPASS_PERMISSION = "eternalcore.afk.bypass"; + private final NoticeService noticeService; private final PluginConfiguration pluginConfiguration; private final AfkService afkService; @@ -42,7 +44,7 @@ class AfkCommand { void execute(@Context Player player) { UUID uuid = player.getUniqueId(); - if (player.hasPermission("eternalcore.afk.bypass")) { + if (player.hasPermission(AFK_BYPASS_PERMISSION)) { this.afkService.switchAfk(uuid, AfkReason.COMMAND); return; } From 291156dcd5b7fe11f7fbd8d10198a56373665b16 Mon Sep 17 00:00:00 2001 From: Martin Sulikowski Date: Thu, 13 Feb 2025 16:16:08 +0100 Subject: [PATCH 3/4] revert rtp changes (my bad) --- .../RandomTeleportSafeLocationService.java | 25 ++++++++----------- .../RandomTeleportServiceImpl.java | 12 ++------- 2 files changed, 12 insertions(+), 25 deletions(-) diff --git a/eternalcore-core/src/main/java/com/eternalcode/core/feature/randomteleport/RandomTeleportSafeLocationService.java b/eternalcore-core/src/main/java/com/eternalcode/core/feature/randomteleport/RandomTeleportSafeLocationService.java index e85caaea7..bbb3be754 100644 --- a/eternalcore-core/src/main/java/com/eternalcode/core/feature/randomteleport/RandomTeleportSafeLocationService.java +++ b/eternalcore-core/src/main/java/com/eternalcode/core/feature/randomteleport/RandomTeleportSafeLocationService.java @@ -20,6 +20,7 @@ @Service class RandomTeleportSafeLocationService { + private static final int DEFAULT_NETHER_HEIGHT = 125; private static final int NETHER_MAX_HEIGHT = 127; private final RandomTeleportSettings randomTeleportSettings; @@ -36,11 +37,14 @@ class RandomTeleportSafeLocationService { } public CompletableFuture getSafeRandomLocation(World world, RandomTeleportRadius radius, int attemptCount) { - if (attemptCount <= 0) { + if (attemptCount < 0) { return CompletableFuture.failedFuture(new RuntimeException("Cannot find safe location")); } - Location spawnLocation = getSpawnLocation(world); + boolean noneWorld = this.locationsConfiguration.spawn.isNoneWorld(); + Location spawnLocation = !noneWorld + ? PositionAdapter.convert(this.locationsConfiguration.spawn) + : world.getSpawnLocation(); int spawnX = spawnLocation.getBlockX(); int spawnZ = spawnLocation.getBlockZ(); @@ -51,6 +55,10 @@ public CompletableFuture getSafeRandomLocation(World world, RandomTele return PaperLib.getChunkAtAsync(new Location(world, randomX, 100, randomZ)).thenCompose(chunk -> { int randomY = chunk.getWorld().getHighestBlockYAt(randomX, randomZ); + if (world.getEnvironment() == World.Environment.NETHER) { + randomY = this.random.nextInt(DEFAULT_NETHER_HEIGHT); + } + RandomTeleportHeightRange heightRange = this.randomTeleportSettings.heightRange(); int minHeight = heightRange.getMinY(); int maxHeight = heightRange.getMaxY() - 1; @@ -66,19 +74,6 @@ public CompletableFuture getSafeRandomLocation(World world, RandomTele }); } - private Location getSpawnLocation(World targetWorld) { - if (this.locationsConfiguration.spawn.isNoneWorld()) { - return targetWorld.getSpawnLocation(); - } - - Location configSpawn = PositionAdapter.convert(this.locationsConfiguration.spawn); - if (configSpawn.getWorld().getName().equals(targetWorld.getName())) { - return configSpawn; - } - - return targetWorld.getSpawnLocation(); - } - private boolean isSafeLocation(Chunk chunk, Location location) { if (location.getWorld() == null) { return false; diff --git a/eternalcore-core/src/main/java/com/eternalcode/core/feature/randomteleport/RandomTeleportServiceImpl.java b/eternalcore-core/src/main/java/com/eternalcode/core/feature/randomteleport/RandomTeleportServiceImpl.java index 5ba2b7c52..8f2260f19 100644 --- a/eternalcore-core/src/main/java/com/eternalcode/core/feature/randomteleport/RandomTeleportServiceImpl.java +++ b/eternalcore-core/src/main/java/com/eternalcode/core/feature/randomteleport/RandomTeleportServiceImpl.java @@ -87,15 +87,7 @@ public CompletableFuture getSafeRandomLocationInWorldBorder(World worl private RandomTeleportRadius getWorldBorderRadius(World world) { WorldBorder worldBorder = world.getWorldBorder(); - double size = worldBorder.getSize(); - double centerX = worldBorder.getCenter().getX(); - double centerZ = worldBorder.getCenter().getZ(); - - int minX = (int) (centerX - size/2); - int maxX = (int) (centerX + size/2); - int minZ = (int) (centerZ - size/2); - int maxZ = (int) (centerZ + size/2); - - return RandomTeleportRadius.of(minX, maxX, minZ, maxZ); + int borderRadius = (int) (worldBorder.getSize() / 2); + return RandomTeleportRadius.of(-borderRadius, borderRadius, -borderRadius, borderRadius); } } From 3c624c89be41835df1f521365b779a43fbab5c79 Mon Sep 17 00:00:00 2001 From: Martin Sulikowski Date: Fri, 14 Feb 2025 22:44:28 +0100 Subject: [PATCH 4/4] Fix. --- .../com/eternalcode/core/feature/afk/AfkServiceImpl.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/eternalcore-core/src/main/java/com/eternalcode/core/feature/afk/AfkServiceImpl.java b/eternalcore-core/src/main/java/com/eternalcode/core/feature/afk/AfkServiceImpl.java index 9a64b28d6..007edcdf5 100644 --- a/eternalcore-core/src/main/java/com/eternalcode/core/feature/afk/AfkServiceImpl.java +++ b/eternalcore-core/src/main/java/com/eternalcode/core/feature/afk/AfkServiceImpl.java @@ -7,12 +7,12 @@ import com.eternalcode.core.notice.NoticeService; import com.eternalcode.core.user.User; import com.eternalcode.core.user.UserManager; +import java.util.HashMap; import java.util.Optional; import org.jetbrains.annotations.ApiStatus; import java.time.Duration; import java.time.Instant; -import java.util.concurrent.ConcurrentHashMap; import java.util.Map; import java.util.UUID; @@ -24,9 +24,9 @@ class AfkServiceImpl implements AfkService { private final UserManager userManager; private final EventCaller eventCaller; - private final Map afkByPlayer = new ConcurrentHashMap<>(); - private final Map interactionsCount = new ConcurrentHashMap<>(); - private final Map lastInteraction = new ConcurrentHashMap<>(); + private final Map afkByPlayer = new HashMap<>(); + private final Map interactionsCount = new HashMap<>(); + private final Map lastInteraction = new HashMap<>(); @Inject AfkServiceImpl(AfkSettings afkSettings, NoticeService noticeService, UserManager userManager, EventCaller eventCaller) {