diff --git a/CHANGELOG.md b/CHANGELOG.md index a8cbf89..40e4ce3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,11 +5,18 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +### [v1.2.0] WIP! +- Added the following warp related commands: `/warp` `/setwarp` `/delwarp` `/renamewarp` and `/warps` +- Improved error handling and error messages a lot, this will make bug reporting (and fixing) a lot easier since it says on what command it fails, and it also gives a stack trace. +- Fixed some small things which may cause errors. +- Improved code of some commands to make them more sane and readable +- Modified storage code to make it more sane +- Fixed bug with /home when in a diff dimension. (apparently I did this for /back already but forgot to add it to /home) +- Added Russian Translations (Thanks to [rfin0](https://github.com/rfin0)) ### [v1.1.3] - Added support for 1.21.2 - 1.21.3 - ### [v1.1.2] - Added Italian Translations (Thanks to [Vlad Andrei Morariu](https://github.com/VladAndreiMorariu) diff --git a/README.md b/README.md index 8ebb7ed..634a8ab 100644 --- a/README.md +++ b/README.md @@ -7,19 +7,26 @@ Here is the [Changelog](https://github.com/MrSn0wy/TeleportCommands/blob/main/CH #### Currently available commands: - `/back []` - Teleports you to the location where you last died, if given true it will not do safety checks -
- +

+ **Homes are player specific locations that only that player can teleport to** - `/sethome ` - Creates a new home -- `/home []` - Teleports you home, if no name is giving it will go to the default home +- `/home []` - Teleports you to the home, if no name is giving it will go to the default home - `/delhome ` - Deletes a home - `/renamehome ` - Renames a home - `/homes` - Shows a list of your homes - `/defaulthome ` - Sets the default home -
- +

+ **Warps are op managed locations that all players can teleport to** +- `/warp ` - Teleports you to the warp +- `/warps` - Shows a list of the available warp +- `/setwarp ` - Sets a warp. Permission level of 4 required (op) +- `/delwarp ` - Deletes a warp. Permission level of 4 required (op) +- `/renamewarp ` - Renames a warp. Permission level of 4 required (op) +

