diff --git a/CHANGELOG.md b/CHANGELOG.md index 1fe0ccb..15ee365 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Adding comments to alot of code (W.I.P) - Made it so the DeathLocation is only kept in memory - Improved the Storage classes and functions (I'm doing proper java, yipie) +- Better error handling for command suggestions +- Added hover effects for warp and homes text (W.I.P) ### [v1.2.2] - Handled a case where the client (geyser) will return the language as uppercase instead of lowercase. diff --git a/common/src/main/java/dev/mrsnowy/teleport_commands/TeleportCommands.java b/common/src/main/java/dev/mrsnowy/teleport_commands/TeleportCommands.java index d1eabce..d1268df 100644 --- a/common/src/main/java/dev/mrsnowy/teleport_commands/TeleportCommands.java +++ b/common/src/main/java/dev/mrsnowy/teleport_commands/TeleportCommands.java @@ -1,10 +1,9 @@ package dev.mrsnowy.teleport_commands; import com.google.gson.*; -import com.mojang.datafixers.util.Pair; import dev.mrsnowy.teleport_commands.storage.StorageManager; import dev.mrsnowy.teleport_commands.commands.*; -import dev.mrsnowy.teleport_commands.storage.backListStorage; +import dev.mrsnowy.teleport_commands.storage.DeathLocationStorage; import net.minecraft.commands.Commands; import net.minecraft.server.MinecraftServer; import net.minecraft.server.level.ServerPlayer; @@ -63,19 +62,9 @@ public class TeleportCommands { String world = player.serverLevel().dimension().location().toString(); String uuid = player.getStringUUID(); - backListStorage.backList backList = backListStorage.backList; - backList.setDeathLocation(uuid, pos, world); + DeathLocationStorage.setDeathLocation(uuid, pos, world); } -// private static StorageManager.StorageClass loadStorage() throws Exception { -// // double check that the storage file is intact -// StorageInit(); -// -// String jsonContent = Files.readString(STORAGE_FILE); -// Gson gson = new GsonBuilder().create(); -// -// } - // cleans and updates Storage to the newest "version". This is painful private static StorageClass storageValidator() { LOGGER.info("Cleaning and updating Storage!"); 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 78f5b61..da06b09 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 @@ -6,7 +6,7 @@ import dev.mrsnowy.teleport_commands.TeleportCommands; import java.util.*; -import dev.mrsnowy.teleport_commands.storage.backListStorage; +import dev.mrsnowy.teleport_commands.storage.DeathLocationStorage; import dev.mrsnowy.teleport_commands.utils.tools; import net.minecraft.ChatFormatting; import net.minecraft.commands.Commands; @@ -60,17 +60,17 @@ public class back { private static void ToDeathLocation(ServerPlayer player, boolean safetyDisabled) { - backListStorage.backList backList = backListStorage.backList; + DeathLocationStorage.backList backList = DeathLocationStorage.backList; // get the deathLocation - Optional optionalDeathLocation = backList.getDeathLocation( player.getStringUUID() ); + Optional optionalDeathLocation = backList.getDeathLocation( player.getStringUUID() ); if (optionalDeathLocation.isEmpty()) { player.displayClientMessage(getTranslatedText("commands.teleport_commands.common.noLocation", player) .withStyle(ChatFormatting.RED), true); return; } - backListStorage.deathLocationClass deathLocation = optionalDeathLocation.get(); + DeathLocationStorage.deathLocationClass deathLocation = optionalDeathLocation.get(); // get the world Optional OptionalWorld = tools.getWorld( deathLocation.world ); diff --git a/common/src/main/java/dev/mrsnowy/teleport_commands/commands/warp.java b/common/src/main/java/dev/mrsnowy/teleport_commands/commands/warp.java index 3e99a58..4ae0863 100644 --- a/common/src/main/java/dev/mrsnowy/teleport_commands/commands/warp.java +++ b/common/src/main/java/dev/mrsnowy/teleport_commands/commands/warp.java @@ -4,18 +4,24 @@ import com.mojang.brigadier.arguments.StringArgumentType; import com.mojang.datafixers.util.Pair; import dev.mrsnowy.teleport_commands.TeleportCommands; import dev.mrsnowy.teleport_commands.storage.StorageManager; +import dev.mrsnowy.teleport_commands.storage.classes.NamedLocation; import dev.mrsnowy.teleport_commands.suggestions.WarpSuggestionProvider; import net.minecraft.ChatFormatting; import net.minecraft.commands.Commands; import net.minecraft.core.BlockPos; import net.minecraft.network.chat.ClickEvent; import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.HoverEvent; import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.phys.Vec3; +import org.apache.logging.log4j.core.config.builder.api.ComponentBuilder; +import javax.swing.text.html.Option; +import java.util.ArrayList; import java.util.List; import java.util.Objects; +import java.util.Optional; import static dev.mrsnowy.teleport_commands.storage.StorageManager.*; import static dev.mrsnowy.teleport_commands.utils.tools.Teleporter; @@ -160,12 +166,12 @@ public class warp { private static void GoToWarp(ServerPlayer player, String warpName) throws Exception { warpName = warpName.toLowerCase(); - List WarpStorage = getWarpStorage().getSecond(); + List WarpStorage = getWarpStorage().getSecond(); boolean foundWorld = false; // find correct warp - for (StorageClass.NamedLocation currentWarp : WarpStorage) { + for (NamedLocation currentWarp : WarpStorage) { if (Objects.equals(currentWarp.name, warpName)) { // find correct world @@ -196,27 +202,16 @@ public class warp { private static void DeleteWarp(ServerPlayer player, String warpName) throws Exception { warpName = warpName.toLowerCase(); - Pair> storages = getWarpStorage(); - StorageClass storage = storages.getFirst(); - List WarpStorage = storages.getSecond(); + // get the existing warp + Optional optionalWarp = STORAGE.getWarp(warpName); - boolean deletedWarp = false; + if (optionalWarp.isPresent()) { + STORAGE.removeWarp(warpName); //todo! maybe improve double getting of warp? - // get correct warp - for (StorageManager.StorageClass.NamedLocation currentWarp : WarpStorage) { - if (Objects.equals(currentWarp.name, warpName)){ - // delete the warp - WarpStorage.remove(currentWarp); - StorageSaver(); - - deletedWarp = true; - player.displayClientMessage(getTranslatedText("commands.teleport_commands.warp.delete", player), true); - break; - } - } - - if (!deletedWarp) { - player.displayClientMessage(getTranslatedText("commands.teleport_commands.warp.notFound", player).withStyle(ChatFormatting.RED), true); + } else { + // the warp is not found + player.displayClientMessage(getTranslatedText("commands.teleport_commands.warp.notFound", player) + .withStyle(ChatFormatting.RED), true); } } @@ -224,83 +219,128 @@ public class warp { warpName = warpName.toLowerCase(); newWarpName = newWarpName.toLowerCase(); - Pair> storages = getWarpStorage(); - StorageClass storage = storages.getFirst(); - List WarpStorage = storages.getSecond(); - - StorageManager.StorageClass.NamedLocation homeToRename = null; - - boolean newWarpNotFound = true; - boolean WarpRenamed = false; + // get the existing warp + Optional warp = STORAGE.getWarp(warpName); - // check for duplicates - for (StorageClass.NamedLocation currentWarp : WarpStorage) { - if (Objects.equals(currentWarp.name, newWarpName)) { - newWarpNotFound = false; - break; - } - } + if (warp.isPresent()) { + NamedLocation homeToRename = warp.get(); - if (newWarpNotFound) { - // get correct warp and rename - for (StorageManager.StorageClass.NamedLocation currentWarp : WarpStorage) { - if (Objects.equals(currentWarp.name, warpName)){ + // check if there is no existing warp with the new name + if (STORAGE.getWarp(newWarpName).isEmpty()) { - currentWarp.name = newWarpName; - StorageSaver(); - WarpRenamed = true; - player.displayClientMessage(getTranslatedText("commands.teleport_commands.warp.rename", player), true); + // set the new name + homeToRename.setName(newWarpName); + player.displayClientMessage(getTranslatedText("commands.teleport_commands.warp.rename", player), true); + } else { - break; - } + // there is already a warp with the new name + player.displayClientMessage(getTranslatedText("commands.teleport_commands.warp.renameExists", player).withStyle(ChatFormatting.RED), true); } - if (!WarpRenamed) { - player.displayClientMessage(getTranslatedText("commands.teleport_commands.warp.notFound", player).withStyle(ChatFormatting.RED), true); - } } else { - player.displayClientMessage(getTranslatedText("commands.teleport_commands.warp.renameExists", player).withStyle(ChatFormatting.RED), true); + // the warp is not found + player.displayClientMessage(getTranslatedText("commands.teleport_commands.warp.notFound", player).withStyle(ChatFormatting.RED), true); } } private static void PrintWarps(ServerPlayer player) throws Exception { - List WarpStorage = getWarpStorage().getSecond(); + ArrayList warps = STORAGE.getWarps(); - if (WarpStorage.isEmpty()) { + if (warps.isEmpty()) { player.displayClientMessage(getTranslatedText("commands.teleport_commands.warp.homeless", player).withStyle(ChatFormatting.AQUA), true); } else { player.displayClientMessage(getTranslatedText("commands.teleport_commands.warps.warps", player).withStyle(ChatFormatting.YELLOW, ChatFormatting.BOLD) .append("\n"), false); - for (StorageManager.StorageClass.NamedLocation currentWarp : WarpStorage) { + for (NamedLocation currentWarp : warps) { - String name = String.format(" - %s", currentWarp.name); - String coords = String.format("[X%d Y%d Z%d]", currentWarp.x, currentWarp.y, currentWarp.z); - String dimension = String.format(" [%s]", currentWarp.world); + String name = String.format(" - %s", currentWarp.getName()); + String coords = String.format("[X%d Y%d Z%d]", currentWarp.getX(), currentWarp.getY(), currentWarp.getZ()); + String dimension = String.format(" [%s]", currentWarp.getWorldString()); player.displayClientMessage(Component.literal(name).withStyle(ChatFormatting.AQUA), false); player.displayClientMessage(Component.literal(" | ").withStyle(ChatFormatting.AQUA) - .append(Component.literal(coords).withStyle(ChatFormatting.LIGHT_PURPLE).withStyle(style -> style.withClickEvent(new ClickEvent(ClickEvent.Action.COPY_TO_CLIPBOARD, String.format("X%d Y%d Z%d", currentWarp.x, currentWarp.y, currentWarp.z))))) - .append(Component.literal(dimension).withStyle(ChatFormatting.DARK_PURPLE).withStyle(style -> style.withClickEvent(new ClickEvent(ClickEvent.Action.COPY_TO_CLIPBOARD, currentWarp.world)))), + .append(Component.literal(coords) + .withStyle(ChatFormatting.LIGHT_PURPLE) + .withStyle(style -> style + .withClickEvent(new ClickEvent( + ClickEvent.Action.COPY_TO_CLIPBOARD, + String.format("X%d Y%d Z%d", currentWarp.getX(), currentWarp.getY(), currentWarp.getZ()) + )) + ) + //todo! test the hover + .withStyle(style -> style + .withHoverEvent(new HoverEvent( + HoverEvent.Action.SHOW_TEXT, getTranslatedText("commands.teleport_commands.common.hoverCopy", player) + )) + ) + ) + .append(Component.literal(dimension) + .withStyle(ChatFormatting.DARK_PURPLE) + .withStyle(style -> style + .withClickEvent(new ClickEvent( + ClickEvent.Action.COPY_TO_CLIPBOARD, + currentWarp.getWorldString() + )) + ) + .withStyle(style -> style + .withHoverEvent(new HoverEvent( + HoverEvent.Action.SHOW_TEXT, getTranslatedText("commands.teleport_commands.common.hoverCopy", player) + )) + ) + ), false ); if (player.hasPermissions(4)) { player.displayClientMessage(Component.literal(" | ").withStyle(ChatFormatting.AQUA) - .append(getTranslatedText("commands.teleport_commands.common.tp", player).withStyle(ChatFormatting.GREEN).withStyle(style -> style.withClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, String.format("/warp %s", currentWarp.name))))) + .append(getTranslatedText("commands.teleport_commands.common.tp", player) + .withStyle(ChatFormatting.GREEN) + .withStyle(style -> style + .withClickEvent(new ClickEvent( + ClickEvent.Action.RUN_COMMAND, + String.format("/warp %s", currentWarp.getName()) + )) + ) + ) .append(" ") - .append(getTranslatedText("commands.teleport_commands.common.rename", player).withStyle(ChatFormatting.BLUE).withStyle(style -> style.withClickEvent(new ClickEvent(ClickEvent.Action.SUGGEST_COMMAND, String.format("/renamewarp %s ", currentWarp.name))))) + .append(getTranslatedText("commands.teleport_commands.common.rename", player) + .withStyle(ChatFormatting.BLUE) + .withStyle(style -> style + .withClickEvent(new ClickEvent( + ClickEvent.Action.SUGGEST_COMMAND, + String.format("/renamewarp %s ", currentWarp.getName())) + ) + ) + ) .append(" ") - .append(getTranslatedText("commands.teleport_commands.common.delete", player).withStyle(ChatFormatting.RED).withStyle(style -> style.withClickEvent(new ClickEvent(ClickEvent.Action.SUGGEST_COMMAND, String.format("/delwarp %s", currentWarp.name))))) + .append(getTranslatedText("commands.teleport_commands.common.delete", player) + .withStyle(ChatFormatting.RED) + .withStyle(style -> style + .withClickEvent(new ClickEvent( + ClickEvent.Action.SUGGEST_COMMAND, + String.format("/delwarp %s", currentWarp.getName())) + ) + ) + ) .append("\n"), false ); } else { - player.displayClientMessage(Component.literal(" | ").withStyle(ChatFormatting.AQUA) - .append(getTranslatedText("commands.teleport_commands.common.tp", player).withStyle(ChatFormatting.GREEN).withStyle(style -> style.withClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, String.format("/warp %s", currentWarp.name))))) + player.displayClientMessage(Component.literal(" | ") + .withStyle(ChatFormatting.AQUA) + .append(getTranslatedText("commands.teleport_commands.common.tp", player) + .withStyle(ChatFormatting.GREEN) + .withStyle(style -> style + .withClickEvent(new ClickEvent( + ClickEvent.Action.RUN_COMMAND, + String.format("/warp %s", currentWarp.getName())) + ) + ) + ) .append("\n"), false ); diff --git a/common/src/main/java/dev/mrsnowy/teleport_commands/commands/worldspawn.java b/common/src/main/java/dev/mrsnowy/teleport_commands/commands/worldspawn.java index b75cada..7a213f7 100644 --- a/common/src/main/java/dev/mrsnowy/teleport_commands/commands/worldspawn.java +++ b/common/src/main/java/dev/mrsnowy/teleport_commands/commands/worldspawn.java @@ -58,6 +58,7 @@ public class worldspawn { } private static void toWorldSpawn(ServerPlayer player, boolean safetyDisabled) throws NullPointerException { + // todo! maybe make this more fool proof? ServerLevel world = TeleportCommands.SERVER.getLevel(OVERWORLD); BlockPos worldSpawn = Objects.requireNonNull(world,"Overworld cannot be null").getSharedSpawnPos(); 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 new file mode 100644 index 0000000..82d24bb --- /dev/null +++ b/common/src/main/java/dev/mrsnowy/teleport_commands/storage/DeathLocationStorage.java @@ -0,0 +1,36 @@ +package dev.mrsnowy.teleport_commands.storage; + +import dev.mrsnowy.teleport_commands.storage.classes.DeathLocation; +import net.minecraft.core.BlockPos; + +import java.util.ArrayList; +import java.util.Objects; +import java.util.Optional; + +public class DeathLocationStorage { + private static final ArrayList deathLocations = new ArrayList<>(); + + // 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(); + } + + // 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 { + // modify existing deathLocation + DeathLocation deathLocation = OptionalDeathLocation.get(); + + deathLocation.setBlockPos(pos); + deathLocation.setWorld(world); + } + } +} \ No newline at end of file diff --git a/common/src/main/java/dev/mrsnowy/teleport_commands/storage/StorageManager.java b/common/src/main/java/dev/mrsnowy/teleport_commands/storage/StorageManager.java index a887580..9f67df1 100644 --- a/common/src/main/java/dev/mrsnowy/teleport_commands/storage/StorageManager.java +++ b/common/src/main/java/dev/mrsnowy/teleport_commands/storage/StorageManager.java @@ -3,6 +3,8 @@ package dev.mrsnowy.teleport_commands.storage; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import dev.mrsnowy.teleport_commands.TeleportCommands; +import dev.mrsnowy.teleport_commands.storage.classes.NamedLocation; +import dev.mrsnowy.teleport_commands.storage.classes.Player; import net.minecraft.core.BlockPos; import java.io.File; @@ -10,7 +12,6 @@ import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.StandardOpenOption; import java.util.ArrayList; -import java.util.List; import java.util.Objects; import java.util.Optional; @@ -47,180 +48,86 @@ public class StorageManager { } } -// public static StorageClass.Player PlayerAdd(String UUID) { -// -// // try to find an exising storage for this player -// Optional playerStorage = STORAGE.Players.stream() -// .filter(player -> Objects.equals(UUID, player.UUID)) -// .findFirst(); -// -// if (playerStorage.isEmpty()) { -// StorageClass.Player newPlayer = new StorageClass.Player(UUID); // TODO! verify that it creates the player proper -// -// List playerList = STORAGE.Players; -// playerList.add(newPlayer); -// -//// StorageSaver(); // no need to save since no data is actually set yet! -// TeleportCommands.LOGGER.info("Player '{}' added successfully in storage!", UUID); -// return newPlayer; -// } else { -// TeleportCommands.LOGGER.info("Player '{}' already exists!", UUID); -// return playerStorage.get(); -// } -// } - public static void StorageSaver() throws Exception { Gson gson = new GsonBuilder().create(); byte[] json = gson.toJson( STORAGE ).getBytes(); - TeleportCommands.LOGGER.info(STORAGE.toString()); - Files.write(STORAGE_FILE, json, StandardOpenOption.WRITE, StandardOpenOption.TRUNCATE_EXISTING); } -// public static Pair> getWarpStorage() { -// return new Pair<>(STORAGE, STORAGE.Warps); -// } - -// public static Pair GetPlayerStorage(String UUID) { -// -// // try to find an exising storage for this player -// Optional playerStorage = STORAGE.Players.stream() -// .filter(player -> Objects.equals(UUID, player.UUID)) -// .findFirst(); -// -// if (playerStorage.isEmpty()) { -// StorageClass.Player player = PlayerAdd(UUID); // create a new player -// -// return new Pair<>(STORAGE, player); -// } -// -// return new Pair<>(STORAGE, playerStorage.get()); -// } - public static class StorageClass { - public static warpList Warps = new warpList(); - public static playerList Players = new playerList(); - - public static class NamedLocation { - public String name; - public final int x; - public final int y; - public final int z; - public final String world; - - public NamedLocation(String name, BlockPos pos, String world) { - this.name = name; - this.x = pos.getX(); - this.y = pos.getY(); - this.z = pos.getZ(); - this.world = world; - } - } + private static final ArrayList Warps = new ArrayList<>(); + private static final ArrayList Players = new ArrayList<>(); - public static class warpList { - private final ArrayList warpList = new ArrayList<>(); + // ----- - // filters the warpList and finds the one with the name (if there is one) - public Optional getWarp(String name) { - return warpList.stream() - .filter( warp -> Objects.equals( warp.name, name )) - .findFirst(); - } + // returns all warps + public ArrayList getWarps() { + return Warps; + } - // returns all warps - public ArrayList getWarps() { - return warpList; - } + // filters the warpList and finds the one with the name (if there is one) + public Optional getWarp(String name) { + return Warps.stream() + .filter(warp -> Objects.equals(warp.getName(), name)) + .findFirst(); + } - // creates a new warp, if there already is a warp it will update the existing one - public void setWarp(String name, BlockPos pos, String world) throws Exception { - Optional OptionalWarp = getWarp(name); - - if (OptionalWarp.isEmpty()) { - // create a new warp - NamedLocation warp = new NamedLocation(name, pos, world); - warpList.add(warp); - StorageSaver(); - } else { - // modify existing warp - NamedLocation warp = OptionalWarp.get(); - warp.name = name; - } - } + // filters the playerList and finds the one with the uuid (if there is one) + public Optional getPlayer(String uuid) { + return Players.stream() + .filter( player -> Objects.equals( player.getUUID(), uuid )) + .findFirst(); } - public static class playerList { - private final ArrayList playerList = new ArrayList<>(); + // ----- - // filters the playerList and finds the one with the uuid (if there is one) - public Optional getPlayer(String uuid) { - return playerList.stream() - .filter( player -> Objects.equals( player.UUID, uuid )) - .findFirst(); - } + // creates a new warp, if there already is a warp it will update the existing one + public void setWarp(String name, BlockPos pos, String world) throws Exception { + Optional OptionalWarp = getWarp(name); - // creates a new player, if there already is a player it will return the existing one - public Player addPlayer(String uuid, BlockPos pos, String world) { - Optional OptionalPlayer = getPlayer(uuid); - - if (OptionalPlayer.isEmpty()) { - // create new player - Player player = new Player(uuid); - playerList.add(player); - TeleportCommands.LOGGER.info("Player '{}' added successfully in storage!", uuid); - - return player; - } else { - // return existing player - TeleportCommands.LOGGER.info("Player '{}' already exists!", uuid); - return OptionalPlayer.get(); - } + if (OptionalWarp.isEmpty()) { + // create a new warp + NamedLocation warp = new NamedLocation(name, pos, world); + Warps.add(warp); + } else { + // modify existing warp + NamedLocation warp = OptionalWarp.get(); + warp.setName(name); } + + StorageSaver(); } + // creates a new player, if there already is a player it will return the existing one. The player won't be saved unless they actually do something lol + public Player addPlayer(String uuid) { + final Optional OptionalPlayer = getPlayer(uuid); + + if (OptionalPlayer.isEmpty()) { + // create new player + Player player = new Player(uuid); + Players.add(player); +// TeleportCommands.LOGGER.info("Player '{}' added successfully in storage!", uuid); // todo! prob remove these loggers + + return player; + } else { + // return existing player +// TeleportCommands.LOGGER.info("Player '{}' already exists!", uuid); + return OptionalPlayer.get(); + } + } - public static class Player { - public final String UUID; - public String DefaultHome = ""; - public homeList Homes = new homeList(); + // ----- - public Player(String uuid) { - this.UUID = uuid; - } + public void removeWarp(String name) throws Exception { + Optional OptionalWarp = getWarp(name); - public static class homeList { - private final List Homes = new ArrayList<>(); - - // filters the Homes and finds the one with the name (if there is one) - public Optional getHome(String name) { - return Homes.stream() - .filter( home -> Objects.equals( home.name, name )) - .findFirst(); - } - - // returns all homes - public List getHomes() { - return Homes; - } - - // creates a new home, if there already is a home it will update the existing one - public void setHome(String name, BlockPos pos, String world) throws Exception { - Optional OptionalHome = getHome(name); - - if (OptionalHome.isEmpty()) { - NamedLocation home = new NamedLocation(name, pos, world); - - Homes.add(home); - StorageSaver(); - } else { - NamedLocation home = OptionalHome.get(); - - home.name = name; - StorageSaver(); - } - } + if (OptionalWarp.isPresent()) { + Warps.remove(OptionalWarp.get()); + StorageSaver(); + } else { + //todo! ??? } } } diff --git a/common/src/main/java/dev/mrsnowy/teleport_commands/storage/backListStorage.java b/common/src/main/java/dev/mrsnowy/teleport_commands/storage/backListStorage.java deleted file mode 100644 index d7543f0..0000000 --- a/common/src/main/java/dev/mrsnowy/teleport_commands/storage/backListStorage.java +++ /dev/null @@ -1,51 +0,0 @@ -package dev.mrsnowy.teleport_commands.storage; - -import net.minecraft.core.BlockPos; - -import java.util.ArrayList; -import java.util.Objects; -import java.util.Optional; - -public class backListStorage { - public static final backList backList = new backList(); - - public static class backList { - private final ArrayList backList = new ArrayList<>(); - - // filters the deathLocationList and finds the one with the matching player uuid (if there is one) - public Optional getDeathLocation(String uuid) { - return backList.stream() - .filter( deathLocation -> Objects.equals( deathLocation.UUID, uuid )) - .findFirst(); - } - - // updates the deathLocation of a player, if there is no existing entry it will create a new deathLocation. - public void setDeathLocation(String uuid, BlockPos pos, String world) { - Optional OptionalDeathLocation = getDeathLocation(uuid); - - if (OptionalDeathLocation.isEmpty()) { - // create a new deathLocation - deathLocationClass deathLocation = new deathLocationClass(uuid, pos, world); - backList.add(deathLocation); - } else { - // modify existing deathLocation - deathLocationClass deathLocation = OptionalDeathLocation.get(); - - deathLocation.pos = pos; - deathLocation.world = world; - } - } - } - - public static class deathLocationClass { - public String UUID; - public BlockPos pos; - public String world; - - private deathLocationClass(String uuid, BlockPos pos, String world) { - this.UUID = uuid; - this.pos = pos; - this.world = world; - } - } -} \ No newline at end of file diff --git a/common/src/main/java/dev/mrsnowy/teleport_commands/suggestions/HomeSuggestionProvider.java b/common/src/main/java/dev/mrsnowy/teleport_commands/suggestions/HomeSuggestionProvider.java index d5c60f1..2d82d0f 100644 --- a/common/src/main/java/dev/mrsnowy/teleport_commands/suggestions/HomeSuggestionProvider.java +++ b/common/src/main/java/dev/mrsnowy/teleport_commands/suggestions/HomeSuggestionProvider.java @@ -5,28 +5,36 @@ import com.mojang.brigadier.suggestion.SuggestionProvider; import com.mojang.brigadier.suggestion.Suggestions; import com.mojang.brigadier.suggestion.SuggestionsBuilder; import dev.mrsnowy.teleport_commands.TeleportCommands; -import dev.mrsnowy.teleport_commands.storage.StorageManager; + +import java.util.Optional; import java.util.concurrent.CompletableFuture; + +import dev.mrsnowy.teleport_commands.storage.classes.NamedLocation; +import dev.mrsnowy.teleport_commands.storage.classes.Player; import net.minecraft.commands.CommandSourceStack; import net.minecraft.server.level.ServerPlayer; -import static dev.mrsnowy.teleport_commands.storage.StorageManager.GetPlayerStorage; +import static dev.mrsnowy.teleport_commands.storage.StorageManager.STORAGE; public class HomeSuggestionProvider implements SuggestionProvider { @Override public CompletableFuture getSuggestions(CommandContext context, SuggestionsBuilder builder) { try { ServerPlayer player = context.getSource().getPlayerOrException(); - StorageManager.StorageClass.Player playerStorage = GetPlayerStorage(player.getStringUUID()).getSecond(); + Optional optionalPlayerStorage = STORAGE.getPlayer(player.getStringUUID()); + + if (optionalPlayerStorage.isPresent()) { + Player PlayerStorage = optionalPlayerStorage.get(); - for (StorageManager.StorageClass.NamedLocation currentHome : playerStorage.Homes) { - builder.suggest(currentHome.name); + for (NamedLocation currentHome : PlayerStorage.getHomes()) { + builder.suggest(currentHome.getName()); + } } // Build and return the suggestions return builder.buildFuture(); } catch (Exception e) { - TeleportCommands.LOGGER.error("Error getting suggestions!"); + TeleportCommands.LOGGER.error("Error getting home suggestions! ", e); return null; } } diff --git a/common/src/main/java/dev/mrsnowy/teleport_commands/suggestions/WarpSuggestionProvider.java b/common/src/main/java/dev/mrsnowy/teleport_commands/suggestions/WarpSuggestionProvider.java index 2d4a239..417c954 100644 --- a/common/src/main/java/dev/mrsnowy/teleport_commands/suggestions/WarpSuggestionProvider.java +++ b/common/src/main/java/dev/mrsnowy/teleport_commands/suggestions/WarpSuggestionProvider.java @@ -4,31 +4,31 @@ import com.mojang.brigadier.context.CommandContext; import com.mojang.brigadier.suggestion.SuggestionProvider; import com.mojang.brigadier.suggestion.Suggestions; import com.mojang.brigadier.suggestion.SuggestionsBuilder; + import dev.mrsnowy.teleport_commands.TeleportCommands; import dev.mrsnowy.teleport_commands.storage.StorageManager; +import dev.mrsnowy.teleport_commands.storage.classes.NamedLocation; + import net.minecraft.commands.CommandSourceStack; -import net.minecraft.server.level.ServerPlayer; import java.util.List; import java.util.concurrent.CompletableFuture; -import static dev.mrsnowy.teleport_commands.storage.StorageManager.GetPlayerStorage; -import static dev.mrsnowy.teleport_commands.storage.StorageManager.getWarpStorage; public class WarpSuggestionProvider implements SuggestionProvider { @Override public CompletableFuture getSuggestions(CommandContext context, SuggestionsBuilder builder) { try { - List WarpStorage = getWarpStorage().getSecond(); + List WarpStorage = StorageManager.STORAGE.getWarps(); - for (StorageManager.StorageClass.NamedLocation currentWarp : WarpStorage) { - builder.suggest(currentWarp.name); + for (NamedLocation currentWarp : WarpStorage) { + builder.suggest(currentWarp.getName()); } // Build and return the suggestions return builder.buildFuture(); } catch (Exception e) { - TeleportCommands.LOGGER.error("Error getting suggestions!"); + TeleportCommands.LOGGER.error("Error getting warp suggestions! ", e); return null; } } diff --git a/common/src/main/java/dev/mrsnowy/teleport_commands/suggestions/tpaSuggestionProvider.java b/common/src/main/java/dev/mrsnowy/teleport_commands/suggestions/tpaSuggestionProvider.java index 020e420..0c3fa25 100644 --- a/common/src/main/java/dev/mrsnowy/teleport_commands/suggestions/tpaSuggestionProvider.java +++ b/common/src/main/java/dev/mrsnowy/teleport_commands/suggestions/tpaSuggestionProvider.java @@ -36,7 +36,7 @@ public class tpaSuggestionProvider implements SuggestionProvider getWorld(String worldString) { - - return StreamSupport.stream( TeleportCommands.SERVER.getAllLevels().spliterator(), false ) // woa, this looks silly - .filter(level -> Objects.equals( level.dimension().location().toString(), worldString )) - .findFirst(); - - } - - // Gets the translated text for each player based on their language, this is fully server side and actually works (UNLIKE MOJANG'S TRANSLATED KEY'S WHICH ARE CLIENT SIDE) (I'm not mad, I swear!) public static MutableComponent getTranslatedText(String key, ServerPlayer player, MutableComponent... args) { String language = player.clientInformation().language().toLowerCase(); diff --git a/common/src/main/resources/assets/teleport_commands/lang/en_us.json b/common/src/main/resources/assets/teleport_commands/lang/en_us.json index 93cdf53..a155d73 100644 --- a/common/src/main/resources/assets/teleport_commands/lang/en_us.json +++ b/common/src/main/resources/assets/teleport_commands/lang/en_us.json @@ -61,5 +61,6 @@ "commands.teleport_commands.common.delete": "[Delete]", "commands.teleport_commands.common.default": "(Default)", "commands.teleport_commands.common.renameExists": "That Name Already Exists!", - "commands.teleport_commands.common.noLocation": "No Location Found!" + "commands.teleport_commands.common.noLocation": "No Location Found!", + "commands.teleport_commands.common.hoverCopy": "Click to copy!" } \ No newline at end of file diff --git a/common/src/main/resources/assets/teleport_commands/lang/hu_hu.json b/common/src/main/resources/assets/teleport_commands/lang/hu_hu.json index a97e038..82b4721 100644 --- a/common/src/main/resources/assets/teleport_commands/lang/hu_hu.json +++ b/common/src/main/resources/assets/teleport_commands/lang/hu_hu.json @@ -61,5 +61,6 @@ "commands.teleport_commands.common.delete": "[Törlés]", "commands.teleport_commands.common.default": "(Alap)", "commands.teleport_commands.common.renameExists": "A név már létezik!", - "commands.teleport_commands.common.noLocation": "Nem található a koordináta" + "commands.teleport_commands.common.noLocation": "Nem található a koordináta", + "commands.teleport_commands.common.hoverCopy": "Click to copy!" } \ No newline at end of file diff --git a/common/src/main/resources/assets/teleport_commands/lang/it_it.json b/common/src/main/resources/assets/teleport_commands/lang/it_it.json index 323c888..79711b4 100644 --- a/common/src/main/resources/assets/teleport_commands/lang/it_it.json +++ b/common/src/main/resources/assets/teleport_commands/lang/it_it.json @@ -61,5 +61,6 @@ "commands.teleport_commands.common.delete": "[Elimina]", "commands.teleport_commands.common.default": "(Predefinita)", "commands.teleport_commands.common.renameExists": "Quel Nome Esiste Già!", - "commands.teleport_commands.common.noLocation": "Nessuna Posizione Trovata!" + "commands.teleport_commands.common.noLocation": "Nessuna Posizione Trovata!", + "commands.teleport_commands.common.hoverCopy": "Click to copy!" } diff --git a/common/src/main/resources/assets/teleport_commands/lang/nl_nl.json b/common/src/main/resources/assets/teleport_commands/lang/nl_nl.json index 8aeae28..36f8644 100644 --- a/common/src/main/resources/assets/teleport_commands/lang/nl_nl.json +++ b/common/src/main/resources/assets/teleport_commands/lang/nl_nl.json @@ -61,5 +61,6 @@ "commands.teleport_commands.common.delete": "[Verwijderen]", "commands.teleport_commands.common.default": "(Standaard)", "commands.teleport_commands.common.renameExists": "Die Naam Bestaat Al!", - "commands.teleport_commands.common.noLocation": "Geen Locatie Gevonden!" + "commands.teleport_commands.common.noLocation": "Geen Locatie Gevonden!", + "commands.teleport_commands.common.hoverCopy": "Klik om te kopiëren!" } \ No newline at end of file diff --git a/common/src/main/resources/assets/teleport_commands/lang/ru_ru.json b/common/src/main/resources/assets/teleport_commands/lang/ru_ru.json index 5933ddd..6627a05 100644 --- a/common/src/main/resources/assets/teleport_commands/lang/ru_ru.json +++ b/common/src/main/resources/assets/teleport_commands/lang/ru_ru.json @@ -61,5 +61,6 @@ "commands.teleport_commands.common.delete": "[Удалить]", "commands.teleport_commands.common.default": "(По умолчанию)", "commands.teleport_commands.common.renameExists": "Это имя уже занято!", - "commands.teleport_commands.common.noLocation": "Местоположение не найдено!" + "commands.teleport_commands.common.noLocation": "Местоположение не найдено!", + "commands.teleport_commands.common.hoverCopy": "Click to copy!" } diff --git a/common/src/main/resources/assets/teleport_commands/lang/zh_tw.json b/common/src/main/resources/assets/teleport_commands/lang/zh_tw.json index 3cc2095..ecc3162 100644 --- a/common/src/main/resources/assets/teleport_commands/lang/zh_tw.json +++ b/common/src/main/resources/assets/teleport_commands/lang/zh_tw.json @@ -61,5 +61,6 @@ "commands.teleport_commands.common.delete": "[刪除]", "commands.teleport_commands.common.default": "(預設)", "commands.teleport_commands.common.renameExists": "這個名稱已經存在了!", - "commands.teleport_commands.common.noLocation": "找不到位置!" + "commands.teleport_commands.common.noLocation": "找不到位置!", + "commands.teleport_commands.common.hoverCopy": "Click to copy!" } \ No newline at end of file