From f99e9a953be212cf75a129340741edb1e46487a8 Mon Sep 17 00:00:00 2001 From: Piotr Zych <77621271+P1otrulla@users.noreply.github.com> Date: Sun, 26 Jul 2026 19:11:35 +0200 Subject: [PATCH 1/5] fix --- .../core/feature/home/HomeService.java | 1 - .../core/feature/home/HomeController.java | 23 +++++++++++++++++++ .../core/feature/home/HomeManager.java | 18 +++++++++++++++ .../core/feature/teleport/TeleportTask.java | 9 ++++++++ 4 files changed, 50 insertions(+), 1 deletion(-) create mode 100644 eternalcore-core/src/main/java/com/eternalcode/core/feature/home/HomeController.java diff --git a/eternalcore-api/src/main/java/com/eternalcode/core/feature/home/HomeService.java b/eternalcore-api/src/main/java/com/eternalcode/core/feature/home/HomeService.java index 911b5b6fa..94e8131db 100644 --- a/eternalcore-api/src/main/java/com/eternalcode/core/feature/home/HomeService.java +++ b/eternalcore-api/src/main/java/com/eternalcode/core/feature/home/HomeService.java @@ -1,7 +1,6 @@ package com.eternalcode.core.feature.home; import java.util.Collection; -import java.util.Map; import java.util.Optional; import java.util.UUID; import org.bukkit.Location; diff --git a/eternalcore-core/src/main/java/com/eternalcode/core/feature/home/HomeController.java b/eternalcore-core/src/main/java/com/eternalcode/core/feature/home/HomeController.java new file mode 100644 index 000000000..f5581ba5d --- /dev/null +++ b/eternalcore-core/src/main/java/com/eternalcode/core/feature/home/HomeController.java @@ -0,0 +1,23 @@ +package com.eternalcode.core.feature.home; + +import com.eternalcode.core.injector.annotations.Inject; +import com.eternalcode.core.injector.annotations.component.Controller; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.world.WorldUnloadEvent; + +@Controller +public class HomeController implements Listener { + + private final HomeManager homeManager; + + @Inject + public HomeController(HomeManager homeManager) { + this.homeManager = homeManager; + } + + @EventHandler + void onWorldDelete(WorldUnloadEvent event) { + this.homeManager.removeHomesInWorld(event.getWorld().getName()); + } +} diff --git a/eternalcore-core/src/main/java/com/eternalcode/core/feature/home/HomeManager.java b/eternalcore-core/src/main/java/com/eternalcode/core/feature/home/HomeManager.java index c96a929bb..55ea5c95c 100644 --- a/eternalcore-core/src/main/java/com/eternalcode/core/feature/home/HomeManager.java +++ b/eternalcore-core/src/main/java/com/eternalcode/core/feature/home/HomeManager.java @@ -10,7 +10,9 @@ import java.util.Collection; import java.util.Collections; import java.util.HashMap; +import java.util.Iterator; import java.util.Map; +import java.util.Map.Entry; import java.util.Optional; import java.util.UUID; import java.util.stream.Stream; @@ -168,4 +170,20 @@ public int getHomeLimit(Player player) { .max(Integer::compareTo) .orElse(this.homesSettings.defaultLimit()); } + + public void removeHomesInWorld(String worldName) { + for (Map homes : this.userHomes.values()) { + Iterator> iterator = homes.entrySet().iterator(); + + while (iterator.hasNext()) { + Map.Entry entry = iterator.next(); + Home home = entry.getValue(); + + if (home.getLocation().getWorld().getName().equals(worldName)) { + iterator.remove(); + this.repository.deleteHome(home.getOwner(), entry.getKey()); + } + } + } + } } diff --git a/eternalcore-core/src/main/java/com/eternalcode/core/feature/teleport/TeleportTask.java b/eternalcore-core/src/main/java/com/eternalcode/core/feature/teleport/TeleportTask.java index 5dfefc629..248482d47 100644 --- a/eternalcore-core/src/main/java/com/eternalcode/core/feature/teleport/TeleportTask.java +++ b/eternalcore-core/src/main/java/com/eternalcode/core/feature/teleport/TeleportTask.java @@ -1,5 +1,6 @@ package com.eternalcode.core.feature.teleport; +import com.eternalcode.commons.bukkit.position.Position; import com.eternalcode.commons.bukkit.position.PositionAdapter; import com.eternalcode.core.feature.teleport.settings.TeleportSettings; import com.eternalcode.core.injector.annotations.Inject; @@ -14,6 +15,7 @@ import java.util.concurrent.TimeUnit; import org.bukkit.Location; import org.bukkit.Server; +import org.bukkit.World; import org.bukkit.entity.Player; @Task(delay = 1L, period = 1L, unit = TimeUnit.SECONDS) @@ -58,6 +60,13 @@ public void run() { continue; } + Position position = teleport.getDestinationLocation(); + World world = this.server.getWorld(position.world()); + + if (world == null) { + continue; + } + if (this.teleportSettings.movementCancelsTeleport() && this.hasPlayerMovedDuringTeleport(player, teleport)) { this.teleportTaskService.removeTeleport(uuid); teleport.completeResult(TeleportResult.MOVED_DURING_TELEPORT); From a877be095e65d5568131b0d62d6bfd61c4b3cf3b Mon Sep 17 00:00:00 2001 From: Piotr Zych <77621271+P1otrulla@users.noreply.github.com> Date: Sun, 26 Jul 2026 19:16:45 +0200 Subject: [PATCH 2/5] =?UTF-8?q?=F0=9F=A5=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/feature/home/HomeController.java | 23 ------------------- 1 file changed, 23 deletions(-) delete mode 100644 eternalcore-core/src/main/java/com/eternalcode/core/feature/home/HomeController.java diff --git a/eternalcore-core/src/main/java/com/eternalcode/core/feature/home/HomeController.java b/eternalcore-core/src/main/java/com/eternalcode/core/feature/home/HomeController.java deleted file mode 100644 index f5581ba5d..000000000 --- a/eternalcore-core/src/main/java/com/eternalcode/core/feature/home/HomeController.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.eternalcode.core.feature.home; - -import com.eternalcode.core.injector.annotations.Inject; -import com.eternalcode.core.injector.annotations.component.Controller; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.world.WorldUnloadEvent; - -@Controller -public class HomeController implements Listener { - - private final HomeManager homeManager; - - @Inject - public HomeController(HomeManager homeManager) { - this.homeManager = homeManager; - } - - @EventHandler - void onWorldDelete(WorldUnloadEvent event) { - this.homeManager.removeHomesInWorld(event.getWorld().getName()); - } -} From 1eae3258f24e720730f331525e95a3e6a04b5289 Mon Sep 17 00:00:00 2001 From: Piotr Zych <77621271+P1otrulla@users.noreply.github.com> Date: Sun, 26 Jul 2026 19:18:03 +0200 Subject: [PATCH 3/5] =?UTF-8?q?=F0=9F=A5=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/feature/home/HomeManager.java | 18 ------------------ 1 file changed, 18 deletions(-) diff --git a/eternalcore-core/src/main/java/com/eternalcode/core/feature/home/HomeManager.java b/eternalcore-core/src/main/java/com/eternalcode/core/feature/home/HomeManager.java index 55ea5c95c..c96a929bb 100644 --- a/eternalcore-core/src/main/java/com/eternalcode/core/feature/home/HomeManager.java +++ b/eternalcore-core/src/main/java/com/eternalcode/core/feature/home/HomeManager.java @@ -10,9 +10,7 @@ import java.util.Collection; import java.util.Collections; import java.util.HashMap; -import java.util.Iterator; import java.util.Map; -import java.util.Map.Entry; import java.util.Optional; import java.util.UUID; import java.util.stream.Stream; @@ -170,20 +168,4 @@ public int getHomeLimit(Player player) { .max(Integer::compareTo) .orElse(this.homesSettings.defaultLimit()); } - - public void removeHomesInWorld(String worldName) { - for (Map homes : this.userHomes.values()) { - Iterator> iterator = homes.entrySet().iterator(); - - while (iterator.hasNext()) { - Map.Entry entry = iterator.next(); - Home home = entry.getValue(); - - if (home.getLocation().getWorld().getName().equals(worldName)) { - iterator.remove(); - this.repository.deleteHome(home.getOwner(), entry.getKey()); - } - } - } - } } From 804e4fe430057cf90592d6b952591cac4536e018 Mon Sep 17 00:00:00 2001 From: Piotr Zych <77621271+P1otrulla@users.noreply.github.com> Date: Sun, 26 Jul 2026 20:39:07 +0200 Subject: [PATCH 4/5] Add a missing remove method --- .../java/com/eternalcode/core/feature/teleport/TeleportTask.java | 1 + 1 file changed, 1 insertion(+) diff --git a/eternalcore-core/src/main/java/com/eternalcode/core/feature/teleport/TeleportTask.java b/eternalcore-core/src/main/java/com/eternalcode/core/feature/teleport/TeleportTask.java index 248482d47..52979943a 100644 --- a/eternalcore-core/src/main/java/com/eternalcode/core/feature/teleport/TeleportTask.java +++ b/eternalcore-core/src/main/java/com/eternalcode/core/feature/teleport/TeleportTask.java @@ -64,6 +64,7 @@ public void run() { World world = this.server.getWorld(position.world()); if (world == null) { + this.teleportTaskService.removeTeleport(uuid); continue; } From 8321a6852c497d67e7cb1be562ce83a2843ab9fb Mon Sep 17 00:00:00 2001 From: Piotr Zych <77621271+P1otrulla@users.noreply.github.com> Date: Sun, 26 Jul 2026 22:02:26 +0200 Subject: [PATCH 5/5] follow's Martin sug --- .../eternalcode/core/feature/teleport/TeleportResult.java | 4 +++- .../eternalcode/core/feature/teleport/TeleportTask.java | 7 ++++--- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/eternalcore-core/src/main/java/com/eternalcode/core/feature/teleport/TeleportResult.java b/eternalcore-core/src/main/java/com/eternalcode/core/feature/teleport/TeleportResult.java index 37ccec9a7..d00366a06 100644 --- a/eternalcore-core/src/main/java/com/eternalcode/core/feature/teleport/TeleportResult.java +++ b/eternalcore-core/src/main/java/com/eternalcode/core/feature/teleport/TeleportResult.java @@ -4,6 +4,8 @@ public enum TeleportResult { SUCCESS, FAILED, - MOVED_DURING_TELEPORT + MOVED_DURING_TELEPORT, + PLAYER_OFFLINE, + WORLD_NOT_FOUND } diff --git a/eternalcore-core/src/main/java/com/eternalcode/core/feature/teleport/TeleportTask.java b/eternalcore-core/src/main/java/com/eternalcode/core/feature/teleport/TeleportTask.java index 52979943a..192a46100 100644 --- a/eternalcore-core/src/main/java/com/eternalcode/core/feature/teleport/TeleportTask.java +++ b/eternalcore-core/src/main/java/com/eternalcode/core/feature/teleport/TeleportTask.java @@ -57,14 +57,15 @@ public void run() { if (player == null) { this.teleportTaskService.removeTeleport(uuid); + teleport.completeResult(TeleportResult.PLAYER_OFFLINE); continue; } - Position position = teleport.getDestinationLocation(); - World world = this.server.getWorld(position.world()); + Position destination = teleport.getDestinationLocation(); - if (world == null) { + if (this.server.getWorld(destination.world()) == null) { this.teleportTaskService.removeTeleport(uuid); + teleport.completeResult(TeleportResult.WORLD_NOT_FOUND); continue; }