+ **With tpa you can teleport to other players or make them teleport to you** - `/tpa ` - Sends a tpa request to another player - `/tpahere ` - Sends a tpaHere request to another player -- `/tpaaccept ` - Accepts the tpa/ tpahere request of that player +- `/tpaaccept ` - Accepts the tpa/tpahere request of that player - `/tpadeny ` - Denies the tpa/tpaHere request of that player
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 156ad87..d62e88f 100644 --- a/common/src/main/java/dev/mrsnowy/teleport_commands/TeleportCommands.java +++ b/common/src/main/java/dev/mrsnowy/teleport_commands/TeleportCommands.java @@ -27,6 +27,7 @@ public class TeleportCommands { public static String MOD_LOADER; public static Path SAVE_DIR; public static Path CONFIG_DIR; + public static MinecraftServer SERVER; // Gets ran when the server starts @@ -39,6 +40,8 @@ public class TeleportCommands { // Construct the game directory path CONFIG_DIR = Paths.get(System.getProperty("user.dir")).resolve("config"); + SERVER = server; + cleanStorage(); // initialize commands, also allows me to easily disable any when there is a config @@ -46,6 +49,8 @@ public class TeleportCommands { back.register(commandManager); home.register(commandManager); tpa.register(commandManager); + warp.register(commandManager); + worldspawn.register(commandManager); } public static void onPlayerDeath(ServerPlayer player) { @@ -68,15 +73,50 @@ public class TeleportCommands { FileReader reader = new FileReader(StorageManager.STORAGE_FILE.toString()); JsonElement jsonElement = JsonParser.parseReader(reader); - if (jsonElement.isJsonObject()) { JsonObject mainJsonObject = jsonElement.getAsJsonObject(); + JsonArray newWarpsArray = new JsonArray(); + JsonArray newPlayersArray = new JsonArray(); + + // get the Warps list + if (mainJsonObject.has("Warps") && mainJsonObject.get("Warps").isJsonArray()) { + + // Warps + for (JsonElement warpElement : mainJsonObject.get("Warps").getAsJsonArray()) { + + // Warp + if (warpElement.isJsonObject()) { + JsonObject warp = warpElement.getAsJsonObject(); + + + String warpName = warp.has("name") ? warp.get("name").getAsString() : ""; + Integer warpX = warp.has("x") ? warp.get("x").getAsInt() : null; + Integer warpY = warp.has("y") ? warp.get("y").getAsInt() : null; + Integer warpZ = warp.has("z") ? warp.get("z").getAsInt() : null; + String warpWorld = warp.has("world") ? warp.get("world").getAsString() : ""; + + // check if it is valid + if (!warpName.isBlank() && !warpWorld.isBlank() && warpX != null && warpY != null && warpZ != null) { + JsonObject newWarp = new JsonObject(); + + newWarp.addProperty("name", warpName); + newWarp.addProperty("x", warpX); + newWarp.addProperty("y", warpY); + newWarp.addProperty("z", warpZ); + newWarp.addProperty("world", warpWorld); + + newWarpsArray.add(newWarp); + } + } + } + + + } + // get the Players list if (mainJsonObject.has("Players") && mainJsonObject.get("Players").isJsonArray()) { - JsonArray newPlayersArray = new JsonArray(); - // players for (JsonElement playerElement : mainJsonObject.get("Players").getAsJsonArray()) { @@ -171,23 +211,26 @@ public class TeleportCommands { } } } + } - // save the cleaned and updated file - mainJsonObject.remove("Players"); - mainJsonObject.add("Players", newPlayersArray); + // save the cleaned and updated file + mainJsonObject.remove("Warps"); + mainJsonObject.add("Warps", newWarpsArray); - Gson gson = new GsonBuilder().create(); - byte[] json = gson.toJson(mainJsonObject).getBytes(); - Files.write(StorageManager.STORAGE_FILE, json, StandardOpenOption.WRITE, StandardOpenOption.TRUNCATE_EXISTING); + mainJsonObject.remove("Players"); + mainJsonObject.add("Players", newPlayersArray); - long endFileSize = Files.size(StorageManager.STORAGE_FILE); + // save the cleaned database + Gson gson = new GsonBuilder().create(); + byte[] json = gson.toJson(mainJsonObject).getBytes(); + Files.write(StorageManager.STORAGE_FILE, json, StandardOpenOption.WRITE, StandardOpenOption.TRUNCATE_EXISTING); - LOGGER.info("Success! Cleaned: {}B", Math.round((startFileSize - endFileSize))); - } - } + long endFileSize = Files.size(StorageManager.STORAGE_FILE); + LOGGER.info("Success! Cleaned: {}B", Math.round((startFileSize - endFileSize))); + } } catch (IOException e) { - LOGGER.error(e.toString()); + LOGGER.error("Error while cleaning the database!", e); } } } \ No newline at end of file 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 be2150b..b6d9c84 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 @@ -23,41 +23,45 @@ public class back { public static void register(Commands commandManager) { - commandManager.getDispatcher().register(Commands.literal("back").executes(context -> { - final ServerPlayer player = context.getSource().getPlayerOrException(); - - try { - ToDeathLocation(player, false); - - } catch (Exception e) { - TeleportCommands.LOGGER.error(String.valueOf(e)); - player.displayClientMessage(getTranslatedText("commands.teleport_commands.common.error", player).withStyle(ChatFormatting.RED, ChatFormatting.BOLD), true); - return 1; - } - return 0; - }) - .then(argument("Disable Safety", BoolArgumentType.bool()).executes(context -> { - final boolean safety = BoolArgumentType.getBool(context, "Disable Safety"); + commandManager.getDispatcher().register(Commands.literal("back") + .requires(source -> source.getPlayer() != null) + .executes(context -> { final ServerPlayer player = context.getSource().getPlayerOrException(); try { - ToDeathLocation(player, safety); + ToDeathLocation(player, false); } catch (Exception e) { - TeleportCommands.LOGGER.error(String.valueOf(e)); + TeleportCommands.LOGGER.error("Error while going back! => ", e); player.displayClientMessage(getTranslatedText("commands.teleport_commands.common.error", player).withStyle(ChatFormatting.RED, ChatFormatting.BOLD), true); return 1; } return 0; - })) + }) + .then(argument("Disable Safety", BoolArgumentType.bool()) + .requires(source -> source.getPlayer() != null) + .executes(context -> { + final boolean safety = BoolArgumentType.getBool(context, "Disable Safety"); + final ServerPlayer player = context.getSource().getPlayerOrException(); + + try { + ToDeathLocation(player, safety); + + } catch (Exception e) { + TeleportCommands.LOGGER.error("Error while going back! => ", e); + player.displayClientMessage(getTranslatedText("commands.teleport_commands.common.error", player).withStyle(ChatFormatting.RED, ChatFormatting.BOLD), true); + return 1; + } + return 0; + })) ); } private static void ToDeathLocation(ServerPlayer player, boolean safetyDisabled) throws Exception { - StorageManager.StorageClass.Player playerStorage = GetPlayerStorage(player.getStringUUID()).playerStorage; + StorageManager.StorageClass.Player playerStorage = GetPlayerStorage(player.getStringUUID()).getSecond(); - // todo : fix + // todo : fix... what do i need to fix LMAO if (playerStorage.deathLocation == null) { player.displayClientMessage(getTranslatedText("commands.teleport_commands.back.noLocation", player).withStyle(ChatFormatting.RED), true); @@ -65,7 +69,7 @@ public class back { final BlockPos pos = new BlockPos(playerStorage.deathLocation.x, playerStorage.deathLocation.y, playerStorage.deathLocation.z); boolean found = false; - for (ServerLevel currentWorld : Objects.requireNonNull(player.getServer()).getAllLevels()) { + for (ServerLevel currentWorld : TeleportCommands.SERVER.getAllLevels()) { if (Objects.equals(currentWorld.dimension().location().toString(), playerStorage.deathLocation.world)) { @@ -75,7 +79,7 @@ public class back { Pair> teleportData = teleportSafetyChecker(pos.getX(), pos.getY(), pos.getZ(), currentWorld, player); switch (teleportData.getFirst()) { - case 0: // safe! + case 0: // safe location found! if (teleportData.getSecond().isPresent()) { player.displayClientMessage(getTranslatedText("commands.teleport_commands.back.go", player), true); Teleporter(player, currentWorld, teleportData.getSecond().get()); diff --git a/common/src/main/java/dev/mrsnowy/teleport_commands/commands/home.java b/common/src/main/java/dev/mrsnowy/teleport_commands/commands/home.java index e430af0..5f61d47 100644 --- a/common/src/main/java/dev/mrsnowy/teleport_commands/commands/home.java +++ b/common/src/main/java/dev/mrsnowy/teleport_commands/commands/home.java @@ -1,6 +1,7 @@ package dev.mrsnowy.teleport_commands.commands; 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.suggestions.HomeSuggestionProvider; @@ -24,6 +25,7 @@ public class home { public static void register(Commands commandManager) { commandManager.getDispatcher().register(Commands.literal("sethome") + .requires(source -> source.getPlayer() != null) .then(argument("name", StringArgumentType.string()) .executes(context -> { final String name = StringArgumentType.getString(context, "name"); @@ -33,7 +35,7 @@ public class home { SetHome(player, name); } catch (Exception e) { - TeleportCommands.LOGGER.error(String.valueOf(e)); + TeleportCommands.LOGGER.error("Error while setting a home! => ", e); player.displayClientMessage(getTranslatedText("commands.teleport_commands.home.setError", player).withStyle(ChatFormatting.RED, ChatFormatting.BOLD), true); return 1; } @@ -42,6 +44,7 @@ public class home { commandManager.getDispatcher().register(Commands.literal("home") + .requires(source -> source.getPlayer() != null) .executes(context -> { final ServerPlayer player = context.getSource().getPlayerOrException(); @@ -49,13 +52,14 @@ public class home { GoHome(player, ""); } catch (Exception e) { - TeleportCommands.LOGGER.error(String.valueOf(e)); + TeleportCommands.LOGGER.error("Error while going home! => ", e); player.displayClientMessage(getTranslatedText("commands.teleport_commands.home.goError", player).withStyle(ChatFormatting.RED, ChatFormatting.BOLD), true); return 1; } return 0; }) .then(argument("name", StringArgumentType.string()).suggests(new HomeSuggestionProvider()) + .requires(source -> source.getPlayer() != null) .executes(context -> { final String name = StringArgumentType.getString(context, "name"); final ServerPlayer player = context.getSource().getPlayerOrException(); @@ -64,14 +68,15 @@ public class home { GoHome(player, name); } catch (Exception e) { + TeleportCommands.LOGGER.error("Error while going to a specific home! => ", e); player.displayClientMessage(getTranslatedText("commands.teleport_commands.home.goError", player).withStyle(ChatFormatting.RED, ChatFormatting.BOLD), true); - TeleportCommands.LOGGER.error(String.valueOf(e)); return 1; } return 0; }))); commandManager.getDispatcher().register(Commands.literal("delhome") + .requires(source -> source.getPlayer() != null) .then(argument("name", StringArgumentType.string()).suggests(new HomeSuggestionProvider()) .executes(context -> { final String name = StringArgumentType.getString(context, "name"); @@ -81,7 +86,7 @@ public class home { DeleteHome(player, name); } catch (Exception e) { - TeleportCommands.LOGGER.error(String.valueOf(e)); + TeleportCommands.LOGGER.error("Error while deleting a home! => ", e); player.displayClientMessage(getTranslatedText("commands.teleport_commands.home.deleteError", player).withStyle(ChatFormatting.RED, ChatFormatting.BOLD), true); return 1; } @@ -89,6 +94,7 @@ public class home { }))); commandManager.getDispatcher().register(Commands.literal("renamehome") + .requires(source -> source.getPlayer() != null) .then(argument("name", StringArgumentType.string()).suggests(new HomeSuggestionProvider()) .then(argument("newName", StringArgumentType.string()) .executes(context -> { @@ -100,7 +106,7 @@ public class home { RenameHome(player, name, newName); } catch (Exception e) { - TeleportCommands.LOGGER.error(String.valueOf(e)); + TeleportCommands.LOGGER.error("Error while renaming a home! => ", e); player.displayClientMessage(getTranslatedText("commands.teleport_commands.home.renameError", player).withStyle(ChatFormatting.RED, ChatFormatting.BOLD), true); return 1; } @@ -109,6 +115,7 @@ public class home { commandManager.getDispatcher().register(Commands.literal("defaulthome") + .requires(source -> source.getPlayer() != null) .then(argument("name", StringArgumentType.string()).suggests(new HomeSuggestionProvider()) .executes(context -> { final String name = StringArgumentType.getString(context, "name"); @@ -118,7 +125,7 @@ public class home { SetDefaultHome(player, name); } catch (Exception e) { - TeleportCommands.LOGGER.error(String.valueOf(e)); + TeleportCommands.LOGGER.error("Error while setting the default home! => ", e); player.displayClientMessage(getTranslatedText("commands.teleport_commands.home.defaultError", player).withStyle(ChatFormatting.RED, ChatFormatting.BOLD), true); return 1; } @@ -126,6 +133,7 @@ public class home { }))); commandManager.getDispatcher().register(Commands.literal("homes") + .requires(source -> source.getPlayer() != null) .executes(context -> { final ServerPlayer player = context.getSource().getPlayerOrException(); @@ -133,7 +141,7 @@ public class home { PrintHomes(player); } catch (Exception e) { - TeleportCommands.LOGGER.error(String.valueOf(e)); + TeleportCommands.LOGGER.error("Error while printing the homes! => ", e); player.displayClientMessage(getTranslatedText("commands.teleport_commands.homes.error", player).withStyle(ChatFormatting.RED, ChatFormatting.BOLD), true); return 1; } @@ -148,14 +156,14 @@ public class home { BlockPos blockPos = new BlockPos(player.getBlockX(), player.getBlockY(), player.getBlockZ()); ServerLevel world = player.serverLevel(); - StorageManager.PlayerStorageClass storages = GetPlayerStorage(player.getStringUUID()); - StorageManager.StorageClass storage = storages.storage; - StorageManager.StorageClass.Player playerStorage = storages.playerStorage; + Pair storages = GetPlayerStorage(player.getStringUUID()); + StorageManager.StorageClass storage = storages.getFirst(); + StorageManager.StorageClass.Player playerStorage = storages.getSecond(); boolean homeNotFound = true; // check for duplicates - for (StorageManager.StorageClass.Player.Home currentHome : playerStorage.Homes) { + for (StorageManager.StorageClass.NamedLocation currentHome : playerStorage.Homes) { if (Objects.equals(currentHome.name, homeName)) { homeNotFound = false; break; @@ -163,8 +171,8 @@ public class home { } if (homeNotFound) { - // Create a new Home - StorageManager.StorageClass.Player.Home homeLocation = new StorageManager.StorageClass.Player.Home(); + // Create a new NamedLocation + StorageManager.StorageClass.NamedLocation homeLocation = new StorageManager.StorageClass.NamedLocation(); homeLocation.name = homeName; homeLocation.x = blockPos.getX(); @@ -187,7 +195,7 @@ public class home { private static void GoHome(ServerPlayer player, String homeName) throws Exception { homeName = homeName.toLowerCase(); - StorageManager.StorageClass.Player playerStorage = GetPlayerStorage(player.getStringUUID()).playerStorage; + StorageManager.StorageClass.Player playerStorage = GetPlayerStorage(player.getStringUUID()).getSecond(); // check if there is a default exists if (homeName.isEmpty()) { @@ -202,18 +210,18 @@ public class home { boolean foundWorld = false; // find correct home - for (StorageManager.StorageClass.Player.Home currentHome : playerStorage.Homes) { - if (Objects.equals(currentHome.name, homeName)){ + for (StorageManager.StorageClass.NamedLocation currentHome : playerStorage.Homes) { + if (Objects.equals(currentHome.name, homeName)) { // find correct world - for (ServerLevel currentWorld : Objects.requireNonNull(player.getServer()).getAllLevels()) { + for (ServerLevel currentWorld : TeleportCommands.SERVER.getAllLevels()) { if (Objects.equals(currentWorld.dimension().location().toString(), currentHome.world)) { foundWorld = true; - BlockPos coords = new BlockPos(currentHome.x, currentHome.y, currentHome.z); + BlockPos blockPos = new BlockPos(currentHome.x, currentHome.y, currentHome.z); BlockPos playerBlockPos = new BlockPos(player.getBlockX(), player.getBlockY(), player.getBlockZ()); - if (!playerBlockPos.equals(coords)) { + if (!playerBlockPos.equals(blockPos) || player.level() != currentWorld) { player.displayClientMessage(getTranslatedText("commands.teleport_commands.home.go", player), true); Teleporter(player, currentWorld, new Vec3(currentHome.x + 0.5, currentHome.y, currentHome.z + 0.5)); } else { @@ -232,25 +240,26 @@ public class home { private static void DeleteHome(ServerPlayer player, String homeName) throws Exception { homeName = homeName.toLowerCase(); - StorageManager.PlayerStorageClass storages = GetPlayerStorage(player.getStringUUID()); - StorageManager.StorageClass storage = storages.storage; - StorageManager.StorageClass.Player playerStorage = storages.playerStorage; + Pair storages = GetPlayerStorage(player.getStringUUID()); + StorageManager.StorageClass storage = storages.getFirst(); + StorageManager.StorageClass.Player playerStorage = storages.getSecond(); - StorageManager.StorageClass.Player.Home homeToDelete = null; + boolean deletedHome = false; // get correct home - for (StorageManager.StorageClass.Player.Home currentHome : playerStorage.Homes) { - if (Objects.equals(currentHome.name, homeName)){ - homeToDelete = currentHome; + for (StorageManager.StorageClass.NamedLocation currentHome : playerStorage.Homes) { + if (Objects.equals(currentHome.name, homeName)) { + // delete the home + playerStorage.Homes.remove(currentHome); + StorageSaver(storage); + + deletedHome = true; + player.displayClientMessage(getTranslatedText("commands.teleport_commands.home.delete", player), true); break; } } - if (Objects.nonNull(homeToDelete)) { - playerStorage.Homes.remove(homeToDelete); - StorageSaver(storage); - player.displayClientMessage(getTranslatedText("commands.teleport_commands.home.delete", player), true); - } else { + if (!deletedHome) { player.displayClientMessage(getTranslatedText("commands.teleport_commands.home.notFound", player).withStyle(ChatFormatting.RED), true); } } @@ -259,15 +268,15 @@ public class home { homeName = homeName.toLowerCase(); newHomeName = newHomeName.toLowerCase(); - StorageManager.PlayerStorageClass storages = GetPlayerStorage(player.getStringUUID()); - StorageManager.StorageClass storage = storages.storage; - StorageManager.StorageClass.Player playerStorage = storages.playerStorage; + Pair storages = GetPlayerStorage(player.getStringUUID()); + StorageManager.StorageClass storage = storages.getFirst(); + StorageManager.StorageClass.Player playerStorage = storages.getSecond(); - StorageManager.StorageClass.Player.Home homeToRename = null; boolean newNameNotFound = true; + boolean WarpRenamed = false; // check for duplicates - for (StorageManager.StorageClass.Player.Home currentHome : playerStorage.Homes) { + for (StorageManager.StorageClass.NamedLocation currentHome : playerStorage.Homes) { if (Objects.equals(currentHome.name, newHomeName)) { newNameNotFound = false; break; @@ -276,23 +285,24 @@ public class home { if (newNameNotFound) { // get correct home - for (StorageManager.StorageClass.Player.Home currentHome : playerStorage.Homes) { - if (Objects.equals(currentHome.name, homeName)){ - homeToRename = currentHome; + for (StorageManager.StorageClass.NamedLocation currentHome : playerStorage.Homes) { + if (Objects.equals(currentHome.name, homeName)) { + + // if the current home is the default home, then change to the new name in the config + if (Objects.equals(playerStorage.DefaultHome, currentHome.name)) { + playerStorage.DefaultHome = newHomeName; + } + + currentHome.name = newHomeName; + StorageSaver(storage); + + WarpRenamed = true; + player.displayClientMessage(getTranslatedText("commands.teleport_commands.home.rename", player), true); break; } } - if (Objects.nonNull(homeToRename)) { - // if the current home is the default home, then change to the new name in the config - if (Objects.equals(playerStorage.DefaultHome, homeToRename.name)) { - playerStorage.DefaultHome = newHomeName; - } - - homeToRename.name = newHomeName; - StorageSaver(storage); - player.displayClientMessage(getTranslatedText("commands.teleport_commands.home.rename", player), true); - } else { + if (!WarpRenamed) { player.displayClientMessage(getTranslatedText("commands.teleport_commands.home.notFound", player).withStyle(ChatFormatting.RED), true); } } else { @@ -303,14 +313,15 @@ public class home { private static void SetDefaultHome(ServerPlayer player, String homeName) throws Exception { homeName = homeName.toLowerCase(); - StorageManager.PlayerStorageClass storages = GetPlayerStorage(player.getStringUUID()); - StorageManager.StorageClass storage = storages.storage; - StorageManager.StorageClass.Player playerStorage = storages.playerStorage; + + Pair storages = GetPlayerStorage(player.getStringUUID()); + StorageManager.StorageClass storage = storages.getFirst(); + StorageManager.StorageClass.Player playerStorage = storages.getSecond(); boolean homeExists = false; // check if home exists - for (StorageManager.StorageClass.Player.Home currentHome : playerStorage.Homes) { + for (StorageManager.StorageClass.NamedLocation currentHome : playerStorage.Homes) { if (Objects.equals(currentHome.name, homeName)){ homeExists = true; break; @@ -334,52 +345,50 @@ public class home { } private static void PrintHomes(ServerPlayer player) throws Exception { - StorageManager.StorageClass.Player playerStorage = GetPlayerStorage(player.getStringUUID()).playerStorage; - boolean anyHomes = false; - - for (StorageManager.StorageClass.Player.Home currenthome : playerStorage.Homes) { - if (!anyHomes) { - player.displayClientMessage(getTranslatedText("commands.teleport_commands.homes.homes", player).withStyle(ChatFormatting.YELLOW, ChatFormatting.BOLD) - .append("\n"), false); - anyHomes = true; - } + StorageManager.StorageClass.Player playerStorage = GetPlayerStorage(player.getStringUUID()).getSecond(); + + if (playerStorage.Homes.isEmpty()) { + player.displayClientMessage(getTranslatedText("commands.teleport_commands.home.homeless", player).withStyle(ChatFormatting.AQUA), true); - String name = String.format(" - %s", currenthome.name); + } else { + player.displayClientMessage(getTranslatedText("commands.teleport_commands.homes.homes", player).withStyle(ChatFormatting.YELLOW, ChatFormatting.BOLD) + .append("\n"), false); + + for (StorageManager.StorageClass.NamedLocation currentHome : playerStorage.Homes) { + + String name = String.format(" - %s", currentHome.name); + String coords = String.format("[X%d Y%d Z%d]", currentHome.x, currentHome.y, currentHome.z); + String dimension = String.format(" [%s]", currentHome.world); + + if (Objects.equals(currentHome.name, playerStorage.DefaultHome)) { + player.displayClientMessage(Component.literal(name).withStyle(ChatFormatting.AQUA) + .append(" ") + .append(getTranslatedText("commands.teleport_commands.common.default", player).withStyle(ChatFormatting.AQUA, ChatFormatting.BOLD)), + false + ); + } else { + player.displayClientMessage(Component.literal(name).withStyle(ChatFormatting.AQUA), false); + } - String coords = String.format("[X%d Y%d Z%d]", currenthome.x, currenthome.y, currenthome.z); - String dimension = String.format(" [%s]", currenthome.world); + 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", currentHome.x, currentHome.y, currentHome.z))))) + .append(Component.literal(dimension).withStyle(ChatFormatting.DARK_PURPLE).withStyle(style -> style.withClickEvent(new ClickEvent(ClickEvent.Action.COPY_TO_CLIPBOARD, currentHome.world)))), + false + ); - if (Objects.equals(currenthome.name, playerStorage.DefaultHome)) { - player.displayClientMessage(Component.literal(name).withStyle(ChatFormatting.AQUA) + 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("/home %s", currentHome.name))))) .append(" ") - .append(getTranslatedText("commands.teleport_commands.homes.default", player).withStyle(ChatFormatting.AQUA, ChatFormatting.BOLD)), + .append(getTranslatedText("commands.teleport_commands.common.rename", player).withStyle(ChatFormatting.BLUE).withStyle(style -> style.withClickEvent(new ClickEvent(ClickEvent.Action.SUGGEST_COMMAND, String.format("/renamehome %s ", currentHome.name))))) + .append(" ") + .append(getTranslatedText("commands.teleport_commands.common.delete", player).withStyle(ChatFormatting.RED).withStyle(style -> style.withClickEvent(new ClickEvent(ClickEvent.Action.SUGGEST_COMMAND, String.format("/delhome %s", currentHome.name))))) + .append("\n"), false ); - } else { - 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", currenthome.x, currenthome.y, currenthome.z))))) - .append(Component.literal(dimension).withStyle(ChatFormatting.DARK_PURPLE).withStyle(style -> style.withClickEvent(new ClickEvent(ClickEvent.Action.COPY_TO_CLIPBOARD, currenthome.world)))), - false - ); - - player.displayClientMessage(Component.literal(" | ").withStyle(ChatFormatting.AQUA) - .append(getTranslatedText("commands.teleport_commands.homes.tp", player).withStyle(ChatFormatting.GREEN).withStyle(style -> style.withClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, String.format("/home %s", currenthome.name))))) - .append(" ") - .append(getTranslatedText("commands.teleport_commands.homes.rename", player).withStyle(ChatFormatting.BLUE).withStyle(style -> style.withClickEvent(new ClickEvent(ClickEvent.Action.SUGGEST_COMMAND, String.format("/renamehome %s ", currenthome.name))))) - .append(" ") - .append(getTranslatedText("commands.teleport_commands.homes.delete", player).withStyle(ChatFormatting.RED).withStyle(style -> style.withClickEvent(new ClickEvent(ClickEvent.Action.SUGGEST_COMMAND, String.format("/delhome %s", currenthome.name))))) - .append("\n"), - false - ); - } - - if (!anyHomes) { - player.displayClientMessage(getTranslatedText("commands.teleport_commands.home.homeless", player).withStyle(ChatFormatting.AQUA), true); } } -} + +} \ No newline at end of file diff --git a/common/src/main/java/dev/mrsnowy/teleport_commands/commands/tpa.java b/common/src/main/java/dev/mrsnowy/teleport_commands/commands/tpa.java index d78929d..a651390 100644 --- a/common/src/main/java/dev/mrsnowy/teleport_commands/commands/tpa.java +++ b/common/src/main/java/dev/mrsnowy/teleport_commands/commands/tpa.java @@ -3,6 +3,7 @@ package dev.mrsnowy.teleport_commands.commands; import java.util.*; import com.mojang.datafixers.util.Pair; +import dev.mrsnowy.teleport_commands.TeleportCommands; import dev.mrsnowy.teleport_commands.suggestions.tpaSuggestionProvider; import net.minecraft.ChatFormatting; @@ -28,49 +29,80 @@ public class tpa { public static void register(Commands commandManager) { commandManager.getDispatcher().register(Commands.literal("tpa") + .requires(source -> source.getPlayer() != null) .then(Commands.argument("player", EntityArgument.player()) .executes(context -> { final ServerPlayer TargetPlayer = EntityArgument.getPlayer(context, "player"); final ServerPlayer player = context.getSource().getPlayerOrException(); - tpaCommandHandler(player, TargetPlayer, false); + try { + tpaCommandHandler(player, TargetPlayer, false); + + } catch (Exception e) { + // this shouldn't happen with any of these commands, but if it does happen I am at least printing it to the logs and catching it. + // if it appears that this can happen then I'll add error messages for the client, for now the default minecraft ones will do + TeleportCommands.LOGGER.error("Error while sending a tpa request! => ", e); + return 1; + } return 0; }))); commandManager.getDispatcher().register(Commands.literal("tpahere") + .requires(source -> source.getPlayer() != null) .then(Commands.argument("player", EntityArgument.player()) .executes(context -> { final ServerPlayer TargetPlayer = EntityArgument.getPlayer(context, "player"); final ServerPlayer player = context.getSource().getPlayerOrException(); + try { + tpaCommandHandler(player, TargetPlayer, true); - tpaCommandHandler(player, TargetPlayer, true); + } catch (Exception e) { + TeleportCommands.LOGGER.error("Error while sending a tpahere request! => ", e); + return 1; + } return 0; }))); commandManager.getDispatcher().register(Commands.literal("tpaaccept") + .requires(source -> source.getPlayer() != null) .then(Commands.argument("player", EntityArgument.player()).suggests(new tpaSuggestionProvider()) .executes(context -> { final ServerPlayer TargetPlayer = EntityArgument.getPlayer(context, "player"); final ServerPlayer player = context.getSource().getPlayerOrException(); - tpaAccept(player, TargetPlayer); + try { + tpaAccept(player, TargetPlayer); + + } catch (Exception e) { + TeleportCommands.LOGGER.error("Error while accepting a tpa(here) request! => ", e); + return 1; + } + return 0; }))); commandManager.getDispatcher().register(Commands.literal("tpadeny") + .requires(source -> source.getPlayer() != null) .then(Commands.argument("player", EntityArgument.player()).suggests(new tpaSuggestionProvider()) .executes(context -> { final ServerPlayer TargetPlayer = EntityArgument.getPlayer(context, "player"); final ServerPlayer player = context.getSource().getPlayerOrException(); - tpaDeny(player, TargetPlayer); + try { + tpaDeny(player, TargetPlayer); + + } catch (Exception e) { + TeleportCommands.LOGGER.error("Error while denying a tpa(here) request! => ", e); + player.displayClientMessage(getTranslatedText("commands.teleport_commands.home.setError", player).withStyle(ChatFormatting.RED, ChatFormatting.BOLD), true); + return 1; + } + return 0; }))); } - private static void tpaCommandHandler(ServerPlayer FromPlayer, ServerPlayer ToPlayer, boolean here) throws NullPointerException { long playerTpaList = tpa.tpaList.stream() .filter(tpa -> Objects.equals(FromPlayer.getStringUUID(), tpa.InitPlayer)) @@ -79,11 +111,11 @@ public class tpa { if (FromPlayer == ToPlayer) { - FromPlayer.displayClientMessage(getTranslatedText("commands.teleport_commands.tpa.self", FromPlayer).withStyle(ChatFormatting.AQUA),true); + FromPlayer.displayClientMessage(getTranslatedText("commands.teleport_commands.tpa.self", FromPlayer).withStyle(ChatFormatting.AQUA), true); } else if (playerTpaList >= 1) { FromPlayer.displayClientMessage(getTranslatedText("commands.teleport_commands.tpa.alreadySent", FromPlayer, Component.literal(Objects.requireNonNull(ToPlayer.getName().getString())).withStyle(ChatFormatting.BOLD)).withStyle(ChatFormatting.AQUA) - ,true + , true ); } else { @@ -105,9 +137,9 @@ public class tpa { ); ToPlayer.displayClientMessage(getTranslatedText("commands.teleport_commands.tpa.received", ToPlayer, Component.literal(hereText), Component.literal(ReceivedFromPlayer).withStyle(ChatFormatting.AQUA, ChatFormatting.BOLD)).withStyle(ChatFormatting.AQUA) - .append("\n") - .append(getTranslatedText("commands.teleport_commands.tpa.accept", ToPlayer).withStyle(ChatFormatting.GREEN, ChatFormatting.BOLD).withStyle(style -> style.withClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, String.format("/tpaaccept %s", ReceivedFromPlayer))))) - .append(getTranslatedText("commands.teleport_commands.tpa.deny", ToPlayer).withStyle(ChatFormatting.RED, ChatFormatting.BOLD).withStyle(style -> style.withClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, String.format("/tpadeny %s", ReceivedFromPlayer))))), + .append("\n") + .append(getTranslatedText("commands.teleport_commands.tpa.accept", ToPlayer).withStyle(ChatFormatting.GREEN, ChatFormatting.BOLD).withStyle(style -> style.withClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, String.format("/tpaaccept %s", ReceivedFromPlayer))))) + .append(getTranslatedText("commands.teleport_commands.tpa.deny", ToPlayer).withStyle(ChatFormatting.RED, ChatFormatting.BOLD).withStyle(style -> style.withClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, String.format("/tpadeny %s", ReceivedFromPlayer))))), false ); @@ -121,9 +153,6 @@ public class tpa { FromPlayer.displayClientMessage(getTranslatedText("commands.teleport_commands.tpa.expired", FromPlayer, Component.literal(hereText)).withStyle(ChatFormatting.RED, ChatFormatting.BOLD),true); ToPlayer.displayClientMessage(getTranslatedText("commands.teleport_commands.tpa.expired", ToPlayer, Component.literal(hereText)).withStyle(ChatFormatting.WHITE),true); } -// else { -// TeleportCommands.LOGGER.error("Error removing tpaRequest from tpaList!"); -// } // else not needed since it may be denied/cancelled } }, 30 * 1000 // 30 seconds 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 new file mode 100644 index 0000000..f053ba3 --- /dev/null +++ b/common/src/main/java/dev/mrsnowy/teleport_commands/commands/warp.java @@ -0,0 +1,320 @@ +package dev.mrsnowy.teleport_commands.commands; + +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.suggestions.HomeSuggestionProvider; +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.server.level.ServerLevel; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.world.phys.Vec3; + +import java.util.List; +import java.util.Objects; + +import static dev.mrsnowy.teleport_commands.storage.StorageManager.*; +import static dev.mrsnowy.teleport_commands.utils.tools.Teleporter; +import static dev.mrsnowy.teleport_commands.utils.tools.getTranslatedText; +import static net.minecraft.commands.Commands.argument; + +public class warp { + public static void register(Commands commandManager) { + + commandManager.getDispatcher().register(Commands.literal("setwarp") + .requires(source -> + source.getPlayer() != null && + source.hasPermission(4) + ) + .then(argument("name", StringArgumentType.string()) + .executes(context -> { + final String name = StringArgumentType.getString(context, "name"); + final ServerPlayer player = context.getSource().getPlayerOrException(); + + try { + SetWarp(player, name); + + } catch (Exception e) { + TeleportCommands.LOGGER.error("Error while setting the warp!", e); + player.displayClientMessage(getTranslatedText("commands.teleport_commands.warp.setError", player).withStyle(ChatFormatting.RED, ChatFormatting.BOLD), true); + return 1; + } + return 0; + }))); + + commandManager.getDispatcher().register(Commands.literal("warp") + .requires(source -> source.getPlayer() != null) + .then(argument("name", StringArgumentType.string()).suggests(new WarpSuggestionProvider()) + .executes(context -> { + final String name = StringArgumentType.getString(context, "name"); + final ServerPlayer player = context.getSource().getPlayerOrException(); + + try { + GoToWarp(player, name); + + } catch (Exception e) { + TeleportCommands.LOGGER.error("Error while going to the warp!", e); + player.displayClientMessage(getTranslatedText("commands.teleport_commands.warp.goError", player).withStyle(ChatFormatting.RED, ChatFormatting.BOLD), true); + return 1; + } + return 0; + }))); + + commandManager.getDispatcher().register(Commands.literal("delwarp") + .requires(source -> + source.getPlayer() != null && + source.hasPermission(4) + ) + .then(argument("name", StringArgumentType.string()).suggests(new WarpSuggestionProvider()) + .executes(context -> { + final String name = StringArgumentType.getString(context, "name"); + final ServerPlayer player = context.getSource().getPlayerOrException(); + + try { + DeleteWarp(player, name); + + } catch (Exception e) { + TeleportCommands.LOGGER.error("Error while deleting to the warp!", e); + player.displayClientMessage(getTranslatedText("commands.teleport_commands.warp.deleteError", player).withStyle(ChatFormatting.RED, ChatFormatting.BOLD), true); + return 1; + } + return 0; + }))); + + commandManager.getDispatcher().register(Commands.literal("renamewarp") + .requires(source -> + source.getPlayer() != null && + source.hasPermission(4) + ) + .then(argument("name", StringArgumentType.string()).suggests(new WarpSuggestionProvider()) + .then(argument("newName", StringArgumentType.string()) + .executes(context -> { + final String name = StringArgumentType.getString(context, "name"); + final String newName = StringArgumentType.getString(context, "newName"); + final ServerPlayer player = context.getSource().getPlayerOrException(); + + try { + RenameWarp(player, name, newName); + + } catch (Exception e) { + TeleportCommands.LOGGER.error("Error while renaming the warp!", e); + player.displayClientMessage(getTranslatedText("commands.teleport_commands.warp.renameError", player).withStyle(ChatFormatting.RED, ChatFormatting.BOLD), true); + return 1; + } + return 0; + })))); + + commandManager.getDispatcher().register(Commands.literal("warps") + .requires(source -> source.getPlayer() != null) + .executes(context -> { + final ServerPlayer player = context.getSource().getPlayerOrException(); + + try { + PrintWarps(player); + + } catch (Exception e) { + TeleportCommands.LOGGER.error("Error while printing warps!", e); + player.displayClientMessage(getTranslatedText("commands.teleport_commands.warps.error", player).withStyle(ChatFormatting.RED, ChatFormatting.BOLD), true); + return 1; + } + return 0; + })); + } + + + private static void SetWarp(ServerPlayer player, String warpName) throws Exception { + warpName = warpName.toLowerCase(); + + BlockPos blockPos = new BlockPos(player.getBlockX(), player.getBlockY(), player.getBlockZ()); + ServerLevel world = player.serverLevel(); + + Pair> storages = getWarpStorage(); + StorageClass storage = storages.getFirst(); + List WarpStorage = storages.getSecond(); + + boolean warpNotFound = true; + + // check for duplicates + for (StorageClass.NamedLocation currentWarp : WarpStorage) { + if (Objects.equals(currentWarp.name, warpName)) { + warpNotFound = false; + break; + } + } + + if (warpNotFound) { + // Create a new NamedLocation + StorageClass.NamedLocation warpData = new StorageClass.NamedLocation(); + + warpData.name = warpName; + warpData.x = blockPos.getX(); + warpData.y = blockPos.getY(); + warpData.z = blockPos.getZ(); + warpData.world = world.dimension().location().toString(); + + storage.Warps.add(warpData); + + StorageSaver(storage); + player.displayClientMessage(getTranslatedText("commands.teleport_commands.warp.set", player), true); + } else { + player.displayClientMessage(getTranslatedText("commands.teleport_commands.warp.exists", player).withStyle(ChatFormatting.RED), true); + } + } + + private static void GoToWarp(ServerPlayer player, String warpName) throws Exception { + warpName = warpName.toLowerCase(); + List WarpStorage = getWarpStorage().getSecond(); + + boolean foundWorld = false; + + // find correct warp + for (StorageClass.NamedLocation currentWarp : WarpStorage) { + if (Objects.equals(currentWarp.name, warpName)) { + + // find correct world + for (ServerLevel currentWorld : TeleportCommands.SERVER.getAllLevels()) { + if (Objects.equals(currentWorld.dimension().location().toString(), currentWarp.world)) { + foundWorld = true; + + BlockPos coords = new BlockPos(currentWarp.x, currentWarp.y, currentWarp.z); + BlockPos playerBlockPos = new BlockPos(player.getBlockX(), player.getBlockY(), player.getBlockZ()); + + if (!playerBlockPos.equals(coords)) { + player.displayClientMessage(getTranslatedText("commands.teleport_commands.warp.go", player), true); + Teleporter(player, currentWorld, new Vec3(currentWarp.x + 0.5, currentWarp.y, currentWarp.z + 0.5)); + } else { + player.displayClientMessage(getTranslatedText("commands.teleport_commands.warp.goSame", player).withStyle(ChatFormatting.AQUA), true); + } + break; + } + } + } + } + + if (!foundWorld) { + player.displayClientMessage(getTranslatedText("commands.teleport_commands.warp.notFound", player).withStyle(ChatFormatting.RED), true); + } + } + + private static void DeleteWarp(ServerPlayer player, String warpName) throws Exception { + warpName = warpName.toLowerCase(); + + Pair> storages = getWarpStorage(); + StorageClass storage = storages.getFirst(); + List WarpStorage = storages.getSecond(); + + boolean deletedWarp = false; + + // get correct warp + for (StorageManager.StorageClass.NamedLocation currentWarp : WarpStorage) { + if (Objects.equals(currentWarp.name, warpName)){ + // delete the warp + WarpStorage.remove(currentWarp); + StorageSaver(storage); + + 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); + } + } + + private static void RenameWarp(ServerPlayer player, String warpName, String newWarpName) throws Exception { + 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; + + // check for duplicates + for (StorageClass.NamedLocation currentWarp : WarpStorage) { + if (Objects.equals(currentWarp.name, newWarpName)) { + newWarpNotFound = false; + break; + } + } + + if (newWarpNotFound) { + // get correct warp and rename + for (StorageManager.StorageClass.NamedLocation currentWarp : WarpStorage) { + if (Objects.equals(currentWarp.name, warpName)){ + + currentWarp.name = newWarpName; + StorageSaver(storage); + WarpRenamed = true; + player.displayClientMessage(getTranslatedText("commands.teleport_commands.warp.rename", player), true); + + break; + } + } + + 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); + } + + } + + private static void PrintWarps(ServerPlayer player) throws Exception { + List WarpStorage = getWarpStorage().getSecond(); + + if (WarpStorage.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) { + + 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); + + 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)))), + 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(" ") + .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(" ") + .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("\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))))) + .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 new file mode 100644 index 0000000..5de593b --- /dev/null +++ b/common/src/main/java/dev/mrsnowy/teleport_commands/commands/worldspawn.java @@ -0,0 +1,95 @@ +package dev.mrsnowy.teleport_commands.commands; + +import com.mojang.brigadier.arguments.BoolArgumentType; +import com.mojang.datafixers.util.Pair; +import dev.mrsnowy.teleport_commands.TeleportCommands; +import net.minecraft.ChatFormatting; +import net.minecraft.commands.Commands; +import net.minecraft.core.BlockPos; +import net.minecraft.network.chat.ClickEvent; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.world.phys.Vec3; + +import java.util.Iterator; +import java.util.Objects; +import java.util.Optional; + +import static dev.mrsnowy.teleport_commands.utils.tools.*; +import static net.minecraft.commands.Commands.argument; + +import static net.minecraft.world.level.Level.OVERWORLD; + +public class worldspawn { + + public static void register(Commands commandManager) { + commandManager.getDispatcher().register(Commands.literal("worldspawn") + .requires(source -> source.getPlayer() != null) + .executes(context -> { + final ServerPlayer player = context.getSource().getPlayerOrException(); + + try { + toWorldSpawn(player, false); + + } catch (Exception error) { + TeleportCommands.LOGGER.error("Error while going back! => ", error); + player.displayClientMessage(getTranslatedText("commands.teleport_commands.common.error", player).withStyle(ChatFormatting.RED, ChatFormatting.BOLD), true); + return 1; + } + return 0; + }) + .then(argument("Disable Safety", BoolArgumentType.bool()) + .requires(source -> source.getPlayer() != null) + .executes(context -> { + final boolean safety = BoolArgumentType.getBool(context, "Disable Safety"); + final ServerPlayer player = context.getSource().getPlayerOrException(); + + try { + toWorldSpawn(player, safety); + + } catch (Exception error) { + TeleportCommands.LOGGER.error("Error while going back! => ", error); + player.displayClientMessage(getTranslatedText("commands.teleport_commands.common.error", player).withStyle(ChatFormatting.RED, ChatFormatting.BOLD), true); + return 1; + } + return 0; + }))); + + + } + + private static void toWorldSpawn(ServerPlayer player, boolean safetyDisabled) { + ServerLevel world = TeleportCommands.SERVER.getLevel(OVERWORLD); + BlockPos worldSpawn = Objects.requireNonNull(world).getSharedSpawnPos(); + + + if (!safetyDisabled) { + Pair> teleportData = teleportSafetyChecker(worldSpawn.getX(), worldSpawn.getY(), worldSpawn.getZ(), world, player); + + switch (teleportData.getFirst()) { + case 0: // safe location found! + if (teleportData.getSecond().isPresent()) { + player.displayClientMessage(getTranslatedText("commands.teleport_commands.back.go", player), true); + Teleporter(player, world, teleportData.getSecond().get()); + } else { + player.displayClientMessage(getTranslatedText("commands.teleport_commands.common.error", player).withStyle(ChatFormatting.RED, ChatFormatting.BOLD), true); + } + + break; + case 1: // the location is already safe! + player.displayClientMessage(getTranslatedText("commands.teleport_commands.back.same", player).withStyle(ChatFormatting.AQUA), true); + break; + case 2: // no safe location found! + + player.displayClientMessage(getTranslatedText("commands.teleport_commands.common.noSafeLocation", player).withStyle(ChatFormatting.RED, ChatFormatting.BOLD), false); + player.displayClientMessage(getTranslatedText("commands.teleport_commands.common.safetyIsForLosers", player).withStyle(ChatFormatting.AQUA), false); + player.displayClientMessage(getTranslatedText("commands.teleport_commands.common.forceTeleport", player).withStyle(ChatFormatting.AQUA, ChatFormatting.BOLD) + .withStyle(style -> style.withClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/worldspawn true"))),false); + break; + } + } + + TeleportCommands.LOGGER.error("{}", world.getSharedSpawnPos()); + } + +} 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 c532a6e..08cceac 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 @@ -2,6 +2,7 @@ package dev.mrsnowy.teleport_commands.storage; import com.google.gson.Gson; import com.google.gson.GsonBuilder; +import com.mojang.datafixers.util.Pair; import dev.mrsnowy.teleport_commands.TeleportCommands; import java.io.File; @@ -34,11 +35,12 @@ public class StorageManager { if (new File(String.valueOf(STORAGE_FILE)).length() == 0) { StorageClass root = new StorageClass(); root.Players = new ArrayList<>(); + root.Warps = new ArrayList<>(); StorageSaver(root); } } catch (Exception e) { - TeleportCommands.LOGGER.error(e.getMessage()); + TeleportCommands.LOGGER.error("Error while creating the storage file! Exiting! {}", e.getMessage()); // crashing is probably better here, otherwise the whole mod will be broken System.exit(1); } @@ -46,7 +48,7 @@ public class StorageManager { public static void StorageAdd(String UUID) throws Exception { StorageClass storage = StorageRetriever(); -// Optional playerStorage = GetPlayerStorage(UUID, storage); + Optional playerStorage = storage.Players.stream() .filter(player -> Objects.equals(UUID, player.UUID)) .findFirst(); @@ -56,10 +58,10 @@ public class StorageManager { newPlayer.UUID = UUID; newPlayer.DefaultHome = ""; - newPlayer.deathLocation = new StorageClass.Player.Location(); - newPlayer.deathLocation.x = new StorageClass.Player.Location().x; - newPlayer.deathLocation.y = new StorageClass.Player.Location().y; - newPlayer.deathLocation.z = new StorageClass.Player.Location().z; + newPlayer.deathLocation = new StorageClass.Location(); + newPlayer.deathLocation.x = new StorageClass.Location().x; + newPlayer.deathLocation.y = new StorageClass.Location().y; + newPlayer.deathLocation.z = new StorageClass.Location().z; newPlayer.deathLocation.world = ""; newPlayer.Homes = new ArrayList<>(); @@ -90,7 +92,13 @@ public class StorageManager { return gson.fromJson(jsonContent, StorageClass.class); } - public static PlayerStorageClass GetPlayerStorage(String UUID) throws Exception { + public static Pair> getWarpStorage() throws Exception { + StorageClass storage = StorageRetriever(); + return new Pair<>(storage, storage.Warps); + } + + + public static Pair GetPlayerStorage(String UUID) throws Exception { StorageClass storage = StorageRetriever(); Optional playerStorage = storage.Players.stream() @@ -111,42 +119,34 @@ public class StorageManager { } } - return new PlayerStorageClass(storage, playerStorage.get()); + return new Pair<>(storage, playerStorage.get()); } - public static class PlayerStorageClass { - public StorageClass storage; - public StorageClass.Player playerStorage; - - public PlayerStorageClass(StorageClass storage, StorageClass.Player playerStorage) { - this.storage = storage; - this.playerStorage = playerStorage; - } - } public static class StorageClass { + public List Warps; public List Players; + public static class NamedLocation { + public String name; + public int x; + public int y; + public int z; + public String world; + } + + public static class Location { + public int x; + public int y; + public int z; + public String world; + } + public static class Player { public String UUID; public String DefaultHome; public Location deathLocation; - public List Homes; - - public static class Location { - public int x; - public int y; - public int z; - public String world; - } - - public static class Home { - public String name; - public int x; - public int y; - public int z; - public String world; - } + public List Homes; } } } 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 073f8a8..d5c60f1 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 @@ -17,10 +17,10 @@ public class HomeSuggestionProvider implements SuggestionProvider getSuggestions(CommandContext context, SuggestionsBuilder builder) { try { ServerPlayer player = context.getSource().getPlayerOrException(); - StorageManager.StorageClass.Player playerStorage = GetPlayerStorage(player.getStringUUID()).playerStorage; + StorageManager.StorageClass.Player playerStorage = GetPlayerStorage(player.getStringUUID()).getSecond(); - for (StorageManager.StorageClass.Player.Home currenthome : playerStorage.Homes) { - builder.suggest(currenthome.name); + for (StorageManager.StorageClass.NamedLocation currentHome : playerStorage.Homes) { + builder.suggest(currentHome.name); } // Build and return the suggestions 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 new file mode 100644 index 0000000..2d4a239 --- /dev/null +++ b/common/src/main/java/dev/mrsnowy/teleport_commands/suggestions/WarpSuggestionProvider.java @@ -0,0 +1,35 @@ +package dev.mrsnowy.teleport_commands.suggestions; + +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 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(); + + for (StorageManager.StorageClass.NamedLocation currentWarp : WarpStorage) { + builder.suggest(currentWarp.name); + } + + // Build and return the suggestions + return builder.buildFuture(); + } catch (Exception e) { + TeleportCommands.LOGGER.error("Error getting suggestions!"); + return null; + } + } +} \ No newline at end of file diff --git a/common/src/main/java/dev/mrsnowy/teleport_commands/utils/tools.java b/common/src/main/java/dev/mrsnowy/teleport_commands/utils/tools.java index 0718042..2c3c80e 100644 --- a/common/src/main/java/dev/mrsnowy/teleport_commands/utils/tools.java +++ b/common/src/main/java/dev/mrsnowy/teleport_commands/utils/tools.java @@ -65,10 +65,10 @@ public class tools { public static void DeathLocationUpdater(BlockPos pos, ServerLevel world, String UUID) throws Exception { - StorageManager.PlayerStorageClass storages = GetPlayerStorage(UUID); + Pair storages = GetPlayerStorage(UUID); - StorageManager.StorageClass storage = storages.storage; - StorageManager.StorageClass.Player playerStorage = storages.playerStorage; + StorageManager.StorageClass storage = storages.getFirst(); + StorageManager.StorageClass.Player playerStorage = storages.getSecond(); playerStorage.deathLocation.x = pos.getX(); playerStorage.deathLocation.y = pos.getY(); @@ -104,10 +104,10 @@ public class tools { if (!isBlockPosUnsafe(newSafePos, world)) { if (!playerBlockPos.equals(newSafePos) || player.level() != world) { - return new Pair<>(0, Optional.of(new Vec3(newSafePos.getX() + 0.5, newSafePos.getY(), newSafePos.getZ() + 0.5))); // safe! + return new Pair<>(0, Optional.of(new Vec3(newSafePos.getX() + 0.5, newSafePos.getY(), newSafePos.getZ() + 0.5))); // safe location found! } else { - return new Pair<>(1, Optional.of(new Vec3(newSafePos.getX() + 0.5, newSafePos.getY(), newSafePos.getZ() + 0.5))); // same + return new Pair<>(1, Optional.of(new Vec3(newSafePos.getX() + 0.5, newSafePos.getY(), newSafePos.getZ() + 0.5))); // the location is already safe! } } } @@ -118,14 +118,14 @@ public class tools { row++; } // no safe location - return new Pair<>(2, Optional.empty()); // no safe location + return new Pair<>(2, Optional.empty()); // no safe location found! // check if the location is the same } else if (!playerBlockPos.equals(blockPos) || player.level() != world) { - return new Pair<>(0, Optional.of(new Vec3(playerX + 0.5, playerY, playerZ + 0.5))); // good and safe! + return new Pair<>(0, Optional.of(new Vec3(playerX + 0.5, playerY, playerZ + 0.5))); // safe location found! } else { - return new Pair<>(1, Optional.of(new Vec3(playerX + 0.5, playerY, playerZ + 0.5))); // same + return new Pair<>(1, Optional.of(new Vec3(playerX + 0.5, playerY, playerZ + 0.5))); // the location is already safe! } } 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 e232f6f..14c5b19 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 @@ -12,7 +12,6 @@ "commands.teleport_commands.home.deleteError": "Error Deleting Home!", "commands.teleport_commands.home.rename": "Home Renamed", "commands.teleport_commands.home.renameError": "Error Renaming Home!", - "commands.teleport_commands.home.renameExists": "That Name Already Exists!", "commands.teleport_commands.home.default": "Default Home Set", "commands.teleport_commands.home.defaultError": "Error Changing Default Home!", "commands.teleport_commands.home.defaultSame": "Home is already set as default!", @@ -22,10 +21,22 @@ "commands.teleport_commands.homes.error": "Error Getting Homes!", "commands.teleport_commands.homes.homes": "Homes:", - "commands.teleport_commands.homes.default": "(Default)", - "commands.teleport_commands.homes.tp": "[Tp]", - "commands.teleport_commands.homes.rename": "[Rename]", - "commands.teleport_commands.homes.delete": "[Delete]", + + "commands.teleport_commands.warp.set": "Warp set", + "commands.teleport_commands.warp.setError": "Error setting the warp!", + "commands.teleport_commands.warp.exists": "Warp already exists!", + "commands.teleport_commands.warp.go": "Going to the warp", + "commands.teleport_commands.warp.goSame": "Already at the warp", + "commands.teleport_commands.warp.goError": "Error going to the warp!", + "commands.teleport_commands.warp.delete": "Warp deleted", + "commands.teleport_commands.warp.deleteError": "Error deleting warp!", + "commands.teleport_commands.warp.rename": "Warp renamed", + "commands.teleport_commands.warp.renameError": "Error renaming warp!", + "commands.teleport_commands.warp.notFound": "Warp not found!", + "commands.teleport_commands.warp.homeless": "There are no warps!", + + "commands.teleport_commands.warps.error": "Error getting warps!", + "commands.teleport_commands.warps.warps": "Warps:", "commands.teleport_commands.tpa.self": "Well, that was easy", "commands.teleport_commands.tpa.alreadySent": "A request has already been sent to %0%", @@ -42,5 +53,10 @@ "commands.teleport_commands.common.error": "Error Teleporting!", "commands.teleport_commands.common.noSafeLocation": "No Safe Location Found!", "commands.teleport_commands.common.safetyIsForLosers": "Teleport anyways? (Warning, you might die!)", - "commands.teleport_commands.common.forceTeleport": "[Force Teleport]" + "commands.teleport_commands.common.forceTeleport": "[Force Teleport]", + "commands.teleport_commands.common.tp": "[Tp]", + "commands.teleport_commands.common.rename": "[Rename]", + "commands.teleport_commands.common.delete": "[Delete]", + "commands.teleport_commands.common.default": "(Default)", + "commands.teleport_commands.common.renameExists": "That Name Already Exists!" } \ 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 b14cac7..f747416 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 @@ -12,7 +12,6 @@ "commands.teleport_commands.home.deleteError": "Hiba történt az otthon rökésével!", "commands.teleport_commands.home.rename": "Otthon átnevezve", "commands.teleport_commands.home.renameError": "Hiba történt az otthon átnevezésével!", - "commands.teleport_commands.home.renameExists": "A név már létezik!", "commands.teleport_commands.home.default": "Alap otthon beállítva", "commands.teleport_commands.home.defaultError": "Hiba történt az alap otthon beállításával!", "commands.teleport_commands.home.defaultSame": "Már alap ez az otthon!", @@ -22,10 +21,22 @@ "commands.teleport_commands.homes.error": "Hiba történt az otthonok megtalálásával!", "commands.teleport_commands.homes.homes": "Otthonol:", - "commands.teleport_commands.homes.default": "(Alap)", - "commands.teleport_commands.homes.tp": "[Tp]", - "commands.teleport_commands.homes.rename": "[Átnevezés]", - "commands.teleport_commands.homes.delete": "[Törlés]", + + "commands.teleport_commands.warp.set": "Warp set", + "commands.teleport_commands.warp.setError": "Error setting the warp!", + "commands.teleport_commands.warp.exists": "Warp already exists!", + "commands.teleport_commands.warp.go": "Going to the warp", + "commands.teleport_commands.warp.goSame": "Already at the warp", + "commands.teleport_commands.warp.goError": "Error going to the warp!", + "commands.teleport_commands.warp.delete": "Warp deleted", + "commands.teleport_commands.warp.deleteError": "Error deleting warp!", + "commands.teleport_commands.warp.rename": "Warp renamed", + "commands.teleport_commands.warp.renameError": "Error renaming warp!", + "commands.teleport_commands.warp.notFound": "Warp not found!", + "commands.teleport_commands.warp.homeless": "There are no warps!", + + "commands.teleport_commands.warps.error": "Error getting warps!", + "commands.teleport_commands.warps.warps": "Warps:", "commands.teleport_commands.tpa.self": "Hát ez gyors volt", "commands.teleport_commands.tpa.alreadySent": "Egy kérés már el lett küldve %0%-nek", @@ -42,5 +53,10 @@ "commands.teleport_commands.common.error": "Hiba történt a teleportálással!", "commands.teleport_commands.common.noSafeLocation": "Nem találtunk biztonságos helyet!", "commands.teleport_commands.common.safetyIsForLosers": "Biztos teleportálsz?", - "commands.teleport_commands.common.forceTeleport": "[Teleportálás mindenképp]" + "commands.teleport_commands.common.forceTeleport": "[Teleportálás mindenképp]", + "commands.teleport_commands.common.tp": "[Tp]", + "commands.teleport_commands.common.rename": "[Átnevezés]", + "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!" } \ 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 571075f..439fa8e 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 @@ -12,7 +12,6 @@ "commands.teleport_commands.home.deleteError": "Errore Durante L'Eliminazione Della Casa!", "commands.teleport_commands.home.rename": "Casa Rinominata", "commands.teleport_commands.home.renameError": "Errore Durante La Rinomina Della Casa!", - "commands.teleport_commands.home.renameExists": "Quel Nome Esiste Già!", "commands.teleport_commands.home.default": "Casa Predefinita Impostata", "commands.teleport_commands.home.defaultError": "Errore Durante Il Cambio Della Casa Predefinita!", "commands.teleport_commands.home.defaultSame": "La Casa È Già Impostata Come Predefinita!", @@ -22,10 +21,22 @@ "commands.teleport_commands.homes.error": "Errore Durante Il Recupero Delle Case!", "commands.teleport_commands.homes.homes": "Case:", - "commands.teleport_commands.homes.default": "(Predefinita)", - "commands.teleport_commands.homes.tp": "[Tp]", - "commands.teleport_commands.homes.rename": "[Rinomina]", - "commands.teleport_commands.homes.delete": "[Elimina]", + + "commands.teleport_commands.warp.set": "Warp set", + "commands.teleport_commands.warp.setError": "Error setting the warp!", + "commands.teleport_commands.warp.exists": "Warp already exists!", + "commands.teleport_commands.warp.go": "Going to the warp", + "commands.teleport_commands.warp.goSame": "Already at the warp", + "commands.teleport_commands.warp.goError": "Error going to the warp!", + "commands.teleport_commands.warp.delete": "Warp deleted", + "commands.teleport_commands.warp.deleteError": "Error deleting warp!", + "commands.teleport_commands.warp.rename": "Warp renamed", + "commands.teleport_commands.warp.renameError": "Error renaming warp!", + "commands.teleport_commands.warp.notFound": "Warp not found!", + "commands.teleport_commands.warp.homeless": "There are no warps!", + + "commands.teleport_commands.warps.error": "Error getting warps!", + "commands.teleport_commands.warps.warps": "Warps:", "commands.teleport_commands.tpa.self": "Bene, È Stato Facile", "commands.teleport_commands.tpa.alreadySent": "Una Richiesta È Già Stata Inviata A %0%", @@ -42,5 +53,10 @@ "commands.teleport_commands.common.error": "Errore Durante Il Teletrasporto!", "commands.teleport_commands.common.noSafeLocation": "Nessuna Posizione Sicura Trovata!", "commands.teleport_commands.common.safetyIsForLosers": "Teletrasporto In Ogni Caso? (Attenzione, Potresti Morire!)", - "commands.teleport_commands.common.forceTeleport": "[Teletrasporto Forzato]" + "commands.teleport_commands.common.forceTeleport": "[Teletrasporto Forzato]", + "commands.teleport_commands.common.tp": "[Tp]", + "commands.teleport_commands.common.rename": "[Rinomina]", + "commands.teleport_commands.common.delete": "[Elimina]", + "commands.teleport_commands.common.default": "(Predefinita)", + "commands.teleport_commands.common.renameExists": "Quel Nome Esiste Già!" } 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 da3608f..602706c 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 @@ -4,15 +4,14 @@ "commands.teleport_commands.back.noLocation": "Geen Locatie Gevonden!", "commands.teleport_commands.home.set": "Huis Ingesteld", - "commands.teleport_commands.home.setError": "Probleem Met Het Huis Instellen!", + "commands.teleport_commands.home.setError": "Probleem tijdens het instellen van het Huis!", "commands.teleport_commands.home.go": "Naar Huis", "commands.teleport_commands.home.goError": "Probleem Met Naar Huis Gaan!", "commands.teleport_commands.home.goSame": "Al Thuis", "commands.teleport_commands.home.delete": "Huis Verwijderd", "commands.teleport_commands.home.deleteError": "Probleem Met Het Verwijderen Van Het Huis!", "commands.teleport_commands.home.rename": "Huis Hernoemd", - "commands.teleport_commands.home.renameError": "Probleem Met Het Huis Hernamen!", - "commands.teleport_commands.home.renameExists": "Die Naam Bestaat Al!", + "commands.teleport_commands.home.renameError": "Probleem tijdens het wijzigen van de huis naam!", "commands.teleport_commands.home.default": "Standaard Huis Ingesteld", "commands.teleport_commands.home.defaultError": "Probleem Tijdens Het Wijzigen Van Het Standaard Huis!", "commands.teleport_commands.home.defaultSame": "Huis is al als standaard ingesteld!", @@ -22,10 +21,22 @@ "commands.teleport_commands.homes.error": "Probleem Bij Het Ophalen Van De Huizen!", "commands.teleport_commands.homes.homes": "Huizen:", - "commands.teleport_commands.homes.default": "(Standaard)", - "commands.teleport_commands.homes.tp": "[Tp]", - "commands.teleport_commands.homes.rename ": "[Naam Wijzigen]", - "commands.teleport_commands.homes.delete": "[Verwijderen]", + + "commands.teleport_commands.warp.set": "Warp Ingesteld", + "commands.teleport_commands.warp.setError": "Probleem tijdens het instellen van de warp!", + "commands.teleport_commands.warp.exists": "Die warp bestaad Al!", + "commands.teleport_commands.warp.go": "Naar de warp", + "commands.teleport_commands.warp.goSame": "Al bij de warp", + "commands.teleport_commands.warp.goError": "Probleem met naar de warp gaan!", + "commands.teleport_commands.warp.delete": "Warp verwijderd", + "commands.teleport_commands.warp.deleteError": "Probleem tijdens het verwijderen van de warp!", + "commands.teleport_commands.warp.rename": "Warp Hernoemd", + "commands.teleport_commands.warp.renameError": "Probleem tijdens het wijzigen van de warp naam!", + "commands.teleport_commands.warp.notFound": "Warp niet gevonden!", + "commands.teleport_commands.warp.homeless": "Er zijn geen warps!", + + "commands.teleport_commands.warps.error": "Probleem bij get ophalen van de warps!", + "commands.teleport_commands.warps.warps": "Warps:", "commands.teleport_commands.tpa.self": "Welp, Dat Was Makkelijk", "commands.teleport_commands.tpa.alreadySent": "Er is al een verzoek verzonden naar %0%", @@ -42,5 +53,10 @@ "commands.teleport_commands.common.error": "Probleem tijdens het Teleporteren!", "commands.teleport_commands.common.noSafeLocation": "Geen veilige locatie gevonden!", "commands.teleport_commands.common.safetyIsForLosers": "Toch teleporteren? (Waarschuwing, je kan dood gaan!)", - "commands.teleport_commands.common.forceTeleport": "[Geforceerd Teleporteren]" + "commands.teleport_commands.common.forceTeleport": "[Geforceerd Teleporteren]", + "commands.teleport_commands.common.tp": "[Tp]", + "commands.teleport_commands.common.rename ": "[Naam Wijzigen]", + "commands.teleport_commands.common.delete": "[Verwijderen]", + "commands.teleport_commands.common.default": "(Standaard)", + "commands.teleport_commands.common.renameExists": "Die Naam Bestaat Al!" } \ 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 46b955d..4929879 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 @@ -12,7 +12,6 @@ "commands.teleport_commands.home.deleteError": "Ошибка удаления дома!", "commands.teleport_commands.home.rename": "Дом переименован", "commands.teleport_commands.home.renameError": "Ошибка переименования дома!", - "commands.teleport_commands.home.renameExists": "Это имя уже занято!", "commands.teleport_commands.home.default": "Дом по умолчанию установлен", "commands.teleport_commands.home.defaultError": "Ошибка изменения дома по умолчанию!", "commands.teleport_commands.home.defaultSame": "Дом уже установлен по умолчанию!", @@ -22,10 +21,22 @@ "commands.teleport_commands.homes.error": "Ошибка получения списка домов!", "commands.teleport_commands.homes.homes": "Дома:", - "commands.teleport_commands.homes.default": "(По умолчанию)", - "commands.teleport_commands.homes.tp": "[Тп]", - "commands.teleport_commands.homes.rename": "[Переименовать]", - "commands.teleport_commands.homes.delete": "[Удалить]", + + "commands.teleport_commands.warp.set": "Warp set", + "commands.teleport_commands.warp.setError": "Error setting the warp!", + "commands.teleport_commands.warp.exists": "Warp already exists!", + "commands.teleport_commands.warp.go": "Going to the warp", + "commands.teleport_commands.warp.goSame": "Already at the warp", + "commands.teleport_commands.warp.goError": "Error going to the warp!", + "commands.teleport_commands.warp.delete": "Warp deleted", + "commands.teleport_commands.warp.deleteError": "Error deleting warp!", + "commands.teleport_commands.warp.rename": "Warp renamed", + "commands.teleport_commands.warp.renameError": "Error renaming warp!", + "commands.teleport_commands.warp.notFound": "Warp not found!", + "commands.teleport_commands.warp.homeless": "There are no warps!", + + "commands.teleport_commands.warps.error": "Error getting warps!", + "commands.teleport_commands.warps.warps": "Warps:", "commands.teleport_commands.tpa.self": "Ну, это было легко", "commands.teleport_commands.tpa.alreadySent": "Запрос уже отправлен %0%", @@ -42,5 +53,10 @@ "commands.teleport_commands.common.error": "Ошибка телепортации!", "commands.teleport_commands.common.noSafeLocation": "Безопасное место не найдено!", "commands.teleport_commands.common.safetyIsForLosers": "Телепортироваться всё равно? (Внимание, вы можете погибнуть!)", - "commands.teleport_commands.common.forceTeleport": "[Принудительная телепортация]" + "commands.teleport_commands.common.forceTeleport": "[Принудительная телепортация]", + "commands.teleport_commands.common.tp": "[Тп]", + "commands.teleport_commands.common.rename": "[Переименовать]", + "commands.teleport_commands.common.delete": "[Удалить]", + "commands.teleport_commands.common.default": "(По умолчанию)", + "commands.teleport_commands.common.renameExists": "Это имя уже занято!" } diff --git a/common/src/main/resources/assets/teleport_commands/lang/translations.md b/common/src/main/resources/assets/teleport_commands/lang/translations.md index 829c30d..538818a 100644 --- a/common/src/main/resources/assets/teleport_commands/lang/translations.md +++ b/common/src/main/resources/assets/teleport_commands/lang/translations.md @@ -24,4 +24,5 @@ Things to know: - English (en_us): [Mr. Snowy](https://github.com/MrSn0wy) - Dutch (nl_nl): [Mr. Snowy](https://github.com/MrSn0wy) - Hungarian (hu_hu): [Martin Morningstar](https://github.com/RMI637) -- Italian (it_it): [Vlad Andrei Morariu](https://github.com/VladAndreiMorariu) \ No newline at end of file +- Italian (it_it): [Vlad Andrei Morariu](https://github.com/VladAndreiMorariu) +- Russian (ru_ru): [rfin0](https://github.com/rfin0) \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index d4fe47b..7cb2bd8 100644 --- a/gradle.properties +++ b/gradle.properties @@ -33,5 +33,5 @@ neoforge_loader_version_range=[2,) NeoGradle=7.0.168 # Gradle -org.gradle.jvmargs=-Xmx4G +org.gradle.jvmargs=-Xmx6G org.gradle.daemon=false \ No newline at end of file