diff --git a/common/src/main/java/dev/mrsnowy/teleport_commands/commands/back.java b/common/src/main/java/dev/mrsnowy/teleport_commands/commands/back.java index cf169f7..74c3fae 100644 --- a/common/src/main/java/dev/mrsnowy/teleport_commands/commands/back.java +++ b/common/src/main/java/dev/mrsnowy/teleport_commands/commands/back.java @@ -63,24 +63,21 @@ public class back { // ----- - // Gets the DeathLocation of the player and teleports the player to it private static void ToDeathLocation(ServerPlayer player, boolean safetyDisabled) throws Exception { + DeathLocation deathLocation = DeathLocationStorage + .getDeathLocation(player.getStringUUID()) + .orElse(null); - Optional optionalDeathLocation = DeathLocationStorage.getDeathLocation(player.getStringUUID()); - - if (optionalDeathLocation.isEmpty()) { - player.displayClientMessage(getTranslatedText("commands.teleport_commands.common.noLocation", player) - .withStyle(ChatFormatting.RED), true); + if (deathLocation == null) { + player.displayClientMessage(getTranslatedText("commands.teleport_commands.common.noLocation", player).withStyle(ChatFormatting.RED), true); return; } - DeathLocation deathLocation = optionalDeathLocation.get(); - // Get the world, otherwise give a warning and error message - Optional optionalWorld = deathLocation.getWorld(); + ServerLevel deathLocationWorld = deathLocation.getWorld().orElse(null); - if (optionalWorld.isEmpty()) { + if (deathLocationWorld == null) { Constants.LOGGER.warn("({}) Error while going back! \nCouldn't find a world with the id: \"{}\" \nAvailable worlds: {}", player.getName().getString(), deathLocation.getWorldString(), @@ -92,7 +89,6 @@ public class back { return; } - ServerLevel deathLocationWorld = optionalWorld.get(); BlockPos teleportBlockPos; // Sets the teleportBlockPos based on if it should do safety checking @@ -100,29 +96,28 @@ public class back { Optional safeBlockPos = getSafeBlockPos(deathLocation.getBlockPos(), deathLocationWorld); // Check if there is a safe BlockPos - if (safeBlockPos.isPresent()) { - teleportBlockPos = safeBlockPos.get(); - - } else { + if (safeBlockPos.isEmpty()) { // asks the player if they want to teleport anyway player.displayClientMessage( Component.empty() - .append(getTranslatedText("commands.teleport_commands.common.noSafeLocation", player) - .withStyle(ChatFormatting.RED, ChatFormatting.BOLD) - ) - .append("\n") - .append(getTranslatedText("commands.teleport_commands.common.safetyIsForLosers", player) - .withStyle(ChatFormatting.WHITE) - ) - .append("\n") - .append(getTranslatedText("commands.teleport_commands.common.forceTeleport", player) - .withStyle(ChatFormatting.DARK_AQUA, ChatFormatting.BOLD) - .withStyle(style -> style.withClickEvent(new ClickEvent.RunCommand("/back true"))) - ) - .append("\n"), false); + .append(getTranslatedText("commands.teleport_commands.common.noSafeLocation", player) + .withStyle(ChatFormatting.RED, ChatFormatting.BOLD) + ) + .append("\n") + .append(getTranslatedText("commands.teleport_commands.common.safetyIsForLosers", player) + .withStyle(ChatFormatting.WHITE) + ) + .append("\n") + .append(getTranslatedText("commands.teleport_commands.common.forceTeleport", player) + .withStyle(ChatFormatting.DARK_AQUA, ChatFormatting.BOLD) + .withStyle(style -> style.withClickEvent(new ClickEvent.RunCommand("/back true"))) + ) + .append("\n"), false); return; - } + } else { + teleportBlockPos = safeBlockPos.get(); + } } else { // no checking needed, just set it. teleportBlockPos = deathLocation.getBlockPos(); @@ -137,7 +132,7 @@ public class back { Vec3 teleportPos = new Vec3(teleportBlockPos.getX() + 0.5, teleportBlockPos.getY(), teleportBlockPos.getZ() + 0.5); player.displayClientMessage(getTranslatedText("commands.teleport_commands.back.go", player), true); - Teleporter(player, deathLocationWorld, teleportPos); + tools.Teleporter(player, deathLocationWorld, teleportPos); } } } diff --git a/common/src/main/java/dev/mrsnowy/teleport_commands/common/DeathLocation.java b/common/src/main/java/dev/mrsnowy/teleport_commands/common/DeathLocation.java index be7f083..9f45e6a 100644 --- a/common/src/main/java/dev/mrsnowy/teleport_commands/common/DeathLocation.java +++ b/common/src/main/java/dev/mrsnowy/teleport_commands/common/DeathLocation.java @@ -9,22 +9,16 @@ import java.util.Optional; import java.util.stream.StreamSupport; public class DeathLocation { - private final String UUID; private BlockPos pos; private String world; - public DeathLocation(String uuid, BlockPos pos, String world) { - this.UUID = uuid; + public DeathLocation(BlockPos pos, String world) { this.pos = pos; this.world = world; } // ----- - public String getUUID() { - return UUID; - } - public BlockPos getBlockPos() { return pos; } diff --git a/common/src/main/java/dev/mrsnowy/teleport_commands/common/NamedLocation.java b/common/src/main/java/dev/mrsnowy/teleport_commands/common/NamedLocation.java index c2687c2..9af35ab 100644 --- a/common/src/main/java/dev/mrsnowy/teleport_commands/common/NamedLocation.java +++ b/common/src/main/java/dev/mrsnowy/teleport_commands/common/NamedLocation.java @@ -56,7 +56,6 @@ public class NamedLocation { return StreamSupport.stream( TeleportCommands.SERVER.getAllLevels().spliterator(), false ) // woa, this looks silly .filter(level -> Objects.equals( level.dimension().location().toString(), this.world )) .findFirst(); - } // ----- diff --git a/common/src/main/java/dev/mrsnowy/teleport_commands/storage/DeathLocationStorage.java b/common/src/main/java/dev/mrsnowy/teleport_commands/storage/DeathLocationStorage.java index fa44848..774a6c5 100644 --- a/common/src/main/java/dev/mrsnowy/teleport_commands/storage/DeathLocationStorage.java +++ b/common/src/main/java/dev/mrsnowy/teleport_commands/storage/DeathLocationStorage.java @@ -3,34 +3,29 @@ package dev.mrsnowy.teleport_commands.storage; import dev.mrsnowy.teleport_commands.common.DeathLocation; import net.minecraft.core.BlockPos; -import java.util.ArrayList; -import java.util.Objects; +import java.util.HashMap; import java.util.Optional; public class DeathLocationStorage { - private static final ArrayList deathLocations = new ArrayList<>(); + private static final HashMap deathLocations = new HashMap<>(); // filters the deathLocationList and finds the one with the matching player uuid (if there is one) public static Optional getDeathLocation(String uuid) { - return deathLocations.stream() - .filter( deathLocation -> Objects.equals( deathLocation.getUUID(), uuid )) - .findFirst(); + return Optional.ofNullable(deathLocations.get(uuid)); } // updates the deathLocation of a player, if there is no existing entry it will create a new deathLocation. public static void setDeathLocation(String uuid, BlockPos pos, String world) { - Optional OptionalDeathLocation = getDeathLocation(uuid); - if (OptionalDeathLocation.isEmpty()) { - // create a new deathLocation - DeathLocation deathLocation = new DeathLocation(uuid, pos, world); - deathLocations.add(deathLocation); - } else { + if (deathLocations.containsKey(uuid)) { // modify existing deathLocation - DeathLocation deathLocation = OptionalDeathLocation.get(); - + DeathLocation deathLocation = deathLocations.get(uuid); deathLocation.setBlockPos(pos); deathLocation.setWorld(world); + } else { + // create a new deathLocation + DeathLocation deathLocation = new DeathLocation(pos, world); + deathLocations.put(uuid, deathLocation); } }