A Minecraft server-side mod that adds various teleportation related commands
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

wip code, lot of stuff

+854 -224
+8 -1
CHANGELOG.md
··· 5 5 The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), 6 6 and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). 7 7 8 + ### [v1.2.0] WIP! 9 + - Added the following warp related commands: `/warp` `/setwarp` `/delwarp` `/renamewarp` and `/warps` 10 + - 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. 11 + - Fixed some small things which may cause errors. 12 + - Improved code of some commands to make them more sane and readable 13 + - Modified storage code to make it more sane 14 + - Fixed bug with /home when in a diff dimension. (apparently I did this for /back already but forgot to add it to /home) 15 + - Added Russian Translations (Thanks to [rfin0](https://github.com/rfin0)) 8 16 9 17 ### [v1.1.3] 10 18 - Added support for 1.21.2 - 1.21.3 11 - 12 19 13 20 ### [v1.1.2] 14 21 - Added Italian Translations (Thanks to [Vlad Andrei Morariu](https://github.com/VladAndreiMorariu)
+13 -6
README.md
··· 7 7 #### Currently available commands: 8 8 9 9 - `/back [<Disable Safety>]` - Teleports you to the location where you last died, if given true it will not do safety checks 10 - <br> 11 - 10 + <br><br> 11 + **Homes are player specific locations that only that player can teleport to** 12 12 - `/sethome <name>` - Creates a new home 13 - - `/home [<name>]` - Teleports you home, if no name is giving it will go to the default home 13 + - `/home [<name>]` - Teleports you to the home, if no name is giving it will go to the default home 14 14 - `/delhome <name>` - Deletes a home 15 15 - `/renamehome <name> <newName>` - Renames a home 16 16 - `/homes` - Shows a list of your homes 17 17 - `/defaulthome <name>` - Sets the default home 18 - <br> 19 - 18 + <br><br> 19 + **Warps are op managed locations that all players can teleport to** 20 + - `/warp <name>` - Teleports you to the warp 21 + - `/warps` - Shows a list of the available warp 22 + - `/setwarp <name>` - Sets a warp. Permission level of 4 required (op) 23 + - `/delwarp <name>` - Deletes a warp. Permission level of 4 required (op) 24 + - `/renamewarp <name> <newName>` - Renames a warp. Permission level of 4 required (op) 25 + <br><br> 26 + **With tpa you can teleport to other players or make them teleport to you** 20 27 - `/tpa <player>` - Sends a tpa request to another player 21 28 - `/tpahere <player>` - Sends a tpaHere request to another player 22 - - `/tpaaccept <player>` - Accepts the tpa/ tpahere request of that player 29 + - `/tpaaccept <player>` - Accepts the tpa/tpahere request of that player 23 30 - `/tpadeny <player>` - Denies the tpa/tpaHere request of that player 24 31 25 32 <br>
+57 -14
common/src/main/java/dev/mrsnowy/teleport_commands/TeleportCommands.java
··· 27 27 public static String MOD_LOADER; 28 28 public static Path SAVE_DIR; 29 29 public static Path CONFIG_DIR; 30 + public static MinecraftServer SERVER; 30 31 31 32 32 33 // Gets ran when the server starts ··· 39 40 // Construct the game directory path 40 41 CONFIG_DIR = Paths.get(System.getProperty("user.dir")).resolve("config"); 41 42 43 + SERVER = server; 44 + 42 45 cleanStorage(); 43 46 44 47 // initialize commands, also allows me to easily disable any when there is a config ··· 46 49 back.register(commandManager); 47 50 home.register(commandManager); 48 51 tpa.register(commandManager); 52 + warp.register(commandManager); 53 + worldspawn.register(commandManager); 49 54 } 50 55 51 56 public static void onPlayerDeath(ServerPlayer player) { ··· 68 73 FileReader reader = new FileReader(StorageManager.STORAGE_FILE.toString()); 69 74 JsonElement jsonElement = JsonParser.parseReader(reader); 70 75 71 - 72 76 if (jsonElement.isJsonObject()) { 73 77 JsonObject mainJsonObject = jsonElement.getAsJsonObject(); 78 + JsonArray newWarpsArray = new JsonArray(); 79 + JsonArray newPlayersArray = new JsonArray(); 80 + 81 + // get the Warps list 82 + if (mainJsonObject.has("Warps") && mainJsonObject.get("Warps").isJsonArray()) { 83 + 84 + // Warps 85 + for (JsonElement warpElement : mainJsonObject.get("Warps").getAsJsonArray()) { 86 + 87 + // Warp 88 + if (warpElement.isJsonObject()) { 89 + JsonObject warp = warpElement.getAsJsonObject(); 90 + 91 + 92 + String warpName = warp.has("name") ? warp.get("name").getAsString() : ""; 93 + Integer warpX = warp.has("x") ? warp.get("x").getAsInt() : null; 94 + Integer warpY = warp.has("y") ? warp.get("y").getAsInt() : null; 95 + Integer warpZ = warp.has("z") ? warp.get("z").getAsInt() : null; 96 + String warpWorld = warp.has("world") ? warp.get("world").getAsString() : ""; 97 + 98 + // check if it is valid 99 + if (!warpName.isBlank() && !warpWorld.isBlank() && warpX != null && warpY != null && warpZ != null) { 100 + JsonObject newWarp = new JsonObject(); 101 + 102 + newWarp.addProperty("name", warpName); 103 + newWarp.addProperty("x", warpX); 104 + newWarp.addProperty("y", warpY); 105 + newWarp.addProperty("z", warpZ); 106 + newWarp.addProperty("world", warpWorld); 107 + 108 + newWarpsArray.add(newWarp); 109 + } 110 + } 111 + } 112 + 113 + 114 + } 115 + 74 116 75 117 // get the Players list 76 118 if (mainJsonObject.has("Players") && mainJsonObject.get("Players").isJsonArray()) { 77 - 78 - JsonArray newPlayersArray = new JsonArray(); 79 119 80 120 // players 81 121 for (JsonElement playerElement : mainJsonObject.get("Players").getAsJsonArray()) { ··· 171 211 } 172 212 } 173 213 } 214 + } 174 215 175 - // save the cleaned and updated file 176 - mainJsonObject.remove("Players"); 177 - mainJsonObject.add("Players", newPlayersArray); 216 + // save the cleaned and updated file 217 + mainJsonObject.remove("Warps"); 218 + mainJsonObject.add("Warps", newWarpsArray); 219 + 220 + mainJsonObject.remove("Players"); 221 + mainJsonObject.add("Players", newPlayersArray); 178 222 179 - Gson gson = new GsonBuilder().create(); 180 - byte[] json = gson.toJson(mainJsonObject).getBytes(); 181 - Files.write(StorageManager.STORAGE_FILE, json, StandardOpenOption.WRITE, StandardOpenOption.TRUNCATE_EXISTING); 223 + // save the cleaned database 224 + Gson gson = new GsonBuilder().create(); 225 + byte[] json = gson.toJson(mainJsonObject).getBytes(); 226 + Files.write(StorageManager.STORAGE_FILE, json, StandardOpenOption.WRITE, StandardOpenOption.TRUNCATE_EXISTING); 182 227 183 - long endFileSize = Files.size(StorageManager.STORAGE_FILE); 228 + long endFileSize = Files.size(StorageManager.STORAGE_FILE); 184 229 185 - LOGGER.info("Success! Cleaned: {}B", Math.round((startFileSize - endFileSize))); 186 - } 230 + LOGGER.info("Success! Cleaned: {}B", Math.round((startFileSize - endFileSize))); 187 231 } 188 - 189 232 } catch (IOException e) { 190 - LOGGER.error(e.toString()); 233 + LOGGER.error("Error while cleaning the database!", e); 191 234 } 192 235 } 193 236 }
+26 -22
common/src/main/java/dev/mrsnowy/teleport_commands/commands/back.java
··· 23 23 24 24 public static void register(Commands commandManager) { 25 25 26 - commandManager.getDispatcher().register(Commands.literal("back").executes(context -> { 27 - final ServerPlayer player = context.getSource().getPlayerOrException(); 28 - 29 - try { 30 - ToDeathLocation(player, false); 31 - 32 - } catch (Exception e) { 33 - TeleportCommands.LOGGER.error(String.valueOf(e)); 34 - player.displayClientMessage(getTranslatedText("commands.teleport_commands.common.error", player).withStyle(ChatFormatting.RED, ChatFormatting.BOLD), true); 35 - return 1; 36 - } 37 - return 0; 38 - }) 39 - .then(argument("Disable Safety", BoolArgumentType.bool()).executes(context -> { 40 - final boolean safety = BoolArgumentType.getBool(context, "Disable Safety"); 26 + commandManager.getDispatcher().register(Commands.literal("back") 27 + .requires(source -> source.getPlayer() != null) 28 + .executes(context -> { 41 29 final ServerPlayer player = context.getSource().getPlayerOrException(); 42 30 43 31 try { 44 - ToDeathLocation(player, safety); 32 + ToDeathLocation(player, false); 45 33 46 34 } catch (Exception e) { 47 - TeleportCommands.LOGGER.error(String.valueOf(e)); 35 + TeleportCommands.LOGGER.error("Error while going back! => ", e); 48 36 player.displayClientMessage(getTranslatedText("commands.teleport_commands.common.error", player).withStyle(ChatFormatting.RED, ChatFormatting.BOLD), true); 49 37 return 1; 50 38 } 51 39 return 0; 52 - })) 40 + }) 41 + .then(argument("Disable Safety", BoolArgumentType.bool()) 42 + .requires(source -> source.getPlayer() != null) 43 + .executes(context -> { 44 + final boolean safety = BoolArgumentType.getBool(context, "Disable Safety"); 45 + final ServerPlayer player = context.getSource().getPlayerOrException(); 46 + 47 + try { 48 + ToDeathLocation(player, safety); 49 + 50 + } catch (Exception e) { 51 + TeleportCommands.LOGGER.error("Error while going back! => ", e); 52 + player.displayClientMessage(getTranslatedText("commands.teleport_commands.common.error", player).withStyle(ChatFormatting.RED, ChatFormatting.BOLD), true); 53 + return 1; 54 + } 55 + return 0; 56 + })) 53 57 ); 54 58 } 55 59 56 60 57 61 private static void ToDeathLocation(ServerPlayer player, boolean safetyDisabled) throws Exception { 58 - StorageManager.StorageClass.Player playerStorage = GetPlayerStorage(player.getStringUUID()).playerStorage; 62 + StorageManager.StorageClass.Player playerStorage = GetPlayerStorage(player.getStringUUID()).getSecond(); 59 63 60 - // todo : fix 64 + // todo : fix... what do i need to fix LMAO 61 65 62 66 if (playerStorage.deathLocation == null) { 63 67 player.displayClientMessage(getTranslatedText("commands.teleport_commands.back.noLocation", player).withStyle(ChatFormatting.RED), true); ··· 65 69 final BlockPos pos = new BlockPos(playerStorage.deathLocation.x, playerStorage.deathLocation.y, playerStorage.deathLocation.z); 66 70 67 71 boolean found = false; 68 - for (ServerLevel currentWorld : Objects.requireNonNull(player.getServer()).getAllLevels()) { 72 + for (ServerLevel currentWorld : TeleportCommands.SERVER.getAllLevels()) { 69 73 70 74 if (Objects.equals(currentWorld.dimension().location().toString(), playerStorage.deathLocation.world)) { 71 75 ··· 75 79 Pair<Integer, Optional<Vec3>> teleportData = teleportSafetyChecker(pos.getX(), pos.getY(), pos.getZ(), currentWorld, player); 76 80 77 81 switch (teleportData.getFirst()) { 78 - case 0: // safe! 82 + case 0: // safe location found! 79 83 if (teleportData.getSecond().isPresent()) { 80 84 player.displayClientMessage(getTranslatedText("commands.teleport_commands.back.go", player), true); 81 85 Teleporter(player, currentWorld, teleportData.getSecond().get());
+99 -90
common/src/main/java/dev/mrsnowy/teleport_commands/commands/home.java
··· 1 1 package dev.mrsnowy.teleport_commands.commands; 2 2 3 3 import com.mojang.brigadier.arguments.StringArgumentType; 4 + import com.mojang.datafixers.util.Pair; 4 5 import dev.mrsnowy.teleport_commands.TeleportCommands; 5 6 import dev.mrsnowy.teleport_commands.storage.StorageManager; 6 7 import dev.mrsnowy.teleport_commands.suggestions.HomeSuggestionProvider; ··· 24 25 public static void register(Commands commandManager) { 25 26 26 27 commandManager.getDispatcher().register(Commands.literal("sethome") 28 + .requires(source -> source.getPlayer() != null) 27 29 .then(argument("name", StringArgumentType.string()) 28 30 .executes(context -> { 29 31 final String name = StringArgumentType.getString(context, "name"); ··· 33 35 SetHome(player, name); 34 36 35 37 } catch (Exception e) { 36 - TeleportCommands.LOGGER.error(String.valueOf(e)); 38 + TeleportCommands.LOGGER.error("Error while setting a home! => ", e); 37 39 player.displayClientMessage(getTranslatedText("commands.teleport_commands.home.setError", player).withStyle(ChatFormatting.RED, ChatFormatting.BOLD), true); 38 40 return 1; 39 41 } ··· 42 44 43 45 44 46 commandManager.getDispatcher().register(Commands.literal("home") 47 + .requires(source -> source.getPlayer() != null) 45 48 .executes(context -> { 46 49 final ServerPlayer player = context.getSource().getPlayerOrException(); 47 50 ··· 49 52 GoHome(player, ""); 50 53 51 54 } catch (Exception e) { 52 - TeleportCommands.LOGGER.error(String.valueOf(e)); 55 + TeleportCommands.LOGGER.error("Error while going home! => ", e); 53 56 player.displayClientMessage(getTranslatedText("commands.teleport_commands.home.goError", player).withStyle(ChatFormatting.RED, ChatFormatting.BOLD), true); 54 57 return 1; 55 58 } 56 59 return 0; 57 60 }) 58 61 .then(argument("name", StringArgumentType.string()).suggests(new HomeSuggestionProvider()) 62 + .requires(source -> source.getPlayer() != null) 59 63 .executes(context -> { 60 64 final String name = StringArgumentType.getString(context, "name"); 61 65 final ServerPlayer player = context.getSource().getPlayerOrException(); ··· 64 68 GoHome(player, name); 65 69 66 70 } catch (Exception e) { 71 + TeleportCommands.LOGGER.error("Error while going to a specific home! => ", e); 67 72 player.displayClientMessage(getTranslatedText("commands.teleport_commands.home.goError", player).withStyle(ChatFormatting.RED, ChatFormatting.BOLD), true); 68 - TeleportCommands.LOGGER.error(String.valueOf(e)); 69 73 return 1; 70 74 } 71 75 return 0; 72 76 }))); 73 77 74 78 commandManager.getDispatcher().register(Commands.literal("delhome") 79 + .requires(source -> source.getPlayer() != null) 75 80 .then(argument("name", StringArgumentType.string()).suggests(new HomeSuggestionProvider()) 76 81 .executes(context -> { 77 82 final String name = StringArgumentType.getString(context, "name"); ··· 81 86 DeleteHome(player, name); 82 87 83 88 } catch (Exception e) { 84 - TeleportCommands.LOGGER.error(String.valueOf(e)); 89 + TeleportCommands.LOGGER.error("Error while deleting a home! => ", e); 85 90 player.displayClientMessage(getTranslatedText("commands.teleport_commands.home.deleteError", player).withStyle(ChatFormatting.RED, ChatFormatting.BOLD), true); 86 91 return 1; 87 92 } ··· 89 94 }))); 90 95 91 96 commandManager.getDispatcher().register(Commands.literal("renamehome") 97 + .requires(source -> source.getPlayer() != null) 92 98 .then(argument("name", StringArgumentType.string()).suggests(new HomeSuggestionProvider()) 93 99 .then(argument("newName", StringArgumentType.string()) 94 100 .executes(context -> { ··· 100 106 RenameHome(player, name, newName); 101 107 102 108 } catch (Exception e) { 103 - TeleportCommands.LOGGER.error(String.valueOf(e)); 109 + TeleportCommands.LOGGER.error("Error while renaming a home! => ", e); 104 110 player.displayClientMessage(getTranslatedText("commands.teleport_commands.home.renameError", player).withStyle(ChatFormatting.RED, ChatFormatting.BOLD), true); 105 111 return 1; 106 112 } ··· 109 115 110 116 111 117 commandManager.getDispatcher().register(Commands.literal("defaulthome") 118 + .requires(source -> source.getPlayer() != null) 112 119 .then(argument("name", StringArgumentType.string()).suggests(new HomeSuggestionProvider()) 113 120 .executes(context -> { 114 121 final String name = StringArgumentType.getString(context, "name"); ··· 118 125 SetDefaultHome(player, name); 119 126 120 127 } catch (Exception e) { 121 - TeleportCommands.LOGGER.error(String.valueOf(e)); 128 + TeleportCommands.LOGGER.error("Error while setting the default home! => ", e); 122 129 player.displayClientMessage(getTranslatedText("commands.teleport_commands.home.defaultError", player).withStyle(ChatFormatting.RED, ChatFormatting.BOLD), true); 123 130 return 1; 124 131 } ··· 126 133 }))); 127 134 128 135 commandManager.getDispatcher().register(Commands.literal("homes") 136 + .requires(source -> source.getPlayer() != null) 129 137 .executes(context -> { 130 138 final ServerPlayer player = context.getSource().getPlayerOrException(); 131 139 ··· 133 141 PrintHomes(player); 134 142 135 143 } catch (Exception e) { 136 - TeleportCommands.LOGGER.error(String.valueOf(e)); 144 + TeleportCommands.LOGGER.error("Error while printing the homes! => ", e); 137 145 player.displayClientMessage(getTranslatedText("commands.teleport_commands.homes.error", player).withStyle(ChatFormatting.RED, ChatFormatting.BOLD), true); 138 146 return 1; 139 147 } ··· 148 156 BlockPos blockPos = new BlockPos(player.getBlockX(), player.getBlockY(), player.getBlockZ()); 149 157 ServerLevel world = player.serverLevel(); 150 158 151 - StorageManager.PlayerStorageClass storages = GetPlayerStorage(player.getStringUUID()); 152 - StorageManager.StorageClass storage = storages.storage; 153 - StorageManager.StorageClass.Player playerStorage = storages.playerStorage; 159 + Pair<StorageManager.StorageClass, StorageManager.StorageClass.Player> storages = GetPlayerStorage(player.getStringUUID()); 160 + StorageManager.StorageClass storage = storages.getFirst(); 161 + StorageManager.StorageClass.Player playerStorage = storages.getSecond(); 154 162 155 163 boolean homeNotFound = true; 156 164 157 165 // check for duplicates 158 - for (StorageManager.StorageClass.Player.Home currentHome : playerStorage.Homes) { 166 + for (StorageManager.StorageClass.NamedLocation currentHome : playerStorage.Homes) { 159 167 if (Objects.equals(currentHome.name, homeName)) { 160 168 homeNotFound = false; 161 169 break; ··· 163 171 } 164 172 165 173 if (homeNotFound) { 166 - // Create a new Home 167 - StorageManager.StorageClass.Player.Home homeLocation = new StorageManager.StorageClass.Player.Home(); 174 + // Create a new NamedLocation 175 + StorageManager.StorageClass.NamedLocation homeLocation = new StorageManager.StorageClass.NamedLocation(); 168 176 169 177 homeLocation.name = homeName; 170 178 homeLocation.x = blockPos.getX(); ··· 187 195 188 196 private static void GoHome(ServerPlayer player, String homeName) throws Exception { 189 197 homeName = homeName.toLowerCase(); 190 - StorageManager.StorageClass.Player playerStorage = GetPlayerStorage(player.getStringUUID()).playerStorage; 198 + StorageManager.StorageClass.Player playerStorage = GetPlayerStorage(player.getStringUUID()).getSecond(); 191 199 192 200 // check if there is a default exists 193 201 if (homeName.isEmpty()) { ··· 202 210 boolean foundWorld = false; 203 211 204 212 // find correct home 205 - for (StorageManager.StorageClass.Player.Home currentHome : playerStorage.Homes) { 206 - if (Objects.equals(currentHome.name, homeName)){ 213 + for (StorageManager.StorageClass.NamedLocation currentHome : playerStorage.Homes) { 214 + if (Objects.equals(currentHome.name, homeName)) { 207 215 208 216 // find correct world 209 - for (ServerLevel currentWorld : Objects.requireNonNull(player.getServer()).getAllLevels()) { 217 + for (ServerLevel currentWorld : TeleportCommands.SERVER.getAllLevels()) { 210 218 if (Objects.equals(currentWorld.dimension().location().toString(), currentHome.world)) { 211 219 foundWorld = true; 212 220 213 - BlockPos coords = new BlockPos(currentHome.x, currentHome.y, currentHome.z); 221 + BlockPos blockPos = new BlockPos(currentHome.x, currentHome.y, currentHome.z); 214 222 BlockPos playerBlockPos = new BlockPos(player.getBlockX(), player.getBlockY(), player.getBlockZ()); 215 223 216 - if (!playerBlockPos.equals(coords)) { 224 + if (!playerBlockPos.equals(blockPos) || player.level() != currentWorld) { 217 225 player.displayClientMessage(getTranslatedText("commands.teleport_commands.home.go", player), true); 218 226 Teleporter(player, currentWorld, new Vec3(currentHome.x + 0.5, currentHome.y, currentHome.z + 0.5)); 219 227 } else { ··· 232 240 233 241 private static void DeleteHome(ServerPlayer player, String homeName) throws Exception { 234 242 homeName = homeName.toLowerCase(); 235 - StorageManager.PlayerStorageClass storages = GetPlayerStorage(player.getStringUUID()); 236 - StorageManager.StorageClass storage = storages.storage; 237 - StorageManager.StorageClass.Player playerStorage = storages.playerStorage; 243 + Pair<StorageManager.StorageClass, StorageManager.StorageClass.Player> storages = GetPlayerStorage(player.getStringUUID()); 244 + StorageManager.StorageClass storage = storages.getFirst(); 245 + StorageManager.StorageClass.Player playerStorage = storages.getSecond(); 238 246 239 - StorageManager.StorageClass.Player.Home homeToDelete = null; 247 + boolean deletedHome = false; 240 248 241 249 // get correct home 242 - for (StorageManager.StorageClass.Player.Home currentHome : playerStorage.Homes) { 243 - if (Objects.equals(currentHome.name, homeName)){ 244 - homeToDelete = currentHome; 250 + for (StorageManager.StorageClass.NamedLocation currentHome : playerStorage.Homes) { 251 + if (Objects.equals(currentHome.name, homeName)) { 252 + // delete the home 253 + playerStorage.Homes.remove(currentHome); 254 + StorageSaver(storage); 255 + 256 + deletedHome = true; 257 + player.displayClientMessage(getTranslatedText("commands.teleport_commands.home.delete", player), true); 245 258 break; 246 259 } 247 260 } 248 261 249 - if (Objects.nonNull(homeToDelete)) { 250 - playerStorage.Homes.remove(homeToDelete); 251 - StorageSaver(storage); 252 - player.displayClientMessage(getTranslatedText("commands.teleport_commands.home.delete", player), true); 253 - } else { 262 + if (!deletedHome) { 254 263 player.displayClientMessage(getTranslatedText("commands.teleport_commands.home.notFound", player).withStyle(ChatFormatting.RED), true); 255 264 } 256 265 } ··· 259 268 homeName = homeName.toLowerCase(); 260 269 newHomeName = newHomeName.toLowerCase(); 261 270 262 - StorageManager.PlayerStorageClass storages = GetPlayerStorage(player.getStringUUID()); 263 - StorageManager.StorageClass storage = storages.storage; 264 - StorageManager.StorageClass.Player playerStorage = storages.playerStorage; 271 + Pair<StorageManager.StorageClass, StorageManager.StorageClass.Player> storages = GetPlayerStorage(player.getStringUUID()); 272 + StorageManager.StorageClass storage = storages.getFirst(); 273 + StorageManager.StorageClass.Player playerStorage = storages.getSecond(); 265 274 266 - StorageManager.StorageClass.Player.Home homeToRename = null; 267 275 boolean newNameNotFound = true; 276 + boolean WarpRenamed = false; 268 277 269 278 // check for duplicates 270 - for (StorageManager.StorageClass.Player.Home currentHome : playerStorage.Homes) { 279 + for (StorageManager.StorageClass.NamedLocation currentHome : playerStorage.Homes) { 271 280 if (Objects.equals(currentHome.name, newHomeName)) { 272 281 newNameNotFound = false; 273 282 break; ··· 276 285 277 286 if (newNameNotFound) { 278 287 // get correct home 279 - for (StorageManager.StorageClass.Player.Home currentHome : playerStorage.Homes) { 280 - if (Objects.equals(currentHome.name, homeName)){ 281 - homeToRename = currentHome; 288 + for (StorageManager.StorageClass.NamedLocation currentHome : playerStorage.Homes) { 289 + if (Objects.equals(currentHome.name, homeName)) { 290 + 291 + // if the current home is the default home, then change to the new name in the config 292 + if (Objects.equals(playerStorage.DefaultHome, currentHome.name)) { 293 + playerStorage.DefaultHome = newHomeName; 294 + } 295 + 296 + currentHome.name = newHomeName; 297 + StorageSaver(storage); 298 + 299 + WarpRenamed = true; 300 + player.displayClientMessage(getTranslatedText("commands.teleport_commands.home.rename", player), true); 282 301 break; 283 302 } 284 303 } 285 304 286 - if (Objects.nonNull(homeToRename)) { 287 - // if the current home is the default home, then change to the new name in the config 288 - if (Objects.equals(playerStorage.DefaultHome, homeToRename.name)) { 289 - playerStorage.DefaultHome = newHomeName; 290 - } 291 - 292 - homeToRename.name = newHomeName; 293 - StorageSaver(storage); 294 - player.displayClientMessage(getTranslatedText("commands.teleport_commands.home.rename", player), true); 295 - } else { 305 + if (!WarpRenamed) { 296 306 player.displayClientMessage(getTranslatedText("commands.teleport_commands.home.notFound", player).withStyle(ChatFormatting.RED), true); 297 307 } 298 308 } else { ··· 303 313 304 314 private static void SetDefaultHome(ServerPlayer player, String homeName) throws Exception { 305 315 homeName = homeName.toLowerCase(); 306 - StorageManager.PlayerStorageClass storages = GetPlayerStorage(player.getStringUUID()); 307 - StorageManager.StorageClass storage = storages.storage; 308 - StorageManager.StorageClass.Player playerStorage = storages.playerStorage; 316 + 317 + Pair<StorageManager.StorageClass, StorageManager.StorageClass.Player> storages = GetPlayerStorage(player.getStringUUID()); 318 + StorageManager.StorageClass storage = storages.getFirst(); 319 + StorageManager.StorageClass.Player playerStorage = storages.getSecond(); 309 320 310 321 boolean homeExists = false; 311 322 312 323 // check if home exists 313 - for (StorageManager.StorageClass.Player.Home currentHome : playerStorage.Homes) { 324 + for (StorageManager.StorageClass.NamedLocation currentHome : playerStorage.Homes) { 314 325 if (Objects.equals(currentHome.name, homeName)){ 315 326 homeExists = true; 316 327 break; ··· 334 345 } 335 346 336 347 private static void PrintHomes(ServerPlayer player) throws Exception { 337 - StorageManager.StorageClass.Player playerStorage = GetPlayerStorage(player.getStringUUID()).playerStorage; 338 - boolean anyHomes = false; 348 + StorageManager.StorageClass.Player playerStorage = GetPlayerStorage(player.getStringUUID()).getSecond(); 339 349 340 - for (StorageManager.StorageClass.Player.Home currenthome : playerStorage.Homes) { 341 - if (!anyHomes) { 342 - player.displayClientMessage(getTranslatedText("commands.teleport_commands.homes.homes", player).withStyle(ChatFormatting.YELLOW, ChatFormatting.BOLD) 343 - .append("\n"), false); 344 - anyHomes = true; 345 - } 350 + if (playerStorage.Homes.isEmpty()) { 351 + player.displayClientMessage(getTranslatedText("commands.teleport_commands.home.homeless", player).withStyle(ChatFormatting.AQUA), true); 346 352 347 - String name = String.format(" - %s", currenthome.name); 353 + } else { 354 + player.displayClientMessage(getTranslatedText("commands.teleport_commands.homes.homes", player).withStyle(ChatFormatting.YELLOW, ChatFormatting.BOLD) 355 + .append("\n"), false); 348 356 357 + for (StorageManager.StorageClass.NamedLocation currentHome : playerStorage.Homes) { 349 358 350 - String coords = String.format("[X%d Y%d Z%d]", currenthome.x, currenthome.y, currenthome.z); 351 - String dimension = String.format(" [%s]", currenthome.world); 359 + String name = String.format(" - %s", currentHome.name); 360 + String coords = String.format("[X%d Y%d Z%d]", currentHome.x, currentHome.y, currentHome.z); 361 + String dimension = String.format(" [%s]", currentHome.world); 352 362 353 - if (Objects.equals(currenthome.name, playerStorage.DefaultHome)) { 354 - player.displayClientMessage(Component.literal(name).withStyle(ChatFormatting.AQUA) 363 + if (Objects.equals(currentHome.name, playerStorage.DefaultHome)) { 364 + player.displayClientMessage(Component.literal(name).withStyle(ChatFormatting.AQUA) 365 + .append(" ") 366 + .append(getTranslatedText("commands.teleport_commands.common.default", player).withStyle(ChatFormatting.AQUA, ChatFormatting.BOLD)), 367 + false 368 + ); 369 + } else { 370 + player.displayClientMessage(Component.literal(name).withStyle(ChatFormatting.AQUA), false); 371 + } 372 + 373 + 374 + player.displayClientMessage(Component.literal(" | ").withStyle(ChatFormatting.AQUA) 375 + .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))))) 376 + .append(Component.literal(dimension).withStyle(ChatFormatting.DARK_PURPLE).withStyle(style -> style.withClickEvent(new ClickEvent(ClickEvent.Action.COPY_TO_CLIPBOARD, currentHome.world)))), 377 + false 378 + ); 379 + 380 + player.displayClientMessage(Component.literal(" | ").withStyle(ChatFormatting.AQUA) 381 + .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))))) 355 382 .append(" ") 356 - .append(getTranslatedText("commands.teleport_commands.homes.default", player).withStyle(ChatFormatting.AQUA, ChatFormatting.BOLD)), 383 + .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))))) 384 + .append(" ") 385 + .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))))) 386 + .append("\n"), 357 387 false 358 388 ); 359 - } else { 360 - player.displayClientMessage(Component.literal(name).withStyle(ChatFormatting.AQUA), false); 361 389 } 362 390 363 - 364 - player.displayClientMessage(Component.literal(" | ").withStyle(ChatFormatting.AQUA) 365 - .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))))) 366 - .append(Component.literal(dimension).withStyle(ChatFormatting.DARK_PURPLE).withStyle(style -> style.withClickEvent(new ClickEvent(ClickEvent.Action.COPY_TO_CLIPBOARD, currenthome.world)))), 367 - false 368 - ); 369 - 370 - player.displayClientMessage(Component.literal(" | ").withStyle(ChatFormatting.AQUA) 371 - .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))))) 372 - .append(" ") 373 - .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))))) 374 - .append(" ") 375 - .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))))) 376 - .append("\n"), 377 - false 378 - ); 379 391 } 392 + } 380 393 381 - if (!anyHomes) { 382 - player.displayClientMessage(getTranslatedText("commands.teleport_commands.home.homeless", player).withStyle(ChatFormatting.AQUA), true); 383 - } 384 - } 385 - } 394 + }
+42 -13
common/src/main/java/dev/mrsnowy/teleport_commands/commands/tpa.java
··· 3 3 import java.util.*; 4 4 5 5 import com.mojang.datafixers.util.Pair; 6 + import dev.mrsnowy.teleport_commands.TeleportCommands; 6 7 import dev.mrsnowy.teleport_commands.suggestions.tpaSuggestionProvider; 7 8 8 9 import net.minecraft.ChatFormatting; ··· 28 29 public static void register(Commands commandManager) { 29 30 30 31 commandManager.getDispatcher().register(Commands.literal("tpa") 32 + .requires(source -> source.getPlayer() != null) 31 33 .then(Commands.argument("player", EntityArgument.player()) 32 34 .executes(context -> { 33 35 final ServerPlayer TargetPlayer = EntityArgument.getPlayer(context, "player"); 34 36 final ServerPlayer player = context.getSource().getPlayerOrException(); 35 37 36 - tpaCommandHandler(player, TargetPlayer, false); 38 + try { 39 + tpaCommandHandler(player, TargetPlayer, false); 40 + 41 + } catch (Exception e) { 42 + // 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. 43 + // if it appears that this can happen then I'll add error messages for the client, for now the default minecraft ones will do 44 + TeleportCommands.LOGGER.error("Error while sending a tpa request! => ", e); 45 + return 1; 46 + } 37 47 return 0; 38 48 }))); 39 49 40 50 commandManager.getDispatcher().register(Commands.literal("tpahere") 51 + .requires(source -> source.getPlayer() != null) 41 52 .then(Commands.argument("player", EntityArgument.player()) 42 53 .executes(context -> { 43 54 final ServerPlayer TargetPlayer = EntityArgument.getPlayer(context, "player"); 44 55 final ServerPlayer player = context.getSource().getPlayerOrException(); 45 56 57 + try { 58 + tpaCommandHandler(player, TargetPlayer, true); 46 59 47 - tpaCommandHandler(player, TargetPlayer, true); 60 + } catch (Exception e) { 61 + TeleportCommands.LOGGER.error("Error while sending a tpahere request! => ", e); 62 + return 1; 63 + } 48 64 return 0; 49 65 }))); 50 66 51 67 commandManager.getDispatcher().register(Commands.literal("tpaaccept") 68 + .requires(source -> source.getPlayer() != null) 52 69 .then(Commands.argument("player", EntityArgument.player()).suggests(new tpaSuggestionProvider()) 53 70 .executes(context -> { 54 71 final ServerPlayer TargetPlayer = EntityArgument.getPlayer(context, "player"); 55 72 final ServerPlayer player = context.getSource().getPlayerOrException(); 56 73 57 - tpaAccept(player, TargetPlayer); 74 + try { 75 + tpaAccept(player, TargetPlayer); 76 + 77 + } catch (Exception e) { 78 + TeleportCommands.LOGGER.error("Error while accepting a tpa(here) request! => ", e); 79 + return 1; 80 + } 81 + 58 82 return 0; 59 83 }))); 60 84 61 85 commandManager.getDispatcher().register(Commands.literal("tpadeny") 86 + .requires(source -> source.getPlayer() != null) 62 87 .then(Commands.argument("player", EntityArgument.player()).suggests(new tpaSuggestionProvider()) 63 88 .executes(context -> { 64 89 final ServerPlayer TargetPlayer = EntityArgument.getPlayer(context, "player"); 65 90 final ServerPlayer player = context.getSource().getPlayerOrException(); 66 91 67 - tpaDeny(player, TargetPlayer); 92 + try { 93 + tpaDeny(player, TargetPlayer); 94 + 95 + } catch (Exception e) { 96 + TeleportCommands.LOGGER.error("Error while denying a tpa(here) request! => ", e); 97 + player.displayClientMessage(getTranslatedText("commands.teleport_commands.home.setError", player).withStyle(ChatFormatting.RED, ChatFormatting.BOLD), true); 98 + return 1; 99 + } 100 + 68 101 return 0; 69 102 }))); 70 103 } 71 - 72 104 73 105 74 106 private static void tpaCommandHandler(ServerPlayer FromPlayer, ServerPlayer ToPlayer, boolean here) throws NullPointerException { ··· 79 111 80 112 81 113 if (FromPlayer == ToPlayer) { 82 - FromPlayer.displayClientMessage(getTranslatedText("commands.teleport_commands.tpa.self", FromPlayer).withStyle(ChatFormatting.AQUA),true); 114 + FromPlayer.displayClientMessage(getTranslatedText("commands.teleport_commands.tpa.self", FromPlayer).withStyle(ChatFormatting.AQUA), true); 83 115 84 116 } else if (playerTpaList >= 1) { 85 117 FromPlayer.displayClientMessage(getTranslatedText("commands.teleport_commands.tpa.alreadySent", FromPlayer, Component.literal(Objects.requireNonNull(ToPlayer.getName().getString())).withStyle(ChatFormatting.BOLD)).withStyle(ChatFormatting.AQUA) 86 - ,true 118 + , true 87 119 ); 88 120 89 121 } else { ··· 105 137 ); 106 138 107 139 ToPlayer.displayClientMessage(getTranslatedText("commands.teleport_commands.tpa.received", ToPlayer, Component.literal(hereText), Component.literal(ReceivedFromPlayer).withStyle(ChatFormatting.AQUA, ChatFormatting.BOLD)).withStyle(ChatFormatting.AQUA) 108 - .append("\n") 109 - .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))))) 110 - .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))))), 140 + .append("\n") 141 + .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))))) 142 + .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))))), 111 143 false 112 144 ); 113 145 ··· 121 153 FromPlayer.displayClientMessage(getTranslatedText("commands.teleport_commands.tpa.expired", FromPlayer, Component.literal(hereText)).withStyle(ChatFormatting.RED, ChatFormatting.BOLD),true); 122 154 ToPlayer.displayClientMessage(getTranslatedText("commands.teleport_commands.tpa.expired", ToPlayer, Component.literal(hereText)).withStyle(ChatFormatting.WHITE),true); 123 155 } 124 - // else { 125 - // TeleportCommands.LOGGER.error("Error removing tpaRequest from tpaList!"); 126 - // } 127 156 // else not needed since it may be denied/cancelled 128 157 } 129 158 }, 30 * 1000 // 30 seconds
+320
common/src/main/java/dev/mrsnowy/teleport_commands/commands/warp.java
··· 1 + package dev.mrsnowy.teleport_commands.commands; 2 + 3 + import com.mojang.brigadier.arguments.StringArgumentType; 4 + import com.mojang.datafixers.util.Pair; 5 + import dev.mrsnowy.teleport_commands.TeleportCommands; 6 + import dev.mrsnowy.teleport_commands.storage.StorageManager; 7 + import dev.mrsnowy.teleport_commands.suggestions.HomeSuggestionProvider; 8 + import dev.mrsnowy.teleport_commands.suggestions.WarpSuggestionProvider; 9 + import net.minecraft.ChatFormatting; 10 + import net.minecraft.commands.Commands; 11 + import net.minecraft.core.BlockPos; 12 + import net.minecraft.network.chat.ClickEvent; 13 + import net.minecraft.network.chat.Component; 14 + import net.minecraft.server.level.ServerLevel; 15 + import net.minecraft.server.level.ServerPlayer; 16 + import net.minecraft.world.phys.Vec3; 17 + 18 + import java.util.List; 19 + import java.util.Objects; 20 + 21 + import static dev.mrsnowy.teleport_commands.storage.StorageManager.*; 22 + import static dev.mrsnowy.teleport_commands.utils.tools.Teleporter; 23 + import static dev.mrsnowy.teleport_commands.utils.tools.getTranslatedText; 24 + import static net.minecraft.commands.Commands.argument; 25 + 26 + public class warp { 27 + public static void register(Commands commandManager) { 28 + 29 + commandManager.getDispatcher().register(Commands.literal("setwarp") 30 + .requires(source -> 31 + source.getPlayer() != null && 32 + source.hasPermission(4) 33 + ) 34 + .then(argument("name", StringArgumentType.string()) 35 + .executes(context -> { 36 + final String name = StringArgumentType.getString(context, "name"); 37 + final ServerPlayer player = context.getSource().getPlayerOrException(); 38 + 39 + try { 40 + SetWarp(player, name); 41 + 42 + } catch (Exception e) { 43 + TeleportCommands.LOGGER.error("Error while setting the warp!", e); 44 + player.displayClientMessage(getTranslatedText("commands.teleport_commands.warp.setError", player).withStyle(ChatFormatting.RED, ChatFormatting.BOLD), true); 45 + return 1; 46 + } 47 + return 0; 48 + }))); 49 + 50 + commandManager.getDispatcher().register(Commands.literal("warp") 51 + .requires(source -> source.getPlayer() != null) 52 + .then(argument("name", StringArgumentType.string()).suggests(new WarpSuggestionProvider()) 53 + .executes(context -> { 54 + final String name = StringArgumentType.getString(context, "name"); 55 + final ServerPlayer player = context.getSource().getPlayerOrException(); 56 + 57 + try { 58 + GoToWarp(player, name); 59 + 60 + } catch (Exception e) { 61 + TeleportCommands.LOGGER.error("Error while going to the warp!", e); 62 + player.displayClientMessage(getTranslatedText("commands.teleport_commands.warp.goError", player).withStyle(ChatFormatting.RED, ChatFormatting.BOLD), true); 63 + return 1; 64 + } 65 + return 0; 66 + }))); 67 + 68 + commandManager.getDispatcher().register(Commands.literal("delwarp") 69 + .requires(source -> 70 + source.getPlayer() != null && 71 + source.hasPermission(4) 72 + ) 73 + .then(argument("name", StringArgumentType.string()).suggests(new WarpSuggestionProvider()) 74 + .executes(context -> { 75 + final String name = StringArgumentType.getString(context, "name"); 76 + final ServerPlayer player = context.getSource().getPlayerOrException(); 77 + 78 + try { 79 + DeleteWarp(player, name); 80 + 81 + } catch (Exception e) { 82 + TeleportCommands.LOGGER.error("Error while deleting to the warp!", e); 83 + player.displayClientMessage(getTranslatedText("commands.teleport_commands.warp.deleteError", player).withStyle(ChatFormatting.RED, ChatFormatting.BOLD), true); 84 + return 1; 85 + } 86 + return 0; 87 + }))); 88 + 89 + commandManager.getDispatcher().register(Commands.literal("renamewarp") 90 + .requires(source -> 91 + source.getPlayer() != null && 92 + source.hasPermission(4) 93 + ) 94 + .then(argument("name", StringArgumentType.string()).suggests(new WarpSuggestionProvider()) 95 + .then(argument("newName", StringArgumentType.string()) 96 + .executes(context -> { 97 + final String name = StringArgumentType.getString(context, "name"); 98 + final String newName = StringArgumentType.getString(context, "newName"); 99 + final ServerPlayer player = context.getSource().getPlayerOrException(); 100 + 101 + try { 102 + RenameWarp(player, name, newName); 103 + 104 + } catch (Exception e) { 105 + TeleportCommands.LOGGER.error("Error while renaming the warp!", e); 106 + player.displayClientMessage(getTranslatedText("commands.teleport_commands.warp.renameError", player).withStyle(ChatFormatting.RED, ChatFormatting.BOLD), true); 107 + return 1; 108 + } 109 + return 0; 110 + })))); 111 + 112 + commandManager.getDispatcher().register(Commands.literal("warps") 113 + .requires(source -> source.getPlayer() != null) 114 + .executes(context -> { 115 + final ServerPlayer player = context.getSource().getPlayerOrException(); 116 + 117 + try { 118 + PrintWarps(player); 119 + 120 + } catch (Exception e) { 121 + TeleportCommands.LOGGER.error("Error while printing warps!", e); 122 + player.displayClientMessage(getTranslatedText("commands.teleport_commands.warps.error", player).withStyle(ChatFormatting.RED, ChatFormatting.BOLD), true); 123 + return 1; 124 + } 125 + return 0; 126 + })); 127 + } 128 + 129 + 130 + private static void SetWarp(ServerPlayer player, String warpName) throws Exception { 131 + warpName = warpName.toLowerCase(); 132 + 133 + BlockPos blockPos = new BlockPos(player.getBlockX(), player.getBlockY(), player.getBlockZ()); 134 + ServerLevel world = player.serverLevel(); 135 + 136 + Pair<StorageClass, List<StorageClass.NamedLocation>> storages = getWarpStorage(); 137 + StorageClass storage = storages.getFirst(); 138 + List<StorageClass.NamedLocation> WarpStorage = storages.getSecond(); 139 + 140 + boolean warpNotFound = true; 141 + 142 + // check for duplicates 143 + for (StorageClass.NamedLocation currentWarp : WarpStorage) { 144 + if (Objects.equals(currentWarp.name, warpName)) { 145 + warpNotFound = false; 146 + break; 147 + } 148 + } 149 + 150 + if (warpNotFound) { 151 + // Create a new NamedLocation 152 + StorageClass.NamedLocation warpData = new StorageClass.NamedLocation(); 153 + 154 + warpData.name = warpName; 155 + warpData.x = blockPos.getX(); 156 + warpData.y = blockPos.getY(); 157 + warpData.z = blockPos.getZ(); 158 + warpData.world = world.dimension().location().toString(); 159 + 160 + storage.Warps.add(warpData); 161 + 162 + StorageSaver(storage); 163 + player.displayClientMessage(getTranslatedText("commands.teleport_commands.warp.set", player), true); 164 + } else { 165 + player.displayClientMessage(getTranslatedText("commands.teleport_commands.warp.exists", player).withStyle(ChatFormatting.RED), true); 166 + } 167 + } 168 + 169 + private static void GoToWarp(ServerPlayer player, String warpName) throws Exception { 170 + warpName = warpName.toLowerCase(); 171 + List<StorageClass.NamedLocation> WarpStorage = getWarpStorage().getSecond(); 172 + 173 + boolean foundWorld = false; 174 + 175 + // find correct warp 176 + for (StorageClass.NamedLocation currentWarp : WarpStorage) { 177 + if (Objects.equals(currentWarp.name, warpName)) { 178 + 179 + // find correct world 180 + for (ServerLevel currentWorld : TeleportCommands.SERVER.getAllLevels()) { 181 + if (Objects.equals(currentWorld.dimension().location().toString(), currentWarp.world)) { 182 + foundWorld = true; 183 + 184 + BlockPos coords = new BlockPos(currentWarp.x, currentWarp.y, currentWarp.z); 185 + BlockPos playerBlockPos = new BlockPos(player.getBlockX(), player.getBlockY(), player.getBlockZ()); 186 + 187 + if (!playerBlockPos.equals(coords)) { 188 + player.displayClientMessage(getTranslatedText("commands.teleport_commands.warp.go", player), true); 189 + Teleporter(player, currentWorld, new Vec3(currentWarp.x + 0.5, currentWarp.y, currentWarp.z + 0.5)); 190 + } else { 191 + player.displayClientMessage(getTranslatedText("commands.teleport_commands.warp.goSame", player).withStyle(ChatFormatting.AQUA), true); 192 + } 193 + break; 194 + } 195 + } 196 + } 197 + } 198 + 199 + if (!foundWorld) { 200 + player.displayClientMessage(getTranslatedText("commands.teleport_commands.warp.notFound", player).withStyle(ChatFormatting.RED), true); 201 + } 202 + } 203 + 204 + private static void DeleteWarp(ServerPlayer player, String warpName) throws Exception { 205 + warpName = warpName.toLowerCase(); 206 + 207 + Pair<StorageClass, List<StorageClass.NamedLocation>> storages = getWarpStorage(); 208 + StorageClass storage = storages.getFirst(); 209 + List<StorageClass.NamedLocation> WarpStorage = storages.getSecond(); 210 + 211 + boolean deletedWarp = false; 212 + 213 + // get correct warp 214 + for (StorageManager.StorageClass.NamedLocation currentWarp : WarpStorage) { 215 + if (Objects.equals(currentWarp.name, warpName)){ 216 + // delete the warp 217 + WarpStorage.remove(currentWarp); 218 + StorageSaver(storage); 219 + 220 + deletedWarp = true; 221 + player.displayClientMessage(getTranslatedText("commands.teleport_commands.warp.delete", player), true); 222 + break; 223 + } 224 + } 225 + 226 + if (!deletedWarp) { 227 + player.displayClientMessage(getTranslatedText("commands.teleport_commands.warp.notFound", player).withStyle(ChatFormatting.RED), true); 228 + } 229 + } 230 + 231 + private static void RenameWarp(ServerPlayer player, String warpName, String newWarpName) throws Exception { 232 + warpName = warpName.toLowerCase(); 233 + newWarpName = newWarpName.toLowerCase(); 234 + 235 + Pair<StorageClass, List<StorageClass.NamedLocation>> storages = getWarpStorage(); 236 + StorageClass storage = storages.getFirst(); 237 + List<StorageClass.NamedLocation> WarpStorage = storages.getSecond(); 238 + 239 + StorageManager.StorageClass.NamedLocation homeToRename = null; 240 + 241 + boolean newWarpNotFound = true; 242 + boolean WarpRenamed = false; 243 + 244 + // check for duplicates 245 + for (StorageClass.NamedLocation currentWarp : WarpStorage) { 246 + if (Objects.equals(currentWarp.name, newWarpName)) { 247 + newWarpNotFound = false; 248 + break; 249 + } 250 + } 251 + 252 + if (newWarpNotFound) { 253 + // get correct warp and rename 254 + for (StorageManager.StorageClass.NamedLocation currentWarp : WarpStorage) { 255 + if (Objects.equals(currentWarp.name, warpName)){ 256 + 257 + currentWarp.name = newWarpName; 258 + StorageSaver(storage); 259 + WarpRenamed = true; 260 + player.displayClientMessage(getTranslatedText("commands.teleport_commands.warp.rename", player), true); 261 + 262 + break; 263 + } 264 + } 265 + 266 + if (!WarpRenamed) { 267 + player.displayClientMessage(getTranslatedText("commands.teleport_commands.warp.notFound", player).withStyle(ChatFormatting.RED), true); 268 + } 269 + } else { 270 + player.displayClientMessage(getTranslatedText("commands.teleport_commands.warp.renameExists", player).withStyle(ChatFormatting.RED), true); 271 + } 272 + 273 + } 274 + 275 + private static void PrintWarps(ServerPlayer player) throws Exception { 276 + List<StorageClass.NamedLocation> WarpStorage = getWarpStorage().getSecond(); 277 + 278 + if (WarpStorage.isEmpty()) { 279 + player.displayClientMessage(getTranslatedText("commands.teleport_commands.warp.homeless", player).withStyle(ChatFormatting.AQUA), true); 280 + 281 + } else { 282 + player.displayClientMessage(getTranslatedText("commands.teleport_commands.warps.warps", player).withStyle(ChatFormatting.YELLOW, ChatFormatting.BOLD) 283 + .append("\n"), false); 284 + 285 + for (StorageManager.StorageClass.NamedLocation currentWarp : WarpStorage) { 286 + 287 + String name = String.format(" - %s", currentWarp.name); 288 + String coords = String.format("[X%d Y%d Z%d]", currentWarp.x, currentWarp.y, currentWarp.z); 289 + String dimension = String.format(" [%s]", currentWarp.world); 290 + 291 + player.displayClientMessage(Component.literal(name).withStyle(ChatFormatting.AQUA), false); 292 + 293 + player.displayClientMessage(Component.literal(" | ").withStyle(ChatFormatting.AQUA) 294 + .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))))) 295 + .append(Component.literal(dimension).withStyle(ChatFormatting.DARK_PURPLE).withStyle(style -> style.withClickEvent(new ClickEvent(ClickEvent.Action.COPY_TO_CLIPBOARD, currentWarp.world)))), 296 + false 297 + ); 298 + 299 + if (player.hasPermissions(4)) { 300 + player.displayClientMessage(Component.literal(" | ").withStyle(ChatFormatting.AQUA) 301 + .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))))) 302 + .append(" ") 303 + .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))))) 304 + .append(" ") 305 + .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))))) 306 + .append("\n"), 307 + false 308 + ); 309 + } else { 310 + player.displayClientMessage(Component.literal(" | ").withStyle(ChatFormatting.AQUA) 311 + .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))))) 312 + .append("\n"), 313 + false 314 + ); 315 + } 316 + } 317 + 318 + } 319 + } 320 + }
+95
common/src/main/java/dev/mrsnowy/teleport_commands/commands/worldspawn.java
··· 1 + package dev.mrsnowy.teleport_commands.commands; 2 + 3 + import com.mojang.brigadier.arguments.BoolArgumentType; 4 + import com.mojang.datafixers.util.Pair; 5 + import dev.mrsnowy.teleport_commands.TeleportCommands; 6 + import net.minecraft.ChatFormatting; 7 + import net.minecraft.commands.Commands; 8 + import net.minecraft.core.BlockPos; 9 + import net.minecraft.network.chat.ClickEvent; 10 + import net.minecraft.server.level.ServerLevel; 11 + import net.minecraft.server.level.ServerPlayer; 12 + import net.minecraft.world.phys.Vec3; 13 + 14 + import java.util.Iterator; 15 + import java.util.Objects; 16 + import java.util.Optional; 17 + 18 + import static dev.mrsnowy.teleport_commands.utils.tools.*; 19 + import static net.minecraft.commands.Commands.argument; 20 + 21 + import static net.minecraft.world.level.Level.OVERWORLD; 22 + 23 + public class worldspawn { 24 + 25 + public static void register(Commands commandManager) { 26 + commandManager.getDispatcher().register(Commands.literal("worldspawn") 27 + .requires(source -> source.getPlayer() != null) 28 + .executes(context -> { 29 + final ServerPlayer player = context.getSource().getPlayerOrException(); 30 + 31 + try { 32 + toWorldSpawn(player, false); 33 + 34 + } catch (Exception error) { 35 + TeleportCommands.LOGGER.error("Error while going back! => ", error); 36 + player.displayClientMessage(getTranslatedText("commands.teleport_commands.common.error", player).withStyle(ChatFormatting.RED, ChatFormatting.BOLD), true); 37 + return 1; 38 + } 39 + return 0; 40 + }) 41 + .then(argument("Disable Safety", BoolArgumentType.bool()) 42 + .requires(source -> source.getPlayer() != null) 43 + .executes(context -> { 44 + final boolean safety = BoolArgumentType.getBool(context, "Disable Safety"); 45 + final ServerPlayer player = context.getSource().getPlayerOrException(); 46 + 47 + try { 48 + toWorldSpawn(player, safety); 49 + 50 + } catch (Exception error) { 51 + TeleportCommands.LOGGER.error("Error while going back! => ", error); 52 + player.displayClientMessage(getTranslatedText("commands.teleport_commands.common.error", player).withStyle(ChatFormatting.RED, ChatFormatting.BOLD), true); 53 + return 1; 54 + } 55 + return 0; 56 + }))); 57 + 58 + 59 + } 60 + 61 + private static void toWorldSpawn(ServerPlayer player, boolean safetyDisabled) { 62 + ServerLevel world = TeleportCommands.SERVER.getLevel(OVERWORLD); 63 + BlockPos worldSpawn = Objects.requireNonNull(world).getSharedSpawnPos(); 64 + 65 + 66 + if (!safetyDisabled) { 67 + Pair<Integer, Optional<Vec3>> teleportData = teleportSafetyChecker(worldSpawn.getX(), worldSpawn.getY(), worldSpawn.getZ(), world, player); 68 + 69 + switch (teleportData.getFirst()) { 70 + case 0: // safe location found! 71 + if (teleportData.getSecond().isPresent()) { 72 + player.displayClientMessage(getTranslatedText("commands.teleport_commands.back.go", player), true); 73 + Teleporter(player, world, teleportData.getSecond().get()); 74 + } else { 75 + player.displayClientMessage(getTranslatedText("commands.teleport_commands.common.error", player).withStyle(ChatFormatting.RED, ChatFormatting.BOLD), true); 76 + } 77 + 78 + break; 79 + case 1: // the location is already safe! 80 + player.displayClientMessage(getTranslatedText("commands.teleport_commands.back.same", player).withStyle(ChatFormatting.AQUA), true); 81 + break; 82 + case 2: // no safe location found! 83 + 84 + player.displayClientMessage(getTranslatedText("commands.teleport_commands.common.noSafeLocation", player).withStyle(ChatFormatting.RED, ChatFormatting.BOLD), false); 85 + player.displayClientMessage(getTranslatedText("commands.teleport_commands.common.safetyIsForLosers", player).withStyle(ChatFormatting.AQUA), false); 86 + player.displayClientMessage(getTranslatedText("commands.teleport_commands.common.forceTeleport", player).withStyle(ChatFormatting.AQUA, ChatFormatting.BOLD) 87 + .withStyle(style -> style.withClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/worldspawn true"))),false); 88 + break; 89 + } 90 + } 91 + 92 + TeleportCommands.LOGGER.error("{}", world.getSharedSpawnPos()); 93 + } 94 + 95 + }
+33 -33
common/src/main/java/dev/mrsnowy/teleport_commands/storage/StorageManager.java
··· 2 2 3 3 import com.google.gson.Gson; 4 4 import com.google.gson.GsonBuilder; 5 + import com.mojang.datafixers.util.Pair; 5 6 import dev.mrsnowy.teleport_commands.TeleportCommands; 6 7 7 8 import java.io.File; ··· 34 35 if (new File(String.valueOf(STORAGE_FILE)).length() == 0) { 35 36 StorageClass root = new StorageClass(); 36 37 root.Players = new ArrayList<>(); 38 + root.Warps = new ArrayList<>(); 37 39 StorageSaver(root); 38 40 } 39 41 40 42 } catch (Exception e) { 41 - TeleportCommands.LOGGER.error(e.getMessage()); 43 + TeleportCommands.LOGGER.error("Error while creating the storage file! Exiting! {}", e.getMessage()); 42 44 // crashing is probably better here, otherwise the whole mod will be broken 43 45 System.exit(1); 44 46 } ··· 46 48 47 49 public static void StorageAdd(String UUID) throws Exception { 48 50 StorageClass storage = StorageRetriever(); 49 - // Optional<StorageClass.Player> playerStorage = GetPlayerStorage(UUID, storage); 51 + 50 52 Optional<StorageClass.Player> playerStorage = storage.Players.stream() 51 53 .filter(player -> Objects.equals(UUID, player.UUID)) 52 54 .findFirst(); ··· 56 58 57 59 newPlayer.UUID = UUID; 58 60 newPlayer.DefaultHome = ""; 59 - newPlayer.deathLocation = new StorageClass.Player.Location(); 60 - newPlayer.deathLocation.x = new StorageClass.Player.Location().x; 61 - newPlayer.deathLocation.y = new StorageClass.Player.Location().y; 62 - newPlayer.deathLocation.z = new StorageClass.Player.Location().z; 61 + newPlayer.deathLocation = new StorageClass.Location(); 62 + newPlayer.deathLocation.x = new StorageClass.Location().x; 63 + newPlayer.deathLocation.y = new StorageClass.Location().y; 64 + newPlayer.deathLocation.z = new StorageClass.Location().z; 63 65 newPlayer.deathLocation.world = ""; 64 66 65 67 newPlayer.Homes = new ArrayList<>(); ··· 90 92 return gson.fromJson(jsonContent, StorageClass.class); 91 93 } 92 94 93 - public static PlayerStorageClass GetPlayerStorage(String UUID) throws Exception { 95 + public static Pair<StorageClass, List<StorageClass.NamedLocation>> getWarpStorage() throws Exception { 96 + StorageClass storage = StorageRetriever(); 97 + return new Pair<>(storage, storage.Warps); 98 + } 99 + 100 + 101 + public static Pair<StorageClass, StorageClass.Player> GetPlayerStorage(String UUID) throws Exception { 94 102 StorageClass storage = StorageRetriever(); 95 103 96 104 Optional<StorageClass.Player> playerStorage = storage.Players.stream() ··· 111 119 } 112 120 } 113 121 114 - return new PlayerStorageClass(storage, playerStorage.get()); 122 + return new Pair<>(storage, playerStorage.get()); 115 123 } 116 124 117 - public static class PlayerStorageClass { 118 - public StorageClass storage; 119 - public StorageClass.Player playerStorage; 120 - 121 - public PlayerStorageClass(StorageClass storage, StorageClass.Player playerStorage) { 122 - this.storage = storage; 123 - this.playerStorage = playerStorage; 124 - } 125 - } 126 125 127 126 public static class StorageClass { 127 + public List<NamedLocation> Warps; 128 128 public List<Player> Players; 129 129 130 + public static class NamedLocation { 131 + public String name; 132 + public int x; 133 + public int y; 134 + public int z; 135 + public String world; 136 + } 137 + 138 + public static class Location { 139 + public int x; 140 + public int y; 141 + public int z; 142 + public String world; 143 + } 144 + 130 145 public static class Player { 131 146 public String UUID; 132 147 public String DefaultHome; 133 148 public Location deathLocation; 134 - public List<Home> Homes; 135 - 136 - public static class Location { 137 - public int x; 138 - public int y; 139 - public int z; 140 - public String world; 141 - } 142 - 143 - public static class Home { 144 - public String name; 145 - public int x; 146 - public int y; 147 - public int z; 148 - public String world; 149 - } 149 + public List<NamedLocation> Homes; 150 150 } 151 151 } 152 152 }
+3 -3
common/src/main/java/dev/mrsnowy/teleport_commands/suggestions/HomeSuggestionProvider.java
··· 17 17 public CompletableFuture<Suggestions> getSuggestions(CommandContext<CommandSourceStack> context, SuggestionsBuilder builder) { 18 18 try { 19 19 ServerPlayer player = context.getSource().getPlayerOrException(); 20 - StorageManager.StorageClass.Player playerStorage = GetPlayerStorage(player.getStringUUID()).playerStorage; 20 + StorageManager.StorageClass.Player playerStorage = GetPlayerStorage(player.getStringUUID()).getSecond(); 21 21 22 - for (StorageManager.StorageClass.Player.Home currenthome : playerStorage.Homes) { 23 - builder.suggest(currenthome.name); 22 + for (StorageManager.StorageClass.NamedLocation currentHome : playerStorage.Homes) { 23 + builder.suggest(currentHome.name); 24 24 } 25 25 26 26 // Build and return the suggestions
+35
common/src/main/java/dev/mrsnowy/teleport_commands/suggestions/WarpSuggestionProvider.java
··· 1 + package dev.mrsnowy.teleport_commands.suggestions; 2 + 3 + import com.mojang.brigadier.context.CommandContext; 4 + import com.mojang.brigadier.suggestion.SuggestionProvider; 5 + import com.mojang.brigadier.suggestion.Suggestions; 6 + import com.mojang.brigadier.suggestion.SuggestionsBuilder; 7 + import dev.mrsnowy.teleport_commands.TeleportCommands; 8 + import dev.mrsnowy.teleport_commands.storage.StorageManager; 9 + import net.minecraft.commands.CommandSourceStack; 10 + import net.minecraft.server.level.ServerPlayer; 11 + 12 + import java.util.List; 13 + import java.util.concurrent.CompletableFuture; 14 + 15 + import static dev.mrsnowy.teleport_commands.storage.StorageManager.GetPlayerStorage; 16 + import static dev.mrsnowy.teleport_commands.storage.StorageManager.getWarpStorage; 17 + 18 + public class WarpSuggestionProvider implements SuggestionProvider<CommandSourceStack> { 19 + @Override 20 + public CompletableFuture<Suggestions> getSuggestions(CommandContext<CommandSourceStack> context, SuggestionsBuilder builder) { 21 + try { 22 + List<StorageManager.StorageClass.NamedLocation> WarpStorage = getWarpStorage().getSecond(); 23 + 24 + for (StorageManager.StorageClass.NamedLocation currentWarp : WarpStorage) { 25 + builder.suggest(currentWarp.name); 26 + } 27 + 28 + // Build and return the suggestions 29 + return builder.buildFuture(); 30 + } catch (Exception e) { 31 + TeleportCommands.LOGGER.error("Error getting suggestions!"); 32 + return null; 33 + } 34 + } 35 + }
+8 -8
common/src/main/java/dev/mrsnowy/teleport_commands/utils/tools.java
··· 65 65 66 66 67 67 public static void DeathLocationUpdater(BlockPos pos, ServerLevel world, String UUID) throws Exception { 68 - StorageManager.PlayerStorageClass storages = GetPlayerStorage(UUID); 68 + Pair<StorageManager.StorageClass, StorageManager.StorageClass.Player> storages = GetPlayerStorage(UUID); 69 69 70 - StorageManager.StorageClass storage = storages.storage; 71 - StorageManager.StorageClass.Player playerStorage = storages.playerStorage; 70 + StorageManager.StorageClass storage = storages.getFirst(); 71 + StorageManager.StorageClass.Player playerStorage = storages.getSecond(); 72 72 73 73 playerStorage.deathLocation.x = pos.getX(); 74 74 playerStorage.deathLocation.y = pos.getY(); ··· 104 104 if (!isBlockPosUnsafe(newSafePos, world)) { 105 105 106 106 if (!playerBlockPos.equals(newSafePos) || player.level() != world) { 107 - return new Pair<>(0, Optional.of(new Vec3(newSafePos.getX() + 0.5, newSafePos.getY(), newSafePos.getZ() + 0.5))); // safe! 107 + return new Pair<>(0, Optional.of(new Vec3(newSafePos.getX() + 0.5, newSafePos.getY(), newSafePos.getZ() + 0.5))); // safe location found! 108 108 109 109 } else { 110 - return new Pair<>(1, Optional.of(new Vec3(newSafePos.getX() + 0.5, newSafePos.getY(), newSafePos.getZ() + 0.5))); // same 110 + return new Pair<>(1, Optional.of(new Vec3(newSafePos.getX() + 0.5, newSafePos.getY(), newSafePos.getZ() + 0.5))); // the location is already safe! 111 111 } 112 112 } 113 113 } ··· 118 118 row++; 119 119 } 120 120 // no safe location 121 - return new Pair<>(2, Optional.empty()); // no safe location 121 + return new Pair<>(2, Optional.empty()); // no safe location found! 122 122 123 123 // check if the location is the same 124 124 } else if (!playerBlockPos.equals(blockPos) || player.level() != world) { 125 - return new Pair<>(0, Optional.of(new Vec3(playerX + 0.5, playerY, playerZ + 0.5))); // good and safe! 125 + return new Pair<>(0, Optional.of(new Vec3(playerX + 0.5, playerY, playerZ + 0.5))); // safe location found! 126 126 127 127 } else { 128 - return new Pair<>(1, Optional.of(new Vec3(playerX + 0.5, playerY, playerZ + 0.5))); // same 128 + return new Pair<>(1, Optional.of(new Vec3(playerX + 0.5, playerY, playerZ + 0.5))); // the location is already safe! 129 129 } 130 130 } 131 131
+22 -6
common/src/main/resources/assets/teleport_commands/lang/en_us.json
··· 12 12 "commands.teleport_commands.home.deleteError": "Error Deleting Home!", 13 13 "commands.teleport_commands.home.rename": "Home Renamed", 14 14 "commands.teleport_commands.home.renameError": "Error Renaming Home!", 15 - "commands.teleport_commands.home.renameExists": "That Name Already Exists!", 16 15 "commands.teleport_commands.home.default": "Default Home Set", 17 16 "commands.teleport_commands.home.defaultError": "Error Changing Default Home!", 18 17 "commands.teleport_commands.home.defaultSame": "Home is already set as default!", ··· 22 21 23 22 "commands.teleport_commands.homes.error": "Error Getting Homes!", 24 23 "commands.teleport_commands.homes.homes": "Homes:", 25 - "commands.teleport_commands.homes.default": "(Default)", 26 - "commands.teleport_commands.homes.tp": "[Tp]", 27 - "commands.teleport_commands.homes.rename": "[Rename]", 28 - "commands.teleport_commands.homes.delete": "[Delete]", 24 + 25 + "commands.teleport_commands.warp.set": "Warp set", 26 + "commands.teleport_commands.warp.setError": "Error setting the warp!", 27 + "commands.teleport_commands.warp.exists": "Warp already exists!", 28 + "commands.teleport_commands.warp.go": "Going to the warp", 29 + "commands.teleport_commands.warp.goSame": "Already at the warp", 30 + "commands.teleport_commands.warp.goError": "Error going to the warp!", 31 + "commands.teleport_commands.warp.delete": "Warp deleted", 32 + "commands.teleport_commands.warp.deleteError": "Error deleting warp!", 33 + "commands.teleport_commands.warp.rename": "Warp renamed", 34 + "commands.teleport_commands.warp.renameError": "Error renaming warp!", 35 + "commands.teleport_commands.warp.notFound": "Warp not found!", 36 + "commands.teleport_commands.warp.homeless": "There are no warps!", 37 + 38 + "commands.teleport_commands.warps.error": "Error getting warps!", 39 + "commands.teleport_commands.warps.warps": "Warps:", 29 40 30 41 "commands.teleport_commands.tpa.self": "Well, that was easy", 31 42 "commands.teleport_commands.tpa.alreadySent": "A request has already been sent to %0%", ··· 42 53 "commands.teleport_commands.common.error": "Error Teleporting!", 43 54 "commands.teleport_commands.common.noSafeLocation": "No Safe Location Found!", 44 55 "commands.teleport_commands.common.safetyIsForLosers": "Teleport anyways? (Warning, you might die!)", 45 - "commands.teleport_commands.common.forceTeleport": "[Force Teleport]" 56 + "commands.teleport_commands.common.forceTeleport": "[Force Teleport]", 57 + "commands.teleport_commands.common.tp": "[Tp]", 58 + "commands.teleport_commands.common.rename": "[Rename]", 59 + "commands.teleport_commands.common.delete": "[Delete]", 60 + "commands.teleport_commands.common.default": "(Default)", 61 + "commands.teleport_commands.common.renameExists": "That Name Already Exists!" 46 62 }
+22 -6
common/src/main/resources/assets/teleport_commands/lang/hu_hu.json
··· 12 12 "commands.teleport_commands.home.deleteError": "Hiba történt az otthon rökésével!", 13 13 "commands.teleport_commands.home.rename": "Otthon átnevezve", 14 14 "commands.teleport_commands.home.renameError": "Hiba történt az otthon átnevezésével!", 15 - "commands.teleport_commands.home.renameExists": "A név már létezik!", 16 15 "commands.teleport_commands.home.default": "Alap otthon beállítva", 17 16 "commands.teleport_commands.home.defaultError": "Hiba történt az alap otthon beállításával!", 18 17 "commands.teleport_commands.home.defaultSame": "Már alap ez az otthon!", ··· 22 21 23 22 "commands.teleport_commands.homes.error": "Hiba történt az otthonok megtalálásával!", 24 23 "commands.teleport_commands.homes.homes": "Otthonol:", 25 - "commands.teleport_commands.homes.default": "(Alap)", 26 - "commands.teleport_commands.homes.tp": "[Tp]", 27 - "commands.teleport_commands.homes.rename": "[Átnevezés]", 28 - "commands.teleport_commands.homes.delete": "[Törlés]", 24 + 25 + "commands.teleport_commands.warp.set": "Warp set", 26 + "commands.teleport_commands.warp.setError": "Error setting the warp!", 27 + "commands.teleport_commands.warp.exists": "Warp already exists!", 28 + "commands.teleport_commands.warp.go": "Going to the warp", 29 + "commands.teleport_commands.warp.goSame": "Already at the warp", 30 + "commands.teleport_commands.warp.goError": "Error going to the warp!", 31 + "commands.teleport_commands.warp.delete": "Warp deleted", 32 + "commands.teleport_commands.warp.deleteError": "Error deleting warp!", 33 + "commands.teleport_commands.warp.rename": "Warp renamed", 34 + "commands.teleport_commands.warp.renameError": "Error renaming warp!", 35 + "commands.teleport_commands.warp.notFound": "Warp not found!", 36 + "commands.teleport_commands.warp.homeless": "There are no warps!", 37 + 38 + "commands.teleport_commands.warps.error": "Error getting warps!", 39 + "commands.teleport_commands.warps.warps": "Warps:", 29 40 30 41 "commands.teleport_commands.tpa.self": "Hát ez gyors volt", 31 42 "commands.teleport_commands.tpa.alreadySent": "Egy kérés már el lett küldve %0%-nek", ··· 42 53 "commands.teleport_commands.common.error": "Hiba történt a teleportálással!", 43 54 "commands.teleport_commands.common.noSafeLocation": "Nem találtunk biztonságos helyet!", 44 55 "commands.teleport_commands.common.safetyIsForLosers": "Biztos teleportálsz?", 45 - "commands.teleport_commands.common.forceTeleport": "[Teleportálás mindenképp]" 56 + "commands.teleport_commands.common.forceTeleport": "[Teleportálás mindenképp]", 57 + "commands.teleport_commands.common.tp": "[Tp]", 58 + "commands.teleport_commands.common.rename": "[Átnevezés]", 59 + "commands.teleport_commands.common.delete": "[Törlés]", 60 + "commands.teleport_commands.common.default": "(Alap)", 61 + "commands.teleport_commands.common.renameExists": "A név már létezik!" 46 62 }
+22 -6
common/src/main/resources/assets/teleport_commands/lang/it_it.json
··· 12 12 "commands.teleport_commands.home.deleteError": "Errore Durante L'Eliminazione Della Casa!", 13 13 "commands.teleport_commands.home.rename": "Casa Rinominata", 14 14 "commands.teleport_commands.home.renameError": "Errore Durante La Rinomina Della Casa!", 15 - "commands.teleport_commands.home.renameExists": "Quel Nome Esiste Già!", 16 15 "commands.teleport_commands.home.default": "Casa Predefinita Impostata", 17 16 "commands.teleport_commands.home.defaultError": "Errore Durante Il Cambio Della Casa Predefinita!", 18 17 "commands.teleport_commands.home.defaultSame": "La Casa È Già Impostata Come Predefinita!", ··· 22 21 23 22 "commands.teleport_commands.homes.error": "Errore Durante Il Recupero Delle Case!", 24 23 "commands.teleport_commands.homes.homes": "Case:", 25 - "commands.teleport_commands.homes.default": "(Predefinita)", 26 - "commands.teleport_commands.homes.tp": "[Tp]", 27 - "commands.teleport_commands.homes.rename": "[Rinomina]", 28 - "commands.teleport_commands.homes.delete": "[Elimina]", 24 + 25 + "commands.teleport_commands.warp.set": "Warp set", 26 + "commands.teleport_commands.warp.setError": "Error setting the warp!", 27 + "commands.teleport_commands.warp.exists": "Warp already exists!", 28 + "commands.teleport_commands.warp.go": "Going to the warp", 29 + "commands.teleport_commands.warp.goSame": "Already at the warp", 30 + "commands.teleport_commands.warp.goError": "Error going to the warp!", 31 + "commands.teleport_commands.warp.delete": "Warp deleted", 32 + "commands.teleport_commands.warp.deleteError": "Error deleting warp!", 33 + "commands.teleport_commands.warp.rename": "Warp renamed", 34 + "commands.teleport_commands.warp.renameError": "Error renaming warp!", 35 + "commands.teleport_commands.warp.notFound": "Warp not found!", 36 + "commands.teleport_commands.warp.homeless": "There are no warps!", 37 + 38 + "commands.teleport_commands.warps.error": "Error getting warps!", 39 + "commands.teleport_commands.warps.warps": "Warps:", 29 40 30 41 "commands.teleport_commands.tpa.self": "Bene, È Stato Facile", 31 42 "commands.teleport_commands.tpa.alreadySent": "Una Richiesta È Già Stata Inviata A %0%", ··· 42 53 "commands.teleport_commands.common.error": "Errore Durante Il Teletrasporto!", 43 54 "commands.teleport_commands.common.noSafeLocation": "Nessuna Posizione Sicura Trovata!", 44 55 "commands.teleport_commands.common.safetyIsForLosers": "Teletrasporto In Ogni Caso? (Attenzione, Potresti Morire!)", 45 - "commands.teleport_commands.common.forceTeleport": "[Teletrasporto Forzato]" 56 + "commands.teleport_commands.common.forceTeleport": "[Teletrasporto Forzato]", 57 + "commands.teleport_commands.common.tp": "[Tp]", 58 + "commands.teleport_commands.common.rename": "[Rinomina]", 59 + "commands.teleport_commands.common.delete": "[Elimina]", 60 + "commands.teleport_commands.common.default": "(Predefinita)", 61 + "commands.teleport_commands.common.renameExists": "Quel Nome Esiste Già!" 46 62 }
+24 -8
common/src/main/resources/assets/teleport_commands/lang/nl_nl.json
··· 4 4 "commands.teleport_commands.back.noLocation": "Geen Locatie Gevonden!", 5 5 6 6 "commands.teleport_commands.home.set": "Huis Ingesteld", 7 - "commands.teleport_commands.home.setError": "Probleem Met Het Huis Instellen!", 7 + "commands.teleport_commands.home.setError": "Probleem tijdens het instellen van het Huis!", 8 8 "commands.teleport_commands.home.go": "Naar Huis", 9 9 "commands.teleport_commands.home.goError": "Probleem Met Naar Huis Gaan!", 10 10 "commands.teleport_commands.home.goSame": "Al Thuis", 11 11 "commands.teleport_commands.home.delete": "Huis Verwijderd", 12 12 "commands.teleport_commands.home.deleteError": "Probleem Met Het Verwijderen Van Het Huis!", 13 13 "commands.teleport_commands.home.rename": "Huis Hernoemd", 14 - "commands.teleport_commands.home.renameError": "Probleem Met Het Huis Hernamen!", 15 - "commands.teleport_commands.home.renameExists": "Die Naam Bestaat Al!", 14 + "commands.teleport_commands.home.renameError": "Probleem tijdens het wijzigen van de huis naam!", 16 15 "commands.teleport_commands.home.default": "Standaard Huis Ingesteld", 17 16 "commands.teleport_commands.home.defaultError": "Probleem Tijdens Het Wijzigen Van Het Standaard Huis!", 18 17 "commands.teleport_commands.home.defaultSame": "Huis is al als standaard ingesteld!", ··· 22 21 23 22 "commands.teleport_commands.homes.error": "Probleem Bij Het Ophalen Van De Huizen!", 24 23 "commands.teleport_commands.homes.homes": "Huizen:", 25 - "commands.teleport_commands.homes.default": "(Standaard)", 26 - "commands.teleport_commands.homes.tp": "[Tp]", 27 - "commands.teleport_commands.homes.rename ": "[Naam Wijzigen]", 28 - "commands.teleport_commands.homes.delete": "[Verwijderen]", 24 + 25 + "commands.teleport_commands.warp.set": "Warp Ingesteld", 26 + "commands.teleport_commands.warp.setError": "Probleem tijdens het instellen van de warp!", 27 + "commands.teleport_commands.warp.exists": "Die warp bestaad Al!", 28 + "commands.teleport_commands.warp.go": "Naar de warp", 29 + "commands.teleport_commands.warp.goSame": "Al bij de warp", 30 + "commands.teleport_commands.warp.goError": "Probleem met naar de warp gaan!", 31 + "commands.teleport_commands.warp.delete": "Warp verwijderd", 32 + "commands.teleport_commands.warp.deleteError": "Probleem tijdens het verwijderen van de warp!", 33 + "commands.teleport_commands.warp.rename": "Warp Hernoemd", 34 + "commands.teleport_commands.warp.renameError": "Probleem tijdens het wijzigen van de warp naam!", 35 + "commands.teleport_commands.warp.notFound": "Warp niet gevonden!", 36 + "commands.teleport_commands.warp.homeless": "Er zijn geen warps!", 37 + 38 + "commands.teleport_commands.warps.error": "Probleem bij get ophalen van de warps!", 39 + "commands.teleport_commands.warps.warps": "Warps:", 29 40 30 41 "commands.teleport_commands.tpa.self": "Welp, Dat Was Makkelijk", 31 42 "commands.teleport_commands.tpa.alreadySent": "Er is al een verzoek verzonden naar %0%", ··· 42 53 "commands.teleport_commands.common.error": "Probleem tijdens het Teleporteren!", 43 54 "commands.teleport_commands.common.noSafeLocation": "Geen veilige locatie gevonden!", 44 55 "commands.teleport_commands.common.safetyIsForLosers": "Toch teleporteren? (Waarschuwing, je kan dood gaan!)", 45 - "commands.teleport_commands.common.forceTeleport": "[Geforceerd Teleporteren]" 56 + "commands.teleport_commands.common.forceTeleport": "[Geforceerd Teleporteren]", 57 + "commands.teleport_commands.common.tp": "[Tp]", 58 + "commands.teleport_commands.common.rename ": "[Naam Wijzigen]", 59 + "commands.teleport_commands.common.delete": "[Verwijderen]", 60 + "commands.teleport_commands.common.default": "(Standaard)", 61 + "commands.teleport_commands.common.renameExists": "Die Naam Bestaat Al!" 46 62 }
+22 -6
common/src/main/resources/assets/teleport_commands/lang/ru_ru.json
··· 12 12 "commands.teleport_commands.home.deleteError": "Ошибка удаления дома!", 13 13 "commands.teleport_commands.home.rename": "Дом переименован", 14 14 "commands.teleport_commands.home.renameError": "Ошибка переименования дома!", 15 - "commands.teleport_commands.home.renameExists": "Это имя уже занято!", 16 15 "commands.teleport_commands.home.default": "Дом по умолчанию установлен", 17 16 "commands.teleport_commands.home.defaultError": "Ошибка изменения дома по умолчанию!", 18 17 "commands.teleport_commands.home.defaultSame": "Дом уже установлен по умолчанию!", ··· 22 21 23 22 "commands.teleport_commands.homes.error": "Ошибка получения списка домов!", 24 23 "commands.teleport_commands.homes.homes": "Дома:", 25 - "commands.teleport_commands.homes.default": "(По умолчанию)", 26 - "commands.teleport_commands.homes.tp": "[Тп]", 27 - "commands.teleport_commands.homes.rename": "[Переименовать]", 28 - "commands.teleport_commands.homes.delete": "[Удалить]", 24 + 25 + "commands.teleport_commands.warp.set": "Warp set", 26 + "commands.teleport_commands.warp.setError": "Error setting the warp!", 27 + "commands.teleport_commands.warp.exists": "Warp already exists!", 28 + "commands.teleport_commands.warp.go": "Going to the warp", 29 + "commands.teleport_commands.warp.goSame": "Already at the warp", 30 + "commands.teleport_commands.warp.goError": "Error going to the warp!", 31 + "commands.teleport_commands.warp.delete": "Warp deleted", 32 + "commands.teleport_commands.warp.deleteError": "Error deleting warp!", 33 + "commands.teleport_commands.warp.rename": "Warp renamed", 34 + "commands.teleport_commands.warp.renameError": "Error renaming warp!", 35 + "commands.teleport_commands.warp.notFound": "Warp not found!", 36 + "commands.teleport_commands.warp.homeless": "There are no warps!", 37 + 38 + "commands.teleport_commands.warps.error": "Error getting warps!", 39 + "commands.teleport_commands.warps.warps": "Warps:", 29 40 30 41 "commands.teleport_commands.tpa.self": "Ну, это было легко", 31 42 "commands.teleport_commands.tpa.alreadySent": "Запрос уже отправлен %0%", ··· 42 53 "commands.teleport_commands.common.error": "Ошибка телепортации!", 43 54 "commands.teleport_commands.common.noSafeLocation": "Безопасное место не найдено!", 44 55 "commands.teleport_commands.common.safetyIsForLosers": "Телепортироваться всё равно? (Внимание, вы можете погибнуть!)", 45 - "commands.teleport_commands.common.forceTeleport": "[Принудительная телепортация]" 56 + "commands.teleport_commands.common.forceTeleport": "[Принудительная телепортация]", 57 + "commands.teleport_commands.common.tp": "[Тп]", 58 + "commands.teleport_commands.common.rename": "[Переименовать]", 59 + "commands.teleport_commands.common.delete": "[Удалить]", 60 + "commands.teleport_commands.common.default": "(По умолчанию)", 61 + "commands.teleport_commands.common.renameExists": "Это имя уже занято!" 46 62 }
+2 -1
common/src/main/resources/assets/teleport_commands/lang/translations.md
··· 24 24 - English (en_us): [Mr. Snowy](https://github.com/MrSn0wy) 25 25 - Dutch (nl_nl): [Mr. Snowy](https://github.com/MrSn0wy) 26 26 - Hungarian (hu_hu): [Martin Morningstar](https://github.com/RMI637) 27 - - Italian (it_it): [Vlad Andrei Morariu](https://github.com/VladAndreiMorariu) 27 + - Italian (it_it): [Vlad Andrei Morariu](https://github.com/VladAndreiMorariu) 28 + - Russian (ru_ru): [rfin0](https://github.com/rfin0)
+1 -1
gradle.properties
··· 33 33 NeoGradle=7.0.168 34 34 35 35 # Gradle 36 - org.gradle.jvmargs=-Xmx4G 36 + org.gradle.jvmargs=-Xmx6G 37 37 org.gradle.daemon=false