From 33ca3b2981115be1d530441ed61a08e59375c204 Mon Sep 17 00:00:00 2001 From: triagonal <10545540+triagonal@users.noreply.github.com> Date: Tue, 6 Jul 2021 14:29:24 +1000 Subject: [PATCH 001/120] Fix behavior of itemdb command on legacy versions (#4320) --- .../com/earth2me/essentials/commands/Commanditemdb.java | 7 ++++++- .../com/earth2me/essentials/items/CustomItemResolver.java | 8 +++++--- Essentials/src/main/resources/items.csv | 3 +++ 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/Essentials/src/main/java/com/earth2me/essentials/commands/Commanditemdb.java b/Essentials/src/main/java/com/earth2me/essentials/commands/Commanditemdb.java index 7f75b0beb23..ba6ceeb3f97 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/commands/Commanditemdb.java +++ b/Essentials/src/main/java/com/earth2me/essentials/commands/Commanditemdb.java @@ -7,6 +7,7 @@ import org.bukkit.Server; import org.bukkit.inventory.ItemStack; +import java.util.ArrayList; import java.util.Collections; import java.util.List; @@ -55,9 +56,13 @@ protected void run(final Server server, final CommandSource sender, final String } List nameList = ess.getItemDb().nameList(itemStack); + nameList = nameList != null ? new ArrayList<>(nameList) : new ArrayList<>(); nameList.addAll(ess.getCustomItemResolver().getAliasesFor(ess.getItemDb().name(itemStack))); - Collections.sort(nameList); + if (nameList.isEmpty()) { + return; + } + Collections.sort(nameList); if (nameList.size() > 15) { nameList = nameList.subList(0, 14); } diff --git a/Essentials/src/main/java/com/earth2me/essentials/items/CustomItemResolver.java b/Essentials/src/main/java/com/earth2me/essentials/items/CustomItemResolver.java index ac8e196dbbf..3e575427674 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/items/CustomItemResolver.java +++ b/Essentials/src/main/java/com/earth2me/essentials/items/CustomItemResolver.java @@ -44,9 +44,11 @@ public Collection getNames() { public List getAliasesFor(String item) throws Exception { final List results = new ArrayList<>(); - for (Map.Entry entry : map.entrySet()) { - if (item.equalsIgnoreCase(ess.getItemDb().name(ess.getItemDb().get(entry.getValue())))) { - results.add(entry.getKey()); + if (item != null) { + for (Map.Entry entry : map.entrySet()) { + if (item.equalsIgnoreCase(ess.getItemDb().name(ess.getItemDb().get(entry.getValue())))) { + results.add(entry.getKey()); + } } } return results; diff --git a/Essentials/src/main/resources/items.csv b/Essentials/src/main/resources/items.csv index f1970d4b218..d2e4dd7bed9 100644 --- a/Essentials/src/main/resources/items.csv +++ b/Essentials/src/main/resources/items.csv @@ -7490,6 +7490,9 @@ sparklymelon,382,0 shiningmelon,382,0 gmelon,382,0 smelon,382,0 +mobegg,383,0 +spawnegg,383,0 +mobspawnegg,383,0 creeperegg,383,50 eggcreeper,383,50 skeletonegg,383,51 From 5e178943a04e4d81eb40855d7298ab00ac9ab694 Mon Sep 17 00:00:00 2001 From: Josh Roy <10731363+JRoy@users.noreply.github.com> Date: Tue, 6 Jul 2021 13:34:40 -0400 Subject: [PATCH 002/120] Update to Minecraft 1.17.1 (#4324) --- .../main/java/com/earth2me/essentials/utils/VersionUtil.java | 3 ++- README.md | 2 +- .../src/main/kotlin/essentials.base-conventions.gradle.kts | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/Essentials/src/main/java/com/earth2me/essentials/utils/VersionUtil.java b/Essentials/src/main/java/com/earth2me/essentials/utils/VersionUtil.java index 164344e9fbc..e96bcaaae2a 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/utils/VersionUtil.java +++ b/Essentials/src/main/java/com/earth2me/essentials/utils/VersionUtil.java @@ -33,8 +33,9 @@ public final class VersionUtil { public static final BukkitVersion v1_16_1_R01 = BukkitVersion.fromString("1.16.1-R0.1-SNAPSHOT"); public static final BukkitVersion v1_16_5_R01 = BukkitVersion.fromString("1.16.5-R0.1-SNAPSHOT"); public static final BukkitVersion v1_17_R01 = BukkitVersion.fromString("1.17-R0.1-SNAPSHOT"); + public static final BukkitVersion v1_17_1_R01 = BukkitVersion.fromString("1.17.1-R0.1-SNAPSHOT"); - private static final Set supportedVersions = ImmutableSet.of(v1_8_8_R01, v1_9_4_R01, v1_10_2_R01, v1_11_2_R01, v1_12_2_R01, v1_13_2_R01, v1_14_4_R01, v1_15_2_R01, v1_16_5_R01, v1_17_R01); + private static final Set supportedVersions = ImmutableSet.of(v1_8_8_R01, v1_9_4_R01, v1_10_2_R01, v1_11_2_R01, v1_12_2_R01, v1_13_2_R01, v1_14_4_R01, v1_15_2_R01, v1_16_5_R01, v1_17_1_R01); private static final Map unsupportedServerClasses; diff --git a/README.md b/README.md index 3ba7eed330c..57b9e8f89d1 100644 --- a/README.md +++ b/README.md @@ -26,7 +26,7 @@ EssentialsX is almost a completely drop-in replacement for Essentials. However, * **EssentialsX requires Java 8 or higher.** On older versions, the plugin may not work properly. -* **EssentialsX supports Minecraft versions 1.8.8, 1.9.4, 1.10.2, 1.11.2, 1.12.2, 1.13.2, 1.14.4, 1.15.2, 1.16.5, and 1.17** +* **EssentialsX supports Minecraft versions 1.8.8, 1.9.4, 1.10.2, 1.11.2, 1.12.2, 1.13.2, 1.14.4, 1.15.2, 1.16.5, and 1.17.1** Support diff --git a/build-logic/src/main/kotlin/essentials.base-conventions.gradle.kts b/build-logic/src/main/kotlin/essentials.base-conventions.gradle.kts index 1fdc23cfd58..7fa1071b4f4 100644 --- a/build-logic/src/main/kotlin/essentials.base-conventions.gradle.kts +++ b/build-logic/src/main/kotlin/essentials.base-conventions.gradle.kts @@ -10,7 +10,7 @@ plugins { val baseExtension = extensions.create("essentials", project) val checkstyleVersion = "8.36.2" -val spigotVersion = "1.17-R0.1-SNAPSHOT" +val spigotVersion = "1.17.1-R0.1-SNAPSHOT" val junit5Version = "5.7.0" val mockitoVersion = "3.2.0" From ff58d8e44383abe3b1ad4dc65da8b9657aeef708 Mon Sep 17 00:00:00 2001 From: Olivia Date: Wed, 7 Jul 2021 10:46:54 -0500 Subject: [PATCH 003/120] Add config option for new username join messages (#4290) Co-authored-by: Josh Roy <10731363+JRoy@users.noreply.github.com> --- .../essentials/EssentialsPlayerListener.java | 9 +++++-- .../com/earth2me/essentials/ISettings.java | 4 +++ .../com/earth2me/essentials/Settings.java | 18 +++++++++++++ Essentials/src/main/resources/config.yml | 26 ++++++++++++++++++- 4 files changed, 54 insertions(+), 3 deletions(-) diff --git a/Essentials/src/main/java/com/earth2me/essentials/EssentialsPlayerListener.java b/Essentials/src/main/java/com/earth2me/essentials/EssentialsPlayerListener.java index dad07e1fc88..edef4169225 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/EssentialsPlayerListener.java +++ b/Essentials/src/main/java/com/earth2me/essentials/EssentialsPlayerListener.java @@ -305,11 +305,15 @@ public void run() { user.startTransaction(); + final String lastAccountName = user.getLastAccountName(); // For comparison user.setLastAccountName(user.getBase().getName()); user.setLastLogin(currentTime); user.setDisplayNick(); updateCompass(user); + // Check for new username. If they don't want the message, let's just say it's false. + final boolean newUsername = ess.getSettings().isCustomNewUsernameMessage() && lastAccountName != null && !lastAccountName.equals(user.getBase().getName()); + if (!ess.getVanishedPlayersNew().isEmpty() && !user.isAuthorized("essentials.vanish.see")) { for (final String p : ess.getVanishedPlayersNew()) { final Player toVanish = ess.getServer().getPlayerExact(p); @@ -335,13 +339,14 @@ public void run() { } else if (message == null || hideJoinQuitMessages()) { effectiveMessage = null; } else if (ess.getSettings().isCustomJoinMessage()) { - final String msg = ess.getSettings().getCustomJoinMessage() + final String msg = (newUsername ? ess.getSettings().getCustomNewUsernameMessage() : ess.getSettings().getCustomJoinMessage()) .replace("{PLAYER}", player.getDisplayName()).replace("{USERNAME}", player.getName()) .replace("{UNIQUE}", NumberFormat.getInstance().format(ess.getUserMap().getUniqueUsers())) .replace("{ONLINE}", NumberFormat.getInstance().format(ess.getOnlinePlayers().size())) .replace("{UPTIME}", DateUtil.formatDateDiff(ManagementFactory.getRuntimeMXBean().getStartTime())) .replace("{PREFIX}", FormatUtil.replaceFormat(ess.getPermissionsHandler().getPrefix(player))) - .replace("{SUFFIX}", FormatUtil.replaceFormat(ess.getPermissionsHandler().getSuffix(player))); + .replace("{SUFFIX}", FormatUtil.replaceFormat(ess.getPermissionsHandler().getSuffix(player))) + .replace("{OLDUSERNAME}", lastAccountName); if (!msg.isEmpty()) { ess.getServer().broadcastMessage(msg); } diff --git a/Essentials/src/main/java/com/earth2me/essentials/ISettings.java b/Essentials/src/main/java/com/earth2me/essentials/ISettings.java index e757bd103af..8622e697b50 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/ISettings.java +++ b/Essentials/src/main/java/com/earth2me/essentials/ISettings.java @@ -275,6 +275,10 @@ public interface ISettings extends IConf { String getCustomQuitMessage(); + String getCustomNewUsernameMessage(); + + boolean isCustomNewUsernameMessage(); + boolean isCustomServerFullMessage(); boolean isNotifyNoNewMail(); diff --git a/Essentials/src/main/java/com/earth2me/essentials/Settings.java b/Essentials/src/main/java/com/earth2me/essentials/Settings.java index e0b33fbae48..5bab531edbd 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/Settings.java +++ b/Essentials/src/main/java/com/earth2me/essentials/Settings.java @@ -116,6 +116,8 @@ public class Settings implements net.ess3.api.ISettings { private boolean isCustomJoinMessage; private String customQuitMessage; private boolean isCustomQuitMessage; + private String customNewUsernameMessage; + private boolean isCustomNewUsernameMessage; private List spawnOnJoinGroups; private Map commandCooldowns; private boolean npcsInBalanceRanking = false; @@ -717,6 +719,8 @@ public void reloadConfig() { isCustomJoinMessage = !customJoinMessage.equals("none"); customQuitMessage = _getCustomQuitMessage(); isCustomQuitMessage = !customQuitMessage.equals("none"); + customNewUsernameMessage = _getCustomNewUsernameMessage(); + isCustomNewUsernameMessage = !customNewUsernameMessage.equals("none"); muteCommands = _getMuteCommands(); spawnOnJoinGroups = _getSpawnOnJoinGroups(); commandCooldowns = _getCommandCooldowns(); @@ -1372,6 +1376,20 @@ public boolean isCustomQuitMessage() { return isCustomQuitMessage; } + public String _getCustomNewUsernameMessage() { + return FormatUtil.replaceFormat(config.getString("custom-new-username-message", "none")); + } + + @Override + public String getCustomNewUsernameMessage() { + return customNewUsernameMessage; + } + + @Override + public boolean isCustomNewUsernameMessage() { + return isCustomNewUsernameMessage; + } + @Override public boolean isCustomServerFullMessage() { return config.getBoolean("use-custom-server-full-message", true); diff --git a/Essentials/src/main/resources/config.yml b/Essentials/src/main/resources/config.yml index 339eb17076d..f62b0453889 100644 --- a/Essentials/src/main/resources/config.yml +++ b/Essentials/src/main/resources/config.yml @@ -520,10 +520,34 @@ allow-silent-join-quit: false # You can set custom join and quit messages here. Set this to "none" to use the default Minecraft message, # or set this to "" to hide the message entirely. -# You may use color codes, {USERNAME} for the player's name, {PLAYER} for the player's displayname, {PREFIX} for the player's prefix, and {SUFFIX} for the player's suffix. + +# Available placeholders: +# {PLAYER} - The player's displayname. +# {USERNAME} - The player's username. +# {PREFIX} - The player's prefix. +# {SUFFIX} - The player's suffix. +# {ONLINE} - The number of players online. +# {UNIQUE} - The number of unique players to join the server. +# {UPTIME} - The amount of time the server has been online. custom-join-message: "none" custom-quit-message: "none" +# You can set a custom join message for users who join with a new username here. +# This message will only be used if a user has joined before and have since changed their username. +# This will be displayed INSTEAD OF custom-join-message, so if you intend to keep them similar, make sure they match. +# Set this to "none" to use the the "custom-join-message" above for every join. + +# Available placeholders: +# {PLAYER} - The player's displayname. +# {USERNAME} - The player's username. +# {OLDUSERNAME} - The player's old username. +# {PREFIX} - The player's prefix. +# {SUFFIX} - The player's suffix. +# {ONLINE} - The number of players online. +# {UNIQUE} - The number of unique players to join the server. +# {UPTIME} - The amount of time the server has been online. +custom-new-username-message: "none" + # Should Essentials override the vanilla "Server Full" message with its own from the language file? # Set to false to keep the vanilla message. use-custom-server-full-message: true From 2858bd37843ccfbc9b2a911af44f8aa2b21a9770 Mon Sep 17 00:00:00 2001 From: pop4959 Date: Wed, 7 Jul 2021 08:55:25 -0700 Subject: [PATCH 004/120] Add role placeholder to Discord message format (#4329) Co-authored-by: Josh Roy <10731363+JRoy@users.noreply.github.com> --- .../net/essentialsx/discord/DiscordSettings.java | 2 +- .../discord/listeners/DiscordListener.java | 2 +- .../essentialsx/discord/util/DiscordUtil.java | 16 ++++++++++++++++ EssentialsDiscord/src/main/resources/config.yml | 1 + 4 files changed, 19 insertions(+), 2 deletions(-) diff --git a/EssentialsDiscord/src/main/java/net/essentialsx/discord/DiscordSettings.java b/EssentialsDiscord/src/main/java/net/essentialsx/discord/DiscordSettings.java index bd1cf259d53..99f49000867 100644 --- a/EssentialsDiscord/src/main/java/net/essentialsx/discord/DiscordSettings.java +++ b/EssentialsDiscord/src/main/java/net/essentialsx/discord/DiscordSettings.java @@ -347,7 +347,7 @@ public void reloadConfig() { "timestamp", "level", "message"); discordToMcFormat = generateMessageFormat(getFormatString("discord-to-mc"), "&6[#{channel}] &3{fullname}&7: &f{message}", true, - "channel", "username", "discriminator", "fullname", "nickname", "color", "message"); + "channel", "username", "discriminator", "fullname", "nickname", "color", "message", "role"); unmuteFormat = generateMessageFormat(getFormatString("unmute"), "{displayname} unmuted.", false, "username", "displayname"); tempMuteFormat = generateMessageFormat(getFormatString("temporary-mute"), "{controllerdisplayname} has muted player {displayname} for {time}.", false, "username", "displayname", "controllername", "controllerdisplayname", "time"); diff --git a/EssentialsDiscord/src/main/java/net/essentialsx/discord/listeners/DiscordListener.java b/EssentialsDiscord/src/main/java/net/essentialsx/discord/listeners/DiscordListener.java index e63ee62120c..caab7b07f85 100644 --- a/EssentialsDiscord/src/main/java/net/essentialsx/discord/listeners/DiscordListener.java +++ b/EssentialsDiscord/src/main/java/net/essentialsx/discord/listeners/DiscordListener.java @@ -86,7 +86,7 @@ public void onGuildMessageReceived(@NotNull GuildMessageReceivedEvent event) { final String formattedMessage = EmojiParser.parseToAliases(MessageUtil.formatMessage(plugin.getPlugin().getSettings().getDiscordToMcFormat(), event.getChannel().getName(), user.getName(), user.getDiscriminator(), user.getAsTag(), - member.getEffectiveName(), DiscordUtil.getRoleColorFormat(member), finalMessage), EmojiParser.FitzpatrickAction.REMOVE); + member.getEffectiveName(), DiscordUtil.getRoleColorFormat(member), finalMessage, DiscordUtil.getRoleFormat(member)), EmojiParser.FitzpatrickAction.REMOVE); for (IUser essUser : plugin.getPlugin().getEss().getOnlineUsers()) { for (String group : keys) { diff --git a/EssentialsDiscord/src/main/java/net/essentialsx/discord/util/DiscordUtil.java b/EssentialsDiscord/src/main/java/net/essentialsx/discord/util/DiscordUtil.java index 3de1e1f2130..cc83c7de896 100644 --- a/EssentialsDiscord/src/main/java/net/essentialsx/discord/util/DiscordUtil.java +++ b/EssentialsDiscord/src/main/java/net/essentialsx/discord/util/DiscordUtil.java @@ -121,6 +121,22 @@ public static CompletableFuture createWebhook(TextChannel channel, Stri return future; } + /** + * Gets the highest role of a given member or an empty string if the member has no roles. + * + * @param member The target member. + * @return The highest role or blank string. + */ + public static String getRoleFormat(Member member) { + final List roles = member.getRoles(); + + if (roles.isEmpty()) { + return ""; + } + + return roles.get(0).getName(); + } + /** * Gets the uppermost bukkit color code of a given member or an empty string if the server version is < 1.16. * diff --git a/EssentialsDiscord/src/main/resources/config.yml b/EssentialsDiscord/src/main/resources/config.yml index 448cb7e019e..aae3efd8a5b 100644 --- a/EssentialsDiscord/src/main/resources/config.yml +++ b/EssentialsDiscord/src/main/resources/config.yml @@ -212,6 +212,7 @@ messages: # - {discriminator}: The four numbers displayed after the user's name # - {fullname}: Equivalent to typing "{username}#{discriminator}" # - {nickname}: The nickname of the user who sent the message. (Will return username if user has no nickname) + # - {role}: The name of the user's topmost role on Discord. If the user doesn't have a role, the placeholder is empty. # - {color}: The minecraft color representative of the user's topmost role color on discord. If the user doesn't have a role color, the placeholder is empty. # - {message}: The content of the message being sent discord-to-mc: "&6[#{channel}] &3{fullname}&7: &f{message}" From 3787b80286f08c81a22abf2b3da8e6ac92a02cd4 Mon Sep 17 00:00:00 2001 From: Ansandr <68068339+Ansandr@users.noreply.github.com> Date: Wed, 7 Jul 2021 21:52:49 +0300 Subject: [PATCH 005/120] Add UserTeleportSpawnEvent (#4328) Co-authored-by: Josh Roy <10731363+JRoy@users.noreply.github.com> --- .../essentials/spawn/Commandspawn.java | 8 +- .../api/v2/events/UserTeleportSpawnEvent.java | 76 +++++++++++++++++++ 2 files changed, 83 insertions(+), 1 deletion(-) create mode 100644 EssentialsSpawn/src/main/java/net/essentialsx/api/v2/events/UserTeleportSpawnEvent.java diff --git a/EssentialsSpawn/src/main/java/com/earth2me/essentials/spawn/Commandspawn.java b/EssentialsSpawn/src/main/java/com/earth2me/essentials/spawn/Commandspawn.java index 02781551ded..9150f7964d7 100644 --- a/EssentialsSpawn/src/main/java/com/earth2me/essentials/spawn/Commandspawn.java +++ b/EssentialsSpawn/src/main/java/com/earth2me/essentials/spawn/Commandspawn.java @@ -7,6 +7,7 @@ import com.earth2me.essentials.commands.EssentialsCommand; import com.earth2me.essentials.commands.NoChargeException; import com.earth2me.essentials.commands.NotEnoughArgumentsException; +import net.essentialsx.api.v2.events.UserTeleportSpawnEvent; import org.bukkit.Location; import org.bukkit.Server; import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; @@ -38,7 +39,7 @@ public void run(final Server server, final User user, final String commandLabel, }); respawn(user.getSource(), user, otherUser, charge, commandLabel, future); } else { - respawn(user.getSource(), user, user, charge, commandLabel, new CompletableFuture<>()); + respawn(user.getSource(), null, user, charge, commandLabel, new CompletableFuture<>()); } throw new NoChargeException(); @@ -77,6 +78,11 @@ private void respawn(final CommandSource sender, final User teleportOwner, final showError(sender.getSender(), e, commandLabel); return false; }); + final UserTeleportSpawnEvent spawnEvent = new UserTeleportSpawnEvent(teleportee, teleportOwner, teleportee.getGroup(), spawn); + ess.getServer().getPluginManager().callEvent(spawnEvent); + if (spawnEvent.isCancelled()) { + return; + } if (teleportOwner == null) { teleportee.getAsyncTeleport().now(spawn, false, TeleportCause.COMMAND, future); return; diff --git a/EssentialsSpawn/src/main/java/net/essentialsx/api/v2/events/UserTeleportSpawnEvent.java b/EssentialsSpawn/src/main/java/net/essentialsx/api/v2/events/UserTeleportSpawnEvent.java new file mode 100644 index 00000000000..9505b40e367 --- /dev/null +++ b/EssentialsSpawn/src/main/java/net/essentialsx/api/v2/events/UserTeleportSpawnEvent.java @@ -0,0 +1,76 @@ +package net.essentialsx.api.v2.events; + +import net.ess3.api.IUser; +import org.bukkit.Location; +import org.bukkit.event.Cancellable; +import org.bukkit.event.Event; +import org.bukkit.event.HandlerList; + +/** + * Called before a user is teleported to spawn via the /spawn command. + */ +public class UserTeleportSpawnEvent extends Event implements Cancellable { + private static final HandlerList handlers = new HandlerList(); + + private final IUser user; + private final IUser controller; + private final String spawnGroup; + private final Location target; + private boolean cancelled = false; + + public UserTeleportSpawnEvent(final IUser user, final IUser controller, final String spawnGroup, final Location target) { + this.user = user; + this.controller = controller; + this.spawnGroup = spawnGroup; + this.target = target; + } + + /** + * @return The user who is being teleported to spawn. + */ + public IUser getUser() { + return user; + } + + /** + * @return The user who caused teleport to spawn or null if there is none + */ + public IUser getController() { + return controller; + } + + /** + * The {@link #getUser() user's} group used to determine their spawn location. + * @return The user's group. + */ + public String getSpawnGroup() { + return spawnGroup; + } + + /** + * The spawn location of the {@link #getUser() user's} {@link #getSpawnGroup() group}. + * @return The spawn location of the user's group. + */ + public Location getSpawnLocation() { + return target; + } + + @Override + public boolean isCancelled() { + return cancelled; + } + + @Override + public void setCancelled(final boolean cancelled) { + this.cancelled = cancelled; + } + + @Override + public HandlerList getHandlers() { + return handlers; + } + + public static HandlerList getHandlerList() { + return handlers; + } +} From cba5063b333886ec1c5d3e3e62587b843afa1255 Mon Sep 17 00:00:00 2001 From: T41US <85046405+T41US@users.noreply.github.com> Date: Wed, 7 Jul 2021 12:55:43 -0700 Subject: [PATCH 006/120] Add config option to change discord show-avatar url (#4330) Co-authored-by: T41US Co-authored-by: Josh Roy <10731363+JRoy@users.noreply.github.com> --- .../java/net/essentialsx/discord/DiscordSettings.java | 4 ++++ .../essentialsx/discord/listeners/BukkitListener.java | 11 +++++------ EssentialsDiscord/src/main/resources/config.yml | 4 ++++ 3 files changed, 13 insertions(+), 6 deletions(-) diff --git a/EssentialsDiscord/src/main/java/net/essentialsx/discord/DiscordSettings.java b/EssentialsDiscord/src/main/java/net/essentialsx/discord/DiscordSettings.java index 99f49000867..5bcc77584a7 100644 --- a/EssentialsDiscord/src/main/java/net/essentialsx/discord/DiscordSettings.java +++ b/EssentialsDiscord/src/main/java/net/essentialsx/discord/DiscordSettings.java @@ -147,6 +147,10 @@ public boolean isShowName() { return config.getBoolean("show-name", false); } + public String getAvatarURL() { + return config.getString("avatar-url", "https://crafthead.net/helm/{uuid}"); + } + // General command settings public boolean isCommandEnabled(String command) { diff --git a/EssentialsDiscord/src/main/java/net/essentialsx/discord/listeners/BukkitListener.java b/EssentialsDiscord/src/main/java/net/essentialsx/discord/listeners/BukkitListener.java index 9bef98cee8f..78092801028 100644 --- a/EssentialsDiscord/src/main/java/net/essentialsx/discord/listeners/BukkitListener.java +++ b/EssentialsDiscord/src/main/java/net/essentialsx/discord/listeners/BukkitListener.java @@ -26,7 +26,6 @@ import java.util.UUID; public class BukkitListener implements Listener { - private final static String AVATAR_URL = "https://crafthead.net/helm/{uuid}"; private final JDADiscordService jda; public BukkitListener(JDADiscordService jda) { @@ -95,7 +94,7 @@ public void onChat(AsyncPlayerChatEvent event) { MessageUtil.sanitizeDiscordMarkdown(FormatUtil.stripEssentialsFormat(jda.getPlugin().getEss().getPermissionsHandler().getPrefix(player))), MessageUtil.sanitizeDiscordMarkdown(FormatUtil.stripEssentialsFormat(jda.getPlugin().getEss().getPermissionsHandler().getSuffix(player)))), player.hasPermission("essentials.discord.ping"), - jda.getSettings().isShowAvatar() ? AVATAR_URL.replace("{uuid}", player.getUniqueId().toString()) : null, + jda.getSettings().isShowAvatar() ? jda.getSettings().getAvatarURL().replace("{uuid}", player.getUniqueId().toString()) : null, jda.getSettings().isShowName() ? player.getName() : null, player.getUniqueId()); }); @@ -111,7 +110,7 @@ public void onJoin(AsyncUserDataLoadEvent event) { MessageUtil.sanitizeDiscordMarkdown(event.getUser().getDisplayName()), MessageUtil.sanitizeDiscordMarkdown(event.getJoinMessage())), false, - jda.getSettings().isShowAvatar() ? AVATAR_URL.replace("{uuid}", event.getUser().getBase().getUniqueId().toString()) : null, + jda.getSettings().isShowAvatar() ? jda.getSettings().getAvatarURL().replace("{uuid}", event.getUser().getBase().getUniqueId().toString()) : null, jda.getSettings().isShowName() ? event.getUser().getName() : null, event.getUser().getBase().getUniqueId()); } @@ -126,7 +125,7 @@ public void onQuit(PlayerQuitEvent event) { MessageUtil.sanitizeDiscordMarkdown(event.getPlayer().getDisplayName()), MessageUtil.sanitizeDiscordMarkdown(event.getQuitMessage())), false, - jda.getSettings().isShowAvatar() ? AVATAR_URL.replace("{uuid}", event.getPlayer().getUniqueId().toString()) : null, + jda.getSettings().isShowAvatar() ? jda.getSettings().getAvatarURL().replace("{uuid}", event.getPlayer().getUniqueId().toString()) : null, jda.getSettings().isShowName() ? event.getPlayer().getName() : null, event.getPlayer().getUniqueId()); } @@ -140,7 +139,7 @@ public void onDeath(PlayerDeathEvent event) { MessageUtil.sanitizeDiscordMarkdown(event.getEntity().getDisplayName()), MessageUtil.sanitizeDiscordMarkdown(event.getDeathMessage())), false, - jda.getSettings().isShowAvatar() ? AVATAR_URL.replace("{uuid}", event.getEntity().getUniqueId().toString()) : null, + jda.getSettings().isShowAvatar() ? jda.getSettings().getAvatarURL().replace("{uuid}", event.getEntity().getUniqueId().toString()) : null, jda.getSettings().isShowName() ? event.getEntity().getName() : null, event.getEntity().getUniqueId()); } @@ -159,7 +158,7 @@ public void onAfk(AfkStatusChangeEvent event) { MessageUtil.sanitizeDiscordMarkdown(event.getAffected().getName()), MessageUtil.sanitizeDiscordMarkdown(event.getAffected().getDisplayName())), false, - jda.getSettings().isShowAvatar() ? AVATAR_URL.replace("{uuid}", event.getAffected().getBase().getUniqueId().toString()) : null, + jda.getSettings().isShowAvatar() ? jda.getSettings().getAvatarURL().replace("{uuid}", event.getAffected().getBase().getUniqueId().toString()) : null, jda.getSettings().isShowName() ? event.getAffected().getName() : null, event.getAffected().getBase().getUniqueId()); } diff --git a/EssentialsDiscord/src/main/resources/config.yml b/EssentialsDiscord/src/main/resources/config.yml index aae3efd8a5b..f7b950a9979 100644 --- a/EssentialsDiscord/src/main/resources/config.yml +++ b/EssentialsDiscord/src/main/resources/config.yml @@ -121,6 +121,10 @@ message-types: # Whether or not player messages should show their avatar as the profile picture in Discord. show-avatar: false +# The URL which should be used to get the avatars of users when "show-avatar" is set to true. +# Any URL in here should only return a proper JPEG/PNG image and nothing else. +# To include the UUID of the player in this URL, use "{uuid}". +avatar-url: "https://crafthead.net/helm/{uuid}" # Whether or not player messages should show their name as the bot name in Discord. show-name: false From a098055fc9973393538aedb7fd773de8d6e6706e Mon Sep 17 00:00:00 2001 From: triagonal <10545540+triagonal@users.noreply.github.com> Date: Thu, 8 Jul 2021 23:24:40 +1000 Subject: [PATCH 007/120] Fix NPE when teleporting offline players (#4332) --- .../java/com/earth2me/essentials/commands/Commandtp.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/Essentials/src/main/java/com/earth2me/essentials/commands/Commandtp.java b/Essentials/src/main/java/com/earth2me/essentials/commands/Commandtp.java index 54b50007a87..bb1a38ecece 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/commands/Commandtp.java +++ b/Essentials/src/main/java/com/earth2me/essentials/commands/Commandtp.java @@ -25,7 +25,6 @@ public void run(final Server server, final User user, final String commandLabel, switch (args.length) { case 0: throw new NotEnoughArgumentsException(); - case 1: final User player = getPlayer(server, user, args, 0, false, true); @@ -33,8 +32,11 @@ public void run(final Server server, final User user, final String commandLabel, throw new Exception(tl("teleportDisabled", player.getDisplayName())); } - if (!player.getBase().isOnline() && user.isAuthorized("essentials.tpoffline")) { - throw new Exception(tl("teleportOffline", player.getDisplayName())); + if (!player.getBase().isOnline()) { + if (user.isAuthorized("essentials.tpoffline")) { + throw new Exception(tl("teleportOffline", player.getDisplayName())); + } + throw new PlayerNotFoundException(); } if (user.getWorld() != player.getWorld() && ess.getSettings().isWorldTeleportPermissions() && !user.isAuthorized("essentials.worlds." + player.getWorld().getName())) { From 435ac80ff9ee985e9e4d7a6f0fd8fdfb1669519c Mon Sep 17 00:00:00 2001 From: Josh Roy <10731363+JRoy@users.noreply.github.com> Date: Fri, 9 Jul 2021 11:55:52 -0400 Subject: [PATCH 008/120] Fix delay not working in /spawn (#4335) --- .../main/java/com/earth2me/essentials/spawn/Commandspawn.java | 2 +- .../net/essentialsx/api/v2/events/UserTeleportSpawnEvent.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/EssentialsSpawn/src/main/java/com/earth2me/essentials/spawn/Commandspawn.java b/EssentialsSpawn/src/main/java/com/earth2me/essentials/spawn/Commandspawn.java index 9150f7964d7..94e63b5d60f 100644 --- a/EssentialsSpawn/src/main/java/com/earth2me/essentials/spawn/Commandspawn.java +++ b/EssentialsSpawn/src/main/java/com/earth2me/essentials/spawn/Commandspawn.java @@ -39,7 +39,7 @@ public void run(final Server server, final User user, final String commandLabel, }); respawn(user.getSource(), user, otherUser, charge, commandLabel, future); } else { - respawn(user.getSource(), null, user, charge, commandLabel, new CompletableFuture<>()); + respawn(user.getSource(), user, user, charge, commandLabel, new CompletableFuture<>()); } throw new NoChargeException(); diff --git a/EssentialsSpawn/src/main/java/net/essentialsx/api/v2/events/UserTeleportSpawnEvent.java b/EssentialsSpawn/src/main/java/net/essentialsx/api/v2/events/UserTeleportSpawnEvent.java index 9505b40e367..24d78c8f63e 100644 --- a/EssentialsSpawn/src/main/java/net/essentialsx/api/v2/events/UserTeleportSpawnEvent.java +++ b/EssentialsSpawn/src/main/java/net/essentialsx/api/v2/events/UserTeleportSpawnEvent.java @@ -33,7 +33,7 @@ public IUser getUser() { } /** - * @return The user who caused teleport to spawn or null if there is none + * @return The user who caused teleport to spawn or null if the teleport was caused by the console. */ public IUser getController() { return controller; From 0b6b0f9c615992fcf7d62714c568a6f02b6fd1e7 Mon Sep 17 00:00:00 2001 From: Josh Roy <10731363+JRoy@users.noreply.github.com> Date: Fri, 9 Jul 2021 12:33:44 -0400 Subject: [PATCH 009/120] Fix NPE with custom join messages (#4334) This fixes a bug in #4290 in which custom join messages would throw a NullPointerException if the user hasn't changed their username. --- .../java/com/earth2me/essentials/EssentialsPlayerListener.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Essentials/src/main/java/com/earth2me/essentials/EssentialsPlayerListener.java b/Essentials/src/main/java/com/earth2me/essentials/EssentialsPlayerListener.java index edef4169225..6b0746590f6 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/EssentialsPlayerListener.java +++ b/Essentials/src/main/java/com/earth2me/essentials/EssentialsPlayerListener.java @@ -346,7 +346,7 @@ public void run() { .replace("{UPTIME}", DateUtil.formatDateDiff(ManagementFactory.getRuntimeMXBean().getStartTime())) .replace("{PREFIX}", FormatUtil.replaceFormat(ess.getPermissionsHandler().getPrefix(player))) .replace("{SUFFIX}", FormatUtil.replaceFormat(ess.getPermissionsHandler().getSuffix(player))) - .replace("{OLDUSERNAME}", lastAccountName); + .replace("{OLDUSERNAME}", lastAccountName == null ? "" : lastAccountName); if (!msg.isEmpty()) { ess.getServer().broadcastMessage(msg); } From 48532a0ae6f049713ddd2974f14b2cb9c809a244 Mon Sep 17 00:00:00 2001 From: triagonal <10545540+triagonal@users.noreply.github.com> Date: Sat, 10 Jul 2021 23:17:26 +1000 Subject: [PATCH 010/120] Fix NPE in UserData#getLogoutLocation (#4341) --- Essentials/src/main/java/com/earth2me/essentials/UserData.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Essentials/src/main/java/com/earth2me/essentials/UserData.java b/Essentials/src/main/java/com/earth2me/essentials/UserData.java index 6773ce0cc36..d377135a33b 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/UserData.java +++ b/Essentials/src/main/java/com/earth2me/essentials/UserData.java @@ -277,7 +277,8 @@ public void setLastLocation(final Location loc) { } public Location getLogoutLocation() { - return holder.logoutLocation().location(); + final LazyLocation logoutLocation = holder.logoutLocation(); + return logoutLocation != null ? logoutLocation.location() : null; } public void setLogoutLocation(final Location loc) { From 37e3730e9d4db105ca1ee1fb92f55879ea486238 Mon Sep 17 00:00:00 2001 From: Josh Roy <10731363+JRoy@users.noreply.github.com> Date: Sat, 3 Jul 2021 13:18:59 -0400 Subject: [PATCH 011/120] Add fake vanish join/leave + exclude vanished messages --- .../essentialsx/discord/DiscordSettings.java | 8 +++ .../discord/listeners/BukkitListener.java | 69 +++++++++++++------ .../src/main/resources/config.yml | 8 +++ 3 files changed, 65 insertions(+), 20 deletions(-) diff --git a/EssentialsDiscord/src/main/java/net/essentialsx/discord/DiscordSettings.java b/EssentialsDiscord/src/main/java/net/essentialsx/discord/DiscordSettings.java index 5bcc77584a7..928e5721c4c 100644 --- a/EssentialsDiscord/src/main/java/net/essentialsx/discord/DiscordSettings.java +++ b/EssentialsDiscord/src/main/java/net/essentialsx/discord/DiscordSettings.java @@ -151,6 +151,14 @@ public String getAvatarURL() { return config.getString("avatar-url", "https://crafthead.net/helm/{uuid}"); } + public boolean isVanishFakeJoinLeave() { + return config.getBoolean("vanish-fake-join-leave", true); + } + + public boolean isVanishHideMessages() { + return config.getBoolean("vanish-hide-messages", true); + } + // General command settings public boolean isCommandEnabled(String command) { diff --git a/EssentialsDiscord/src/main/java/net/essentialsx/discord/listeners/BukkitListener.java b/EssentialsDiscord/src/main/java/net/essentialsx/discord/listeners/BukkitListener.java index 78092801028..f0524b0a258 100644 --- a/EssentialsDiscord/src/main/java/net/essentialsx/discord/listeners/BukkitListener.java +++ b/EssentialsDiscord/src/main/java/net/essentialsx/discord/listeners/BukkitListener.java @@ -3,8 +3,10 @@ import com.earth2me.essentials.Console; import com.earth2me.essentials.utils.DateUtil; import com.earth2me.essentials.utils.FormatUtil; +import net.ess3.api.IUser; import net.ess3.api.events.AfkStatusChangeEvent; import net.ess3.api.events.MuteStatusChangeEvent; +import net.ess3.api.events.VanishStatusChangeEvent; import net.essentialsx.api.v2.events.AsyncUserDataLoadEvent; import net.essentialsx.api.v2.events.discord.DiscordChatMessageEvent; import net.essentialsx.api.v2.events.discord.DiscordMessageEvent; @@ -13,6 +15,7 @@ import net.essentialsx.discord.util.DiscordUtil; import net.essentialsx.discord.util.MessageUtil; import org.bukkit.Bukkit; +import org.bukkit.ChatColor; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; @@ -103,36 +106,47 @@ public void onChat(AsyncPlayerChatEvent event) { @EventHandler(priority = EventPriority.MONITOR) public void onJoin(AsyncUserDataLoadEvent event) { // Delay join to let nickname load - if (event.getJoinMessage() != null) { - sendDiscordMessage(MessageType.DefaultTypes.JOIN, - MessageUtil.formatMessage(jda.getSettings().getJoinFormat(event.getUser().getBase()), - MessageUtil.sanitizeDiscordMarkdown(event.getUser().getName()), - MessageUtil.sanitizeDiscordMarkdown(event.getUser().getDisplayName()), - MessageUtil.sanitizeDiscordMarkdown(event.getJoinMessage())), - false, - jda.getSettings().isShowAvatar() ? jda.getSettings().getAvatarURL().replace("{uuid}", event.getUser().getBase().getUniqueId().toString()) : null, - jda.getSettings().isShowName() ? event.getUser().getName() : null, - event.getUser().getBase().getUniqueId()); + if (event.getJoinMessage() != null && !isVanishHide(event.getUser())) { + sendJoinQuitMessage(event.getUser().getBase(), event.getJoinMessage(), true); } } @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void onQuit(PlayerQuitEvent event) { - if (event.getQuitMessage() != null) { - sendDiscordMessage(MessageType.DefaultTypes.LEAVE, - MessageUtil.formatMessage(jda.getSettings().getQuitFormat(event.getPlayer()), - MessageUtil.sanitizeDiscordMarkdown(event.getPlayer().getName()), - MessageUtil.sanitizeDiscordMarkdown(event.getPlayer().getDisplayName()), - MessageUtil.sanitizeDiscordMarkdown(event.getQuitMessage())), - false, - jda.getSettings().isShowAvatar() ? jda.getSettings().getAvatarURL().replace("{uuid}", event.getPlayer().getUniqueId().toString()) : null, - jda.getSettings().isShowName() ? event.getPlayer().getName() : null, - event.getPlayer().getUniqueId()); + if (event.getQuitMessage() != null && !isVanishHide(event.getPlayer())) { + sendJoinQuitMessage(event.getPlayer(), event.getQuitMessage(), false); } } + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + public void onVanishStatusChange(VanishStatusChangeEvent event) { + if (!jda.getSettings().isVanishFakeJoinLeave()) { + return; + } + if (event.getValue()) { + sendJoinQuitMessage(event.getAffected().getBase(), ChatColor.YELLOW + event.getAffected().getName() + " left the game", false); + return; + } + sendJoinQuitMessage(event.getAffected().getBase(), ChatColor.YELLOW + event.getAffected().getName() + " joined the game", true); + } + + public void sendJoinQuitMessage(final Player player, final String message, boolean join) { + sendDiscordMessage(join ? MessageType.DefaultTypes.JOIN : MessageType.DefaultTypes.LEAVE, + MessageUtil.formatMessage(join ? jda.getSettings().getJoinFormat(player) : jda.getSettings().getQuitFormat(player), + MessageUtil.sanitizeDiscordMarkdown(player.getName()), + MessageUtil.sanitizeDiscordMarkdown(player.getDisplayName()), + MessageUtil.sanitizeDiscordMarkdown(message), + false, + jda.getSettings().isShowAvatar() ? jda.getSettings().getAvatarURL().replace("{uuid}", player.getUniqueId().toString()) : null, + jda.getSettings().isShowName() ? player.getName() : null, + player.getUniqueId())); + } + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void onDeath(PlayerDeathEvent event) { + if (isVanishHide(event.getEntity())) { + return; + } sendDiscordMessage(MessageType.DefaultTypes.DEATH, MessageUtil.formatMessage(jda.getSettings().getDeathFormat(event.getEntity()), MessageUtil.sanitizeDiscordMarkdown(event.getEntity().getName()), @@ -146,6 +160,10 @@ public void onDeath(PlayerDeathEvent event) { @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void onAfk(AfkStatusChangeEvent event) { + if (isVanishHide(event.getAffected())) { + return; + } + final MessageFormat format; if (event.getValue()) { format = jda.getSettings().getAfkFormat(event.getAffected().getBase()); @@ -165,6 +183,9 @@ public void onAfk(AfkStatusChangeEvent event) { @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void onKick(PlayerKickEvent event) { + if (isVanishHide(event.getPlayer())) { + return; + } sendDiscordMessage(MessageType.DefaultTypes.KICK, MessageUtil.formatMessage(jda.getSettings().getKickFormat(), MessageUtil.sanitizeDiscordMarkdown(event.getPlayer().getName()), @@ -172,6 +193,14 @@ public void onKick(PlayerKickEvent event) { MessageUtil.sanitizeDiscordMarkdown(event.getReason()))); } + private boolean isVanishHide(final Player player) { + return isVanishHide(jda.getPlugin().getEss().getUser(player)); + } + + private boolean isVanishHide(final IUser user) { + return jda.getSettings().isVanishHideMessages() && user.isHidden(); + } + private void sendDiscordMessage(final MessageType messageType, final String message) { sendDiscordMessage(messageType, message, false, null, null, null); } diff --git a/EssentialsDiscord/src/main/resources/config.yml b/EssentialsDiscord/src/main/resources/config.yml index f7b950a9979..8fc8fe23db2 100644 --- a/EssentialsDiscord/src/main/resources/config.yml +++ b/EssentialsDiscord/src/main/resources/config.yml @@ -128,6 +128,14 @@ avatar-url: "https://crafthead.net/helm/{uuid}" # Whether or not player messages should show their name as the bot name in Discord. show-name: false +# Whether or not fake join and leave messages should be sent to Discord when a player toggles vanish in Minecraft. +# Fake join/leave messages will be sent the same as real join and leave messages (and to the same channel). +vanish-fake-join-leave: true + +# Whether or not messages from vanished players should be sent to discord. +# This affects join, leave, death, and afk message types by default. +vanish-hide-messages: true + # Settings pertaining to the varies commands registered by EssentialsX on Discord. commands: # The execute command allows for discord users to execute MC commands from Discord. From d244956b4be8ee07fac9b115f295f337d3056d02 Mon Sep 17 00:00:00 2001 From: Josh Roy <10731363+JRoy@users.noreply.github.com> Date: Sat, 3 Jul 2021 14:17:32 -0400 Subject: [PATCH 012/120] Ensure no JDA code is called during invalid shutdown --- .../src/main/resources/messages.properties | 1 + .../essentialsx/discord/DiscordSettings.java | 7 +++++++ .../discord/EssentialsDiscord.java | 19 +++++++++++-------- .../discord/JDADiscordService.java | 13 +++++++++++-- 4 files changed, 30 insertions(+), 10 deletions(-) diff --git a/Essentials/src/main/resources/messages.properties b/Essentials/src/main/resources/messages.properties index 4b94a2fd80e..c9e7d8feff4 100644 --- a/Essentials/src/main/resources/messages.properties +++ b/Essentials/src/main/resources/messages.properties @@ -253,6 +253,7 @@ discordErrorWebhook=An error occurred while sending messages to your console cha discordLoggingIn=Attempting to login to Discord... discordLoggingInDone=Successfully logged in as {0} discordNoSendPermission=Cannot send message in channel: #{0} Please ensure the bot has "Send Messages" permission in that channel\! +discordReloadInvalid=Tried to reload EssentialsX Discord config while the plugin is in an invalid state! If you've modified your config, restart your server. disposal=Disposal disposalCommandDescription=Opens a portable disposal menu. disposalCommandUsage=/ diff --git a/EssentialsDiscord/src/main/java/net/essentialsx/discord/DiscordSettings.java b/EssentialsDiscord/src/main/java/net/essentialsx/discord/DiscordSettings.java index 928e5721c4c..b76ccb00635 100644 --- a/EssentialsDiscord/src/main/java/net/essentialsx/discord/DiscordSettings.java +++ b/EssentialsDiscord/src/main/java/net/essentialsx/discord/DiscordSettings.java @@ -18,6 +18,8 @@ import java.util.regex.Pattern; import java.util.regex.PatternSyntaxException; +import static com.earth2me.essentials.I18n.tl; + public class DiscordSettings implements IConf { private final EssentialsConfiguration config; private final EssentialsDiscord plugin; @@ -306,6 +308,11 @@ private MessageFormat generateMessageFormat(String content, String defaultStr, b @Override public void reloadConfig() { + if (plugin.isInvalidStartup()) { + plugin.getLogger().warning(tl("discordReloadInvalid")); + return; + } + config.load(); // Build channel maps diff --git a/EssentialsDiscord/src/main/java/net/essentialsx/discord/EssentialsDiscord.java b/EssentialsDiscord/src/main/java/net/essentialsx/discord/EssentialsDiscord.java index cf803f7e0bc..1760129c31a 100644 --- a/EssentialsDiscord/src/main/java/net/essentialsx/discord/EssentialsDiscord.java +++ b/EssentialsDiscord/src/main/java/net/essentialsx/discord/EssentialsDiscord.java @@ -36,6 +36,10 @@ public void onEnable() { settings = new DiscordSettings(this); ess.addReloadListener(settings); + if (metrics == null) { + metrics = new MetricsWrapper(this, 9824, false); + } + if (jda == null) { jda = new JDADiscordService(this); try { @@ -46,18 +50,13 @@ public void onEnable() { if (ess.getSettings().isDebug()) { e.printStackTrace(); } - setEnabled(false); - return; + jda.shutdown(); } } - - if (metrics == null) { - metrics = new MetricsWrapper(this, 9824, false); - } } public void onReload() { - if (jda != null) { + if (jda != null && !jda.isInvalidStartup()) { jda.updatePresence(); jda.updatePrimaryChannel(); jda.updateConsoleRelay(); @@ -65,6 +64,10 @@ public void onReload() { } } + public boolean isInvalidStartup() { + return jda != null && jda.isInvalidStartup(); + } + public IEssentials getEss() { return ess; } @@ -79,7 +82,7 @@ public boolean isPAPI() { @Override public void onDisable() { - if (jda != null) { + if (jda != null && !jda.isInvalidStartup()) { jda.shutdown(); } } diff --git a/EssentialsDiscord/src/main/java/net/essentialsx/discord/JDADiscordService.java b/EssentialsDiscord/src/main/java/net/essentialsx/discord/JDADiscordService.java index 1d4777640eb..15d5c3bc6d7 100644 --- a/EssentialsDiscord/src/main/java/net/essentialsx/discord/JDADiscordService.java +++ b/EssentialsDiscord/src/main/java/net/essentialsx/discord/JDADiscordService.java @@ -63,6 +63,7 @@ public class JDADiscordService implements DiscordService { private ConsoleInjector injector; private DiscordCommandDispatcher commandDispatcher; private InteractionControllerImpl interactionController; + private boolean invalidStartup = false; public JDADiscordService(EssentialsDiscord plugin) { this.plugin = plugin; @@ -148,11 +149,13 @@ public void startup() throws LoginException, InterruptedException { logger.log(Level.INFO, tl("discordLoggingInDone", jda.getSelfUser().getAsTag())); if (jda.getGuilds().isEmpty()) { + invalidStartup = true; throw new IllegalArgumentException(tl("discordErrorNoGuildSize")); } guild = jda.getGuildById(plugin.getSettings().getGuildId()); if (guild == null) { + invalidStartup = true; throw new IllegalArgumentException(tl("discordErrorNoGuild")); } @@ -348,8 +351,10 @@ public void shutdown() { } if (jda != null) { - sendMessage(MessageType.DefaultTypes.SERVER_STOP, getSettings().getStopMessage(), true); - DiscordUtil.dispatchDiscordMessage(JDADiscordService.this, MessageType.DefaultTypes.SERVER_STOP, getSettings().getStopMessage(), true, null, null, null); + if (!invalidStartup) { + sendMessage(MessageType.DefaultTypes.SERVER_STOP, getSettings().getStopMessage(), true); + DiscordUtil.dispatchDiscordMessage(JDADiscordService.this, MessageType.DefaultTypes.SERVER_STOP, getSettings().getStopMessage(), true, null, null, null); + } shutdownConsoleRelay(true); @@ -410,6 +415,10 @@ public WebhookClient getConsoleWebhook() { return consoleWebhook; } + public boolean isInvalidStartup() { + return invalidStartup; + } + public boolean isDebug() { return plugin.getEss().getSettings().isDebug(); } From 0a0416ae384d02b971d273f9ddebe358974f1628 Mon Sep 17 00:00:00 2001 From: Josh Roy <10731363+JRoy@users.noreply.github.com> Date: Sun, 4 Jul 2021 15:42:05 -0400 Subject: [PATCH 013/120] Fix disabling a single command causing all commands to be disabled --- .../java/net/essentialsx/discord/JDADiscordService.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/EssentialsDiscord/src/main/java/net/essentialsx/discord/JDADiscordService.java b/EssentialsDiscord/src/main/java/net/essentialsx/discord/JDADiscordService.java index 15d5c3bc6d7..b937b448e62 100644 --- a/EssentialsDiscord/src/main/java/net/essentialsx/discord/JDADiscordService.java +++ b/EssentialsDiscord/src/main/java/net/essentialsx/discord/JDADiscordService.java @@ -160,12 +160,18 @@ public void startup() throws LoginException, InterruptedException { } interactionController = new InteractionControllerImpl(this); + // Each will throw an exception if disabled try { interactionController.registerCommand(new ExecuteCommand(this)); + } catch (InteractionException ignored) { + } + try { interactionController.registerCommand(new MessageCommand(this)); + } catch (InteractionException ignored) { + } + try { interactionController.registerCommand(new ListCommand(this)); } catch (InteractionException ignored) { - // won't happen } updatePrimaryChannel(); From 3bc58264ea4e9193e87eb257688bee411cd7609d Mon Sep 17 00:00:00 2001 From: Josh Roy <10731363+JRoy@users.noreply.github.com> Date: Sun, 4 Jul 2021 21:57:13 -0400 Subject: [PATCH 014/120] Add advancement message type --- .../api/v2/services/discord/MessageType.java | 3 +- .../essentialsx/discord/DiscordSettings.java | 12 ++ .../discord/JDADiscordService.java | 14 ++ .../discord/listeners/BukkitListener.java | 18 +++ .../src/main/resources/config.yml | 17 ++- .../provider/AbstractAchievementEvent.java | 34 +++++ .../main/java/net/ess3/nms/refl/ReflUtil.java | 4 + .../AchievementListenerProvider.java | 127 ++++++++++++++++++ .../AdvancementListenerProvider.java | 46 +++++++ 9 files changed, 270 insertions(+), 5 deletions(-) create mode 100644 providers/BaseProviders/src/main/java/net/ess3/provider/AbstractAchievementEvent.java create mode 100644 providers/NMSReflectionProvider/src/main/java/net/ess3/nms/refl/providers/AchievementListenerProvider.java create mode 100644 providers/NMSReflectionProvider/src/main/java/net/ess3/nms/refl/providers/AdvancementListenerProvider.java diff --git a/EssentialsDiscord/src/main/java/net/essentialsx/api/v2/services/discord/MessageType.java b/EssentialsDiscord/src/main/java/net/essentialsx/api/v2/services/discord/MessageType.java index b821bd7c00c..fe33252b648 100644 --- a/EssentialsDiscord/src/main/java/net/essentialsx/api/v2/services/discord/MessageType.java +++ b/EssentialsDiscord/src/main/java/net/essentialsx/api/v2/services/discord/MessageType.java @@ -58,11 +58,12 @@ public static final class DefaultTypes { public final static MessageType CHAT = new MessageType("chat", true); public final static MessageType DEATH = new MessageType("death", true); public final static MessageType AFK = new MessageType("afk", true); + public final static MessageType ADVANCEMENT = new MessageType("advancement", true); public final static MessageType SERVER_START = new MessageType("server-start", false); public final static MessageType SERVER_STOP = new MessageType("server-stop", false); public final static MessageType KICK = new MessageType("kick", false); public final static MessageType MUTE = new MessageType("mute", false); - private final static MessageType[] VALUES = new MessageType[]{JOIN, LEAVE, CHAT, DEATH, AFK, SERVER_START, SERVER_STOP, KICK, MUTE}; + private final static MessageType[] VALUES = new MessageType[]{JOIN, LEAVE, CHAT, DEATH, AFK, ADVANCEMENT, SERVER_START, SERVER_STOP, KICK, MUTE}; /** * Gets an array of all the default {@link MessageType MessageTypes}. diff --git a/EssentialsDiscord/src/main/java/net/essentialsx/discord/DiscordSettings.java b/EssentialsDiscord/src/main/java/net/essentialsx/discord/DiscordSettings.java index b76ccb00635..4fab10bf56c 100644 --- a/EssentialsDiscord/src/main/java/net/essentialsx/discord/DiscordSettings.java +++ b/EssentialsDiscord/src/main/java/net/essentialsx/discord/DiscordSettings.java @@ -277,6 +277,18 @@ public MessageFormat getUnAfkFormat(Player player) { "username", "displayname"); } + public MessageFormat getAdvancementFormat(Player player) { + final String format = getFormatString("advancement"); + final String filled; + if (plugin.isPAPI() && format != null) { + filled = me.clip.placeholderapi.PlaceholderAPI.setPlaceholders(player, format); + } else { + filled = format; + } + return generateMessageFormat(filled, ":medal: {displayname} has completed the advancement **{advancement}**!", false, + "username", "displayname", "advancement"); + } + public String getStartMessage() { return config.getString("messages.server-start", ":white_check_mark: The server has started!"); } diff --git a/EssentialsDiscord/src/main/java/net/essentialsx/discord/JDADiscordService.java b/EssentialsDiscord/src/main/java/net/essentialsx/discord/JDADiscordService.java index b937b448e62..126999681fe 100644 --- a/EssentialsDiscord/src/main/java/net/essentialsx/discord/JDADiscordService.java +++ b/EssentialsDiscord/src/main/java/net/essentialsx/discord/JDADiscordService.java @@ -5,6 +5,7 @@ import club.minnced.discord.webhook.send.WebhookMessage; import club.minnced.discord.webhook.send.WebhookMessageBuilder; import com.earth2me.essentials.utils.FormatUtil; +import com.earth2me.essentials.utils.VersionUtil; import net.dv8tion.jda.api.JDA; import net.dv8tion.jda.api.JDABuilder; import net.dv8tion.jda.api.entities.Guild; @@ -13,6 +14,8 @@ import net.dv8tion.jda.api.events.ShutdownEvent; import net.dv8tion.jda.api.hooks.EventListener; import net.dv8tion.jda.api.hooks.ListenerAdapter; +import net.ess3.nms.refl.providers.AchievementListenerProvider; +import net.ess3.nms.refl.providers.AdvancementListenerProvider; import net.essentialsx.api.v2.events.discord.DiscordMessageEvent; import net.essentialsx.api.v2.services.discord.DiscordService; import net.essentialsx.api.v2.services.discord.InteractionController; @@ -181,6 +184,17 @@ public void startup() throws LoginException, InterruptedException { updateTypesRelay(); Bukkit.getPluginManager().registerEvents(new BukkitListener(this), plugin); + + try { + if (VersionUtil.getServerBukkitVersion().isHigherThanOrEqualTo(VersionUtil.v1_12_0_R01)) { + Bukkit.getPluginManager().registerEvents(new AdvancementListenerProvider(), plugin); + } else { + Bukkit.getPluginManager().registerEvents(new AchievementListenerProvider(), plugin); + } + } catch (final Throwable e) { + logger.log(Level.WARNING, "Error while loading the achievement/advancement listener. You will not receive achievement/advancement notifications on Discord.", e); + } + getPlugin().getEss().scheduleSyncDelayedTask(() -> DiscordUtil.dispatchDiscordMessage(JDADiscordService.this, MessageType.DefaultTypes.SERVER_START, getSettings().getStartMessage(), true, null, null, null)); Bukkit.getServicesManager().register(DiscordService.class, this, plugin, ServicePriority.Normal); diff --git a/EssentialsDiscord/src/main/java/net/essentialsx/discord/listeners/BukkitListener.java b/EssentialsDiscord/src/main/java/net/essentialsx/discord/listeners/BukkitListener.java index f0524b0a258..a70182efab6 100644 --- a/EssentialsDiscord/src/main/java/net/essentialsx/discord/listeners/BukkitListener.java +++ b/EssentialsDiscord/src/main/java/net/essentialsx/discord/listeners/BukkitListener.java @@ -7,6 +7,7 @@ import net.ess3.api.events.AfkStatusChangeEvent; import net.ess3.api.events.MuteStatusChangeEvent; import net.ess3.api.events.VanishStatusChangeEvent; +import net.ess3.provider.AbstractAchievementEvent; import net.essentialsx.api.v2.events.AsyncUserDataLoadEvent; import net.essentialsx.api.v2.events.discord.DiscordChatMessageEvent; import net.essentialsx.api.v2.events.discord.DiscordMessageEvent; @@ -181,6 +182,23 @@ public void onAfk(AfkStatusChangeEvent event) { event.getAffected().getBase().getUniqueId()); } + @EventHandler(priority = EventPriority.MONITOR) + public void onAdvancement(AbstractAchievementEvent event) { + if (isVanishHide(event.getPlayer())) { + return; + } + + sendDiscordMessage(MessageType.DefaultTypes.ADVANCEMENT, + MessageUtil.formatMessage(jda.getSettings().getAdvancementFormat(event.getPlayer()), + MessageUtil.sanitizeDiscordMarkdown(event.getPlayer().getName()), + MessageUtil.sanitizeDiscordMarkdown(event.getPlayer().getDisplayName()), + event.getName()), + false, + jda.getSettings().isShowAvatar() ? AVATAR_URL.replace("{uuid}", event.getPlayer().getUniqueId().toString()) : null, + jda.getSettings().isShowName() ? event.getPlayer().getName() : null, + event.getPlayer().getUniqueId()); + } + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void onKick(PlayerKickEvent event) { if (isVanishHide(event.getPlayer())) { diff --git a/EssentialsDiscord/src/main/resources/config.yml b/EssentialsDiscord/src/main/resources/config.yml index 8fc8fe23db2..2a532785281 100644 --- a/EssentialsDiscord/src/main/resources/config.yml +++ b/EssentialsDiscord/src/main/resources/config.yml @@ -110,6 +110,8 @@ message-types: death: primary # AFK status change messages sent when a player's AFK status changes. afk: primary + # Achievement/advancement messages sent when a player is awarded an achievement/advancement. + advancement: primary # Message sent when the server starts up. server-start: primary # Message sent when the server shuts down. @@ -296,10 +298,6 @@ messages: # - {deathmessage}: The full default death message used in game # ... PlaceholderAPI placeholders are also supported here too! death: ":skull: {deathmessage}" - # This is the message sent to discord when the server starts. - server-start: ":white_check_mark: The server has started!" - # This is the message sent to discord when the server stops. - server-stop: ":octagonal_sign: The server has stopped!" # This is the message sent to discord when a player becomes afk. # The following placeholders can be used here: # - {username}: The name of the user who became afk @@ -312,6 +310,17 @@ messages: # - {displayname}: The display name of the user who is no longer afk # ... PlaceholderAPI placeholders are also supported here too! un-afk: ":keyboard: {displayname} is no longer AFK!" + # This is the message sent to Discord when a player is awarded an advancement. + # The following placeholders can be used here: + # - {username}: The name of the user who was awarded the advancement. + # - {displayname}: The display name of the user who was awarded the advancement. + # - {advancement}: The name of the advancement. + # ... PlaceholderAPI placeholders are also supported here too! + advancement: ":medal: {displayname} has completed the advancement **{advancement}**!" + # This is the message sent to discord when the server starts. + server-start: ":white_check_mark: The server has started!" + # This is the message sent to discord when the server stops. + server-stop: ":octagonal_sign: The server has stopped!" # This is the message sent to discord when a player is kicked from the server. # The following placeholders can be used here: # - {username}: The name of the user who got kicked diff --git a/providers/BaseProviders/src/main/java/net/ess3/provider/AbstractAchievementEvent.java b/providers/BaseProviders/src/main/java/net/ess3/provider/AbstractAchievementEvent.java new file mode 100644 index 00000000000..0741ab625e0 --- /dev/null +++ b/providers/BaseProviders/src/main/java/net/ess3/provider/AbstractAchievementEvent.java @@ -0,0 +1,34 @@ +package net.ess3.provider; + +import org.bukkit.entity.Player; +import org.bukkit.event.Event; +import org.bukkit.event.HandlerList; + +public class AbstractAchievementEvent extends Event { + private static final HandlerList handlers = new HandlerList(); + + private final Player player; + private final String name; + + public AbstractAchievementEvent(Player player, String name) { + this.player = player; + this.name = name; + } + + public Player getPlayer() { + return player; + } + + public String getName() { + return name; + } + + @Override + public HandlerList getHandlers() { + return handlers; + } + + public static HandlerList getHandlerList() { + return handlers; + } +} diff --git a/providers/NMSReflectionProvider/src/main/java/net/ess3/nms/refl/ReflUtil.java b/providers/NMSReflectionProvider/src/main/java/net/ess3/nms/refl/ReflUtil.java index 7d1a3ac9124..f4fe3574638 100644 --- a/providers/NMSReflectionProvider/src/main/java/net/ess3/nms/refl/ReflUtil.java +++ b/providers/NMSReflectionProvider/src/main/java/net/ess3/nms/refl/ReflUtil.java @@ -61,6 +61,10 @@ public static NMSVersion getNmsVersionObject() { return nmsVersionObject; } + public static boolean isMojMap() { + return getNmsVersionObject().getMajor() == 99; + } + public static Class getNMSClass(final String className) { return getClassCached("net.minecraft.server" + (ReflUtil.getNmsVersionObject().isLowerThan(ReflUtil.V1_17_R1) ? "." + getNMSVersion() : "") + "." + className); } diff --git a/providers/NMSReflectionProvider/src/main/java/net/ess3/nms/refl/providers/AchievementListenerProvider.java b/providers/NMSReflectionProvider/src/main/java/net/ess3/nms/refl/providers/AchievementListenerProvider.java new file mode 100644 index 00000000000..c8cdba46b3a --- /dev/null +++ b/providers/NMSReflectionProvider/src/main/java/net/ess3/nms/refl/providers/AchievementListenerProvider.java @@ -0,0 +1,127 @@ +package net.ess3.nms.refl.providers; + +import net.ess3.provider.AbstractAchievementEvent; +import org.bukkit.Achievement; +import org.bukkit.Bukkit; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerAchievementAwardedEvent; + +@SuppressWarnings("deprecation") +public class AchievementListenerProvider implements Listener { + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + public void onAchievement(final PlayerAchievementAwardedEvent event) { + Bukkit.getPluginManager().callEvent(new AbstractAchievementEvent(event.getPlayer(), getAchievementName(event.getAchievement()))); + } + + private String getAchievementName(final Achievement achievement) { + switch (achievement) { + case OPEN_INVENTORY: { + return "Taking Inventory"; + } + case MINE_WOOD: { + return "Getting Wood"; + } + case BUILD_WORKBENCH: { + return "Benchmarking"; + } + case BUILD_PICKAXE: { + return "Time to Mine!"; + } + case BUILD_FURNACE: { + return "Hot Topic"; + } + case ACQUIRE_IRON: { + return "Acquire Hardware!"; + } + case BUILD_HOE: { + return "Time to Farm!"; + } + case MAKE_BREAD: { + return "Bake Bread"; + } + case BAKE_CAKE: { + return "The Lie"; + } + case BUILD_BETTER_PICKAXE: { + return "Getting an Upgrade"; + } + case COOK_FISH: { + return "Delicious Fish"; + } + case ON_A_RAIL: { + return "On A Rail"; + } + case BUILD_SWORD: { + return "Time to Strike"; + } + case KILL_ENEMY: { + return "Monster Hunter"; + } + case KILL_COW: { + return "Cow Tipper"; + } + case FLY_PIG: { + return "When Pigs Fly!"; + } + case SNIPE_SKELETON: { + return "Sniper Duel"; + } + case GET_DIAMONDS: { + return "DIAMONDS!"; + } + case NETHER_PORTAL: { + return "We Need to Go Deeper"; + } + case GHAST_RETURN: { + return "Return to Sender"; + } + case GET_BLAZE_ROD: { + return "Into Fire"; + } + case BREW_POTION: { + return "Local Brewery"; + } + case END_PORTAL: { + return "The End?"; + } + case THE_END: { + return "The End."; + } + case ENCHANTMENTS: { + return "Enchanter"; + } + case OVERKILL: { + return "Overkill"; + } + case BOOKCASE: { + return "Librarian"; + } + case EXPLORE_ALL_BIOMES: { + return "Adventuring Time"; + } + case SPAWN_WITHER: { + return "The Beginning?"; + } + case KILL_WITHER: { + return "The Beginning."; + } + case FULL_BEACON: { + return "Beaconator"; + } + case BREED_COW: { + return "Repopulation"; + } + case DIAMONDS_TO_YOU: { + return "Diamonds to you!"; + } + case OVERPOWERED: { + return "Overpowered"; + } + default: { + throw new IllegalStateException(); + } + } + } +} diff --git a/providers/NMSReflectionProvider/src/main/java/net/ess3/nms/refl/providers/AdvancementListenerProvider.java b/providers/NMSReflectionProvider/src/main/java/net/ess3/nms/refl/providers/AdvancementListenerProvider.java new file mode 100644 index 00000000000..c1745e515d8 --- /dev/null +++ b/providers/NMSReflectionProvider/src/main/java/net/ess3/nms/refl/providers/AdvancementListenerProvider.java @@ -0,0 +1,46 @@ +package net.ess3.nms.refl.providers; + +import net.ess3.nms.refl.ReflUtil; +import net.ess3.provider.AbstractAchievementEvent; +import org.bukkit.Bukkit; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerAdvancementDoneEvent; + +import java.lang.invoke.MethodHandle; +import java.lang.invoke.MethodHandles; +import java.lang.invoke.MethodType; + +public class AdvancementListenerProvider implements Listener { + private final Object language; + private final MethodHandle languageGetOrDefault; + + public AdvancementListenerProvider() throws Throwable { + final Class languageClass; + if (ReflUtil.isMojMap()) { + languageClass = ReflUtil.getClassCached("net.minecraft.locale.Language"); + } else if (ReflUtil.getNmsVersionObject().isHigherThanOrEqualTo(ReflUtil.V1_17_R1)) { + languageClass = ReflUtil.getClassCached("net.minecraft.locale.LocaleLanguage"); + } else { + languageClass = ReflUtil.getNMSClass("LocaleLanguage"); + } + final MethodHandles.Lookup lookup = MethodHandles.lookup(); + //noinspection ConstantConditions + language = lookup.findStatic(languageClass, ReflUtil.isMojMap() ? "getInstance" : "a", MethodType.methodType(languageClass)).invoke(); + languageGetOrDefault = lookup.findVirtual(languageClass, ReflUtil.isMojMap() ? "getOrDefault" : "a", MethodType.methodType(String.class, String.class)); + } + + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + public void onAdvancement(final PlayerAdvancementDoneEvent event) { + try { + final String key = "advancements." + event.getAdvancement().getKey().getKey().replace('/', '.') + ".title"; + final String translation = (String) languageGetOrDefault.invoke(language, key); + if (!key.equals(translation)) { + Bukkit.getPluginManager().callEvent(new AbstractAchievementEvent(event.getPlayer(), translation)); + } + } catch (Throwable throwable) { + throwable.printStackTrace(); + } + } +} From b516db669ce53e16c517494c5b402423fa72cd2b Mon Sep 17 00:00:00 2001 From: Josh Roy <10731363+JRoy@users.noreply.github.com> Date: Mon, 5 Jul 2021 12:15:28 -0400 Subject: [PATCH 015/120] Fix prefixes/suffixes not stripping hex format --- .../src/main/java/com/earth2me/essentials/utils/FormatUtil.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Essentials/src/main/java/com/earth2me/essentials/utils/FormatUtil.java b/Essentials/src/main/java/com/earth2me/essentials/utils/FormatUtil.java index 55731454b8d..14eaef06817 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/utils/FormatUtil.java +++ b/Essentials/src/main/java/com/earth2me/essentials/utils/FormatUtil.java @@ -44,7 +44,7 @@ public static String stripEssentialsFormat(final String input) { if (input == null) { return null; } - return stripColor(input, REPLACE_ALL_PATTERN); + return stripColor(stripColor(input, REPLACE_ALL_PATTERN), REPLACE_ALL_RGB_PATTERN); } public static String stripAnsi(final String input) { From feed2d6a457acac25d76eedb7d2d1477a79c4ce6 Mon Sep 17 00:00:00 2001 From: Josh Roy <10731363+JRoy@users.noreply.github.com> Date: Mon, 5 Jul 2021 13:31:49 -0400 Subject: [PATCH 016/120] Fix improper bitwise logic in DiscordUtil#getRoleColorFormat --- .../main/java/net/essentialsx/discord/util/DiscordUtil.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/EssentialsDiscord/src/main/java/net/essentialsx/discord/util/DiscordUtil.java b/EssentialsDiscord/src/main/java/net/essentialsx/discord/util/DiscordUtil.java index cc83c7de896..a74e90aa5d5 100644 --- a/EssentialsDiscord/src/main/java/net/essentialsx/discord/util/DiscordUtil.java +++ b/EssentialsDiscord/src/main/java/net/essentialsx/discord/util/DiscordUtil.java @@ -144,11 +144,10 @@ public static String getRoleFormat(Member member) { * @return The bukkit color code or blank string. */ public static String getRoleColorFormat(Member member) { - final int rawColor = member.getColorRaw(); - - if (rawColor == Role.DEFAULT_COLOR_RAW) { + if (member.getColorRaw() == Role.DEFAULT_COLOR_RAW) { return ""; } + final int rawColor = 0xff000000 | member.getColorRaw(); if (VersionUtil.getServerBukkitVersion().isHigherThanOrEqualTo(VersionUtil.v1_16_1_R01)) { // Essentials' FormatUtil allows us to not have to use bungee's chatcolor since bukkit's own one doesn't support rgb From 15cac529c57914cc4621d73648768b5a4e22d1fb Mon Sep 17 00:00:00 2001 From: Josh Roy <10731363+JRoy@users.noreply.github.com> Date: Mon, 5 Jul 2021 13:42:13 -0400 Subject: [PATCH 017/120] Improve death message validation Now takes gamerules in to account and will not send blank or null death messages. --- .../discord/listeners/BukkitListener.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/EssentialsDiscord/src/main/java/net/essentialsx/discord/listeners/BukkitListener.java b/EssentialsDiscord/src/main/java/net/essentialsx/discord/listeners/BukkitListener.java index a70182efab6..8ca50902fa1 100644 --- a/EssentialsDiscord/src/main/java/net/essentialsx/discord/listeners/BukkitListener.java +++ b/EssentialsDiscord/src/main/java/net/essentialsx/discord/listeners/BukkitListener.java @@ -3,6 +3,7 @@ import com.earth2me.essentials.Console; import com.earth2me.essentials.utils.DateUtil; import com.earth2me.essentials.utils.FormatUtil; +import com.earth2me.essentials.utils.VersionUtil; import net.ess3.api.IUser; import net.ess3.api.events.AfkStatusChangeEvent; import net.ess3.api.events.MuteStatusChangeEvent; @@ -17,6 +18,7 @@ import net.essentialsx.discord.util.MessageUtil; import org.bukkit.Bukkit; import org.bukkit.ChatColor; +import org.bukkit.GameRule; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; @@ -148,6 +150,21 @@ public void onDeath(PlayerDeathEvent event) { if (isVanishHide(event.getEntity())) { return; } + + final Boolean showDeathMessages; + if (VersionUtil.getServerBukkitVersion().isHigherThan(VersionUtil.v1_12_2_R01)) { + showDeathMessages = event.getEntity().getWorld().getGameRuleValue(GameRule.SHOW_DEATH_MESSAGES); + } else { + if (!event.getEntity().getWorld().isGameRule("showDeathMessages")) { + showDeathMessages = null; + } else { + showDeathMessages = event.getEntity().getWorld().getGameRuleValue("showDeathMessages").equals("true"); + } + } + if ((showDeathMessages != null && !showDeathMessages) || event.getDeathMessage() == null || event.getDeathMessage().trim().isEmpty()) { + return; + } + sendDiscordMessage(MessageType.DefaultTypes.DEATH, MessageUtil.formatMessage(jda.getSettings().getDeathFormat(event.getEntity()), MessageUtil.sanitizeDiscordMarkdown(event.getEntity().getName()), From 12cc0b99f91ce651e400071a8ca0dfdf9b582f58 Mon Sep 17 00:00:00 2001 From: Josh Roy <10731363+JRoy@users.noreply.github.com> Date: Mon, 5 Jul 2021 14:55:26 -0400 Subject: [PATCH 018/120] Fix some minor grammer issues in config --- .../src/main/resources/config.yml | 42 +++++++++---------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/EssentialsDiscord/src/main/resources/config.yml b/EssentialsDiscord/src/main/resources/config.yml index 2a532785281..db8d010870b 100644 --- a/EssentialsDiscord/src/main/resources/config.yml +++ b/EssentialsDiscord/src/main/resources/config.yml @@ -51,8 +51,8 @@ chat: discord-max-length: 2000 # Whether or not new lines from Discord should be filtered or not. filter-newlines: true - # A regex pattern which will not send matching messages through to Discord. - # By default, this will ignore messages starting with '!' and '?'. + # A regex pattern which will ignore matching incoming messages from Discord. + # By default, this will ignore messages starting with '!' or '?'. discord-filter: "^[!?]" # Whether or not webhook messages from Discord should be shown in Minecraft. show-webhook-messages: false @@ -134,13 +134,13 @@ show-name: false # Fake join/leave messages will be sent the same as real join and leave messages (and to the same channel). vanish-fake-join-leave: true -# Whether or not messages from vanished players should be sent to discord. +# Whether or not messages from vanished players should be sent to Discord. # This affects join, leave, death, and afk message types by default. vanish-hide-messages: true # Settings pertaining to the varies commands registered by EssentialsX on Discord. commands: - # The execute command allows for discord users to execute MC commands from Discord. + # The execute command allows for Discord users to execute MC commands from Discord. # MC commands executed by this will be ran as the console and you should therefore be careful to who you grant this to. execute: # Set to false if you do not want this command to show up on the Discord command selector. @@ -219,18 +219,18 @@ presence: # The following entries allow you to customize the formatting of messages sent by the plugin. # Each message has a description of how it is used along with placeholders that can be used. messages: - # This is the message that is used to show discord chat to players in game. + # This is the message that is used to show Discord chat to players in game. # Color/formatting codes and the follow placeholders can be used here: - # - {channel}: The name of the discord channel the message was sent from + # - {channel}: The name of the Discord channel the message was sent from # - {username}: The username of the user who sent the message # - {discriminator}: The four numbers displayed after the user's name # - {fullname}: Equivalent to typing "{username}#{discriminator}" # - {nickname}: The nickname of the user who sent the message. (Will return username if user has no nickname) # - {role}: The name of the user's topmost role on Discord. If the user doesn't have a role, the placeholder is empty. - # - {color}: The minecraft color representative of the user's topmost role color on discord. If the user doesn't have a role color, the placeholder is empty. + # - {color}: The minecraft color representative of the user's topmost role color on Discord. If the user doesn't have a role color, the placeholder is empty. # - {message}: The content of the message being sent discord-to-mc: "&6[#{channel}] &3{fullname}&7: &f{message}" - # This is the message that is used to relay minecraft chat in discord. + # This is the message that is used to relay minecraft chat in Discord. # The following placeholders can be used here: # - {username}: The username of the player sending the message # - {displayname}: The display name of the player sending the message (This would be their nickname) @@ -240,7 +240,7 @@ messages: # - {suffix}: The suffix of the player sending the message # ... PlaceholderAPI placeholders are also supported here too! mc-to-discord: "{displayname}: {message}" - # This is the message sent to discord when a player is temporarily muted in minecraft. + # This is the message sent to Discord when a player is temporarily muted in minecraft. # The following placeholders can be used here: # - {username}: The username of the player being muted # - {displayname}: The display name of the player being muted @@ -248,7 +248,7 @@ messages: # - {controllerdisplayname}: The display name of the user who muted the player # - {time}: The amount of time the player was muted for temporary-mute: "{controllerdisplayname} has muted player {displayname} for {time}." - # This is the message sent to discord when a player is temporarily muted (with a reason specified) in minecraft. + # This is the message sent to Discord when a player is temporarily muted (with a reason specified) in minecraft. # The following placeholders can be used here: # - {username}: The username of the player being muted # - {displayname}: The display name of the player being muted @@ -257,14 +257,14 @@ messages: # - {time}: The amount of time the player was muted for # - {reason}: The reason the player was muted for temporary-mute-reason: "{controllerdisplayname} has muted player {displayname} for {time}. Reason: {reason}." - # This is the message sent to discord when a player is permanently muted in minecraft. + # This is the message sent to Discord when a player is permanently muted in minecraft. # The following placeholders can be used here: # - {username}: The username of the player being muted # - {displayname}: The display name of the player being muted # - {controllername}: The username of the user who muted the player # - {controllerdisplayname}: The display name of the user who muted the player permanent-mute: "{controllerdisplayname} has muted player {displayname}." - # This is the message sent to discord when a player is permanently muted (with a reason specified) in minecraft. + # This is the message sent to Discord when a player is permanently muted (with a reason specified) in minecraft. # The following placeholders can be used here: # - {username}: The username of the player being muted # - {displayname}: The display name of the player being muted @@ -272,39 +272,39 @@ messages: # - {controllerdisplayname}: The display name of the user who muted the player # - {reason}: The reason the player was muted for permanent-mute-reason: "{controllerdisplayname} has permanently muted player {displayname}. Reason: {reason}." - # This is the message sent to discord when a player is unmuted in minecraft. + # This is the message sent to Discord when a player is unmuted in minecraft. # The following placeholders can be used here: # - {username}: The username of the player being unmuted # - {displayname}: The display name of the player being unmuted unmute: "{displayname} unmuted." - # This is the message sent to discord when a player joins the minecraft server. + # This is the message sent to Discord when a player joins the minecraft server. # The following placeholders can be used here: # - {username}: The name of the user joining # - {displayname}: The display name of the user joining # - {joinmessage}: The full default join message used in game # ... PlaceholderAPI placeholders are also supported here too! join: ":arrow_right: {displayname} has joined!" - # This is the message sent to discord when a player leaves the minecraft server. + # This is the message sent to Discord when a player leaves the minecraft server. # The following placeholders can be used here: # - {username}: The name of the user leaving # - {displayname}: The display name of the user leaving # - {quitmessage}: The full default leave message used in game # ... PlaceholderAPI placeholders are also supported here too! quit: ":arrow_left: {displayname} has left!" - # This is the message sent to discord when a player dies. + # This is the message sent to Discord when a player dies. # The following placeholders can be used here: # - {username}: The name of the user who died # - {displayname}: The display name of the user who died # - {deathmessage}: The full default death message used in game # ... PlaceholderAPI placeholders are also supported here too! death: ":skull: {deathmessage}" - # This is the message sent to discord when a player becomes afk. + # This is the message sent to Discord when a player becomes afk. # The following placeholders can be used here: # - {username}: The name of the user who became afk # - {displayname}: The display name of the user who became afk # ... PlaceholderAPI placeholders are also supported here too! afk: ":person_walking: {displayname} is now AFK!" - # This is the message sent to discord when a player is no longer afk. + # This is the message sent to Discord when a player is no longer afk. # The following placeholders can be used here: # - {username}: The name of the user who is no longer afk # - {displayname}: The display name of the user who is no longer afk @@ -317,11 +317,11 @@ messages: # - {advancement}: The name of the advancement. # ... PlaceholderAPI placeholders are also supported here too! advancement: ":medal: {displayname} has completed the advancement **{advancement}**!" - # This is the message sent to discord when the server starts. + # This is the message sent to Discord when the server starts. server-start: ":white_check_mark: The server has started!" - # This is the message sent to discord when the server stops. + # This is the message sent to Discord when the server stops. server-stop: ":octagonal_sign: The server has stopped!" - # This is the message sent to discord when a player is kicked from the server. + # This is the message sent to Discord when a player is kicked from the server. # The following placeholders can be used here: # - {username}: The name of the user who got kicked # - {displayname}: The display name of the user who got kicked From db027bced3f107b4518a274e130e284564e9ca06 Mon Sep 17 00:00:00 2001 From: Josh Roy <10731363+JRoy@users.noreply.github.com> Date: Mon, 5 Jul 2021 15:21:56 -0400 Subject: [PATCH 019/120] Add option to log channels to console --- .../java/net/essentialsx/discord/DiscordSettings.java | 4 ++++ .../essentialsx/discord/listeners/DiscordListener.java | 8 ++++++++ EssentialsDiscord/src/main/resources/config.yml | 5 +++++ 3 files changed, 17 insertions(+) diff --git a/EssentialsDiscord/src/main/java/net/essentialsx/discord/DiscordSettings.java b/EssentialsDiscord/src/main/java/net/essentialsx/discord/DiscordSettings.java index 4fab10bf56c..e443ae44d2d 100644 --- a/EssentialsDiscord/src/main/java/net/essentialsx/discord/DiscordSettings.java +++ b/EssentialsDiscord/src/main/java/net/essentialsx/discord/DiscordSettings.java @@ -121,6 +121,10 @@ public boolean isShowAllChat() { return config.getBoolean("chat.show-all-chat", false); } + public List getRelayToConsoleList() { + return config.getList("chat.relay-to-console", String.class); + } + public String getConsoleChannelDef() { return config.getString("console.channel", "none"); } diff --git a/EssentialsDiscord/src/main/java/net/essentialsx/discord/listeners/DiscordListener.java b/EssentialsDiscord/src/main/java/net/essentialsx/discord/listeners/DiscordListener.java index caab7b07f85..fb2d8604b89 100644 --- a/EssentialsDiscord/src/main/java/net/essentialsx/discord/listeners/DiscordListener.java +++ b/EssentialsDiscord/src/main/java/net/essentialsx/discord/listeners/DiscordListener.java @@ -88,12 +88,20 @@ public void onGuildMessageReceived(@NotNull GuildMessageReceivedEvent event) { event.getChannel().getName(), user.getName(), user.getDiscriminator(), user.getAsTag(), member.getEffectiveName(), DiscordUtil.getRoleColorFormat(member), finalMessage, DiscordUtil.getRoleFormat(member)), EmojiParser.FitzpatrickAction.REMOVE); + for (final String group : keys) { + if (plugin.getSettings().getRelayToConsoleList().contains(group)) { + logger.info(formattedMessage); + break; + } + } + for (IUser essUser : plugin.getPlugin().getEss().getOnlineUsers()) { for (String group : keys) { final String perm = "essentials.discord.receive." + group; final boolean primaryOverride = plugin.getSettings().isAlwaysReceivePrimary() && group.equalsIgnoreCase("primary"); if (primaryOverride || (essUser.isPermissionSet(perm) && essUser.isAuthorized(perm))) { essUser.sendMessage(formattedMessage); + break; } } } diff --git a/EssentialsDiscord/src/main/resources/config.yml b/EssentialsDiscord/src/main/resources/config.yml index db8d010870b..601cc2d5912 100644 --- a/EssentialsDiscord/src/main/resources/config.yml +++ b/EssentialsDiscord/src/main/resources/config.yml @@ -61,6 +61,11 @@ chat: # Whether or not to show all Minecraft chat messages that are not shown to all players. # You shouldn't need to enable this unless you're not seeing all chat messages go through to Discord. show-all-chat: false + # A list of Discord channels which should be logged to console. + # If you want to use the channels below, remember to uncomment the line by removing the '#' before the '-'. + relay-to-console: + #- primary + #- chat # Console relay settings # The console relay sends every message shown in the console to a Discord channel. From b473460ffc55ecd5b34b1a14538a1110c28a76fa Mon Sep 17 00:00:00 2001 From: Chew Date: Tue, 6 Jul 2021 15:32:22 -0400 Subject: [PATCH 020/120] Use native Discord timestamps for console timestamps --- EssentialsDiscord/build.gradle | 2 +- .../java/net/essentialsx/discord/util/ConsoleInjector.java | 7 +++---- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/EssentialsDiscord/build.gradle b/EssentialsDiscord/build.gradle index 1eabe785d60..ec03a93e60d 100644 --- a/EssentialsDiscord/build.gradle +++ b/EssentialsDiscord/build.gradle @@ -4,7 +4,7 @@ plugins { dependencies { compileOnly project(':EssentialsX') - implementation('net.dv8tion:JDA:4.3.0_277') { + implementation('net.dv8tion:JDA:4.3.0_293') { //noinspection GroovyAssignabilityCheck exclude module: 'opus-java' } diff --git a/EssentialsDiscord/src/main/java/net/essentialsx/discord/util/ConsoleInjector.java b/EssentialsDiscord/src/main/java/net/essentialsx/discord/util/ConsoleInjector.java index 8b33315ab59..96b269f43c0 100644 --- a/EssentialsDiscord/src/main/java/net/essentialsx/discord/util/ConsoleInjector.java +++ b/EssentialsDiscord/src/main/java/net/essentialsx/discord/util/ConsoleInjector.java @@ -3,6 +3,7 @@ import com.earth2me.essentials.utils.FormatUtil; import com.google.common.base.Splitter; import net.dv8tion.jda.api.entities.Message; +import net.dv8tion.jda.api.utils.TimeFormat; import net.essentialsx.discord.JDADiscordService; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.core.LogEvent; @@ -11,8 +12,7 @@ import org.apache.logging.log4j.core.config.plugins.Plugin; import org.bukkit.Bukkit; -import java.text.SimpleDateFormat; -import java.util.Date; +import java.time.Instant; import java.util.concurrent.BlockingQueue; import java.util.concurrent.LinkedBlockingQueue; @@ -24,7 +24,6 @@ public class ConsoleInjector extends AbstractAppender { private final JDADiscordService jda; private final BlockingQueue messageQueue = new LinkedBlockingQueue<>(); - private final SimpleDateFormat timestampFormat = new SimpleDateFormat("HH:mm:ss"); private final int taskId; public ConsoleInjector(JDADiscordService jda) { @@ -76,7 +75,7 @@ public void append(LogEvent event) { //noinspection UnstableApiUsage messageQueue.addAll(Splitter.fixedLength(Message.MAX_CONTENT_LENGTH).splitToList( MessageUtil.formatMessage(jda.getSettings().getConsoleFormat(), - timestampFormat.format(new Date()), + TimeFormat.TIME_LONG.format(Instant.now()), event.getLevel().name(), MessageUtil.sanitizeDiscordMarkdown(entry)))); } From d4ddc87d81916cbb891b40fcb0b21a4a03ba0f9e Mon Sep 17 00:00:00 2001 From: Josh Roy <10731363+JRoy@users.noreply.github.com> Date: Tue, 6 Jul 2021 21:18:23 -0400 Subject: [PATCH 021/120] Fix less strict length check on messageQueue add rather than iteration --- .../main/java/net/essentialsx/discord/util/ConsoleInjector.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/EssentialsDiscord/src/main/java/net/essentialsx/discord/util/ConsoleInjector.java b/EssentialsDiscord/src/main/java/net/essentialsx/discord/util/ConsoleInjector.java index 96b269f43c0..6a668bdecb2 100644 --- a/EssentialsDiscord/src/main/java/net/essentialsx/discord/util/ConsoleInjector.java +++ b/EssentialsDiscord/src/main/java/net/essentialsx/discord/util/ConsoleInjector.java @@ -73,7 +73,7 @@ public void append(LogEvent event) { } //noinspection UnstableApiUsage - messageQueue.addAll(Splitter.fixedLength(Message.MAX_CONTENT_LENGTH).splitToList( + messageQueue.addAll(Splitter.fixedLength(Message.MAX_CONTENT_LENGTH - 2).splitToList( MessageUtil.formatMessage(jda.getSettings().getConsoleFormat(), TimeFormat.TIME_LONG.format(Instant.now()), event.getLevel().name(), From 46a8a7d04ce610bdfb52a6fa48c27715132bade1 Mon Sep 17 00:00:00 2001 From: Josh Roy <10731363+JRoy@users.noreply.github.com> Date: Tue, 6 Jul 2021 21:31:35 -0400 Subject: [PATCH 022/120] Remove join/quit message null checks If you don't want to see them, don't configure them. --- .../discord/listeners/BukkitListener.java | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/EssentialsDiscord/src/main/java/net/essentialsx/discord/listeners/BukkitListener.java b/EssentialsDiscord/src/main/java/net/essentialsx/discord/listeners/BukkitListener.java index 8ca50902fa1..bcde3c6a749 100644 --- a/EssentialsDiscord/src/main/java/net/essentialsx/discord/listeners/BukkitListener.java +++ b/EssentialsDiscord/src/main/java/net/essentialsx/discord/listeners/BukkitListener.java @@ -109,18 +109,26 @@ public void onChat(AsyncPlayerChatEvent event) { @EventHandler(priority = EventPriority.MONITOR) public void onJoin(AsyncUserDataLoadEvent event) { // Delay join to let nickname load - if (event.getJoinMessage() != null && !isVanishHide(event.getUser())) { + if (!isSilentJoinQuit(event.getUser(), "join") && !isVanishHide(event.getUser())) { sendJoinQuitMessage(event.getUser().getBase(), event.getJoinMessage(), true); } } @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void onQuit(PlayerQuitEvent event) { - if (event.getQuitMessage() != null && !isVanishHide(event.getPlayer())) { + if (!isSilentJoinQuit(event.getPlayer(), "quit") && !isVanishHide(event.getPlayer())) { sendJoinQuitMessage(event.getPlayer(), event.getQuitMessage(), false); } } + public boolean isSilentJoinQuit(final Player player, final String type) { + return isSilentJoinQuit(jda.getPlugin().getEss().getUser(player), type); + } + + public boolean isSilentJoinQuit(final IUser user, final String type) { + return jda.getPlugin().getEss().getSettings().allowSilentJoinQuit() && user.isAuthorized("essentials.silent" + type); + } + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void onVanishStatusChange(VanishStatusChangeEvent event) { if (!jda.getSettings().isVanishFakeJoinLeave()) { From cca98e817f9aee80cce3f78ad324cf497702fca2 Mon Sep 17 00:00:00 2001 From: Josh Roy <10731363+JRoy@users.noreply.github.com> Date: Thu, 8 Jul 2021 17:15:45 -0400 Subject: [PATCH 023/120] Add show-displayname option --- .../net/essentialsx/discord/DiscordSettings.java | 4 ++++ .../net/essentialsx/discord/JDADiscordService.java | 2 +- .../discord/listeners/BukkitListener.java | 12 ++++++------ EssentialsDiscord/src/main/resources/config.yml | 3 +++ 4 files changed, 14 insertions(+), 7 deletions(-) diff --git a/EssentialsDiscord/src/main/java/net/essentialsx/discord/DiscordSettings.java b/EssentialsDiscord/src/main/java/net/essentialsx/discord/DiscordSettings.java index e443ae44d2d..3e18ea828af 100644 --- a/EssentialsDiscord/src/main/java/net/essentialsx/discord/DiscordSettings.java +++ b/EssentialsDiscord/src/main/java/net/essentialsx/discord/DiscordSettings.java @@ -153,6 +153,10 @@ public boolean isShowName() { return config.getBoolean("show-name", false); } + public boolean isShowDisplayName() { + return config.getBoolean("show-displayname", false); + } + public String getAvatarURL() { return config.getString("avatar-url", "https://crafthead.net/helm/{uuid}"); } diff --git a/EssentialsDiscord/src/main/java/net/essentialsx/discord/JDADiscordService.java b/EssentialsDiscord/src/main/java/net/essentialsx/discord/JDADiscordService.java index 126999681fe..5a0ea867b63 100644 --- a/EssentialsDiscord/src/main/java/net/essentialsx/discord/JDADiscordService.java +++ b/EssentialsDiscord/src/main/java/net/essentialsx/discord/JDADiscordService.java @@ -252,7 +252,7 @@ public void updatePresence() { } public void updateTypesRelay() { - if (!getSettings().isShowAvatar() && !getSettings().isShowName()) { + if (!getSettings().isShowAvatar() && !getSettings().isShowName() && !getSettings().isShowDisplayName()) { for (WebhookClient webhook : channelIdToWebhook.values()) { webhook.close(); } diff --git a/EssentialsDiscord/src/main/java/net/essentialsx/discord/listeners/BukkitListener.java b/EssentialsDiscord/src/main/java/net/essentialsx/discord/listeners/BukkitListener.java index bcde3c6a749..03669bdacfc 100644 --- a/EssentialsDiscord/src/main/java/net/essentialsx/discord/listeners/BukkitListener.java +++ b/EssentialsDiscord/src/main/java/net/essentialsx/discord/listeners/BukkitListener.java @@ -101,7 +101,7 @@ public void onChat(AsyncPlayerChatEvent event) { MessageUtil.sanitizeDiscordMarkdown(FormatUtil.stripEssentialsFormat(jda.getPlugin().getEss().getPermissionsHandler().getSuffix(player)))), player.hasPermission("essentials.discord.ping"), jda.getSettings().isShowAvatar() ? jda.getSettings().getAvatarURL().replace("{uuid}", player.getUniqueId().toString()) : null, - jda.getSettings().isShowName() ? player.getName() : null, + jda.getSettings().isShowName() ? player.getName() : (jda.getSettings().isShowDisplayName() ? player.getDisplayName() : null), player.getUniqueId()); }); } @@ -149,7 +149,7 @@ public void sendJoinQuitMessage(final Player player, final String message, boole MessageUtil.sanitizeDiscordMarkdown(message), false, jda.getSettings().isShowAvatar() ? jda.getSettings().getAvatarURL().replace("{uuid}", player.getUniqueId().toString()) : null, - jda.getSettings().isShowName() ? player.getName() : null, + jda.getSettings().isShowName() ? player.getName() : (jda.getSettings().isShowDisplayName() ? player.getDisplayName() : null), player.getUniqueId())); } @@ -180,7 +180,7 @@ public void onDeath(PlayerDeathEvent event) { MessageUtil.sanitizeDiscordMarkdown(event.getDeathMessage())), false, jda.getSettings().isShowAvatar() ? jda.getSettings().getAvatarURL().replace("{uuid}", event.getEntity().getUniqueId().toString()) : null, - jda.getSettings().isShowName() ? event.getEntity().getName() : null, + jda.getSettings().isShowName() ? event.getEntity().getName() : (jda.getSettings().isShowDisplayName() ? event.getEntity().getDisplayName() : null), event.getEntity().getUniqueId()); } @@ -203,7 +203,7 @@ public void onAfk(AfkStatusChangeEvent event) { MessageUtil.sanitizeDiscordMarkdown(event.getAffected().getDisplayName())), false, jda.getSettings().isShowAvatar() ? jda.getSettings().getAvatarURL().replace("{uuid}", event.getAffected().getBase().getUniqueId().toString()) : null, - jda.getSettings().isShowName() ? event.getAffected().getName() : null, + jda.getSettings().isShowName() ? event.getAffected().getName() : (jda.getSettings().isShowDisplayName() ? event.getAffected().getDisplayName() : null), event.getAffected().getBase().getUniqueId()); } @@ -219,8 +219,8 @@ public void onAdvancement(AbstractAchievementEvent event) { MessageUtil.sanitizeDiscordMarkdown(event.getPlayer().getDisplayName()), event.getName()), false, - jda.getSettings().isShowAvatar() ? AVATAR_URL.replace("{uuid}", event.getPlayer().getUniqueId().toString()) : null, - jda.getSettings().isShowName() ? event.getPlayer().getName() : null, + jda.getSettings().isShowAvatar() ? jda.getSettings().getAvatarURL().replace("{uuid}", event.getPlayer().getUniqueId().toString()) : null, + jda.getSettings().isShowName() ? event.getPlayer().getName() : (jda.getSettings().isShowDisplayName() ? event.getPlayer().getDisplayName() : null), event.getPlayer().getUniqueId()); } diff --git a/EssentialsDiscord/src/main/resources/config.yml b/EssentialsDiscord/src/main/resources/config.yml index 601cc2d5912..aecf5b0351c 100644 --- a/EssentialsDiscord/src/main/resources/config.yml +++ b/EssentialsDiscord/src/main/resources/config.yml @@ -134,6 +134,9 @@ show-avatar: false avatar-url: "https://crafthead.net/helm/{uuid}" # Whether or not player messages should show their name as the bot name in Discord. show-name: false +# Whether or not player messages should show their display-name/nickname as the bot name in Discord. +# You must disable show-name for this option to work. +show-displayname: false # Whether or not fake join and leave messages should be sent to Discord when a player toggles vanish in Minecraft. # Fake join/leave messages will be sent the same as real join and leave messages (and to the same channel). From c020526b1e96864932b48c4a1d9080e4874e6818 Mon Sep 17 00:00:00 2001 From: triagonal <10545540+triagonal@users.noreply.github.com> Date: Sun, 11 Jul 2021 23:57:46 +1000 Subject: [PATCH 024/120] Strip formatting in webhook name (#4344) --- .../src/main/java/net/essentialsx/discord/util/DiscordUtil.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/EssentialsDiscord/src/main/java/net/essentialsx/discord/util/DiscordUtil.java b/EssentialsDiscord/src/main/java/net/essentialsx/discord/util/DiscordUtil.java index a74e90aa5d5..fc4c93c8d49 100644 --- a/EssentialsDiscord/src/main/java/net/essentialsx/discord/util/DiscordUtil.java +++ b/EssentialsDiscord/src/main/java/net/essentialsx/discord/util/DiscordUtil.java @@ -190,7 +190,7 @@ public static void dispatchDiscordMessage(final JDADiscordService jda, final Mes return; } - final DiscordMessageEvent event = new DiscordMessageEvent(messageType, FormatUtil.stripFormat(message), allowPing, avatarUrl, name, uuid); + final DiscordMessageEvent event = new DiscordMessageEvent(messageType, FormatUtil.stripFormat(message), allowPing, avatarUrl, FormatUtil.stripFormat(name), uuid); // If the server is stopping, we cannot dispatch events. if (messageType == MessageType.DefaultTypes.SERVER_STOP) { From eed73e315792fff7610cf4d9b774ecf8fe942829 Mon Sep 17 00:00:00 2001 From: MD <1917406+mdcfe@users.noreply.github.com> Date: Sun, 11 Jul 2021 17:25:25 +0100 Subject: [PATCH 025/120] Cache overridden-commands and player-commands in Settings (#4345) --- .../com/earth2me/essentials/Settings.java | 28 +++++++++++++------ 1 file changed, 20 insertions(+), 8 deletions(-) diff --git a/Essentials/src/main/java/com/earth2me/essentials/Settings.java b/Essentials/src/main/java/com/earth2me/essentials/Settings.java index 5bab531edbd..94d31027718 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/Settings.java +++ b/Essentials/src/main/java/com/earth2me/essentials/Settings.java @@ -48,8 +48,8 @@ public class Settings implements net.ess3.api.ISettings { private static final Logger logger = Logger.getLogger("Essentials"); - private static final BigDecimal MAXMONEY = new BigDecimal("10000000000000"); - private static final BigDecimal MINMONEY = new BigDecimal("-10000000000000"); + private static final BigDecimal DEFAULT_MAX_MONEY = new BigDecimal("10000000000000"); + private static final BigDecimal DEFAULT_MIN_MONEY = new BigDecimal("-10000000000000"); private final transient EssentialsConfiguration config; private final transient IEssentials ess; private final transient AtomicInteger reloadCount = new AtomicInteger(0); @@ -62,6 +62,8 @@ public class Settings implements net.ess3.api.ISettings { private boolean teleportSafety; private boolean forceDisableTeleportSafety; private Set disabledCommands = new HashSet<>(); + private List overriddenCommands = Collections.emptyList(); + private List playerCommands = Collections.emptyList(); private final transient Map disabledBukkitCommands = new HashMap<>(); private Map commandCosts; private Set socialSpyCommands = new HashSet<>(); @@ -76,8 +78,8 @@ public class Settings implements net.ess3.api.ISettings { private boolean configDebug = false; // #easteregg private boolean economyDisabled = false; - private BigDecimal maxMoney = MAXMONEY; - private BigDecimal minMoney = MINMONEY; + private BigDecimal maxMoney = DEFAULT_MAX_MONEY; + private BigDecimal minMoney = DEFAULT_MIN_MONEY; private boolean economyLog = false; // #easteregg private boolean economyLogUpdate = false; @@ -317,9 +319,13 @@ private Set _getDisabledCommands() { return disCommands; } + private List _getPlayerCommands() { + return config.getList("player-commands", String.class); + } + @Override public boolean isPlayerCommand(final String label) { - for (final String c : config.getList("player-commands", String.class)) { + for (final String c : playerCommands) { if (!c.equalsIgnoreCase(label)) { continue; } @@ -328,9 +334,13 @@ public boolean isPlayerCommand(final String label) { return false; } + private List _getOverriddenCommands() { + return config.getList("overridden-commands", String.class); + } + @Override public boolean isCommandOverridden(final String name) { - for (final String c : config.getList("overridden-commands", String.class)) { + for (final String c : overriddenCommands) { if (!c.equalsIgnoreCase(name)) { continue; } @@ -643,6 +653,8 @@ public void reloadConfig() { chatFormats.clear(); changeDisplayName = _changeDisplayName(); disabledCommands = _getDisabledCommands(); + overriddenCommands = _getOverriddenCommands(); + playerCommands = _getPlayerCommands(); // This will be late loaded if (ess.getKnownCommandsProvider() != null) { @@ -934,7 +946,7 @@ public boolean getProtectBoolean(final String configName, final boolean def) { } private BigDecimal _getMaxMoney() { - return config.getBigDecimal("max-money", MAXMONEY); + return config.getBigDecimal("max-money", DEFAULT_MAX_MONEY); } @Override @@ -943,7 +955,7 @@ public BigDecimal getMaxMoney() { } private BigDecimal _getMinMoney() { - BigDecimal min = config.getBigDecimal("min-money", MINMONEY); + BigDecimal min = config.getBigDecimal("min-money", DEFAULT_MIN_MONEY); if (min.signum() > 0) { min = min.negate(); } From 1556b911b23524a12d4816313bc98c950149cfa4 Mon Sep 17 00:00:00 2001 From: Josh Roy <10731363+JRoy@users.noreply.github.com> Date: Sun, 11 Jul 2021 15:36:46 -0400 Subject: [PATCH 026/120] Fix webhook messages being parsed unnecessarily (#4346) This wasted CPU time parsing responses from Discord that we will never use, plus caused problems when parsing webhooks that our library couldn't parse correctly (MinnDevelopment/discord-webhooks#36). --- .../src/main/java/net/essentialsx/discord/util/DiscordUtil.java | 1 + 1 file changed, 1 insertion(+) diff --git a/EssentialsDiscord/src/main/java/net/essentialsx/discord/util/DiscordUtil.java b/EssentialsDiscord/src/main/java/net/essentialsx/discord/util/DiscordUtil.java index fc4c93c8d49..55ac88e70ed 100644 --- a/EssentialsDiscord/src/main/java/net/essentialsx/discord/util/DiscordUtil.java +++ b/EssentialsDiscord/src/main/java/net/essentialsx/discord/util/DiscordUtil.java @@ -52,6 +52,7 @@ private DiscordUtil() { */ public static WebhookClient getWebhookClient(long id, String token, OkHttpClient client) { return new WebhookClientBuilder(id, token) + .setWait(false) .setAllowedMentions(AllowedMentions.none()) .setHttpClient(client) .setDaemon(true) From 0d8e90b8da611b3a5f526d736601afdb3269951b Mon Sep 17 00:00:00 2001 From: Josh Roy <10731363+JRoy@users.noreply.github.com> Date: Tue, 27 Jul 2021 13:23:20 -0700 Subject: [PATCH 027/120] Move FakeServer to 1.8 provider (#4395) Moving this removes the need to needlessly update the FakeServer class with new methods when upstream changes it. --- .../essentials/EssentialsPlayerListener.java | 7 +- .../com/earth2me/essentials/FakeAccessor.java | 13 + .../com/earth2me/essentials/FakeServer.java | 293 ++---------------- 3 files changed, 44 insertions(+), 269 deletions(-) create mode 100644 providers/1_8Provider/src/main/java/com/earth2me/essentials/FakeAccessor.java rename {Essentials/src/test => providers/1_8Provider/src/main}/java/com/earth2me/essentials/FakeServer.java (79%) diff --git a/Essentials/src/main/java/com/earth2me/essentials/EssentialsPlayerListener.java b/Essentials/src/main/java/com/earth2me/essentials/EssentialsPlayerListener.java index 6b0746590f6..47e18232bda 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/EssentialsPlayerListener.java +++ b/Essentials/src/main/java/com/earth2me/essentials/EssentialsPlayerListener.java @@ -72,7 +72,7 @@ import static com.earth2me.essentials.I18n.tl; -public class EssentialsPlayerListener implements Listener { +public class EssentialsPlayerListener implements Listener, FakeAccessor { private static final Logger LOGGER = Logger.getLogger("Essentials"); private final transient IEssentials ess; @@ -1001,4 +1001,9 @@ private boolean isEssentialsCommand(final String label) { && (ess.getSettings().isCommandOverridden(label) || (ess.getAlternativeCommandsHandler().getAlternative(label) == null)); } } + + @Override + public void getUser(Player player) { + ess.getUser(player); + } } diff --git a/providers/1_8Provider/src/main/java/com/earth2me/essentials/FakeAccessor.java b/providers/1_8Provider/src/main/java/com/earth2me/essentials/FakeAccessor.java new file mode 100644 index 00000000000..5de96c3ac02 --- /dev/null +++ b/providers/1_8Provider/src/main/java/com/earth2me/essentials/FakeAccessor.java @@ -0,0 +1,13 @@ +package com.earth2me.essentials; + +import org.bukkit.entity.Player; +import org.bukkit.event.player.PlayerJoinEvent; + +/** + * Utility method to bridge certain features between our test suite and the base module. + */ +public interface FakeAccessor { + void onPlayerJoin(PlayerJoinEvent event); + + void getUser(Player player); +} diff --git a/Essentials/src/test/java/com/earth2me/essentials/FakeServer.java b/providers/1_8Provider/src/main/java/com/earth2me/essentials/FakeServer.java similarity index 79% rename from Essentials/src/test/java/com/earth2me/essentials/FakeServer.java rename to providers/1_8Provider/src/main/java/com/earth2me/essentials/FakeServer.java index 1fa5064c213..d8dba3defbc 100644 --- a/Essentials/src/test/java/com/earth2me/essentials/FakeServer.java +++ b/providers/1_8Provider/src/main/java/com/earth2me/essentials/FakeServer.java @@ -3,33 +3,25 @@ import org.bukkit.BanList; import org.bukkit.Bukkit; import org.bukkit.GameMode; -import org.bukkit.Keyed; import org.bukkit.Location; -import org.bukkit.Material; import org.bukkit.NamespacedKey; import org.bukkit.Server; -import org.bukkit.Statistic; -import org.bukkit.StructureType; -import org.bukkit.Tag; import org.bukkit.UnsafeValues; import org.bukkit.Warning.WarningState; import org.bukkit.World; import org.bukkit.World.Environment; import org.bukkit.WorldCreator; import org.bukkit.advancement.Advancement; -import org.bukkit.block.data.BlockData; import org.bukkit.boss.BarColor; import org.bukkit.boss.BarFlag; import org.bukkit.boss.BarStyle; import org.bukkit.boss.BossBar; -import org.bukkit.boss.KeyedBossBar; import org.bukkit.command.CommandSender; import org.bukkit.command.ConsoleCommandSender; import org.bukkit.command.PluginCommand; import org.bukkit.conversations.Conversation; import org.bukkit.conversations.ConversationAbandonedEvent; import org.bukkit.entity.Entity; -import org.bukkit.entity.EntityType; import org.bukkit.entity.Player; import org.bukkit.event.Event; import org.bukkit.event.EventPriority; @@ -44,7 +36,6 @@ import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.Merchant; import org.bukkit.inventory.Recipe; -import org.bukkit.loot.LootTable; import org.bukkit.map.MapView; import org.bukkit.permissions.Permissible; import org.bukkit.permissions.Permission; @@ -78,10 +69,9 @@ import java.util.UUID; import java.util.concurrent.Callable; import java.util.concurrent.Future; -import java.util.function.Consumer; import java.util.logging.Logger; -@SuppressWarnings({"NullableProblems", "ConstantConditions"}) +@SuppressWarnings({"NullableProblems"}) public final class FakeServer implements Server { private final List worlds = new ArrayList<>(); private final PluginManager pluginManager = new FakePluginManager(); @@ -128,6 +118,16 @@ public String getIp() { return "127.0.0.1"; } + @Override + public String getServerName() { + return getName(); + } + + @Override + public String getServerId() { + throw new UnsupportedOperationException("Not supported yet."); + } + @Override public int broadcastMessage(final String string) { int i = 0; @@ -232,6 +232,11 @@ public void cancelTasks(final Plugin plugin) { throw new UnsupportedOperationException("Not supported yet."); } + @Override + public void cancelAllTasks() { + throw new UnsupportedOperationException("Not supported yet."); + } + @Override public boolean isCurrentlyRunning(final int i) { throw new UnsupportedOperationException("Not supported yet."); @@ -257,11 +262,6 @@ public BukkitTask runTask(final Plugin plugin, final Runnable r) throws IllegalA throw new UnsupportedOperationException("Not supported yet."); } - @Override - public void runTask(final Plugin plugin, final Consumer task) throws IllegalArgumentException { - throw new UnsupportedOperationException("Not supported yet."); - } - @Override public BukkitTask runTask(final Plugin plugin, final BukkitRunnable bukkitRunnable) throws IllegalArgumentException { return null; @@ -273,11 +273,6 @@ public BukkitTask runTaskAsynchronously(final Plugin plugin, final Runnable r) t return null; } - @Override - public void runTaskAsynchronously(final Plugin plugin, final Consumer task) throws IllegalArgumentException { - throw new UnsupportedOperationException("Not supported yet."); - } - @Override public BukkitTask runTaskAsynchronously(final Plugin plugin, final BukkitRunnable bukkitRunnable) throws IllegalArgumentException { return null; @@ -288,11 +283,6 @@ public BukkitTask runTaskLater(final Plugin plugin, final Runnable r, final long throw new UnsupportedOperationException("Not supported yet."); } - @Override - public void runTaskLater(final Plugin plugin, final Consumer task, final long delay) throws IllegalArgumentException { - throw new UnsupportedOperationException("Not supported yet."); - } - @Override public BukkitTask runTaskLater(final Plugin plugin, final BukkitRunnable bukkitRunnable, final long l) throws IllegalArgumentException { return null; @@ -304,11 +294,6 @@ public BukkitTask runTaskLaterAsynchronously(final Plugin plugin, final Runnable return null; } - @Override - public void runTaskLaterAsynchronously(final Plugin plugin, final Consumer task, final long delay) throws IllegalArgumentException { - throw new UnsupportedOperationException("Not supported yet."); - } - @Override public BukkitTask runTaskLaterAsynchronously(final Plugin plugin, final BukkitRunnable bukkitRunnable, final long l) throws IllegalArgumentException { return null; @@ -319,11 +304,6 @@ public BukkitTask runTaskTimer(final Plugin plugin, final Runnable r, final long throw new UnsupportedOperationException("Not supported yet."); } - @Override - public void runTaskTimer(final Plugin plugin, final Consumer task, final long delay, final long period) throws IllegalArgumentException { - throw new UnsupportedOperationException("Not supported yet."); - } - @Override public BukkitTask runTaskTimer(final Plugin plugin, final BukkitRunnable bukkitRunnable, final long l, final long l1) throws IllegalArgumentException { return null; @@ -334,11 +314,6 @@ public BukkitTask runTaskTimerAsynchronously(final Plugin plugin, final Runnable throw new UnsupportedOperationException("Not supported yet."); } - @Override - public void runTaskTimerAsynchronously(final Plugin plugin, final Consumer task, final long delay, final long period) throws IllegalArgumentException { - throw new UnsupportedOperationException("Not supported yet."); - } - @Override public BukkitTask runTaskTimerAsynchronously(final Plugin plugin, final BukkitRunnable bukkitRunnable, final long l, final long l1) throws IllegalArgumentException { return null; @@ -442,6 +417,11 @@ public World getWorld(final UUID uuid) { return null; } + @Override + public MapView getMap(short id) { + return null; + } + @Override public void reload() { } @@ -540,16 +520,6 @@ public MapView createMap(final World world) { throw new UnsupportedOperationException("Not supported yet."); } - @Override - public ItemStack createExplorerMap(final World world, final Location location, final StructureType structureType) { - throw new UnsupportedOperationException("Not supported yet."); - } - - @Override - public ItemStack createExplorerMap(final World world, final Location location, final StructureType structureType, final int radius, final boolean findUnexplored) { - throw new UnsupportedOperationException("Not supported yet."); - } - @Override public boolean getAllowFlight() { throw new UnsupportedOperationException("Not supported yet."); @@ -560,16 +530,6 @@ public void setWhitelist(final boolean bln) { throw new UnsupportedOperationException("Not supported yet."); } - @Override - public boolean isWhitelistEnforced() { - throw new UnsupportedOperationException("Not supported yet."); - } - - @Override - public void setWhitelistEnforced(boolean value) { - throw new UnsupportedOperationException("Not supported yet."); - } - @Override public Set getWhitelistedPlayers() { throw new UnsupportedOperationException("Not supported yet."); @@ -684,96 +644,6 @@ public UUID getUniqueId() { } throw new UnsupportedOperationException("Not supported yet."); } - - @Override - public void incrementStatistic(final Statistic statistic) { - throw new UnsupportedOperationException("Not supported yet."); - } - - @Override - public void decrementStatistic(final Statistic statistic) { - throw new UnsupportedOperationException("Not supported yet."); - } - - @Override - public int getStatistic(final Statistic statistic) { - throw new UnsupportedOperationException("Not supported yet."); - } - - @Override - public void incrementStatistic(final Statistic statistic, final int amount) { - throw new UnsupportedOperationException("Not supported yet."); - } - - @Override - public void decrementStatistic(final Statistic statistic, final int amount) { - throw new UnsupportedOperationException("Not supported yet."); - } - - @Override - public void setStatistic(final Statistic statistic, final int newValue) { - throw new UnsupportedOperationException("Not supported yet."); - } - - @Override - public void incrementStatistic(final Statistic statistic, final Material material) { - throw new UnsupportedOperationException("Not supported yet."); - } - - @Override - public void decrementStatistic(final Statistic statistic, final Material material) { - throw new UnsupportedOperationException("Not supported yet."); - } - - @Override - public int getStatistic(final Statistic statistic, final Material material) { - throw new UnsupportedOperationException("Not supported yet."); - } - - @Override - public void incrementStatistic(final Statistic statistic, final Material material, final int amount) { - throw new UnsupportedOperationException("Not supported yet."); - } - - @Override - public void decrementStatistic(final Statistic statistic, final Material material, final int amount) { - throw new UnsupportedOperationException("Not supported yet."); - } - - @Override - public void setStatistic(final Statistic statistic, final Material material, final int newValue) { - throw new UnsupportedOperationException("Not supported yet."); - } - - @Override - public void incrementStatistic(final Statistic statistic, final EntityType entityType) { - throw new UnsupportedOperationException("Not supported yet."); - } - - @Override - public void decrementStatistic(final Statistic statistic, final EntityType entityType) { - throw new UnsupportedOperationException("Not supported yet."); - } - - @Override - public int getStatistic(final Statistic statistic, final EntityType entityType) { - throw new UnsupportedOperationException("Not supported yet."); - } - - @Override - public void incrementStatistic(final Statistic statistic, final EntityType entityType, final int amount) { - throw new UnsupportedOperationException("Not supported yet."); - } - - @Override - public void decrementStatistic(final Statistic statistic, final EntityType entityType, final int amount) { - throw new UnsupportedOperationException("Not supported yet."); - } - - @Override - public void setStatistic(final Statistic statistic, final EntityType entityType, final int newValue) { - throw new UnsupportedOperationException("Not supported yet."); - } }; } @@ -822,12 +692,10 @@ public void sendMessage(final String[] messages) { } } - @Override public void sendMessage(final UUID uuid, final String message) { sendMessage(message); } - @Override public void sendMessage(final UUID uuid, final String[] messages) { sendMessage(messages); } @@ -842,11 +710,6 @@ public String getName() { throw new UnsupportedOperationException("Not supported yet."); } - @Override - public Spigot spigot() { - throw new UnsupportedOperationException("Not supported yet."); - } - @Override public boolean isPermissionSet(final String name) { throw new UnsupportedOperationException("Not supported yet."); @@ -941,12 +804,6 @@ public void abandonConversation(final Conversation conversation, final Conversat public void sendRawMessage(final String message) { throw new UnsupportedOperationException("Not supported yet."); } - - @Override - public void sendRawMessage(final UUID uuid, final String s) { - - } - }; } @@ -1000,31 +857,11 @@ public int getTicksPerMonsterSpawns() { throw new UnsupportedOperationException("Not supported yet."); } - @Override - public int getTicksPerWaterSpawns() { - throw new UnsupportedOperationException("Not supported yet."); - } - - @Override - public int getTicksPerWaterAmbientSpawns() { - return 0; - } - - @Override - public int getTicksPerAmbientSpawns() { - throw new UnsupportedOperationException("Not supported yet."); - } - @Override public List getRecipesFor(final ItemStack is) { throw new UnsupportedOperationException("Not supported yet."); } - @Override - public Recipe getRecipe(final NamespacedKey namespacedKey) { - throw new UnsupportedOperationException("Not supported yet."); - } - @Override public Iterator recipeIterator() { throw new UnsupportedOperationException("Not supported yet."); @@ -1040,11 +877,6 @@ public void resetRecipes() { throw new UnsupportedOperationException("Not supported yet."); } - @Override - public boolean removeRecipe(final NamespacedKey key) { - throw new UnsupportedOperationException("Not supported yet."); - } - @Override public HelpMap getHelpMap() { throw new UnsupportedOperationException("Not supported yet."); @@ -1100,11 +932,6 @@ public int getWaterAnimalSpawnLimit() { throw new UnsupportedOperationException("Not supported yet."); } - @Override - public int getWaterAmbientSpawnLimit() { - return 0; - } - @Override public boolean isPrimaryThread() { return true; // Can be set to true or false, just needs to return for AFK status test to pass. @@ -1175,37 +1002,12 @@ public BossBar createBossBar(final String s, final BarColor barColor, final BarS throw new UnsupportedOperationException("Not supported yet."); } - @Override - public KeyedBossBar createBossBar(final NamespacedKey key, final String title, final BarColor color, final BarStyle style, final BarFlag... flags) { - throw new UnsupportedOperationException("Not supported yet."); - } - - @Override - public Iterator getBossBars() { - throw new UnsupportedOperationException("Not supported yet."); - } - - @Override - public KeyedBossBar getBossBar(final NamespacedKey key) { - throw new UnsupportedOperationException("Not supported yet."); - } - - @Override - public boolean removeBossBar(final NamespacedKey key) { - throw new UnsupportedOperationException("Not supported yet."); - } - @Override @SuppressWarnings("deprecation") public UnsafeValues getUnsafe() { throw new UnsupportedOperationException("Not supported yet."); } - @Override - public Spigot spigot() { - throw new UnsupportedOperationException("Not supported yet."); - } - @Override public BanList getBanList(final BanList.Type arg0) { throw new UnsupportedOperationException("Not supported yet."); @@ -1257,45 +1059,6 @@ public Iterator advancementIterator() { throw new UnsupportedOperationException("Not supported yet."); } - @Override - public BlockData createBlockData(final Material material) { - return null; - } - - @Override - public BlockData createBlockData(final Material material, final Consumer consumer) { - return null; - } - - @Override - public BlockData createBlockData(final String data) throws IllegalArgumentException { - return null; - } - - @Override - public BlockData createBlockData(final Material material, final String data) throws IllegalArgumentException { - return null; - } - - @Override - public Tag getTag(final String s, final NamespacedKey namespacedKey, final Class aClass) { - throw new UnsupportedOperationException("Not supported yet."); - } - - public Iterable> getTags(final String registry, final Class clazz) { - throw new UnsupportedOperationException("Not supported yet."); - } - - @Override - public LootTable getLootTable(final NamespacedKey arg0) { - throw new UnsupportedOperationException("Not supported yet."); - } - - @Override - public List selectEntities(final CommandSender sender, final String selector) throws IllegalArgumentException { - throw new UnsupportedOperationException("Not supported yet."); - } - static class FakePluginManager implements PluginManager { final ArrayList listeners = new ArrayList<>(); @@ -1349,13 +1112,12 @@ public void callEvent(final Event event) throws IllegalStateException { Logger.getLogger("Minecraft").info("Called event " + event.getEventName()); if (event instanceof PlayerJoinEvent) { for (final RegisteredListener listener : listeners) { - if (listener.getListener() instanceof EssentialsPlayerListener) { + if (listener.getListener() instanceof FakeAccessor) { final PlayerJoinEvent jEvent = (PlayerJoinEvent) event; - final EssentialsPlayerListener epl = (EssentialsPlayerListener) listener.getListener(); + final FakeAccessor epl = (FakeAccessor) listener.getListener(); epl.onPlayerJoin(jEvent); - final Essentials ess = (Essentials) listener.getPlugin(); - ess.getLogger().info("Sending join event to Essentials"); - ess.getUser(jEvent.getPlayer()); + Logger.getLogger("Essentials").info("Sending join event to Essentials"); + epl.getUser(jEvent.getPlayer()); } } } @@ -1456,9 +1218,4 @@ public boolean useTimings() { throw new UnsupportedOperationException("Not supported yet."); } } - - @Override - public int getMaxWorldSize() { - throw new UnsupportedOperationException("Not supported yet."); - } } From 28578a5d8a610cd8b370f9d9cc67e85a1f5a5513 Mon Sep 17 00:00:00 2001 From: Josh Roy <10731363+JRoy@users.noreply.github.com> Date: Wed, 28 Jul 2021 11:59:11 -0400 Subject: [PATCH 028/120] Fix some typos in the tutorial --- EssentialsDiscord/README.md | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/EssentialsDiscord/README.md b/EssentialsDiscord/README.md index 528547c7694..72c84fec8c6 100644 --- a/EssentialsDiscord/README.md +++ b/EssentialsDiscord/README.md @@ -96,7 +96,7 @@ it, make sure to save it for a later step. In other words, this will be the channel that, by default, receives messages for player chat/join/leave/death messages as well as mute/kicks. To see how to further configure message types, see [Configuring Messages](#configuring-messages). > ![Primary Channel ID](https://i.imgur.com/uMODfiQ.gif) -> Right click your 'primary' channel -> `Copy ID` -> Paste into Notepad for later step +> Right-click your 'primary' channel -> `Copy ID` -> Paste into Notepad for later step 13. You've successfully copied all the necessary IDs needed for a basic setup. Next up is generating the default config for EssentialsX Discord, so you can start setting it up! Do this by putting the @@ -129,13 +129,13 @@ completed the initial, go back up to the [Table Of Contents](#table-of-contents) ## Console Relay The console relay is pretty self-explanatory: it relays everything on your console into a Discord channel of -your choosing. The console relay is ridiculously easy to setup and if your server is already running, you don't +your choosing. The console relay is ridiculously easy to set up and if your server is already running, you don't need to reload it! 0. This assumes you've already done the initial setup. 1. Go to the Discord server that your bot is in and find the channel you wish to use for console output. -Right click on the channel and click "Copy ID". Save this ID for the next step. +Right-click on the channel and click "Copy ID". Save this ID for the next step. > ![Copy ID](https://i.imgur.com/qvDfSLv.gif) > Find console channel -> Right Click -> `Copy ID` @@ -149,9 +149,9 @@ should notice console output being directed to that channel! That is all you nee settings. Otherwise, if you'd like to see what other options you can use to customize console output, stick around. 4. The first thing you can customize is the format of the message sent to Discord. By default, the timestamp, -level (info/warn/error/etc), and message are shown for each console message. Let's say you wanted to make the +level (info/warn/error/etc.), and message are shown for each console message. Let's say you wanted to make the timestamp and level bold: since this message would be using Discord's markdown, we can just add \*\* to both sides of -level and timestamp. Then once you've done that, just do `/ess reload` and you should see your changes on Discord. +level and timestamp. Then, once you've done that, just do `/ess reload` and you should see your changes on Discord. > ![Bold Format](https://i.imgur.com/jD9mH14.gif) 5. Next, you can also configure the name you wish the to show above console messages. By default, it's "EssX Console @@ -179,15 +179,15 @@ and `staff`. If you only completed the initial setup, the `staff` channel defini most situations however, as the message system will always fallback to the `primary` channel if a channel ID is invalid. -Now on the to the types of messages you can receive themselves (which is where you're going to use these channel -definitions). In the `message-types` section of the config, you can see a list of message types (join/leave/chat/etc) +Now on to the types of messages you can receive themselves (which is where you're going to use these channel +definitions). In the `message-types` section of the config, you can see a list of message types (join/leave/chat/etc.) on the left (as the key), and on the right there is a channel definition. For the sake of example lets say we want to send all chat messages to their own channel. We can do this by creating a new channel definition and setting the `chat` message type to said channel definition. Below are step-by-step instructions for said example, you can follow along to get the gist of how to apply this to other use cases -1. Find the channel on Discord you want to only send chat messages to, and then right click the channel and click +1. Find the channel on Discord you want to only send chat messages to, and then right-click the channel and click "Copy ID". > ![Copy ID](https://i.imgur.com/ri7NZkD.gif) @@ -257,7 +257,7 @@ them. EssentialsX Discord has a few other permissions that may be important to know about: * `essentials.discord.markdown` - Allows players to bypass the Markdown filter, so that they can -bold/underline/italic/etc their Minecraft chat messages for Discord. +bold/underline/italic/etc. their Minecraft chat messages for Discord. * `essentials.discord.ping` - Allows players to bypass the ping filter, so that they can ping @everyone/@here from Minecraft chat. @@ -281,7 +281,7 @@ built-in message types can be found at [`MessageType.DefaultTypes`](https://gith Here is an example of what sending a message to the built-in chat channel would look like: ```java -// The built in channel you want to send your message to, in this case the chat channel. +// The built-in channel you want to send your message to, in this case the chat channel. final MessageType channel = MessageType.DefaultTypes.CHAT; // Set to true if your message should be allowed to ping @everyone, @here, or roles. // If you are sending user-generated content, you probably should keep this as false. @@ -309,13 +309,13 @@ public class CustomTypeExample { private final MessageType type; public CustomTypeExample(final Plugin plugin) { - // Gets the the EssentialsX Discord API service so we can register our type and + // Gets the EssentialsX Discord API service, so we can register our type and // send a message with it later. api = Bukkit.getServicesManager().load(DiscordService.class); // Create a new message type for the user to define in our config. // Unless you're putting a discord channel id as the type key, it's probably - // a good idea to store this object so you don't create it every time. + // a good idea to store this object, so you don't create it every time. type = new MessageType("my-awesome-channel"); // Registers the type we just created with EssentialsX Discord. @@ -426,14 +426,14 @@ public class BalanceSlashCommand extends InteractionCommand { @Override public boolean isEphemeral() { - // Whether or not the command and response should be hidden to other users on discord. + // Whether the command and response should be hidden to other users on discord. // Return true here in order to hide command/responses from other discord users. return false; } @Override public boolean isDisabled() { - // Whether or not the command should be prevented from being registered/executed. + // Whether the command should be prevented from being registered/executed. // Return true here in order to mark the command as disabled. return false; } From e2cb7b21021cf9516380cf33cffc7fd494e17979 Mon Sep 17 00:00:00 2001 From: Josh Roy <10731363+JRoy@users.noreply.github.com> Date: Wed, 28 Jul 2021 16:25:47 -0400 Subject: [PATCH 029/120] Fix advanced relay breaking when multiple channels were defined --- .../discord/JDADiscordService.java | 12 ++-- .../essentialsx/discord/util/DiscordUtil.java | 64 +++++++++++-------- 2 files changed, 42 insertions(+), 34 deletions(-) diff --git a/EssentialsDiscord/src/main/java/net/essentialsx/discord/JDADiscordService.java b/EssentialsDiscord/src/main/java/net/essentialsx/discord/JDADiscordService.java index 5a0ea867b63..6c5e25112d4 100644 --- a/EssentialsDiscord/src/main/java/net/essentialsx/discord/JDADiscordService.java +++ b/EssentialsDiscord/src/main/java/net/essentialsx/discord/JDADiscordService.java @@ -183,6 +183,10 @@ public void startup() throws LoginException, InterruptedException { updateTypesRelay(); + // We will see you in the future :balloon: + // DiscordUtil.cleanWebhooks(guild, DiscordUtil.CONSOLE_RELAY_NAME); + // DiscordUtil.cleanWebhooks(guild, DiscordUtil.ADVANCED_RELAY_NAME); + Bukkit.getPluginManager().registerEvents(new BukkitListener(this), plugin); try { @@ -271,9 +275,7 @@ public void updateTypesRelay() { continue; } - final String webhookName = "EssX Advanced Relay"; - Webhook webhook = DiscordUtil.getAndCleanWebhooks(channel, webhookName).join(); - webhook = webhook == null ? DiscordUtil.createWebhook(channel, webhookName).join() : webhook; + final Webhook webhook = DiscordUtil.getOrCreateWebhook(channel, DiscordUtil.ADVANCED_RELAY_NAME).join(); if (webhook == null) { final WebhookClient current = channelIdToWebhook.get(channel.getId()); if (current != null) { @@ -317,9 +319,7 @@ public void updateConsoleRelay() { return; } - final String webhookName = "EssX Console Relay"; - Webhook webhook = DiscordUtil.getAndCleanWebhooks(channel, webhookName).join(); - webhook = webhook == null ? DiscordUtil.createWebhook(channel, webhookName).join() : webhook; + final Webhook webhook = DiscordUtil.getOrCreateWebhook(channel, DiscordUtil.CONSOLE_RELAY_NAME).join(); if (webhook == null) { logger.info(tl("discordErrorLoggerNoPerms")); return; diff --git a/EssentialsDiscord/src/main/java/net/essentialsx/discord/util/DiscordUtil.java b/EssentialsDiscord/src/main/java/net/essentialsx/discord/util/DiscordUtil.java index 55ac88e70ed..cb3a8248811 100644 --- a/EssentialsDiscord/src/main/java/net/essentialsx/discord/util/DiscordUtil.java +++ b/EssentialsDiscord/src/main/java/net/essentialsx/discord/util/DiscordUtil.java @@ -8,6 +8,7 @@ import com.earth2me.essentials.utils.VersionUtil; import com.google.common.collect.ImmutableList; import net.dv8tion.jda.api.Permission; +import net.dv8tion.jda.api.entities.Guild; import net.dv8tion.jda.api.entities.Member; import net.dv8tion.jda.api.entities.Message; import net.dv8tion.jda.api.entities.Role; @@ -23,9 +24,10 @@ import java.util.UUID; import java.util.concurrent.CompletableFuture; import java.util.concurrent.CopyOnWriteArrayList; -import java.util.function.Consumer; public final class DiscordUtil { + public final static String ADVANCED_RELAY_NAME = "EssX Advanced Relay"; + public final static String CONSOLE_RELAY_NAME = "EssX Console Relay"; public final static List NO_GROUP_MENTIONS; public final static AllowedMentions ALL_MENTIONS_WEBHOOK = AllowedMentions.all(); public final static AllowedMentions NO_GROUP_MENTIONS_WEBHOOK = new AllowedMentions().withParseEveryone(false).withParseRoles(false).withParseUsers(true); @@ -60,46 +62,52 @@ public static WebhookClient getWebhookClient(long id, String token, OkHttpClient } /** - * Gets and cleans webhooks with the given name from channels other than the specified one. + * Gets or creates a webhook with the given name in the given channel. * - * @param channel The channel to search for webhooks in. - * @param webhookName The name of the webhook to validate it. + * @param channel The channel to search for/create webhooks in. + * @param webhookName The name of the webhook to search for/create. * - * @return A future which completes with the webhook by the given name in the given channel, if present, otherwise null. + * @return A future which completes with the webhook by the given name in the given channel, or null + * if the bot lacks the proper permissions. */ - public static CompletableFuture getAndCleanWebhooks(final TextChannel channel, final String webhookName) { - final Member self = channel.getGuild().getSelfMember(); + public static CompletableFuture getOrCreateWebhook(final TextChannel channel, final String webhookName) { + if (!channel.getGuild().getSelfMember().hasPermission(channel, Permission.MANAGE_WEBHOOKS)) { + return CompletableFuture.completedFuture(null); + } final CompletableFuture future = new CompletableFuture<>(); - final Consumer> consumer = webhooks -> { - boolean foundWebhook = false; + channel.retrieveWebhooks().queue(webhooks -> { for (final Webhook webhook : webhooks) { - if (webhook.getName().equalsIgnoreCase(webhookName)) { - if (foundWebhook || !webhook.getChannel().equals(channel)) { - ACTIVE_WEBHOOKS.remove(webhook.getId()); - webhook.delete().reason("EssX Webhook Cleanup").queue(); - continue; - } + if (webhook.getName().equals(webhookName)) { ACTIVE_WEBHOOKS.addIfAbsent(webhook.getId()); future.complete(webhook); - foundWebhook = true; + return; } } + createWebhook(channel, webhookName).thenAccept(future::complete); + }); + return future; + } - if (!foundWebhook) { - future.complete(null); - } - }; - - if (self.hasPermission(Permission.MANAGE_WEBHOOKS)) { - channel.getGuild().retrieveWebhooks().queue(consumer); - } else if (self.hasPermission(channel, Permission.MANAGE_WEBHOOKS)) { - channel.retrieveWebhooks().queue(consumer); - } else { - return CompletableFuture.completedFuture(null); + /** + * Cleans up unused webhooks from channels that no longer require an advanced relay. + * + * @param guild The guild which to preform the cleanup in. + * @param webhookName The name of the webhook to scan for. + */ + @SuppressWarnings("unused") // :balloon: + private static void cleanWebhooks(final Guild guild, String webhookName) { + if (!guild.getSelfMember().hasPermission(Permission.MANAGE_WEBHOOKS)) { + return; } - return future; + guild.retrieveWebhooks().queue(webhooks -> { + for (final Webhook webhook : webhooks) { + if (webhook.getName().equalsIgnoreCase(webhookName) && !ACTIVE_WEBHOOKS.contains(webhook.getId())) { + webhook.delete().reason("EssentialsX Discord: webhook cleanup").queue(); + } + } + }); } /** From f1d7e50dc00aecc9fe51a4f2d0983ca96ee9ccd9 Mon Sep 17 00:00:00 2001 From: Josh Roy <10731363+JRoy@users.noreply.github.com> Date: Wed, 28 Jul 2021 16:47:31 -0400 Subject: [PATCH 030/120] Don't warn about unregistered channel-id based MessageType's You shouldn't be registering these, there is no point for a user to configure where these go because it would be ignored. --- .../main/java/net/essentialsx/discord/JDADiscordService.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/EssentialsDiscord/src/main/java/net/essentialsx/discord/JDADiscordService.java b/EssentialsDiscord/src/main/java/net/essentialsx/discord/JDADiscordService.java index 6c5e25112d4..744d2690c20 100644 --- a/EssentialsDiscord/src/main/java/net/essentialsx/discord/JDADiscordService.java +++ b/EssentialsDiscord/src/main/java/net/essentialsx/discord/JDADiscordService.java @@ -31,6 +31,7 @@ import net.essentialsx.discord.listeners.DiscordListener; import net.essentialsx.discord.util.ConsoleInjector; import net.essentialsx.discord.util.DiscordUtil; +import org.apache.commons.lang.math.NumberUtils; import org.bukkit.Bukkit; import org.bukkit.event.HandlerList; import org.bukkit.plugin.Plugin; @@ -224,7 +225,7 @@ public void registerMessageType(Plugin plugin, MessageType type) { @Override public void sendMessage(MessageType type, String message, boolean allowGroupMentions) { - if (!registeredTypes.containsKey(type.getKey())) { + if (!registeredTypes.containsKey(type.getKey()) && !NumberUtils.isDigits(type.getKey())) { logger.warning("Sending message to channel \"" + type.getKey() + "\" which is an unregistered type! If you are a plugin author, you should be registering your MessageType before using them."); } final DiscordMessageEvent event = new DiscordMessageEvent(type, FormatUtil.stripFormat(message), allowGroupMentions); From 17e026f9aa18074e04b08529b29856a80f1238e4 Mon Sep 17 00:00:00 2001 From: Josh Roy <10731363+JRoy@users.noreply.github.com> Date: Wed, 28 Jul 2021 16:51:27 -0400 Subject: [PATCH 031/120] Require MessageType's start with a letter May cause issues with YML serialization as it can get finicky with keys starting with numbers. --- .../main/java/net/essentialsx/discord/JDADiscordService.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/EssentialsDiscord/src/main/java/net/essentialsx/discord/JDADiscordService.java b/EssentialsDiscord/src/main/java/net/essentialsx/discord/JDADiscordService.java index 744d2690c20..b092ed3716f 100644 --- a/EssentialsDiscord/src/main/java/net/essentialsx/discord/JDADiscordService.java +++ b/EssentialsDiscord/src/main/java/net/essentialsx/discord/JDADiscordService.java @@ -212,8 +212,8 @@ public boolean isRegistered(String key) { @Override public void registerMessageType(Plugin plugin, MessageType type) { - if (!type.getKey().matches("^[a-z0-9-]*$")) { - throw new IllegalArgumentException("MessageType key must match \"^[a-z0-9-]*$\""); + if (!type.getKey().matches("^[a-z][a-z0-9-]*$")) { + throw new IllegalArgumentException("MessageType key must match \"^[a-z][a-z0-9-]*$\""); } if (registeredTypes.containsKey(type.getKey())) { From 90828965df69b98fa94b317fbd0b933457ef307d Mon Sep 17 00:00:00 2001 From: triagonal <10545540+triagonal@users.noreply.github.com> Date: Sun, 1 Aug 2021 00:19:20 +1000 Subject: [PATCH 032/120] Fix NPE during reload with invalid discord bot tokens (#4417) --- .../src/main/java/net/essentialsx/discord/JDADiscordService.java | 1 + 1 file changed, 1 insertion(+) diff --git a/EssentialsDiscord/src/main/java/net/essentialsx/discord/JDADiscordService.java b/EssentialsDiscord/src/main/java/net/essentialsx/discord/JDADiscordService.java index b092ed3716f..dd29da17aad 100644 --- a/EssentialsDiscord/src/main/java/net/essentialsx/discord/JDADiscordService.java +++ b/EssentialsDiscord/src/main/java/net/essentialsx/discord/JDADiscordService.java @@ -140,6 +140,7 @@ public void startup() throws LoginException, InterruptedException { logger.log(Level.INFO, tl("discordLoggingIn")); if (plugin.getSettings().getBotToken().replace("INSERT-TOKEN-HERE", "").trim().isEmpty()) { + invalidStartup = true; throw new IllegalArgumentException(tl("discordErrorNoToken")); } From 082950cc18f6ca554bbf525c60c2fd6091997b63 Mon Sep 17 00:00:00 2001 From: Josh Roy <10731363+JRoy@users.noreply.github.com> Date: Mon, 2 Aug 2021 05:21:53 -0700 Subject: [PATCH 033/120] Fix bStats becoming a transitive dependency (#4426) --- Essentials/build.gradle | 2 -- build-logic/src/main/kotlin/EssentialsBaseExtension.kt | 1 + .../src/main/kotlin/essentials.base-conventions.gradle.kts | 5 +++++ providers/1_8Provider/build.gradle | 1 + providers/BaseProviders/build.gradle | 4 ++++ providers/NMSReflectionProvider/build.gradle | 1 + providers/PaperProvider/build.gradle | 1 + 7 files changed, 13 insertions(+), 2 deletions(-) diff --git a/Essentials/build.gradle b/Essentials/build.gradle index 93169d96836..647a5e57db7 100644 --- a/Essentials/build.gradle +++ b/Essentials/build.gradle @@ -10,8 +10,6 @@ dependencies { api 'io.papermc:paperlib:1.0.6' - api 'org.bstats:bstats-bukkit:1.8' - implementation 'org.spongepowered:configurate-yaml:4.1.1' implementation 'org.checkerframework:checker-qual:3.14.0' diff --git a/build-logic/src/main/kotlin/EssentialsBaseExtension.kt b/build-logic/src/main/kotlin/EssentialsBaseExtension.kt index 57cbd443ac1..bc390178103 100644 --- a/build-logic/src/main/kotlin/EssentialsBaseExtension.kt +++ b/build-logic/src/main/kotlin/EssentialsBaseExtension.kt @@ -4,4 +4,5 @@ import org.gradle.kotlin.dsl.property abstract class EssentialsBaseExtension(private val project: Project) { val injectBukkitApi: Property = project.objects.property().convention(true) + val injectBstats: Property = project.objects.property().convention(true) } diff --git a/build-logic/src/main/kotlin/essentials.base-conventions.gradle.kts b/build-logic/src/main/kotlin/essentials.base-conventions.gradle.kts index 7fa1071b4f4..3f058721f9e 100644 --- a/build-logic/src/main/kotlin/essentials.base-conventions.gradle.kts +++ b/build-logic/src/main/kotlin/essentials.base-conventions.gradle.kts @@ -32,6 +32,11 @@ afterEvaluate { api("org.spigotmc", "spigot-api", spigotVersion) } } + if (baseExtension.injectBstats.get()) { + dependencies { + implementation("org.bstats", "bstats-bukkit", "1.8") + } + } } tasks { diff --git a/providers/1_8Provider/build.gradle b/providers/1_8Provider/build.gradle index ad62d860c62..e04aa542689 100644 --- a/providers/1_8Provider/build.gradle +++ b/providers/1_8Provider/build.gradle @@ -8,4 +8,5 @@ dependencies { essentials { injectBukkitApi.set(false) + injectBstats.set(false) } diff --git a/providers/BaseProviders/build.gradle b/providers/BaseProviders/build.gradle index bba2da74caa..99176e2221f 100644 --- a/providers/BaseProviders/build.gradle +++ b/providers/BaseProviders/build.gradle @@ -1,3 +1,7 @@ plugins { id("essentials.base-conventions") } + +essentials { + injectBstats.set(false) +} diff --git a/providers/NMSReflectionProvider/build.gradle b/providers/NMSReflectionProvider/build.gradle index b2510f3f0c0..c064338a9e0 100644 --- a/providers/NMSReflectionProvider/build.gradle +++ b/providers/NMSReflectionProvider/build.gradle @@ -9,4 +9,5 @@ dependencies { essentials { injectBukkitApi.set(false) + injectBstats.set(false) } diff --git a/providers/PaperProvider/build.gradle b/providers/PaperProvider/build.gradle index 09b6de45ed8..49ced3f5a5d 100644 --- a/providers/PaperProvider/build.gradle +++ b/providers/PaperProvider/build.gradle @@ -9,4 +9,5 @@ dependencies { essentials { injectBukkitApi.set(false) + injectBstats.set(false) } From aaddb2af1fb343e2f5d87be8f303fb48751b1c88 Mon Sep 17 00:00:00 2001 From: Josh Roy <10731363+JRoy@users.noreply.github.com> Date: Mon, 2 Aug 2021 05:32:41 -0700 Subject: [PATCH 034/120] Fix remaining Configurate nullability issues (#4370) --- .../src/main/java/com/earth2me/essentials/UserData.java | 6 +++--- .../com/earth2me/essentials/commands/Commandunlimited.java | 6 ++++++ .../config/serializers/MaterialTypeSerializer.java | 3 +++ 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/Essentials/src/main/java/com/earth2me/essentials/UserData.java b/Essentials/src/main/java/com/earth2me/essentials/UserData.java index d377135a33b..5ae00b5c182 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/UserData.java +++ b/Essentials/src/main/java/com/earth2me/essentials/UserData.java @@ -621,7 +621,7 @@ public List getCooldownsList() { public Map getCommandCooldowns() { final Map map = new HashMap<>(); for (final CommandCooldown c : getCooldownsList()) { - if (c == null) { + if (c == null || c.isIncomplete()) { // stupid solution to stupid problem continue; } @@ -632,7 +632,7 @@ public Map getCommandCooldowns() { public Date getCommandCooldownExpiry(final String label) { for (CommandCooldown cooldown : getCooldownsList()) { - if (cooldown == null) { + if (cooldown == null || cooldown.isIncomplete()) { // stupid solution to stupid problem continue; } @@ -661,7 +661,7 @@ public boolean clearCommandCooldown(final Pattern pattern) { return false; // false for no modification } - if (getCooldownsList().removeIf(cooldown -> cooldown.pattern().equals(pattern))) { + if (getCooldownsList().removeIf(cooldown -> cooldown != null && !cooldown.isIncomplete() && cooldown.pattern().equals(pattern))) { save(); return true; } diff --git a/Essentials/src/main/java/com/earth2me/essentials/commands/Commandunlimited.java b/Essentials/src/main/java/com/earth2me/essentials/commands/Commandunlimited.java index 883fcdd99fd..db740e6ffe6 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/commands/Commandunlimited.java +++ b/Essentials/src/main/java/com/earth2me/essentials/commands/Commandunlimited.java @@ -32,6 +32,9 @@ public void run(final Server server, final User user, final String commandLabel, user.sendMessage(getList(target)); } else if (args[0].equalsIgnoreCase("clear")) { for (final Material m : new HashSet<>(target.getUnlimited())) { + if (m == null) { + continue; + } toggleUnlimited(user, target, m.toString()); } } else { @@ -48,6 +51,9 @@ private String getList(final User target) { } final StringJoiner joiner = new StringJoiner(", "); for (final Material material : items) { + if (material == null) { + continue; + } joiner.add(material.toString().toLowerCase(Locale.ENGLISH).replace("_", "")); } output.append(joiner.toString()); diff --git a/Essentials/src/main/java/com/earth2me/essentials/config/serializers/MaterialTypeSerializer.java b/Essentials/src/main/java/com/earth2me/essentials/config/serializers/MaterialTypeSerializer.java index ca940a3b59d..50e23157293 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/config/serializers/MaterialTypeSerializer.java +++ b/Essentials/src/main/java/com/earth2me/essentials/config/serializers/MaterialTypeSerializer.java @@ -22,6 +22,9 @@ public Material deserialize(Type type, Object obj) throws SerializationException @Override protected Object serialize(Material item, Predicate> typeSupported) { + if (item == null) { + return null; + } return item.name(); } } From e95df5764268669398f33635c39e3cb50e2dae3c Mon Sep 17 00:00:00 2001 From: Daniil Z Date: Mon, 2 Aug 2021 17:22:07 +0300 Subject: [PATCH 035/120] Fix barrier considered as unsafe block to teleport (#4348) Co-authored-by: Josh Roy <10731363+JRoy@users.noreply.github.com> --- .../java/com/earth2me/essentials/utils/LocationUtil.java | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/Essentials/src/main/java/com/earth2me/essentials/utils/LocationUtil.java b/Essentials/src/main/java/com/earth2me/essentials/utils/LocationUtil.java index 1d011100654..90083f670f3 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/utils/LocationUtil.java +++ b/Essentials/src/main/java/com/earth2me/essentials/utils/LocationUtil.java @@ -12,7 +12,7 @@ import java.util.ArrayList; import java.util.Comparator; -import java.util.HashSet; +import java.util.EnumSet; import java.util.List; import java.util.Set; @@ -31,8 +31,8 @@ public final class LocationUtil { "FLOWING_LAVA", "LAVA", "STATIONARY_LAVA"); private static final Material PORTAL = EnumUtil.getMaterial("NETHER_PORTAL", "PORTAL"); // The player can stand inside these materials - private static final Set HOLLOW_MATERIALS = new HashSet<>(); - private static final Set TRANSPARENT_MATERIALS = new HashSet<>(); + private static final Set HOLLOW_MATERIALS = EnumSet.noneOf(Material.class); + private static final Set TRANSPARENT_MATERIALS = EnumSet.noneOf(Material.class); static { // Materials from Material.isTransparent() @@ -44,6 +44,9 @@ public final class LocationUtil { TRANSPARENT_MATERIALS.addAll(HOLLOW_MATERIALS); TRANSPARENT_MATERIALS.addAll(WATER_TYPES); + + // Barrier is transparent, but solid + HOLLOW_MATERIALS.remove(Material.BARRIER); } static { From f57de406687974309ddf845d661aeb351466075a Mon Sep 17 00:00:00 2001 From: 1stGlitch Date: Mon, 2 Aug 2021 10:33:49 -0400 Subject: [PATCH 036/120] Fix invalid mob data in spawnmob on versions < 1.17 (#4376) Co-authored-by: Josh Roy <10731363+JRoy@users.noreply.github.com> --- .../src/main/java/com/earth2me/essentials/MobData.java | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/Essentials/src/main/java/com/earth2me/essentials/MobData.java b/Essentials/src/main/java/com/earth2me/essentials/MobData.java index 1ce907d4153..ab8d1a60094 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/MobData.java +++ b/Essentials/src/main/java/com/earth2me/essentials/MobData.java @@ -7,7 +7,6 @@ import org.bukkit.DyeColor; import org.bukkit.Material; import org.bukkit.entity.Ageable; -import org.bukkit.entity.Axolotl; import org.bukkit.entity.ChestedHorse; import org.bukkit.entity.Creeper; import org.bukkit.entity.Entity; @@ -189,7 +188,14 @@ public enum MobData { RAID_LEADER("leader", MobCompat.RAIDER, Data.RAID_LEADER, true), TROPICAL_FISH_BODY_COLOR("fish_body_color", Arrays.stream(DyeColor.values()).map(color -> color.name().toLowerCase(Locale.ENGLISH) + "body").collect(Collectors.toList()), MobCompat.TROPICAL_FISH, Data.FISH_BODY_COLOR, true), TROPICAL_FISH_PATTERN_COLOR("fish_pattern_color", Arrays.stream(DyeColor.values()).map(color -> color.name().toLowerCase(Locale.ENGLISH) + "pattern").collect(Collectors.toList()), MobCompat.TROPICAL_FISH, Data.FISH_PATTERN_COLOR, true), - COLORABLE_AXOLOTL("", Arrays.stream(Axolotl.Variant.values()).map(color -> color.name().toLowerCase(Locale.ENGLISH)).collect(Collectors.toList()), MobCompat.AXOLOTL, Data.COLORABLE, true), + LUCY_AXOLOTL("lucy", MobCompat.AXOLOTL, "axolotl:LUCY", true), + LEUCISTIC_AXOLOTL("leucistic", MobCompat.AXOLOTL, "axolotl:LUCY", false), + PINK_AXOLOTL("pink", MobCompat.AXOLOTL, "axolotl:LUCY", false), + WILD_AXOLOTL("wild", MobCompat.AXOLOTL, "axolotl:WILD", true), + BROWN_AXOLOTL("brown", MobCompat.AXOLOTL, "axolotl:WILD", false), + GOLD_AXOLOTL("gold", MobCompat.AXOLOTL, "axolotl:GOLD", true), + CYAN_AXOLOTL("cyan", MobCompat.AXOLOTL, "axolotl:CYAN", true), + BLUE_AXOLOTL("blue", MobCompat.AXOLOTL, "axolotl:BLUE", true), SCREAMING_GOAT("screaming", MobCompat.GOAT, Data.GOAT_SCREAMING, true), ; From b84207f95510ee6cf0fcc47138771cabe93a1f31 Mon Sep 17 00:00:00 2001 From: Josh Roy <10731363+JRoy@users.noreply.github.com> Date: Mon, 2 Aug 2021 08:23:40 -0700 Subject: [PATCH 037/120] Fix regression in invalid home check (#4425) --- .../src/main/java/com/earth2me/essentials/UserData.java | 9 +++++++++ .../com/earth2me/essentials/commands/Commandhome.java | 2 +- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/Essentials/src/main/java/com/earth2me/essentials/UserData.java b/Essentials/src/main/java/com/earth2me/essentials/UserData.java index 5ae00b5c182..f2128b5ada0 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/UserData.java +++ b/Essentials/src/main/java/com/earth2me/essentials/UserData.java @@ -161,6 +161,15 @@ public Location getHome(final String name) { return loc != null ? loc.location() : null; } + public boolean hasValidHomes() { + for (final LazyLocation loc : holder.homes().values()) { + if (loc != null && loc.location() != null) { + return true; + } + } + return false; + } + public Location getHome(final Location world) { if (getHomes().isEmpty()) { return null; diff --git a/Essentials/src/main/java/com/earth2me/essentials/commands/Commandhome.java b/Essentials/src/main/java/com/earth2me/essentials/commands/Commandhome.java index 01f83c3bcaf..2bdec352e46 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/commands/Commandhome.java +++ b/Essentials/src/main/java/com/earth2me/essentials/commands/Commandhome.java @@ -81,7 +81,7 @@ public void run(final Server server, final User user, final String commandLabel, } else { showError(user.getBase(), new Exception(tl("noHomeSetPlayer")), commandLabel); } - } else if (homes.isEmpty() || finalPlayer.getHome(homes.get(0)) == null) { + } else if (homes.isEmpty() || !finalPlayer.hasValidHomes()) { showError(user.getBase(), new Exception(tl("noHomeSetPlayer")), commandLabel); } else if (homes.size() == 1 && finalPlayer.equals(user)) { try { From 3da8efae492415e45469590a5415081554eebd2f Mon Sep 17 00:00:00 2001 From: Josh Roy <10731363+JRoy@users.noreply.github.com> Date: Sat, 7 Aug 2021 11:40:06 -0400 Subject: [PATCH 038/120] Fix incorrect parameter name for allowGroupMentions --- .../api/v2/events/discord/DiscordMessageEvent.java | 4 ++-- .../essentialsx/api/v2/services/discord/DiscordService.java | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/EssentialsDiscord/src/main/java/net/essentialsx/api/v2/events/discord/DiscordMessageEvent.java b/EssentialsDiscord/src/main/java/net/essentialsx/api/v2/events/discord/DiscordMessageEvent.java index 23996efff42..c9f5f4765b3 100644 --- a/EssentialsDiscord/src/main/java/net/essentialsx/api/v2/events/discord/DiscordMessageEvent.java +++ b/EssentialsDiscord/src/main/java/net/essentialsx/api/v2/events/discord/DiscordMessageEvent.java @@ -25,7 +25,7 @@ public class DiscordMessageEvent extends Event implements Cancellable { /** * @param type The message type/destination of this event. * @param message The raw message content of this event. - * @param allowGroupMentions Whether or not the message should allow the pinging of roles, users, or emotes. + * @param allowGroupMentions Whether the message should allow the pinging of roles, @here, or @everyone. */ public DiscordMessageEvent(final MessageType type, final String message, final boolean allowGroupMentions) { this(type, message, allowGroupMentions, null, null, null); @@ -34,7 +34,7 @@ public DiscordMessageEvent(final MessageType type, final String message, final b /** * @param type The message type/destination of this event. * @param message The raw message content of this event. - * @param allowGroupMentions Whether or not the message should allow the pinging of roles, users, or emotes. + * @param allowGroupMentions Whether the message should allow the pinging of roles, @here, or @everyone. * @param avatarUrl The avatar URL to use for this message (if supported) or null to use the default bot avatar. * @param name The name to use for this message (if supported) or null to use the default bot name. * @param uuid The UUID of the player which caused this event or null if this wasn't a player triggered event. diff --git a/EssentialsDiscord/src/main/java/net/essentialsx/api/v2/services/discord/DiscordService.java b/EssentialsDiscord/src/main/java/net/essentialsx/api/v2/services/discord/DiscordService.java index 8a86994a812..b0da13c18ad 100644 --- a/EssentialsDiscord/src/main/java/net/essentialsx/api/v2/services/discord/DiscordService.java +++ b/EssentialsDiscord/src/main/java/net/essentialsx/api/v2/services/discord/DiscordService.java @@ -10,7 +10,7 @@ public interface DiscordService { * Sends a message to a message type channel. * @param type The message type/destination of this message. * @param message The exact message to be sent. - * @param allowGroupMentions Whether or not the message should allow the pinging of roles, users, or emotes. + * @param allowGroupMentions Whether the message should allow the pinging of roles, @here, or @everyone. */ void sendMessage(final MessageType type, final String message, final boolean allowGroupMentions); From 3f9aceb922796687364ba01fc406c52af3903b7d Mon Sep 17 00:00:00 2001 From: Josh Roy <10731363+JRoy@users.noreply.github.com> Date: Sat, 7 Aug 2021 17:22:12 -0400 Subject: [PATCH 039/120] Add DiscordService#sendChatMessage Allows plugins to send messages to the chat channel via API using the format from our config --- .../v2/services/discord/DiscordService.java | 12 +++++++++++ .../discord/JDADiscordService.java | 21 +++++++++++++++++++ .../discord/listeners/BukkitListener.java | 14 +------------ 3 files changed, 34 insertions(+), 13 deletions(-) diff --git a/EssentialsDiscord/src/main/java/net/essentialsx/api/v2/services/discord/DiscordService.java b/EssentialsDiscord/src/main/java/net/essentialsx/api/v2/services/discord/DiscordService.java index b0da13c18ad..30c3a8dc55c 100644 --- a/EssentialsDiscord/src/main/java/net/essentialsx/api/v2/services/discord/DiscordService.java +++ b/EssentialsDiscord/src/main/java/net/essentialsx/api/v2/services/discord/DiscordService.java @@ -1,5 +1,7 @@ package net.essentialsx.api.v2.services.discord; +import net.essentialsx.api.v2.events.discord.DiscordChatMessageEvent; +import org.bukkit.entity.Player; import org.bukkit.plugin.Plugin; /** @@ -14,6 +16,16 @@ public interface DiscordService { */ void sendMessage(final MessageType type, final String message, final boolean allowGroupMentions); + /** + * Sends a chat messages to the {@link MessageType.DefaultTypes#CHAT default chat channel} with the same format + * used for regular chat messages specified in the EssentialsX Discord configuration. + *

+ * Note: Messages sent with this method will not fire a {@link DiscordChatMessageEvent}. + * @param player The player who send the message. + * @param chatMessage The chat message the player has sent. + */ + void sendChatMessage(final Player player, final String chatMessage); + /** * Checks if a {@link MessageType} by the given key is already registered. * @param key The {@link MessageType} key to check. diff --git a/EssentialsDiscord/src/main/java/net/essentialsx/discord/JDADiscordService.java b/EssentialsDiscord/src/main/java/net/essentialsx/discord/JDADiscordService.java index dd29da17aad..3fab59122d0 100644 --- a/EssentialsDiscord/src/main/java/net/essentialsx/discord/JDADiscordService.java +++ b/EssentialsDiscord/src/main/java/net/essentialsx/discord/JDADiscordService.java @@ -4,6 +4,7 @@ import club.minnced.discord.webhook.WebhookClientBuilder; import club.minnced.discord.webhook.send.WebhookMessage; import club.minnced.discord.webhook.send.WebhookMessageBuilder; +import com.earth2me.essentials.User; import com.earth2me.essentials.utils.FormatUtil; import com.earth2me.essentials.utils.VersionUtil; import net.dv8tion.jda.api.JDA; @@ -31,8 +32,10 @@ import net.essentialsx.discord.listeners.DiscordListener; import net.essentialsx.discord.util.ConsoleInjector; import net.essentialsx.discord.util.DiscordUtil; +import net.essentialsx.discord.util.MessageUtil; import org.apache.commons.lang.math.NumberUtils; import org.bukkit.Bukkit; +import org.bukkit.entity.Player; import org.bukkit.event.HandlerList; import org.bukkit.plugin.Plugin; import org.bukkit.plugin.ServicePriority; @@ -237,6 +240,24 @@ public void sendMessage(MessageType type, String message, boolean allowGroupMent } } + @Override + public void sendChatMessage(final Player player, final String chatMessage) { + final User user = getPlugin().getEss().getUser(player); + + final String formattedMessage = MessageUtil.formatMessage(getSettings().getMcToDiscordFormat(player), + MessageUtil.sanitizeDiscordMarkdown(player.getName()), + MessageUtil.sanitizeDiscordMarkdown(player.getDisplayName()), + user.isAuthorized("essentials.discord.markdown") ? chatMessage : MessageUtil.sanitizeDiscordMarkdown(chatMessage), + MessageUtil.sanitizeDiscordMarkdown(player.getWorld().getName()), + MessageUtil.sanitizeDiscordMarkdown(FormatUtil.stripEssentialsFormat(getPlugin().getEss().getPermissionsHandler().getPrefix(player))), + MessageUtil.sanitizeDiscordMarkdown(FormatUtil.stripEssentialsFormat(getPlugin().getEss().getPermissionsHandler().getSuffix(player)))); + + final String avatarUrl = getSettings().isShowAvatar() ? getSettings().getAvatarURL().replace("{uuid}", player.getUniqueId().toString()) : null; + final String name = getSettings().isShowName() ? player.getName() : (getSettings().isShowDisplayName() ? player.getDisplayName() : null); + + DiscordUtil.dispatchDiscordMessage(this, MessageType.DefaultTypes.CHAT, formattedMessage, user.isAuthorized("essentials.discord.ping"), avatarUrl, name, player.getUniqueId()); + } + @Override public InteractionController getInteractionController() { return interactionController; diff --git a/EssentialsDiscord/src/main/java/net/essentialsx/discord/listeners/BukkitListener.java b/EssentialsDiscord/src/main/java/net/essentialsx/discord/listeners/BukkitListener.java index 03669bdacfc..9432a2633b5 100644 --- a/EssentialsDiscord/src/main/java/net/essentialsx/discord/listeners/BukkitListener.java +++ b/EssentialsDiscord/src/main/java/net/essentialsx/discord/listeners/BukkitListener.java @@ -2,7 +2,6 @@ import com.earth2me.essentials.Console; import com.earth2me.essentials.utils.DateUtil; -import com.earth2me.essentials.utils.FormatUtil; import com.earth2me.essentials.utils.VersionUtil; import net.ess3.api.IUser; import net.ess3.api.events.AfkStatusChangeEvent; @@ -91,18 +90,7 @@ public void onChat(AsyncPlayerChatEvent event) { return; } - sendDiscordMessage(MessageType.DefaultTypes.CHAT, - MessageUtil.formatMessage(jda.getSettings().getMcToDiscordFormat(player), - MessageUtil.sanitizeDiscordMarkdown(player.getName()), - MessageUtil.sanitizeDiscordMarkdown(player.getDisplayName()), - player.hasPermission("essentials.discord.markdown") ? chatEvent.getMessage() : MessageUtil.sanitizeDiscordMarkdown(chatEvent.getMessage()), - MessageUtil.sanitizeDiscordMarkdown(player.getWorld().getName()), - MessageUtil.sanitizeDiscordMarkdown(FormatUtil.stripEssentialsFormat(jda.getPlugin().getEss().getPermissionsHandler().getPrefix(player))), - MessageUtil.sanitizeDiscordMarkdown(FormatUtil.stripEssentialsFormat(jda.getPlugin().getEss().getPermissionsHandler().getSuffix(player)))), - player.hasPermission("essentials.discord.ping"), - jda.getSettings().isShowAvatar() ? jda.getSettings().getAvatarURL().replace("{uuid}", player.getUniqueId().toString()) : null, - jda.getSettings().isShowName() ? player.getName() : (jda.getSettings().isShowDisplayName() ? player.getDisplayName() : null), - player.getUniqueId()); + jda.sendChatMessage(player, chatEvent.getMessage()); }); } From 9179c6c1e2b6ebd14debf3c52c8cb49991f69913 Mon Sep 17 00:00:00 2001 From: Josh Roy <10731363+JRoy@users.noreply.github.com> Date: Mon, 9 Aug 2021 11:38:04 -0700 Subject: [PATCH 040/120] Update EssXDiscord tutorial for new developer mode location (#4409) --- EssentialsDiscord/README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/EssentialsDiscord/README.md b/EssentialsDiscord/README.md index 72c84fec8c6..65930e19f49 100644 --- a/EssentialsDiscord/README.md +++ b/EssentialsDiscord/README.md @@ -81,10 +81,10 @@ you are not a bot, proceed with that like you would any other captcha. Discord desktop/web client. 10. Once in your Discord client, you'll need to enable Developer Mode. Do this by going into the -Settings, then go to the "Appearance" tab and check on the "Developer Mode" at the bottom of the +Settings, then go to the "Advanced" tab and check on the "Developer Mode" at the bottom of the page. Once you've checked "Developer Mode" on, click the `X` at the top right to exit Settings. -> ![Developer Mode](https://i.imgur.com/CrW31Up.gif) -> `User Settings` -> `Appearance` -> Check `Developer Mode` -> Exit Settings +> ![Developer Mode](https://i.imgur.com/f0Dmxcd.gif) +> `User Settings` -> `Advanced` -> Check `Developer Mode` -> Exit Settings 11. Next is copying a few IDs. First up, you'll want to copy the server (aka guild) id. Do this by finding the server you added the bot to, right click its icon, and click "Copy ID". Once you copied From b6a08ec71298c67e24d9e51ea21bf3799620233b Mon Sep 17 00:00:00 2001 From: Josh Roy <10731363+JRoy@users.noreply.github.com> Date: Mon, 9 Aug 2021 11:44:13 -0700 Subject: [PATCH 041/120] Fix force-disable-teleport-safety enforcing world border (#4371) --- .../src/main/java/com/earth2me/essentials/AsyncTeleport.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Essentials/src/main/java/com/earth2me/essentials/AsyncTeleport.java b/Essentials/src/main/java/com/earth2me/essentials/AsyncTeleport.java index 1befe4ecb6c..e3026b673d4 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/AsyncTeleport.java +++ b/Essentials/src/main/java/com/earth2me/essentials/AsyncTeleport.java @@ -183,7 +183,7 @@ protected void nowAsync(final IUser teleportee, final ITarget target, final Tele } final Location targetLoc = target.getLocation(); - if (ess.getSettings().isTeleportSafetyEnabled() && LocationUtil.isBlockOutsideWorldBorder(targetLoc.getWorld(), targetLoc.getBlockX(), targetLoc.getBlockZ())) { + if (ess.getSettings().isTeleportSafetyEnabled() && !ess.getSettings().isForceDisableTeleportSafety() && LocationUtil.isBlockOutsideWorldBorder(targetLoc.getWorld(), targetLoc.getBlockX(), targetLoc.getBlockZ())) { targetLoc.setX(LocationUtil.getXInsideWorldBorder(targetLoc.getWorld(), targetLoc.getBlockX())); targetLoc.setZ(LocationUtil.getZInsideWorldBorder(targetLoc.getWorld(), targetLoc.getBlockZ())); } From 26c016fea2db6112550898470c4f074ccb8fbc1c Mon Sep 17 00:00:00 2001 From: Josh Roy <10731363+JRoy@users.noreply.github.com> Date: Mon, 9 Aug 2021 11:48:01 -0700 Subject: [PATCH 042/120] Add config option to allow webhooks/bots to send commands (#4442) ```yml # Console relay settings # The console relay sends every message shown in the console to a Discord channel. console: ... # Set to true if bots/webhooks should be able to send commands through the command relay. bot-command-relay: false ``` --- .../java/net/essentialsx/discord/DiscordSettings.java | 4 ++++ .../discord/listeners/DiscordCommandDispatcher.java | 8 ++++++-- EssentialsDiscord/src/main/resources/config.yml | 2 ++ 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/EssentialsDiscord/src/main/java/net/essentialsx/discord/DiscordSettings.java b/EssentialsDiscord/src/main/java/net/essentialsx/discord/DiscordSettings.java index 3e18ea828af..29c862613f1 100644 --- a/EssentialsDiscord/src/main/java/net/essentialsx/discord/DiscordSettings.java +++ b/EssentialsDiscord/src/main/java/net/essentialsx/discord/DiscordSettings.java @@ -141,6 +141,10 @@ public boolean isConsoleCommandRelay() { return config.getBoolean("console.command-relay", false); } + public boolean isConsoleBotCommandRelay() { + return config.getBoolean("console.bot-command-relay", false); + } + public Level getConsoleLogLevel() { return consoleLogLevel; } diff --git a/EssentialsDiscord/src/main/java/net/essentialsx/discord/listeners/DiscordCommandDispatcher.java b/EssentialsDiscord/src/main/java/net/essentialsx/discord/listeners/DiscordCommandDispatcher.java index 40757572de9..f78f13bef09 100644 --- a/EssentialsDiscord/src/main/java/net/essentialsx/discord/listeners/DiscordCommandDispatcher.java +++ b/EssentialsDiscord/src/main/java/net/essentialsx/discord/listeners/DiscordCommandDispatcher.java @@ -4,6 +4,7 @@ import net.dv8tion.jda.api.hooks.ListenerAdapter; import net.essentialsx.discord.JDADiscordService; import net.essentialsx.discord.util.DiscordCommandSender; +import net.essentialsx.discord.util.DiscordUtil; import org.bukkit.Bukkit; import org.jetbrains.annotations.NotNull; @@ -17,8 +18,11 @@ public DiscordCommandDispatcher(JDADiscordService jda) { @Override public void onGuildMessageReceived(@NotNull GuildMessageReceivedEvent event) { - if (jda.getConsoleWebhook() != null && event.getChannel().getId().equals(channelId) - && !event.isWebhookMessage() && !event.getAuthor().isBot()) { + if (jda.getConsoleWebhook() != null && event.getChannel().getId().equals(channelId)) { + if ((event.isWebhookMessage() || event.getAuthor().isBot()) && (!jda.getSettings().isConsoleBotCommandRelay() || DiscordUtil.ACTIVE_WEBHOOKS.contains(event.getAuthor().getId()))) { + return; + } + Bukkit.getScheduler().runTask(jda.getPlugin(), () -> Bukkit.dispatchCommand(new DiscordCommandSender(jda, Bukkit.getConsoleSender(), message -> event.getMessage().reply(message).queue()).getSender(), event.getMessage().getContentRaw())); diff --git a/EssentialsDiscord/src/main/resources/config.yml b/EssentialsDiscord/src/main/resources/config.yml index aecf5b0351c..b1faa522735 100644 --- a/EssentialsDiscord/src/main/resources/config.yml +++ b/EssentialsDiscord/src/main/resources/config.yml @@ -86,6 +86,8 @@ console: # console. It's recommended you stick to the /execute command which has role permission checks (see command configuration below). # Note 2: This option requires a channel ID and is not supported if you specify a webhook URL above. You'll need to use /execute in Discord if you use a webhook URL. command-relay: false + # Set to true if bots/webhooks should be able to send commands through the command relay. + bot-command-relay: false # The maximum log level of messages to send to the console relay. # The following is a list of available log levels in order of lowest to highest. # Changing the log level will send all log levels above it to the console relay. From c221e961227e9b0178bf2ac4ab26fe780af6d1bd Mon Sep 17 00:00:00 2001 From: Josh Roy <10731363+JRoy@users.noreply.github.com> Date: Mon, 9 Aug 2021 11:57:03 -0700 Subject: [PATCH 043/120] Make discord chat format world name use world alias (#4419) --- .../main/java/net/essentialsx/discord/JDADiscordService.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/EssentialsDiscord/src/main/java/net/essentialsx/discord/JDADiscordService.java b/EssentialsDiscord/src/main/java/net/essentialsx/discord/JDADiscordService.java index 3fab59122d0..7be209ee345 100644 --- a/EssentialsDiscord/src/main/java/net/essentialsx/discord/JDADiscordService.java +++ b/EssentialsDiscord/src/main/java/net/essentialsx/discord/JDADiscordService.java @@ -248,7 +248,7 @@ public void sendChatMessage(final Player player, final String chatMessage) { MessageUtil.sanitizeDiscordMarkdown(player.getName()), MessageUtil.sanitizeDiscordMarkdown(player.getDisplayName()), user.isAuthorized("essentials.discord.markdown") ? chatMessage : MessageUtil.sanitizeDiscordMarkdown(chatMessage), - MessageUtil.sanitizeDiscordMarkdown(player.getWorld().getName()), + MessageUtil.sanitizeDiscordMarkdown(getPlugin().getEss().getSettings().getWorldAlias(player.getWorld().getName())), MessageUtil.sanitizeDiscordMarkdown(FormatUtil.stripEssentialsFormat(getPlugin().getEss().getPermissionsHandler().getPrefix(player))), MessageUtil.sanitizeDiscordMarkdown(FormatUtil.stripEssentialsFormat(getPlugin().getEss().getPermissionsHandler().getSuffix(player)))); From 2fa9c6486e748b1415c31c7d03c86a6b9bcee1e2 Mon Sep 17 00:00:00 2001 From: Josh Roy <10731363+JRoy@users.noreply.github.com> Date: Mon, 9 Aug 2021 11:59:36 -0700 Subject: [PATCH 044/120] Fix disabled-commands not removing aliases (#4399) Fixes #4383, an issue where only the main command name is disabled instead of the alias specified in `config.yml`. --- .../java/com/earth2me/essentials/Settings.java | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/Essentials/src/main/java/com/earth2me/essentials/Settings.java b/Essentials/src/main/java/com/earth2me/essentials/Settings.java index 94d31027718..aa84f7dcbe6 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/Settings.java +++ b/Essentials/src/main/java/com/earth2me/essentials/Settings.java @@ -669,24 +669,25 @@ public void reloadConfig() { } for (final String command : disabledCommands) { - final Command toDisable = ess.getPluginCommand(command); + final String effectiveAlias = command.toLowerCase(Locale.ENGLISH); + final Command toDisable = ess.getPluginCommand(effectiveAlias); if (toDisable != null) { if (isDebug()) { - logger.log(Level.INFO, "Attempting removal of " + command); + logger.log(Level.INFO, "Attempting removal of " + effectiveAlias); } - final Command removed = ess.getKnownCommandsProvider().getKnownCommands().remove(toDisable.getName()); + final Command removed = ess.getKnownCommandsProvider().getKnownCommands().remove(effectiveAlias); if (removed != null) { if (isDebug()) { - logger.log(Level.INFO, "Adding command " + command + " to disabled map!"); + logger.log(Level.INFO, "Adding command " + effectiveAlias + " to disabled map!"); } - disabledBukkitCommands.put(command, removed); + disabledBukkitCommands.put(effectiveAlias, removed); } // This is 2 because Settings are reloaded twice in the startup lifecycle if (reloadCount.get() < 2) { - ess.scheduleSyncDelayedTask(() -> _addAlternativeCommand(command, toDisable)); + ess.scheduleSyncDelayedTask(() -> _addAlternativeCommand(effectiveAlias, toDisable)); } else { - _addAlternativeCommand(command, toDisable); + _addAlternativeCommand(effectiveAlias, toDisable); } mapModified = true; } From 5334a3fd34c6e965ea463e788369970806ae0697 Mon Sep 17 00:00:00 2001 From: Josh Roy <10731363+JRoy@users.noreply.github.com> Date: Mon, 9 Aug 2021 12:14:15 -0700 Subject: [PATCH 045/120] Move update check message out of MOTD task (#4410) Update message will now show after mail, and will not be affected by insane MOTD delays. --- .../essentials/EssentialsPlayerListener.java | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/Essentials/src/main/java/com/earth2me/essentials/EssentialsPlayerListener.java b/Essentials/src/main/java/com/earth2me/essentials/EssentialsPlayerListener.java index 47e18232bda..9f38c00ebf1 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/EssentialsPlayerListener.java +++ b/Essentials/src/main/java/com/earth2me/essentials/EssentialsPlayerListener.java @@ -378,6 +378,14 @@ public void run() { } } + if (user.isAuthorized("essentials.updatecheck")) { + ess.runTaskAsynchronously(() -> { + for (String str : ess.getUpdateChecker().getVersionMessages(false, false)) { + user.sendMessage(str); + } + }); + } + if (user.isAuthorized("essentials.fly.safelogin")) { user.getBase().setFallDistance(0); if (LocationUtil.shouldFly(user.getLocation())) { @@ -440,14 +448,6 @@ public void run() { final TextPager pager = new TextPager(output, true); pager.showPage("1", null, "motd", user.getSource()); } - - if (user.isAuthorized("essentials.updatecheck")) { - ess.runTaskAsynchronously(() -> { - for (String str : ess.getUpdateChecker().getVersionMessages(false, false)) { - user.sendMessage(str); - } - }); - } } } } From 14fbfe360eb580c909ac1cb4ea11e9abf959db7c Mon Sep 17 00:00:00 2001 From: Josh Roy <10731363+JRoy@users.noreply.github.com> Date: Mon, 9 Aug 2021 12:22:09 -0700 Subject: [PATCH 046/120] Allow disabling MOTD task and cancel on player logout (#4411) This PR allows setting `delay-motd` to a negative value in `config.yml` to disable the MOTD join task without disabling `/motd`, and fixes an issue where delayed MOTD tasks would run even after a player logged out (in case someone previously set an insanely high MOTD delay to "disable" the MOTD on join). Fixes #4408. --- .../essentials/EssentialsPlayerListener.java | 24 ++++++++++++++----- Essentials/src/main/resources/config.yml | 1 + 2 files changed, 19 insertions(+), 6 deletions(-) diff --git a/Essentials/src/main/java/com/earth2me/essentials/EssentialsPlayerListener.java b/Essentials/src/main/java/com/earth2me/essentials/EssentialsPlayerListener.java index 9f38c00ebf1..04c0be48430 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/EssentialsPlayerListener.java +++ b/Essentials/src/main/java/com/earth2me/essentials/EssentialsPlayerListener.java @@ -66,6 +66,8 @@ import java.util.Locale; import java.util.Map.Entry; import java.util.Set; +import java.util.UUID; +import java.util.concurrent.ConcurrentHashMap; import java.util.logging.Level; import java.util.logging.Logger; import java.util.regex.Pattern; @@ -75,6 +77,7 @@ public class EssentialsPlayerListener implements Listener, FakeAccessor { private static final Logger LOGGER = Logger.getLogger("Essentials"); private final transient IEssentials ess; + private final ConcurrentHashMap pendingMotdTasks = new ConcurrentHashMap<>(); public EssentialsPlayerListener(final IEssentials parent) { this.ess = parent; @@ -216,6 +219,11 @@ public void onPlayerMove(final PlayerMoveEvent event) { public void onPlayerQuit(final PlayerQuitEvent event) { final User user = ess.getUser(event.getPlayer()); + final Integer pendingId = pendingMotdTasks.remove(user.getUUID()); + if (pendingId != null) { + ess.getScheduler().cancelTask(pendingId); + } + if (hideJoinQuitMessages() || (ess.getSettings().allowSilentJoinQuit() && user.isAuthorized("essentials.silentquit"))) { event.setQuitMessage(null); } else if (ess.getSettings().isCustomQuitMessage() && event.getQuitMessage() != null) { @@ -360,12 +368,14 @@ public void run() { ess.runTaskAsynchronously(() -> ess.getServer().getPluginManager().callEvent(new AsyncUserDataLoadEvent(user, effectiveMessage))); - final int motdDelay = ess.getSettings().getMotdDelay() / 50; - final DelayMotdTask motdTask = new DelayMotdTask(user); - if (motdDelay > 0) { - ess.scheduleSyncDelayedTask(motdTask, motdDelay); - } else { - motdTask.run(); + if (ess.getSettings().getMotdDelay() < 0) { + final int motdDelay = ess.getSettings().getMotdDelay() / 50; + final DelayMotdTask motdTask = new DelayMotdTask(user); + if (motdDelay > 0) { + pendingMotdTasks.put(user.getUUID(), ess.scheduleSyncDelayedTask(motdTask, motdDelay)); + } else { + motdTask.run(); + } } if (!ess.getSettings().isCommandDisabled("mail") && user.isAuthorized("essentials.mail")) { @@ -427,6 +437,8 @@ class DelayMotdTask implements Runnable { @Override public void run() { + pendingMotdTasks.remove(user.getUUID()); + IText tempInput = null; if (!ess.getSettings().isCommandDisabled("motd")) { diff --git a/Essentials/src/main/resources/config.yml b/Essentials/src/main/resources/config.yml index f62b0453889..6ed46cc84d7 100644 --- a/Essentials/src/main/resources/config.yml +++ b/Essentials/src/main/resources/config.yml @@ -669,6 +669,7 @@ allow-selling-named-items: false # Delay for the MOTD display for players on join, in milliseconds. # This has no effect if the MOTD command or permission are disabled. +# This can also be set to -1 to completely disable the join MOTD all together. delay-motd: 0 # A list of commands that should have their complementary confirm commands enabled by default. From d56ecaacdcd19bba9be4e6594047876834c0269a Mon Sep 17 00:00:00 2001 From: Josh Roy <10731363+JRoy@users.noreply.github.com> Date: Mon, 9 Aug 2021 12:39:55 -0700 Subject: [PATCH 047/120] Allow world name fallback for LazyLocation (#4428) Co-authored-by: MD <1917406+mdcfe@users.noreply.github.com> --- .../java/com/earth2me/essentials/Jails.java | 2 +- .../config/entities/LazyLocation.java | 22 +++++++++++++++---- .../serializers/LocationTypeSerializer.java | 2 ++ 3 files changed, 21 insertions(+), 5 deletions(-) diff --git a/Essentials/src/main/java/com/earth2me/essentials/Jails.java b/Essentials/src/main/java/com/earth2me/essentials/Jails.java index 0942ed45538..c40c9959eae 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/Jails.java +++ b/Essentials/src/main/java/com/earth2me/essentials/Jails.java @@ -63,7 +63,7 @@ public void reloadConfig() { if (worldId == null || worldId.isEmpty()) { continue; } - jails.put(entry.getKey().toLowerCase(Locale.ENGLISH), new LazyLocation(worldId, jailNode.node("x").getDouble(), jailNode.node("y").getDouble(), + jails.put(entry.getKey().toLowerCase(Locale.ENGLISH), new LazyLocation(worldId, jailNode.node("world-name").getString(""), jailNode.node("x").getDouble(), jailNode.node("y").getDouble(), jailNode.node("z").getDouble(), jailNode.node("yaw").getFloat(), jailNode.node("pitch").getFloat())); } checkRegister(); diff --git a/Essentials/src/main/java/com/earth2me/essentials/config/entities/LazyLocation.java b/Essentials/src/main/java/com/earth2me/essentials/config/entities/LazyLocation.java index a99a3fa2d49..6fa5e29d6b2 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/config/entities/LazyLocation.java +++ b/Essentials/src/main/java/com/earth2me/essentials/config/entities/LazyLocation.java @@ -10,15 +10,17 @@ * Represents a Location but doesn't parse the location until it is requested via {@link LazyLocation#location()}. */ public class LazyLocation { - private final String world; + private String world; + private String worldName; private final double x; private final double y; private final double z; private final float yaw; private final float pitch; - public LazyLocation(String world, double x, double y, double z, float yaw, float pitch) { - this.world = world; + public LazyLocation(String worldId, String worldName, double x, double y, double z, float yaw, float pitch) { + this.world = worldId; + this.worldName = worldName; this.x = x; this.y = y; this.z = z; @@ -30,6 +32,10 @@ public String world() { return world; } + public String worldName() { + return worldName; + } + public double x() { return x; } @@ -67,14 +73,22 @@ public Location location() { world = Bukkit.getWorld(this.world); } + if (world == null && this.worldName != null && !this.worldName.isEmpty()) { + world = Bukkit.getWorld(this.worldName); + } + if (world == null) { return null; } + this.world = world.getUID().toString(); + this.worldName = world.getName(); + return new Location(world, x, y, z, yaw, pitch); } public static LazyLocation fromLocation(final Location location) { - return new LazyLocation(location.getWorld().getUID().toString(), location.getX(), location.getY(), location.getZ(), location.getYaw(), location.getPitch()); + //noinspection ConstantConditions + return new LazyLocation(location.getWorld().getUID().toString(), location.getWorld().getName(), location.getX(), location.getY(), location.getZ(), location.getYaw(), location.getPitch()); } } diff --git a/Essentials/src/main/java/com/earth2me/essentials/config/serializers/LocationTypeSerializer.java b/Essentials/src/main/java/com/earth2me/essentials/config/serializers/LocationTypeSerializer.java index a50cdc12f72..9e563e54b79 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/config/serializers/LocationTypeSerializer.java +++ b/Essentials/src/main/java/com/earth2me/essentials/config/serializers/LocationTypeSerializer.java @@ -21,6 +21,7 @@ public LazyLocation deserialize(Type type, ConfigurationNode node) throws Serial return new LazyLocation( worldValue, + node.node("world-name").getString(""), node.node("x").getDouble(), node.node("y").getDouble(), node.node("z").getDouble(), @@ -36,6 +37,7 @@ public void serialize(Type type, @Nullable LazyLocation value, ConfigurationNode } node.node("world").set(String.class, value.world()); + node.node("world-name").set(String.class, value.worldName()); node.node("x").set(Double.class, value.x()); node.node("y").set(Double.class, value.y()); node.node("z").set(Double.class, value.z()); From ac8a13f0393ce543fa87992bdafa434f01d06474 Mon Sep 17 00:00:00 2001 From: Josh Roy <10731363+JRoy@users.noreply.github.com> Date: Mon, 9 Aug 2021 12:48:43 -0700 Subject: [PATCH 048/120] Add name parameter for Discord avatar URL (#4369) Allows offline mode/Geyser users to configure their own avatar URL using a service that accepts usernames. --- .../discord/JDADiscordService.java | 2 +- .../discord/listeners/BukkitListener.java | 46 +++++++++++-------- .../essentialsx/discord/util/DiscordUtil.java | 5 ++ .../src/main/resources/config.yml | 1 + 4 files changed, 33 insertions(+), 21 deletions(-) diff --git a/EssentialsDiscord/src/main/java/net/essentialsx/discord/JDADiscordService.java b/EssentialsDiscord/src/main/java/net/essentialsx/discord/JDADiscordService.java index 7be209ee345..7e02352b08c 100644 --- a/EssentialsDiscord/src/main/java/net/essentialsx/discord/JDADiscordService.java +++ b/EssentialsDiscord/src/main/java/net/essentialsx/discord/JDADiscordService.java @@ -252,7 +252,7 @@ public void sendChatMessage(final Player player, final String chatMessage) { MessageUtil.sanitizeDiscordMarkdown(FormatUtil.stripEssentialsFormat(getPlugin().getEss().getPermissionsHandler().getPrefix(player))), MessageUtil.sanitizeDiscordMarkdown(FormatUtil.stripEssentialsFormat(getPlugin().getEss().getPermissionsHandler().getSuffix(player)))); - final String avatarUrl = getSettings().isShowAvatar() ? getSettings().getAvatarURL().replace("{uuid}", player.getUniqueId().toString()) : null; + final String avatarUrl = DiscordUtil.getAvatarUrl(this, player); final String name = getSettings().isShowName() ? player.getName() : (getSettings().isShowDisplayName() ? player.getDisplayName() : null); DiscordUtil.dispatchDiscordMessage(this, MessageType.DefaultTypes.CHAT, formattedMessage, user.isAuthorized("essentials.discord.ping"), avatarUrl, name, player.getUniqueId()); diff --git a/EssentialsDiscord/src/main/java/net/essentialsx/discord/listeners/BukkitListener.java b/EssentialsDiscord/src/main/java/net/essentialsx/discord/listeners/BukkitListener.java index 9432a2633b5..74f7bf2be6f 100644 --- a/EssentialsDiscord/src/main/java/net/essentialsx/discord/listeners/BukkitListener.java +++ b/EssentialsDiscord/src/main/java/net/essentialsx/discord/listeners/BukkitListener.java @@ -134,11 +134,8 @@ public void sendJoinQuitMessage(final Player player, final String message, boole MessageUtil.formatMessage(join ? jda.getSettings().getJoinFormat(player) : jda.getSettings().getQuitFormat(player), MessageUtil.sanitizeDiscordMarkdown(player.getName()), MessageUtil.sanitizeDiscordMarkdown(player.getDisplayName()), - MessageUtil.sanitizeDiscordMarkdown(message), - false, - jda.getSettings().isShowAvatar() ? jda.getSettings().getAvatarURL().replace("{uuid}", player.getUniqueId().toString()) : null, - jda.getSettings().isShowName() ? player.getName() : (jda.getSettings().isShowDisplayName() ? player.getDisplayName() : null), - player.getUniqueId())); + MessageUtil.sanitizeDiscordMarkdown(message)), + player); } @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) @@ -154,6 +151,7 @@ public void onDeath(PlayerDeathEvent event) { if (!event.getEntity().getWorld().isGameRule("showDeathMessages")) { showDeathMessages = null; } else { + //noinspection deprecation showDeathMessages = event.getEntity().getWorld().getGameRuleValue("showDeathMessages").equals("true"); } } @@ -166,10 +164,7 @@ public void onDeath(PlayerDeathEvent event) { MessageUtil.sanitizeDiscordMarkdown(event.getEntity().getName()), MessageUtil.sanitizeDiscordMarkdown(event.getEntity().getDisplayName()), MessageUtil.sanitizeDiscordMarkdown(event.getDeathMessage())), - false, - jda.getSettings().isShowAvatar() ? jda.getSettings().getAvatarURL().replace("{uuid}", event.getEntity().getUniqueId().toString()) : null, - jda.getSettings().isShowName() ? event.getEntity().getName() : (jda.getSettings().isShowDisplayName() ? event.getEntity().getDisplayName() : null), - event.getEntity().getUniqueId()); + event.getEntity()); } @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) @@ -189,10 +184,7 @@ public void onAfk(AfkStatusChangeEvent event) { MessageUtil.formatMessage(format, MessageUtil.sanitizeDiscordMarkdown(event.getAffected().getName()), MessageUtil.sanitizeDiscordMarkdown(event.getAffected().getDisplayName())), - false, - jda.getSettings().isShowAvatar() ? jda.getSettings().getAvatarURL().replace("{uuid}", event.getAffected().getBase().getUniqueId().toString()) : null, - jda.getSettings().isShowName() ? event.getAffected().getName() : (jda.getSettings().isShowDisplayName() ? event.getAffected().getDisplayName() : null), - event.getAffected().getBase().getUniqueId()); + event.getAffected().getBase()); } @EventHandler(priority = EventPriority.MONITOR) @@ -206,10 +198,7 @@ public void onAdvancement(AbstractAchievementEvent event) { MessageUtil.sanitizeDiscordMarkdown(event.getPlayer().getName()), MessageUtil.sanitizeDiscordMarkdown(event.getPlayer().getDisplayName()), event.getName()), - false, - jda.getSettings().isShowAvatar() ? jda.getSettings().getAvatarURL().replace("{uuid}", event.getPlayer().getUniqueId().toString()) : null, - jda.getSettings().isShowName() ? event.getPlayer().getName() : (jda.getSettings().isShowDisplayName() ? event.getPlayer().getDisplayName() : null), - event.getPlayer().getUniqueId()); + event.getPlayer()); } @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) @@ -233,10 +222,27 @@ private boolean isVanishHide(final IUser user) { } private void sendDiscordMessage(final MessageType messageType, final String message) { - sendDiscordMessage(messageType, message, false, null, null, null); + sendDiscordMessage(messageType, message, null); } - private void sendDiscordMessage(final MessageType messageType, final String message, final boolean allowPing, final String avatarUrl, final String name, final UUID uuid) { - DiscordUtil.dispatchDiscordMessage(jda, messageType, message, allowPing, avatarUrl, name, uuid); + private void sendDiscordMessage(final MessageType messageType, final String message, final Player player) { + String avatarUrl = null; + String name = null; + UUID uuid = null; + if (player != null) { + if (jda.getSettings().isShowAvatar()) { + avatarUrl = DiscordUtil.getAvatarUrl(jda, player); + } + + if (jda.getSettings().isShowName()) { + name = player.getName(); + } else if (jda.getSettings().isShowDisplayName()) { + name = player.getDisplayName(); + } + + uuid = player.getUniqueId(); + } + + DiscordUtil.dispatchDiscordMessage(jda, messageType, message, false, avatarUrl, name, uuid); } } diff --git a/EssentialsDiscord/src/main/java/net/essentialsx/discord/util/DiscordUtil.java b/EssentialsDiscord/src/main/java/net/essentialsx/discord/util/DiscordUtil.java index cb3a8248811..95418b09d3f 100644 --- a/EssentialsDiscord/src/main/java/net/essentialsx/discord/util/DiscordUtil.java +++ b/EssentialsDiscord/src/main/java/net/essentialsx/discord/util/DiscordUtil.java @@ -19,6 +19,7 @@ import net.essentialsx.discord.JDADiscordService; import okhttp3.OkHttpClient; import org.bukkit.Bukkit; +import org.bukkit.entity.Player; import java.util.List; import java.util.UUID; @@ -194,6 +195,10 @@ public static boolean hasRoles(Member member, List roleDefinitions) { return false; } + public static String getAvatarUrl(final JDADiscordService jda, final Player player) { + return jda.getSettings().getAvatarURL().replace("{uuid}", player.getUniqueId().toString()).replace("{name}", player.getName()); + } + public static void dispatchDiscordMessage(final JDADiscordService jda, final MessageType messageType, final String message, final boolean allowPing, final String avatarUrl, final String name, final UUID uuid) { if (jda.getPlugin().getSettings().getMessageChannel(messageType.getKey()).equalsIgnoreCase("none")) { return; diff --git a/EssentialsDiscord/src/main/resources/config.yml b/EssentialsDiscord/src/main/resources/config.yml index b1faa522735..ca35f9d4656 100644 --- a/EssentialsDiscord/src/main/resources/config.yml +++ b/EssentialsDiscord/src/main/resources/config.yml @@ -133,6 +133,7 @@ show-avatar: false # The URL which should be used to get the avatars of users when "show-avatar" is set to true. # Any URL in here should only return a proper JPEG/PNG image and nothing else. # To include the UUID of the player in this URL, use "{uuid}". +# To include the name of the player in this URL, use "{name}". avatar-url: "https://crafthead.net/helm/{uuid}" # Whether or not player messages should show their name as the bot name in Discord. show-name: false From 42293596f3c1e14d37ad96eef35f7136d77ddd2a Mon Sep 17 00:00:00 2001 From: Josh Roy <10731363+JRoy@users.noreply.github.com> Date: Mon, 9 Aug 2021 12:56:38 -0700 Subject: [PATCH 049/120] Add config option to disable verbose usage strings (#4396) Co-authored-by: MD <1917406+mdcfe@users.noreply.github.com> ```yml # Whether or not Essentials should show detailed command usages. # If set to false, Essentials will collapse all usages in to one single usage message. verbose-command-usages: true ``` This PR also fixes a regression in legacy usage strings where the `` wasn't replaced. --- .../src/main/java/com/earth2me/essentials/Essentials.java | 4 ++-- .../src/main/java/com/earth2me/essentials/ISettings.java | 2 ++ .../src/main/java/com/earth2me/essentials/Settings.java | 5 +++++ Essentials/src/main/resources/config.yml | 4 ++++ 4 files changed, 13 insertions(+), 2 deletions(-) diff --git a/Essentials/src/main/java/com/earth2me/essentials/Essentials.java b/Essentials/src/main/java/com/earth2me/essentials/Essentials.java index 230505e39cc..dd9c353e09d 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/Essentials.java +++ b/Essentials/src/main/java/com/earth2me/essentials/Essentials.java @@ -770,12 +770,12 @@ public boolean onCommandEssentials(final CommandSender cSender, final Command co sender.sendMessage(tl("commandHelpLine1", commandLabel)); sender.sendMessage(tl("commandHelpLine2", command.getDescription())); sender.sendMessage(tl("commandHelpLine3")); - if (!cmd.getUsageStrings().isEmpty()) { + if (getSettings().isVerboseCommandUsages() && !cmd.getUsageStrings().isEmpty()) { for (Map.Entry usage : cmd.getUsageStrings().entrySet()) { sender.sendMessage(tl("commandHelpLineUsage", usage.getKey().replace("", commandLabel), usage.getValue())); } } else { - sender.sendMessage(command.getUsage()); + sender.sendMessage(command.getUsage().replace("", commandLabel)); } if (!ex.getMessage().isEmpty()) { sender.sendMessage(ex.getMessage()); diff --git a/Essentials/src/main/java/com/earth2me/essentials/ISettings.java b/Essentials/src/main/java/com/earth2me/essentials/ISettings.java index 8622e697b50..507d26736b1 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/ISettings.java +++ b/Essentials/src/main/java/com/earth2me/essentials/ISettings.java @@ -126,6 +126,8 @@ public interface ISettings extends IConf { Set getDisabledCommands(); + boolean isVerboseCommandUsages(); + boolean isCommandOverridden(String name); boolean isDebug(); diff --git a/Essentials/src/main/java/com/earth2me/essentials/Settings.java b/Essentials/src/main/java/com/earth2me/essentials/Settings.java index aa84f7dcbe6..0459350eedf 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/Settings.java +++ b/Essentials/src/main/java/com/earth2me/essentials/Settings.java @@ -289,6 +289,11 @@ public Set getDisabledCommands() { return disabledCommands; } + @Override + public boolean isVerboseCommandUsages() { + return config.getBoolean("verbose-command-usages", true); + } + private void _addAlternativeCommand(final String label, final Command current) { Command cmd = ess.getAlternativeCommandsHandler().getAlternative(label); if (cmd == null) { diff --git a/Essentials/src/main/resources/config.yml b/Essentials/src/main/resources/config.yml index 6ed46cc84d7..df506e5348f 100644 --- a/Essentials/src/main/resources/config.yml +++ b/Essentials/src/main/resources/config.yml @@ -170,6 +170,10 @@ disabled-commands: # - nick # - clear +# Whether or not Essentials should show detailed command usages. +# If set to false, Essentials will collapse all usages in to one single usage message. +verbose-command-usages: true + # These commands will be shown to players with socialSpy enabled. # You can add commands from other plugins you may want to track or # remove commands that are used for something you dont want to spy on. From 871e718f63f2fe1fcde3666e20a29930ac7e5841 Mon Sep 17 00:00:00 2001 From: Josh Roy <10731363+JRoy@users.noreply.github.com> Date: Mon, 9 Aug 2021 13:23:49 -0700 Subject: [PATCH 050/120] Add online/unique placeholders to join/leave formats for discord (#4427) --- .../main/java/net/essentialsx/discord/DiscordSettings.java | 4 ++-- .../net/essentialsx/discord/listeners/BukkitListener.java | 4 +++- EssentialsDiscord/src/main/resources/config.yml | 4 ++++ 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/EssentialsDiscord/src/main/java/net/essentialsx/discord/DiscordSettings.java b/EssentialsDiscord/src/main/java/net/essentialsx/discord/DiscordSettings.java index 29c862613f1..ec6d2059f46 100644 --- a/EssentialsDiscord/src/main/java/net/essentialsx/discord/DiscordSettings.java +++ b/EssentialsDiscord/src/main/java/net/essentialsx/discord/DiscordSettings.java @@ -238,7 +238,7 @@ public MessageFormat getJoinFormat(Player player) { filled = format; } return generateMessageFormat(filled, ":arrow_right: {displayname} has joined!", false, - "username", "displayname", "joinmessage"); + "username", "displayname", "joinmessage", "online", "unique"); } public MessageFormat getQuitFormat(Player player) { @@ -250,7 +250,7 @@ public MessageFormat getQuitFormat(Player player) { filled = format; } return generateMessageFormat(filled, ":arrow_left: {displayname} has left!", false, - "username", "displayname", "quitmessage"); + "username", "displayname", "quitmessage", "online", "unique"); } public MessageFormat getDeathFormat(Player player) { diff --git a/EssentialsDiscord/src/main/java/net/essentialsx/discord/listeners/BukkitListener.java b/EssentialsDiscord/src/main/java/net/essentialsx/discord/listeners/BukkitListener.java index 74f7bf2be6f..68ca0eeb2f4 100644 --- a/EssentialsDiscord/src/main/java/net/essentialsx/discord/listeners/BukkitListener.java +++ b/EssentialsDiscord/src/main/java/net/essentialsx/discord/listeners/BukkitListener.java @@ -134,7 +134,9 @@ public void sendJoinQuitMessage(final Player player, final String message, boole MessageUtil.formatMessage(join ? jda.getSettings().getJoinFormat(player) : jda.getSettings().getQuitFormat(player), MessageUtil.sanitizeDiscordMarkdown(player.getName()), MessageUtil.sanitizeDiscordMarkdown(player.getDisplayName()), - MessageUtil.sanitizeDiscordMarkdown(message)), + MessageUtil.sanitizeDiscordMarkdown(message), + jda.getPlugin().getEss().getOnlinePlayers().size() - (join ? 0 : 1), + jda.getPlugin().getEss().getUserMap().getUniqueUsers()), player); } diff --git a/EssentialsDiscord/src/main/resources/config.yml b/EssentialsDiscord/src/main/resources/config.yml index ca35f9d4656..d8bb0b0a451 100644 --- a/EssentialsDiscord/src/main/resources/config.yml +++ b/EssentialsDiscord/src/main/resources/config.yml @@ -293,6 +293,8 @@ messages: # - {username}: The name of the user joining # - {displayname}: The display name of the user joining # - {joinmessage}: The full default join message used in game + # - {online}: The amount of players online + # - {unique}: The amount of unique players to ever join the server # ... PlaceholderAPI placeholders are also supported here too! join: ":arrow_right: {displayname} has joined!" # This is the message sent to Discord when a player leaves the minecraft server. @@ -300,6 +302,8 @@ messages: # - {username}: The name of the user leaving # - {displayname}: The display name of the user leaving # - {quitmessage}: The full default leave message used in game + # - {online}: The amount of players online + # - {unique}: The amount of unique players to ever join the server # ... PlaceholderAPI placeholders are also supported here too! quit: ":arrow_left: {displayname} has left!" # This is the message sent to Discord when a player dies. From 36432c65e921717860814bf1c2b2ce7698cd3058 Mon Sep 17 00:00:00 2001 From: Josh Roy <10731363+JRoy@users.noreply.github.com> Date: Mon, 9 Aug 2021 14:30:30 -0700 Subject: [PATCH 051/120] Fix NPE on webhooks messages with show-webhook-messages enabled (#4452) Co-authored-by: MD <1917406+mdcfe@users.noreply.github.com> Fixes #4451. --- .../net/essentialsx/discord/listeners/DiscordListener.java | 7 +++---- .../java/net/essentialsx/discord/util/DiscordUtil.java | 6 +++--- 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/EssentialsDiscord/src/main/java/net/essentialsx/discord/listeners/DiscordListener.java b/EssentialsDiscord/src/main/java/net/essentialsx/discord/listeners/DiscordListener.java index fb2d8604b89..f544553beb7 100644 --- a/EssentialsDiscord/src/main/java/net/essentialsx/discord/listeners/DiscordListener.java +++ b/EssentialsDiscord/src/main/java/net/essentialsx/discord/listeners/DiscordListener.java @@ -48,10 +48,9 @@ public void onGuildMessageReceived(@NotNull GuildMessageReceivedEvent event) { final User user = event.getAuthor(); final Member member = event.getMember(); + final String effectiveName = member == null ? event.getAuthor().getName() : member.getEffectiveName(); final Message message = event.getMessage(); - assert member != null; // Member will never be null - if (plugin.getSettings().getDiscordFilter() != null && plugin.getSettings().getDiscordFilter().matcher(message.getContentDisplay()).find()) { if (plugin.isDebug()) { logger.log(Level.INFO, "Skipping message " + message.getId() + " with content, \"" + message.getContentDisplay() + "\" as it matched the filter!"); @@ -73,7 +72,7 @@ public void onGuildMessageReceived(@NotNull GuildMessageReceivedEvent event) { .trim(), plugin.getSettings().getChatDiscordMaxLength()); // Apply or strip color formatting - final String finalMessage = DiscordUtil.hasRoles(member, plugin.getPlugin().getSettings().getPermittedFormattingRoles()) ? + final String finalMessage = member == null || DiscordUtil.hasRoles(member, plugin.getPlugin().getSettings().getPermittedFormattingRoles()) ? FormatUtil.replaceFormat(strippedMessage) : FormatUtil.stripFormat(strippedMessage); // Don't send blank messages @@ -86,7 +85,7 @@ public void onGuildMessageReceived(@NotNull GuildMessageReceivedEvent event) { final String formattedMessage = EmojiParser.parseToAliases(MessageUtil.formatMessage(plugin.getPlugin().getSettings().getDiscordToMcFormat(), event.getChannel().getName(), user.getName(), user.getDiscriminator(), user.getAsTag(), - member.getEffectiveName(), DiscordUtil.getRoleColorFormat(member), finalMessage, DiscordUtil.getRoleFormat(member)), EmojiParser.FitzpatrickAction.REMOVE); + effectiveName, DiscordUtil.getRoleColorFormat(member), finalMessage, DiscordUtil.getRoleFormat(member)), EmojiParser.FitzpatrickAction.REMOVE); for (final String group : keys) { if (plugin.getSettings().getRelayToConsoleList().contains(group)) { diff --git a/EssentialsDiscord/src/main/java/net/essentialsx/discord/util/DiscordUtil.java b/EssentialsDiscord/src/main/java/net/essentialsx/discord/util/DiscordUtil.java index 95418b09d3f..defb41d45e1 100644 --- a/EssentialsDiscord/src/main/java/net/essentialsx/discord/util/DiscordUtil.java +++ b/EssentialsDiscord/src/main/java/net/essentialsx/discord/util/DiscordUtil.java @@ -138,9 +138,9 @@ public static CompletableFuture createWebhook(TextChannel channel, Stri * @return The highest role or blank string. */ public static String getRoleFormat(Member member) { - final List roles = member.getRoles(); + final List roles = member == null ? null : member.getRoles(); - if (roles.isEmpty()) { + if (roles == null || roles.isEmpty()) { return ""; } @@ -154,7 +154,7 @@ public static String getRoleFormat(Member member) { * @return The bukkit color code or blank string. */ public static String getRoleColorFormat(Member member) { - if (member.getColorRaw() == Role.DEFAULT_COLOR_RAW) { + if (member == null || member.getColorRaw() == Role.DEFAULT_COLOR_RAW) { return ""; } final int rawColor = 0xff000000 | member.getColorRaw(); From 35b1a284f3a02c577e0bef562fb367600485bed1 Mon Sep 17 00:00:00 2001 From: Josh Roy <10731363+JRoy@users.noreply.github.com> Date: Tue, 10 Aug 2021 07:51:33 -0700 Subject: [PATCH 052/120] Fix improper MOTD delay check (#4454) --- .../java/com/earth2me/essentials/EssentialsPlayerListener.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Essentials/src/main/java/com/earth2me/essentials/EssentialsPlayerListener.java b/Essentials/src/main/java/com/earth2me/essentials/EssentialsPlayerListener.java index 04c0be48430..9d341600080 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/EssentialsPlayerListener.java +++ b/Essentials/src/main/java/com/earth2me/essentials/EssentialsPlayerListener.java @@ -368,7 +368,7 @@ public void run() { ess.runTaskAsynchronously(() -> ess.getServer().getPluginManager().callEvent(new AsyncUserDataLoadEvent(user, effectiveMessage))); - if (ess.getSettings().getMotdDelay() < 0) { + if (ess.getSettings().getMotdDelay() >= 0) { final int motdDelay = ess.getSettings().getMotdDelay() / 50; final DelayMotdTask motdTask = new DelayMotdTask(user); if (motdDelay > 0) { From 1179caab883d59b0f389cd2ed0e581d89d86a85f Mon Sep 17 00:00:00 2001 From: Josh Roy <10731363+JRoy@users.noreply.github.com> Date: Thu, 12 Aug 2021 04:37:19 -0700 Subject: [PATCH 053/120] Fix bot-command-relay option not ignoring itself (#4453) --- .../essentialsx/discord/listeners/DiscordCommandDispatcher.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/EssentialsDiscord/src/main/java/net/essentialsx/discord/listeners/DiscordCommandDispatcher.java b/EssentialsDiscord/src/main/java/net/essentialsx/discord/listeners/DiscordCommandDispatcher.java index f78f13bef09..2c3205074b8 100644 --- a/EssentialsDiscord/src/main/java/net/essentialsx/discord/listeners/DiscordCommandDispatcher.java +++ b/EssentialsDiscord/src/main/java/net/essentialsx/discord/listeners/DiscordCommandDispatcher.java @@ -19,7 +19,7 @@ public DiscordCommandDispatcher(JDADiscordService jda) { @Override public void onGuildMessageReceived(@NotNull GuildMessageReceivedEvent event) { if (jda.getConsoleWebhook() != null && event.getChannel().getId().equals(channelId)) { - if ((event.isWebhookMessage() || event.getAuthor().isBot()) && (!jda.getSettings().isConsoleBotCommandRelay() || DiscordUtil.ACTIVE_WEBHOOKS.contains(event.getAuthor().getId()))) { + if ((event.isWebhookMessage() || event.getAuthor().isBot()) && (!jda.getSettings().isConsoleBotCommandRelay() || DiscordUtil.ACTIVE_WEBHOOKS.contains(event.getAuthor().getId()) || event.getAuthor().getId().equals(event.getGuild().getSelfMember().getId()))) { return; } From 36927407626e6173741e207fa2c32acf7375e54e Mon Sep 17 00:00:00 2001 From: Josh Roy <10731363+JRoy@users.noreply.github.com> Date: Thu, 19 Aug 2021 12:35:19 -0700 Subject: [PATCH 054/120] Add `/ess dump` command to generate a debug dump output (#4361) Co-authored-by: MD <1917406+mdcfe@users.noreply.github.com> Command usage: /essentials dump [config] [discord] [kits] [log] Either of the optional args can be used to add the given data to the dump. Related: EssentialsX/Website#51 --- .../com/earth2me/essentials/ISettings.java | 3 + .../java/com/earth2me/essentials/Kits.java | 4 + .../com/earth2me/essentials/Settings.java | 5 + .../essentials/commands/Commandcreatekit.java | 86 +++----- .../commands/Commandessentials.java | 189 ++++++++++++++++++ .../earth2me/essentials/utils/PasteUtil.java | 127 ++++++++++++ .../src/main/resources/messages.properties | 8 + 7 files changed, 360 insertions(+), 62 deletions(-) create mode 100644 Essentials/src/main/java/com/earth2me/essentials/utils/PasteUtil.java diff --git a/Essentials/src/main/java/com/earth2me/essentials/ISettings.java b/Essentials/src/main/java/com/earth2me/essentials/ISettings.java index 507d26736b1..eb08d7a4c86 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/ISettings.java +++ b/Essentials/src/main/java/com/earth2me/essentials/ISettings.java @@ -7,6 +7,7 @@ import org.bukkit.event.EventPriority; import org.spongepowered.configurate.CommentedConfigurationNode; +import java.io.File; import java.math.BigDecimal; import java.text.NumberFormat; import java.util.List; @@ -17,6 +18,8 @@ import java.util.regex.Pattern; public interface ISettings extends IConf { + File getConfigFile(); + boolean areSignsDisabled(); IText getAnnounceNewPlayerFormat(); diff --git a/Essentials/src/main/java/com/earth2me/essentials/Kits.java b/Essentials/src/main/java/com/earth2me/essentials/Kits.java index 5cb419babc1..9d8c4639a6b 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/Kits.java +++ b/Essentials/src/main/java/com/earth2me/essentials/Kits.java @@ -31,6 +31,10 @@ public void reloadConfig() { kits = _getKits(); } + public File getFile() { + return config.getFile(); + } + private CommentedConfigurationNode _getKits() { final CommentedConfigurationNode section = config.getSection("kits"); if (section != null) { diff --git a/Essentials/src/main/java/com/earth2me/essentials/Settings.java b/Essentials/src/main/java/com/earth2me/essentials/Settings.java index 0459350eedf..4ff5fa44712 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/Settings.java +++ b/Essentials/src/main/java/com/earth2me/essentials/Settings.java @@ -145,6 +145,11 @@ public Settings(final IEssentials ess) { reloadConfig(); } + @Override + public File getConfigFile() { + return config.getFile(); + } + @Override public boolean getRespawnAtHome() { return config.getBoolean("respawn-at-home", false); diff --git a/Essentials/src/main/java/com/earth2me/essentials/commands/Commandcreatekit.java b/Essentials/src/main/java/com/earth2me/essentials/commands/Commandcreatekit.java index d00c803513a..81d4519b5db 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/commands/Commandcreatekit.java +++ b/Essentials/src/main/java/com/earth2me/essentials/commands/Commandcreatekit.java @@ -3,11 +3,7 @@ import com.earth2me.essentials.CommandSource; import com.earth2me.essentials.User; import com.earth2me.essentials.utils.DateUtil; -import com.google.common.base.Charsets; -import com.google.common.io.CharStreams; -import com.google.gson.Gson; -import com.google.gson.JsonArray; -import com.google.gson.JsonObject; +import com.earth2me.essentials.utils.PasteUtil; import org.bukkit.Material; import org.bukkit.Server; import org.bukkit.inventory.ItemStack; @@ -17,25 +13,16 @@ import org.yaml.snakeyaml.external.biz.base64Coder.Base64Coder; import java.io.BufferedWriter; -import java.io.InputStreamReader; -import java.io.OutputStream; import java.io.StringWriter; -import java.net.HttpURLConnection; -import java.net.URL; import java.util.ArrayList; +import java.util.Collections; import java.util.List; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; +import java.util.concurrent.CompletableFuture; +import java.util.logging.Level; import static com.earth2me.essentials.I18n.tl; public class Commandcreatekit extends EssentialsCommand { - private static final String PASTE_URL = "https://paste.gg/"; - private static final String PASTE_UPLOAD_URL = "https://api.paste.gg/v1/pastes"; - private static final Gson GSON = new Gson(); - - private final ExecutorService executorService = Executors.newSingleThreadExecutor(); - public Commandcreatekit() { super("createkit"); } @@ -81,7 +68,7 @@ public void run(final Server server, final User user, final String commandLabel, } private void uploadPaste(final CommandSource sender, final String kitName, final long delay, final List list) { - executorService.submit(() -> { + ess.runTaskAsynchronously(() -> { try { final StringWriter sw = new StringWriter(); final YamlConfigurationLoader loader = YamlConfigurationLoader.builder().sink(() -> new BufferedWriter(sw)).indent(2).nodeStyle(NodeStyle.BLOCK).build(); @@ -95,52 +82,27 @@ private void uploadPaste(final CommandSource sender, final String kitName, final final String fileContents = sw.toString(); - final HttpURLConnection connection = (HttpURLConnection) new URL(PASTE_UPLOAD_URL).openConnection(); - connection.setRequestMethod("POST"); - connection.setDoInput(true); - connection.setDoOutput(true); - connection.setRequestProperty("User-Agent", "EssentialsX plugin"); - connection.setRequestProperty("Content-Type", "application/json"); - final JsonObject body = new JsonObject(); - final JsonArray files = new JsonArray(); - final JsonObject file = new JsonObject(); - final JsonObject content = new JsonObject(); - content.addProperty("format", "text"); - content.addProperty("value", fileContents); - file.add("content", content); - files.add(file); - body.add("files", files); - - try (final OutputStream os = connection.getOutputStream()) { - os.write(body.toString().getBytes(Charsets.UTF_8)); - } - // Error - if (connection.getResponseCode() >= 400) { + final CompletableFuture future = PasteUtil.createPaste(Collections.singletonList(new PasteUtil.PasteFile("kit_" + kitName + ".yml", fileContents))); + future.thenAccept(result -> { + if (result != null) { + final String separator = tl("createKitSeparator"); + final String delayFormat = delay <= 0 ? "0" : DateUtil.formatDateDiff(System.currentTimeMillis() + (delay * 1000)); + sender.sendMessage(separator); + sender.sendMessage(tl("createKitSuccess", kitName, delayFormat, result.getPasteUrl())); + sender.sendMessage(separator); + if (ess.getSettings().isDebug()) { + ess.getLogger().info(sender.getSender().getName() + " created a kit: " + result.getPasteUrl()); + } + } + }); + future.exceptionally(throwable -> { sender.sendMessage(tl("createKitFailed", kitName)); - final String message = CharStreams.toString(new InputStreamReader(connection.getErrorStream(), Charsets.UTF_8)); - ess.getLogger().severe("Error creating kit: " + message); - return; - } - - // Read URL - final JsonObject object = GSON.fromJson(new InputStreamReader(connection.getInputStream(), Charsets.UTF_8), JsonObject.class); - final String pasteUrl = PASTE_URL + object.get("result").getAsJsonObject().get("id").getAsString(); - connection.disconnect(); - - final String separator = tl("createKitSeparator"); - String delayFormat = "0"; - if (delay > 0) { - delayFormat = DateUtil.formatDateDiff(System.currentTimeMillis() + (delay * 1000)); - } - sender.sendMessage(separator); - sender.sendMessage(tl("createKitSuccess", kitName, delayFormat, pasteUrl)); - sender.sendMessage(separator); - if (ess.getSettings().isDebug()) { - ess.getLogger().info(sender.getSender().getName() + " created a kit: " + pasteUrl); - } - } catch (final Exception e) { + ess.getLogger().log(Level.SEVERE, "Error creating kit: ", throwable); + return null; + }); + } catch (Exception e) { sender.sendMessage(tl("createKitFailed", kitName)); - e.printStackTrace(); + ess.getLogger().log(Level.SEVERE, "Error creating kit: ", e); } }); } diff --git a/Essentials/src/main/java/com/earth2me/essentials/commands/Commandessentials.java b/Essentials/src/main/java/com/earth2me/essentials/commands/Commandessentials.java index 64ae147fd87..d17d171433b 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/commands/Commandessentials.java +++ b/Essentials/src/main/java/com/earth2me/essentials/commands/Commandessentials.java @@ -10,10 +10,14 @@ import com.earth2me.essentials.utils.EnumUtil; import com.earth2me.essentials.utils.FloatUtil; import com.earth2me.essentials.utils.NumberUtil; +import com.earth2me.essentials.utils.PasteUtil; import com.earth2me.essentials.utils.VersionUtil; import com.google.common.base.Charsets; import com.google.common.collect.ImmutableMap; import com.google.common.collect.Lists; +import com.google.gson.JsonArray; +import com.google.gson.JsonObject; +import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.Location; import org.bukkit.Server; @@ -25,13 +29,22 @@ import org.bukkit.plugin.PluginManager; import org.bukkit.scheduler.BukkitRunnable; +import java.io.IOException; +import java.lang.management.ManagementFactory; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.time.Instant; +import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.Collections; +import java.util.Comparator; import java.util.List; import java.util.Locale; import java.util.Map; import java.util.UUID; +import java.util.concurrent.CompletableFuture; import java.util.function.Supplier; import java.util.stream.Collectors; @@ -103,6 +116,9 @@ public void run(final Server server, final CommandSource sender, final String co case "commands": runCommands(server, sender, commandLabel, args); break; + case "dump": + runDump(server, sender, commandLabel, args); + break; // Data commands case "reload": @@ -156,6 +172,168 @@ private void runCommands(final Server server, final CommandSource sender, final } } + // Generates a paste of useful information + private void runDump(Server server, CommandSource sender, String commandLabel, String[] args) { + sender.sendMessage(tl("dumpCreating")); + + final JsonObject dump = new JsonObject(); + + final JsonObject meta = new JsonObject(); + meta.addProperty("timestamp", Instant.now().toEpochMilli()); + meta.addProperty("sender", sender.getPlayer() != null ? sender.getPlayer().getName() : null); + meta.addProperty("senderUuid", sender.getPlayer() != null ? sender.getPlayer().getUniqueId().toString() : null); + dump.add("meta", meta); + + final JsonObject serverData = new JsonObject(); + serverData.addProperty("bukkit-version", Bukkit.getBukkitVersion()); + serverData.addProperty("server-version", Bukkit.getVersion()); + serverData.addProperty("server-brand", Bukkit.getName()); + final JsonObject supportStatus = new JsonObject(); + final VersionUtil.SupportStatus status = VersionUtil.getServerSupportStatus(); + supportStatus.addProperty("status", status.name()); + supportStatus.addProperty("supported", status.isSupported()); + supportStatus.addProperty("trigger", VersionUtil.getSupportStatusClass()); + serverData.add("support-status", supportStatus); + dump.add("server-data", serverData); + + final JsonObject environment = new JsonObject(); + environment.addProperty("java-version", System.getProperty("java.version")); + environment.addProperty("operating-system", System.getProperty("os.name")); + environment.addProperty("uptime", DateUtil.formatDateDiff(ManagementFactory.getRuntimeMXBean().getStartTime())); + environment.addProperty("allocated-memory", (Runtime.getRuntime().totalMemory() / 1024 / 1024) + "MB"); + dump.add("environment", environment); + + final JsonObject essData = new JsonObject(); + essData.addProperty("version", ess.getDescription().getVersion()); + final JsonObject updateData = new JsonObject(); + updateData.addProperty("id", ess.getUpdateChecker().getVersionIdentifier()); + updateData.addProperty("branch", ess.getUpdateChecker().getVersionBranch()); + updateData.addProperty("dev", ess.getUpdateChecker().isDevBuild()); + essData.add("update-data", updateData); + final JsonObject econLayer = new JsonObject(); + econLayer.addProperty("enabled", !ess.getSettings().isEcoDisabled()); + econLayer.addProperty("selected-layer", EconomyLayers.isLayerSelected()); + final EconomyLayer layer = EconomyLayers.getSelectedLayer(); + econLayer.addProperty("name", layer == null ? "null" : layer.getName()); + econLayer.addProperty("layer-version", layer == null ? "null" : layer.getPluginVersion()); + econLayer.addProperty("backend-name", layer == null ? "null" : layer.getBackendName()); + essData.add("economy-layer", econLayer); + final JsonArray addons = new JsonArray(); + final JsonArray plugins = new JsonArray(); + final ArrayList alphabetical = new ArrayList<>(); + Collections.addAll(alphabetical, Bukkit.getPluginManager().getPlugins()); + alphabetical.sort(Comparator.comparing(o -> o.getName().toUpperCase(Locale.ENGLISH))); + for (final Plugin plugin : alphabetical) { + final JsonObject pluginData = new JsonObject(); + final PluginDescriptionFile info = plugin.getDescription(); + final String name = info.getName(); + + pluginData.addProperty("name", name); + pluginData.addProperty("version", info.getVersion()); + pluginData.addProperty("description", info.getDescription()); + pluginData.addProperty("main", info.getMain()); + pluginData.addProperty("enabled", plugin.isEnabled()); + pluginData.addProperty("official", plugin == ess || officialPlugins.contains(name)); + pluginData.addProperty("unsupported", warnPlugins.contains(name)); + + final JsonArray authors = new JsonArray(); + info.getAuthors().forEach(authors::add); + pluginData.add("authors", authors); + + if (name.startsWith("Essentials") && !name.equals("Essentials")) { + addons.add(pluginData); + } + plugins.add(pluginData); + } + essData.add("addons", addons); + dump.add("ess-data", essData); + dump.add("plugins", plugins); + + final List files = new ArrayList<>(); + files.add(new PasteUtil.PasteFile("dump.json", dump.toString())); + + final Plugin essDiscord = Bukkit.getPluginManager().getPlugin("EssentialsDiscord"); + + // Further operations will be heavy IO + ess.runTaskAsynchronously(() -> { + boolean config = false; + boolean discord = false; + boolean kits = false; + boolean log = false; + for (final String arg : args) { + if (arg.equals("*")) { + config = true; + discord = true; + kits = true; + log = true; + break; + } else if (arg.equalsIgnoreCase("config")) { + config = true; + } else if (arg.equalsIgnoreCase("discord")) { + discord = true; + } else if (arg.equalsIgnoreCase("kits")) { + kits = true; + } else if (arg.equalsIgnoreCase("log")) { + log = true; + } + } + + if (config) { + try { + files.add(new PasteUtil.PasteFile("config.yml", new String(Files.readAllBytes(ess.getSettings().getConfigFile().toPath()), StandardCharsets.UTF_8))); + } catch (IOException e) { + sender.sendMessage(tl("dumpErrorUpload", "config.yml", e.getMessage())); + } + } + + if (discord && essDiscord != null && essDiscord.isEnabled()) { + try { + files.add(new PasteUtil.PasteFile("discord-config.yml", + new String(Files.readAllBytes(essDiscord.getDataFolder().toPath().resolve("config.yml")), StandardCharsets.UTF_8) + .replaceAll("[MN][A-Za-z\\d]{23}\\.[\\w-]{6}\\.[\\w-]{27}", ""))); + } catch (IOException e) { + sender.sendMessage(tl("dumpErrorUpload", "discord-config.yml", e.getMessage())); + } + } + + if (kits) { + try { + files.add(new PasteUtil.PasteFile("kits.yml", new String(Files.readAllBytes(ess.getKits().getFile().toPath()), StandardCharsets.UTF_8))); + } catch (IOException e) { + sender.sendMessage(tl("dumpErrorUpload", "kits.yml", e.getMessage())); + } + } + + if (log) { + try { + files.add(new PasteUtil.PasteFile("latest.log", new String(Files.readAllBytes(Paths.get("logs", "latest.log")), StandardCharsets.UTF_8) + .replaceAll("(?m)^\\[\\d\\d:\\d\\d:\\d\\d] \\[.+/(?:DEBUG|TRACE)]: .+\\s(?:[A-Za-z.]+:.+\\s(?:\\t.+\\s)*)?\\s*(?:\"[A-Za-z]+\" : .+[\\s}\\]]+)*", "") + .replaceAll("(?:[0-9]{1,3}\\.){3}[0-9]{1,3}", ""))); + } catch (IOException e) { + sender.sendMessage(tl("dumpErrorUpload", "latest.log", e.getMessage())); + } + } + + final CompletableFuture future = PasteUtil.createPaste(files); + future.thenAccept(result -> { + if (result != null) { + final String dumpUrl = "https://essentialsx.net/dump.html?id=" + result.getPasteId(); + sender.sendMessage(tl("dumpUrl", dumpUrl)); + sender.sendMessage(tl("dumpDeleteKey", result.getDeletionKey())); + if (sender.isPlayer()) { + ess.getLogger().info(tl("dumpConsoleUrl", dumpUrl)); + ess.getLogger().info(tl("dumpDeleteKey", result.getDeletionKey())); + } + } + files.clear(); + }); + future.exceptionally(throwable -> { + sender.sendMessage(tl("dumpError", throwable.getMessage())); + return null; + }); + }); + } + // Resets the given player's user data. private void runReset(final Server server, final CommandSource sender, final String commandLabel, final String[] args) throws Exception { if (args.length < 2) { @@ -491,6 +669,7 @@ protected List getTabCompleteOptions(final Server server, final CommandS final List options = Lists.newArrayList(); options.add("reload"); options.add("version"); + options.add("dump"); options.add("commands"); options.add("debug"); options.add("reset"); @@ -534,6 +713,16 @@ protected List getTabCompleteOptions(final Server server, final CommandS return Lists.newArrayList("ignoreUFCache"); } break; + case "dump": + final List list = Lists.newArrayList("config", "kits", "log", "discord", "*"); + for (String arg : args) { + if (arg.equals("*")) { + list.clear(); + return list; + } + list.remove(arg.toLowerCase(Locale.ENGLISH)); + } + return list; } return Collections.emptyList(); diff --git a/Essentials/src/main/java/com/earth2me/essentials/utils/PasteUtil.java b/Essentials/src/main/java/com/earth2me/essentials/utils/PasteUtil.java new file mode 100644 index 00000000000..4acef1f95b0 --- /dev/null +++ b/Essentials/src/main/java/com/earth2me/essentials/utils/PasteUtil.java @@ -0,0 +1,127 @@ +package com.earth2me.essentials.utils; + +import com.google.common.base.Charsets; +import com.google.common.io.CharStreams; +import com.google.gson.Gson; +import com.google.gson.JsonArray; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import org.checkerframework.checker.nullness.qual.Nullable; + +import java.io.InputStreamReader; +import java.io.OutputStream; +import java.net.HttpURLConnection; +import java.net.URL; +import java.nio.charset.StandardCharsets; +import java.util.List; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; + +public final class PasteUtil { + private static final String PASTE_URL = "https://paste.gg/"; + private static final String PASTE_UPLOAD_URL = "https://api.paste.gg/v1/pastes"; + private static final ExecutorService PASTE_EXECUTOR_SERVICE = Executors.newSingleThreadExecutor(); + private static final Gson GSON = new Gson(); + + private PasteUtil() { + } + + /** + * Creates an anonymous paste containing the provided files. + * + * @param pages The files to include in the paste. + * @return The result of the paste, including the paste URL and deletion key. + */ + public static CompletableFuture createPaste(List pages) { + final CompletableFuture future = new CompletableFuture<>(); + PASTE_EXECUTOR_SERVICE.submit(() -> { + try { + final HttpURLConnection connection = (HttpURLConnection) new URL(PASTE_UPLOAD_URL).openConnection(); + connection.setRequestMethod("POST"); + connection.setDoInput(true); + connection.setDoOutput(true); + connection.setRequestProperty("User-Agent", "EssentialsX plugin"); + connection.setRequestProperty("Content-Type", "application/json"); + final JsonObject body = new JsonObject(); + final JsonArray files = new JsonArray(); + for (final PasteFile page : pages) { + final JsonObject file = new JsonObject(); + final JsonObject content = new JsonObject(); + file.addProperty("name", page.getName()); + content.addProperty("format", "text"); + content.addProperty("value", page.getContents()); + file.add("content", content); + files.add(file); + } + body.add("files", files); + + try (final OutputStream os = connection.getOutputStream()) { + os.write(body.toString().getBytes(Charsets.UTF_8)); + } + + if (connection.getResponseCode() >= 400) { + //noinspection UnstableApiUsage + future.completeExceptionally(new Error(CharStreams.toString(new InputStreamReader(connection.getErrorStream(), StandardCharsets.UTF_8)))); + return; + } + + // Read URL + final JsonObject object = GSON.fromJson(new InputStreamReader(connection.getInputStream(), Charsets.UTF_8), JsonObject.class); + final String pasteId = object.get("result").getAsJsonObject().get("id").getAsString(); + final String pasteUrl = PASTE_URL + pasteId; + final JsonElement deletionKey = object.get("result").getAsJsonObject().get("deletion_key"); + connection.disconnect(); + + final PasteResult result = new PasteResult(pasteId, pasteUrl, deletionKey != null ? deletionKey.getAsString() : null); + future.complete(result); + } catch (Exception e) { + future.completeExceptionally(e); + } + }); + return future; + } + + public static class PasteFile { + private final String name; + private final String contents; + + public PasteFile(final String name, final String contents) { + this.name = name; + this.contents = contents; + } + + public String getName() { + return name; + } + + public String getContents() { + return contents; + } + } + + public static class PasteResult { + private final String pasteId; + private final String pasteUrl; + private final @Nullable String deletionKey; + + protected PasteResult(String pasteId, final String pasteUrl, final @Nullable String deletionKey) { + this.pasteId = pasteId; + this.pasteUrl = pasteUrl; + this.deletionKey = deletionKey; + } + + public String getPasteUrl() { + return pasteUrl; + } + + public @Nullable String getDeletionKey() { + return deletionKey; + } + + public String getPasteId() { + return pasteId; + } + } + +} diff --git a/Essentials/src/main/resources/messages.properties b/Essentials/src/main/resources/messages.properties index c9e7d8feff4..1b049882638 100644 --- a/Essentials/src/main/resources/messages.properties +++ b/Essentials/src/main/resources/messages.properties @@ -260,6 +260,12 @@ disposalCommandUsage=/ distance=\u00a76Distance\: {0} dontMoveMessage=\u00a76Teleportation will commence in\u00a7c {0}\u00a76. Don''t move. downloadingGeoIp=Downloading GeoIP database... this might take a while (country\: 1.7 MB, city\: 30MB) +dumpConsoleUrl=A server dump was created: \u00a7c{0} +dumpCreating=\u00a76Creating server dump... +dumpDeleteKey=\u00a76If you want to delete this dump at a later date, use the following deletion key: \u00a7c{0} +dumpError=\u00a74Error while creating dump \u00a7c{0}\u00a74. +dumpErrorUpload=\u00a74Error while uploading \u00a7c{0}\u00a74: \u00a7c{1} +dumpUrl=\u00a76Created server dump: \u00a7c{0} duplicatedUserdata=Duplicated userdata\: {0} and {1}. durability=\u00a76This tool has \u00a7c{0}\u00a76 uses left. east=E @@ -309,6 +315,8 @@ essentialsCommandUsage6=/ cleanup essentialsCommandUsage6Description=Cleans up old userdata essentialsCommandUsage7=/ homes essentialsCommandUsage7Description=Manages user homes +essentialsCommandUsage8=/ dump [*] [config] [discord] [kits] [log] +essentialsCommandUsage8Description=Generates a server dump with the requested information essentialsHelp1=The file is broken and Essentials can''t open it. Essentials is now disabled. If you can''t fix the file yourself, go to http\://tiny.cc/EssentialsChat essentialsHelp2=The file is broken and Essentials can''t open it. Essentials is now disabled. If you can''t fix the file yourself, either type /essentialshelp in game or go to http\://tiny.cc/EssentialsChat essentialsReload=\u00a76Essentials reloaded\u00a7c {0}. From c0626518211103fa7d2b77f05ba9a225872f21f7 Mon Sep 17 00:00:00 2001 From: CyberKitsune <920550+cyberkitsune@users.noreply.github.com> Date: Thu, 19 Aug 2021 13:00:06 -0700 Subject: [PATCH 055/120] Add option for tab complete to use displaynames (#4432) Co-authored-by: MD <1917406+mdcfe@users.noreply.github.com> This feature adds a new configuration option, `change-tab-complete-name` When `change-tab-complete-name` is turned on, `getPlayers()` in `EssentialsCommand` will use `getDisplayName()` instead of `getName()`; populating the list with display names instead of player names. Closes #4431. --- .../src/main/java/com/earth2me/essentials/ISettings.java | 2 ++ .../src/main/java/com/earth2me/essentials/Settings.java | 5 +++++ .../java/com/earth2me/essentials/commands/Commandmail.java | 2 -- .../java/com/earth2me/essentials/commands/Commandmsg.java | 3 ++- .../com/earth2me/essentials/commands/EssentialsCommand.java | 5 +++-- Essentials/src/main/resources/config.yml | 3 +++ 6 files changed, 15 insertions(+), 5 deletions(-) diff --git a/Essentials/src/main/java/com/earth2me/essentials/ISettings.java b/Essentials/src/main/java/com/earth2me/essentials/ISettings.java index eb08d7a4c86..c4f40911454 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/ISettings.java +++ b/Essentials/src/main/java/com/earth2me/essentials/ISettings.java @@ -172,6 +172,8 @@ public interface ISettings extends IConf { boolean changePlayerListName(); + boolean changeTabCompleteName(); + boolean isPlayerCommand(String string); boolean useBukkitPermissions(); diff --git a/Essentials/src/main/java/com/earth2me/essentials/Settings.java b/Essentials/src/main/java/com/earth2me/essentials/Settings.java index 4ff5fa44712..20ad33b6222 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/Settings.java +++ b/Essentials/src/main/java/com/earth2me/essentials/Settings.java @@ -1024,6 +1024,11 @@ public boolean changePlayerListName() { return changePlayerListName; } + @Override + public boolean changeTabCompleteName() { + return config.getBoolean("change-tab-complete-name", false); + } + @Override public boolean useBukkitPermissions() { return config.getBoolean("use-bukkit-permissions", false); diff --git a/Essentials/src/main/java/com/earth2me/essentials/commands/Commandmail.java b/Essentials/src/main/java/com/earth2me/essentials/commands/Commandmail.java index d50dbf261e5..387ec86662d 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/commands/Commandmail.java +++ b/Essentials/src/main/java/com/earth2me/essentials/commands/Commandmail.java @@ -294,8 +294,6 @@ protected List getTabCompleteOptions(final Server server, final CommandS return getPlayers(server, sender); } else if (args.length == 3 && args[0].equalsIgnoreCase("sendtemp")) { return COMMON_DATE_DIFFS; - } else if ((args.length > 2 && args[0].equalsIgnoreCase("send")) || (args.length > 1 && args[0].equalsIgnoreCase("sendall"))) { - return null; // Use vanilla handler } else { return Collections.emptyList(); } diff --git a/Essentials/src/main/java/com/earth2me/essentials/commands/Commandmsg.java b/Essentials/src/main/java/com/earth2me/essentials/commands/Commandmsg.java index 1603bd6c8bc..d7d95794bd3 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/commands/Commandmsg.java +++ b/Essentials/src/main/java/com/earth2me/essentials/commands/Commandmsg.java @@ -8,6 +8,7 @@ import com.earth2me.essentials.utils.FormatUtil; import org.bukkit.Server; +import java.util.Collections; import java.util.List; import static com.earth2me.essentials.I18n.tl; @@ -60,7 +61,7 @@ protected List getTabCompleteOptions(final Server server, final CommandS if (args.length == 1) { return getPlayers(server, sender); } else { - return null; // It's a chat message, use the default chat handler + return Collections.emptyList(); // It's a chat message, send an empty list. } } } diff --git a/Essentials/src/main/java/com/earth2me/essentials/commands/EssentialsCommand.java b/Essentials/src/main/java/com/earth2me/essentials/commands/EssentialsCommand.java index b40dd8da6ae..cd849b2d3a4 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/commands/EssentialsCommand.java +++ b/Essentials/src/main/java/com/earth2me/essentials/commands/EssentialsCommand.java @@ -4,6 +4,7 @@ import com.earth2me.essentials.IEssentialsModule; import com.earth2me.essentials.Trade; import com.earth2me.essentials.User; +import com.earth2me.essentials.utils.FormatUtil; import com.google.common.collect.ImmutableList; import com.google.common.collect.Lists; import com.google.common.collect.Maps; @@ -226,7 +227,7 @@ protected List getPlayers(final Server server, final CommandSource inter final List players = Lists.newArrayList(); for (final User user : ess.getOnlineUsers()) { if (canInteractWith(interactor, user)) { - players.add(user.getName()); + players.add(ess.getSettings().changeTabCompleteName() ? FormatUtil.stripFormat(user.getDisplayName()) : user.getName()); } } return players; @@ -240,7 +241,7 @@ protected List getPlayers(final Server server, final User interactor) { final List players = Lists.newArrayList(); for (final User user : ess.getOnlineUsers()) { if (canInteractWith(interactor, user)) { - players.add(user.getName()); + players.add(ess.getSettings().changeTabCompleteName() ? FormatUtil.stripFormat(user.getDisplayName()) : user.getName()); } } return players; diff --git a/Essentials/src/main/resources/config.yml b/Essentials/src/main/resources/config.yml index df506e5348f..58c925e2064 100644 --- a/Essentials/src/main/resources/config.yml +++ b/Essentials/src/main/resources/config.yml @@ -49,6 +49,9 @@ hide-displayname-in-vanish: true # Disable this if you have any other plugin, that modifies the displayname of a user. change-displayname: true +# This option will cause Essentials to show players' displaynames instead of usernames when tab completing Essentials commands. +change-tab-complete-name: false + # When this option is enabled, the (tab) player list will be updated with the displayname. # The value of change-displayname (above) has to be true. #change-playerlist: true From ecdaed7d11c8831b1047ea299e1e9e4c0ed132cc Mon Sep 17 00:00:00 2001 From: Flask Bot <67512990+Flask-Bot@users.noreply.github.com> Date: Thu, 19 Aug 2021 21:11:35 +0100 Subject: [PATCH 056/120] New Crowdin updates (#4281) --- .../src/main/resources/messages_cs.properties | 36 +- .../src/main/resources/messages_de.properties | 80 +++- .../src/main/resources/messages_el.properties | 167 +++++++- .../src/main/resources/messages_en.properties | 389 +++++++++++++++++- .../main/resources/messages_en_GB.properties | 373 ++++++++++++++++- .../src/main/resources/messages_es.properties | 121 +++++- .../src/main/resources/messages_et.properties | 42 +- .../src/main/resources/messages_fi.properties | 40 +- .../main/resources/messages_fil_PH.properties | 1 - .../src/main/resources/messages_fr.properties | 68 ++- .../src/main/resources/messages_he.properties | 105 +++++ .../src/main/resources/messages_hr.properties | 71 ++++ .../src/main/resources/messages_hu.properties | 101 ++--- .../src/main/resources/messages_it.properties | 50 ++- .../src/main/resources/messages_ja.properties | 1 - .../src/main/resources/messages_ko.properties | 389 +++++++++++++----- .../main/resources/messages_lv_LV.properties | 227 ++++++---- .../src/main/resources/messages_nl.properties | 24 +- .../src/main/resources/messages_no.properties | 143 ++++++- .../src/main/resources/messages_pl.properties | 383 +++++++++++++---- .../src/main/resources/messages_pt.properties | 86 +++- .../main/resources/messages_pt_BR.properties | 63 ++- .../src/main/resources/messages_ro.properties | 1 - .../src/main/resources/messages_ru.properties | 244 ++++++++--- .../src/main/resources/messages_sk.properties | 20 +- .../src/main/resources/messages_tr.properties | 20 +- .../src/main/resources/messages_uk.properties | 36 ++ .../src/main/resources/messages_vi.properties | 11 +- .../src/main/resources/messages_zh.properties | 49 ++- .../main/resources/messages_zh_TW.properties | 112 +++-- 30 files changed, 2967 insertions(+), 486 deletions(-) diff --git a/Essentials/src/main/resources/messages_cs.properties b/Essentials/src/main/resources/messages_cs.properties index b8854813093..1a70fb58bc0 100644 --- a/Essentials/src/main/resources/messages_cs.properties +++ b/Essentials/src/main/resources/messages_cs.properties @@ -232,6 +232,28 @@ destinationNotSet=Cíl není nastaven\! disabled=vypnuto disabledToSpawnMob=§4Vyvolání tohoto stvoření je zakázáno v konfiguračním souboru. disableUnlimited=§6Neomezené pokládání§c {0} §6bylo vypnuto pro hráče §c{1}§6. +discordCommandExecuteDescription=Provede příkaz konzole na Minecraft serveru. +discordCommandExecuteArgumentCommand=Příkaz, který se má provést +discordCommandExecuteReply=Provádění příkazu\: „/{0}“ +discordCommandListDescription=Seznam přihlášených uživatelů. +discordCommandListArgumentGroup=Hledání omezit na skupinu +discordCommandMessageDescription=Zašle zprávu hráči na Minecraft serveru. +discordCommandMessageArgumentUsername=Hráč, kterému se má zaslat zpráva +discordCommandMessageArgumentMessage=Zpráva, která se má zaslat hráči +discordErrorCommand=Bota jste na server přidali nesprávně. Postupujte podle návodu v konfiguraci a přidejte svého bota pomocí https\://essentialsx.net/discord.html\! +discordErrorCommandDisabled=Tento příkaz je vypnut\! +discordErrorLogin=Při přihlášení k Discordu došlo k chybě, což způsobilo vypnutí samotného zásuvného modulu\: \n{0} +discordErrorLoggerInvalidChannel=Protokolování konzole na Discordu bylo zakázáno kvůli neplatné definici kanálu\! Pokud jej zamýšlíte vypnout, nastavte ID kanálu na „none“; jinak zkontrolujte, zda je správné ID kanálu. +discordErrorLoggerNoPerms=Protokolování konzole na Discord bylo zakázáno z důvodu nedostatku oprávnění\! Ujistěte se, že váš bot má na serveru oprávnění „Správa háčků webhook“. Po opravě proveťe „/ess reload“. +discordErrorNoGuild=Neplatné nebo chybějící ID serveru\! Při nastavení zásuvného modulu postupujte podle návodu v konfiguraci. +discordErrorNoGuildSize=Tvůj bot není na žádném serveru\! Při nastavení zásuvného modulu postupujte dle návodu v konfiguraci. +discordErrorNoPerms=Váš bot nemůže vidět žádný kanál ani na žádném kanálu mluvit\! Ujistěte se, že váš bot má oprávnění ke čtení a zápisu ve všech kanálech, které chcete používat. +discordErrorNoToken=Nebyl zadán žádný token\! Chcete-li nastavit zásuvný modul, postupujte podle návodu v konfiguraci. +discordErrorWebhook=Došlo k chybě při odesílání zpráv do kanálu konzole\! To bylo pravděpodobně způsobeno omylem smazáným webovým háčkem konzole. To lze obvykle opravit tak, že zajistíte, aby váš bot měl oprávnění „Správa háčků webhook“ a pak proveďte „/ess reload“. +discordLoggingIn=Pokouším se přihlásit do Discordu... +discordLoggingInDone=Uspěšně přihlášen jako {0} +discordNoSendPermission=Nelze odeslat zprávu v kanálu\: \#{0}. Ujistěte se, že bot má v tomto kanálu oprávnění „Odesílat zprávy“. +discordReloadInvalid=Opětovné načtení konfigurace EssentialsX Discord není možné, když je plugin v neplatném stavu\! Změnila-li se konfigurace, je třeba server restartovat. disposal=Odpadkový koš disposalCommandDescription=Otevře nabídku přenosného koše. disposalCommandUsage=/ @@ -502,11 +524,10 @@ itemId=§6ID\:§c {0} itemloreClear=§6Odstranil jsi moudro tohoto předmětu. itemloreCommandDescription=Upravit moudro předmětu. itemloreCommandUsage=/ [text/řádek] [text] -itemloreCommandUsage1=/ [text] +itemloreCommandUsage1=/ add [text] itemloreCommandUsage1Description=Přidá zadaný text na konec moudra předmětu v ruce -itemloreCommandUsage2=/ [číslo řádku] itemloreCommandUsage2Description=Nastaví zadaný řádek moudra drženého předmětu na daný text -itemloreCommandUsage3=/ +itemloreCommandUsage3=/ clear itemloreCommandUsage3Description=Vymaže moudro drženého předmětu itemloreInvalidItem=§4Předmět, u něhož chceš upravit moudro, musíš držet v ruce. itemloreNoLine=§4Předmět ve tvé ruce nemá žádné moudro na řádce §c{0}§4. @@ -626,15 +647,16 @@ loomCommandUsage=/ mailClear=§6Zprávy vymažeš příkazem §c/mail clear§6. mailCleared=§6Zpráva smazána\! mailCommandDescription=Spravuje vnitroserverovou poštu mezi hráči. -mailCommandUsage=/ [read|clear|send [komu] [zpráva]|sendall [zpráva]] +mailCommandUsage=/ [read|clear|clear [počet]|send [adresát] [zpráva]|sendtemp [adresát] [čas vypršení] [zpráva]|sendall [zpráva]] mailCommandUsage1=/ read [strana] mailCommandUsage1Description=Čte první (nebo zadanou) stránku e-mailu -mailCommandUsage2=/ clear -mailCommandUsage2Description=Vymaže tvou poštu +mailCommandUsage2=/ clear [počet] +mailCommandUsage2Description=Vymaže buď všechny, nebo jen zadaný mail mailCommandUsage3=/ send mailCommandUsage3Description=Odešle zadanému hráči danou zprávu mailCommandUsage4=/ sendall mailCommandUsage4Description=Odešle všem hráčům danou zprávu +mailCommandUsage5=/ sendtemp <čas vypršení> mailDelay=Za poslední minutu bylo odesláno příliš mnoho zpráv. Maximum\: {0} mailFormat=§6[§r{0}§6] §r{1} mailMessage={0} @@ -889,6 +911,7 @@ repairCommandUsage1=/ repairEnchanted=§4Nemáš oprávnění opravovat očarované předměty. repairInvalidType=§4Tento předmět nelze opravit. repairNone=§4Nemáš žádné předměty, které potřebují opravit. +replyFromDiscord=**{0} odpovídá\:** `{1}` replyLastRecipientDisabled=§6Odpovídání poslednímu příjemci §cvypnuto§6. replyLastRecipientDisabledFor=§6Odpovídání poslednímu příjemci §cvypnuto §6pro hráče §c{0}§6. replyLastRecipientEnabled=§6Odpovídání poslednímu příjemci §czapnuto§6. @@ -1200,6 +1223,7 @@ versionOutputFine=§6{0} verze\: §a{1} versionOutputWarn=§6{0} verze\: §c{1} versionOutputUnsupported=§d{0} §6verze\: §d{1} versionOutputUnsupportedPlugins=§6Používáte §dnepodporované zásuvné moduly§6\! +versionOutputEconLayer=§6Ekonomická vrstva\: §r{0} versionMismatch=§4Nesprávná verze\! Aktualizuj§r {0} §4na stejnou verzi. versionMismatchAll=§4Nesprávná verze\! Aktualizuj všechny soubory Essentials .jar na stejnou verzi. versionReleaseLatest=§6Používáš nejnovější stabilní verzi EssentialsX\! diff --git a/Essentials/src/main/resources/messages_de.properties b/Essentials/src/main/resources/messages_de.properties index a92a063cc92..137c7970376 100644 --- a/Essentials/src/main/resources/messages_de.properties +++ b/Essentials/src/main/resources/messages_de.properties @@ -9,6 +9,9 @@ adventure=Abenteuermodus afkCommandDescription=Markiert dich als abwesend. afkCommandUsage=/ [spieler/nachricht...] afkCommandUsage1=/ [nachricht] +afkCommandUsage1Description=Schaltet deinen AFK Status mit einem optionalen Grund ein +afkCommandUsage2=/ [message] +afkCommandUsage2Description=Schaltet den AFK Status eines angegebenen Spieler mit einem optionalen Grund ein alertBroke=zerstört\: alertFormat=§3[{0}] §r {1} §6 {2} bei\: {3} alertPlaced=platziert\: @@ -33,7 +36,9 @@ backAfterDeath=§6Verwende den§c /back§6-Befehl, um zu deinem Todespunkt zurü backCommandDescription=Teleportiert Sie zu Ihrem Standort vor tp/spawn/warp. backCommandUsage=/ [spieler] backCommandUsage1=/ +backCommandUsage1Description=Teleportiert dich zu deiner vorherigen Position backCommandUsage2=/ +backCommandUsage2Description=Teleportiert einen angegebenen Spieler zu seiner vorherigen Position backOther=§c{0} §6ist zur letzen Position zurückgekehrt. backupCommandDescription=Führt das Backup aus, falls konfiguriert. backupCommandUsage=/ @@ -46,20 +51,29 @@ balance=§aKontostand\:§c {0} balanceCommandDescription=Gibt den aktuellen Kontostand des Spielers an. balanceCommandUsage=/ [spieler] balanceCommandUsage1=/ +balanceCommandUsage1Description=Gibt deinen aktuellen Kontostand an balanceCommandUsage2=/ +balanceCommandUsage2Description=Zeigt den Kontostand des angegebenen Spielers an balanceOther=§aKontostand von {0}§a\:§c {1} balanceTop=§6Die höchsten Kontostände ({0}) balanceTopLine={0}. {1}, {2} balancetopCommandDescription=Ermittelt die obersten Kontostand-Werte. +balancetopCommandUsage=/ [page] +balancetopCommandUsage1=/ [page] +balancetopCommandUsage1Description=Zeigt die erste (oder angegebene) Seite der höchsten Bilanzwerte an banCommandDescription=Sperrt einen Spieler. banCommandUsage=/ [grund] banCommandUsage1=/ [grund] +banCommandUsage1Description=Bannt den angegebenen Spieler mit einem optionalen Grund banExempt=§4Du kannst diesen Spieler nicht bannen. banExemptOffline=§4Du darfst Spieler, die offline sind, nicht bannen. banFormat=§4Gebannt\: §r{0} banIpJoin=Deine IP-Adresse ist auf diesem Server gebannt. Grund\: {0} banJoin=Du bist von diesem Server gebannt. Grund\: {0} banipCommandDescription=Sperrt eine IP-Adresse. +banipCommandUsage=/

[reason] +banipCommandUsage1=/
[reason] +banipCommandUsage1Description=Bannt die angegebene IP-Adresse mit einem optionalen Grund bed=§oBett§r bedMissing=§4Dein Bett ist entweder nicht gesetzt, fehlt oder ist blockiert. bedNull=§mBett§r @@ -72,12 +86,18 @@ bigTreeSuccess=§6Großen Baum gepflanzt. bigtreeCommandDescription=Erschaffe einen großen Baum, wo du hinblickst. bigtreeCommandUsage=/ bigtreeCommandUsage1=/ +bigtreeCommandUsage1Description=Spawnt einen großen Baum des angegebenen Typs blockList=§6EssentialsX leitet die folgenden Befehle an andere Plugins weiter\: blockListEmpty=§6EssentialsX leitet keine Befehle an andere Plugins weiter. bookAuthorSet=§6Autor des Buchs auf {0} geändert. bookCommandDescription=Ermöglicht das erneute Öffnen und Bearbeiten von versiegelten Büchern. bookCommandUsage=/ [titel|autor [name]] bookCommandUsage1=/ +bookCommandUsage1Description=Sperrt/Entsperrt ein Buch mit Feder/signiertes Buch +bookCommandUsage2=/ Autor +bookCommandUsage2Description=Setzt den Autor eines signierten Buches fest +bookCommandUsage3=/ Titel +bookCommandUsage3Description=Setzt den Titel eines signierten Buches fest bookLocked=§6Dieses Buch ist jetzt versiegelt. bookTitleSet=§6Buchtitel auf {0} geändert. breakCommandDescription=Zerstört den Block, den du anschaust. @@ -86,12 +106,15 @@ broadcast=§6[§4Broadcast§6]§a {0} broadcastCommandDescription=Versendet eine Nachricht an den gesamten Server. broadcastCommandUsage=/<command> <nachricht> broadcastCommandUsage1=/<command> <nachricht> +broadcastCommandUsage1Description=Sendet die angegebene Nachricht an den gesamten Server broadcastworldCommandDescription=Versendet eine Nachricht an eine Welt. broadcastworldCommandUsage=/<command> <welt> <nachricht> broadcastworldCommandUsage1=/<command> <welt> <nachricht> +broadcastworldCommandUsage1Description=Sendet die angegebene Nachricht an die angegebene Welt burnCommandDescription=Einen Spieler anzünden. burnCommandUsage=/<command> <spieler> <sekunden> burnCommandUsage1=/<command> <spieler> <sekunden> +burnCommandUsage1Description=Setzt den angegebenen Spieler für die angegebene Anzahl von Sekunden in Brand burnMsg=§6Du hast {0} für {1} Sekunden in Brand gesetzt. cannotSellNamedItem=§6Du darfst keine benannten Gegenstände verkaufen. cannotSellTheseNamedItems=§6Du hast keine Berechtigung, diese benannten Gegenstände zu verkaufen\: §4{0} @@ -112,20 +135,34 @@ clearInventoryConfirmToggleOn=§6Du musst ab jetzt bestätigen, ob du das Invent clearinventoryCommandDescription=Entferne alle Gegenstände in deinem Inventar. clearinventoryCommandUsage=/<command> [spieler|*] [gegenstand[\:<data>]|*|**] [anzahl] clearinventoryCommandUsage1=/<command> +clearinventoryCommandUsage1Description=Löscht alle Gegenstände aus deinem Inventar clearinventoryCommandUsage2=/<command> <spieler> +clearinventoryCommandUsage2Description=Löscht alle Gegenstände aus dem Inventar des angegebenen Spielers +clearinventoryCommandUsage3=/<command> <player> <item> [amount] +clearinventoryCommandUsage3Description=Löscht alles (oder die angegebene Anzahl) des angegebenen Gegenstands aus dem Inventar des angegebenen Spielers clearinventoryconfirmtoggleCommandDescription=Bestimmt, ob du Inventarleerungen bestätigen musst. clearinventoryconfirmtoggleCommandUsage=/<command> +commandArgumentOptional=§7 +commandArgumentRequired=§e commandCooldown=§cDu kannst diesen Command nicht ausführen für {0}. commandDisabled=§cDer Befehl§6 {0}§c ist deaktiviert. commandFailed=Befehl {0} ist fehlgeschlagen\: commandHelpFailedForPlugin=Fehler beim Abrufen der Hilfe des Plugins\: {0} +commandHelpLine1=§6Befehlshilfe\: §f/{0} +commandHelpLine2=§6Beschreibung\: §f{0} +commandHelpLine3=§6Verwendung(en)\: +commandHelpLine4=§6Alias(e)\: §f{0} +commandHelpLineUsage={0} §6- {1} commandNotLoaded=§4Befehl {0} ist nicht richtig geladen. compassBearing=§6Peilung\: {0} ({1} Grad). compassCommandDescription=Beschreibt deine momentane Haltung. compassCommandUsage=/<command> condenseCommandDescription=Bündelt Gegenstände into kompaktere Blöcke. +condenseCommandUsage=/<command> [item] condenseCommandUsage1=/<command> +condenseCommandUsage1Description=Kondensiert alle Gegenstände in deinem Inventar condenseCommandUsage2=/<command> <gegenstand> +condenseCommandUsage2Description=Fasst den angegebenen Gegenstand in deinem Inventar zusammen configFileMoveError=Es ist ein Fehler beim Verschieben der config.yml in das Backupverzeichnis aufgetreten. configFileRenameError=Das Umbenennen einer temporären Datei nach config.yml gescheitert. confirmClear=§7Um das Inventar zu leeren, musst du zuerst §lBESTÄTIGEN§7. Wiederhole dafür bitte §6{0}§7. @@ -140,6 +177,7 @@ createdKit=§6Das Kit §c{0} §6wurde mit §c{1} §6Einträgen und einer Verzög createkitCommandDescription=Ein Kit im Spiel erstellen\! createkitCommandUsage=/<command> <kitname> <abklingzeit> createkitCommandUsage1=/<command> <kitname> <abklingzeit> +createkitCommandUsage1Description=Erstellt ein Kit mit angegebenen Namen und Abklingzeit createKitFailed=§4Beim Erstellen des Kits ist ein Fehler aufgetreten {0}. createKitSeparator=§m----------------------- createKitSuccess=§6Kit erstellt\: §f{0}\n§6Verzögerung\: §f{1}\n§6Link\: §f{2}\n§6Es werden Inhalte aus dem oben stehenden Link in deine kits.yml kopiert. @@ -153,22 +191,33 @@ customtextCommandUsage=/<alias> - In bukkit.yml definieren day=Tag days=Tage defaultBanReason=Der Bann-Hammer hat gesprochen\! +deletedHomes=Alle Home-Punkte gelöscht. +deletedHomesWorld=Jedes Zuhause in {0} gelöscht. deleteFileError=Konnte Datei nicht löschen\: {0} deleteHome=§6Zuhause§c {0} §6wurde gelöscht. deleteJail=§6Das Gefängnis§c {0} §6wurde gelöscht. deleteKit=§6Kit§c {0} §6wurde entfernt. deleteWarp=§6Warp-Punkt§c {0}§6 wurde gelöscht. +deletingHomes=Jedes Zuhause wird gelöscht... +deletingHomesWorld=Jedes Zuhause wird in {0} gelöscht... delhomeCommandDescription=Entfernt ein Zuhause. delhomeCommandUsage=/<command> [spieler\:]<name> +delhomeCommandUsage1=/<command> <name> +delhomeCommandUsage1Description=Löscht dein Zuhause mit dem angegebenen Namen +delhomeCommandUsage2=/<command> <player>\:<name> +delhomeCommandUsage2Description=Löscht das Zuhause des angegebenen Spielers mit dem angegebenen Namen deljailCommandDescription=Entfernt ein Gefängnis. deljailCommandUsage=/<command> <gefängnisname> deljailCommandUsage1=/<command> <gefängnisname> +deljailCommandUsage1Description=Löscht das Gefängnis mit dem angegebenen Namen delkitCommandDescription=Entfernt das angegebene Kit. delkitCommandUsage=/<command> <Kit> delkitCommandUsage1=/<command> <Kit> +delkitCommandUsage1Description=Löscht das Kit mit dem angegebenen Namen delwarpCommandDescription=Entfernt den angegebenen Warp-Punkt. delwarpCommandUsage=/<command> <warp-punkt> delwarpCommandUsage1=/<command> <warp-punkt> +delwarpCommandUsage1Description=Löscht den Warp mit dem angegebenen Namen deniedAccessCommand=§c{0} §4hat keinen Zugriff auf diesen Befehl. denyBookEdit=§4Du kannst dieses Buch nicht entsperren. denyChangeAuthor=§4Du kannst den Autor dieses Buches nicht ändern. @@ -182,6 +231,19 @@ destinationNotSet=Ziel nicht gesetzt\! disabled=deaktiviert disabledToSpawnMob=§4Das Spawnen dieses Mobs ist in der Config deaktiviert. disableUnlimited=Unbegrenztes Platzieren von§c {0}§6 für§c {1}§6 deaktiviert. +discordCommandExecuteDescription=Führt einen Konsolen-Befehl auf dem Minecraft-Server aus. +discordCommandExecuteArgumentCommand=Der auszuführende Befehl +discordCommandExecuteReply=Führe Befehl aus\: "/{0}" +discordCommandListDescription=Ruft eine Liste der Online-Spieler auf. +discordCommandListArgumentGroup=Eine bestimmte Gruppe, um Ihre Suche eingrenzen zu können +discordCommandMessageDescription=Sendet eine Nachricht an einen Spieler auf dem Minecraft-Server. +discordCommandMessageArgumentUsername=Der Spieler, an den die Nachricht gesendet werden soll +discordCommandMessageArgumentMessage=Die Nachricht, die an den Spieler gesendet werden soll +discordErrorCommand=Du hast deinen Bot falsch zu deinem Server hinzugefügt. Bitte folge dem Tutorial in der Konfiguration und füge deinen Bot mit https\://essentialsx.net/discord.html hinzu\! +discordErrorCommandDisabled=Dieser Befehl ist deaktiviert\! +discordErrorLogin=Beim Anmelden in Discord ist ein Fehler aufgetreten, was dazu geführt hat, dass das Plugin sich selbst deaktiviert hat\: \n{0} +discordErrorLoggerInvalidChannel=Discord Konsolen-Protokollierung wurde aufgrund einer ungültigen Kanaldbeschreibung deaktiviert\! Wenn du vorhast sie zu deaktivieren, setze die Kanal-ID auf "none". Andernfalls überprüfe, ob deine Kanal-ID korrekt ist. +discordLoggingInDone=Erfolgreich angemeldet als {0} disposal=Beseitigung disposalCommandDescription=Öffnet ein portables Entsorgungsmenü. disposalCommandUsage=/<command> @@ -206,17 +268,25 @@ enchantments=§6Verzauberungen\:§r {0} enderchestCommandDescription=Lässt dich in eine Enderkiste schauen. enderchestCommandUsage=/<command> [spieler] enderchestCommandUsage1=/<command> +enderchestCommandUsage1Description=Öffnet deine Enderkiste enderchestCommandUsage2=/<command> <spieler> errorCallingCommand=Beim Aufrufen des Befehls {0} ist ein Fehler aufgetreten. errorWithMessage=§cFehler\:§4 {0} essentialsCommandDescription=Lädt Essentials neu. essentialsCommandUsage=/<command> +essentialsCommandUsage1Description=Lädt die Konfiguration von Essentials neu +essentialsCommandUsage2Description=Gibt Informationen über die Essentials Version +essentialsCommandUsage3Description=Gibt Informationen darüber, welche Befehle von Essentials weitergeleitet werden +essentialsCommandUsage4Description=Schaltet in den Essentials "Debug-Modus" um +essentialsCommandUsage5Description=Setzt die Benutzerdaten des angegebenen Spielers zurück +essentialsCommandUsage6Description=Löscht alte Benutzerdaten essentialsHelp1=Die Datei ist beschädigt und Essentials kann sie nicht öffnen. Essentials ist jetzt deaktiviert. Wenn du die Datei selbst nicht reparieren kannst, gehe auf http\://tiny.cc/EssentialsChat essentialsHelp2=Die Datei ist beschädigt und Essentials kann sie nicht öffnen. Essentials ist jetzt deaktiviert. Wenn du die Datei selbst nicht reparieren kannst, versuche /essentialshelp oder gehe auf http\://tiny.cc/EssentialsChat essentialsReload=§6Essentials wurde neu geladen§c {0}. exp=§c{0} §6hat§c {1} §6Exp (Level§c {2}§6) und braucht§c {3} §6Punkte für das nächste Level. expCommandDescription=Gebe, setze, setze zurück, oder schaue die Erfahrung eines Spielers an. expCommandUsage=/<command> [reset|show|set|give] [spielername [anzahl]] +expCommandUsage5Description=Setzt die XP des Zielspielers auf 0 zurück expSet=§c{0} §6hat jetzt§c {1} §6Exp. extCommandDescription=Spieler auslöschen. extCommandUsage=/<command> [spieler] @@ -231,11 +301,13 @@ feed=§6Dein Hunger wurde gestillt. feedCommandDescription=Den Hunger befriedigen. feedCommandUsage=/<command> [spieler] feedCommandUsage1=/<command> [spieler] +feedCommandUsage1Description=Sättigt dich komplett oder einen anderen Spieler, falls angegeben feedOther=§6Du hast den Hunger von §c{0}§6 gestillt. fileRenameError=§cDu konntest §e{0} §cnicht umbenennen\! fireballCommandDescription=Werfe einen Feuerball oder andere verschiedene Projektile. fireballCommandUsage=/<command> [fireball|small|large|arrow|skull|egg|snowball|expbottle|dragon|splashpotion|lingeringpotion|trident] [Geschwindigkeit] fireballCommandUsage1=/<command> +fireballCommandUsage1Description=Wirft einen regulären Feuerball von deinem Standort aus fireworkColor=§4Ungültige Feuerwerksparameter angegeben. Du musst zuerst eine Farbe festlegen. fireworkCommandDescription=Erlaubt dir, einen Feuerwerks-Stapel zu modifizieren. fireworkCommandUsage=/<command> <<meta parameter>|power [anzahl]|clear|fire [anzahl]> @@ -267,6 +339,7 @@ getposCommandUsage=/<command> [spieler] getposCommandUsage1=/<command> [spieler] giveCommandDescription=Gebe einem Spieler einen Gegenstand. giveCommandUsage=/<command> <spieler> <gegenstand|numerisch> [anzahl [gegenstandsmeta...]] +giveCommandUsage1=/<command> <player> <item> [amount] geoipCantFind=§6Spieler§c {0}§6 kommt aus§a einem unbekannten Land§6. geoIpErrorOnJoin=GeoIP-Daten für {0} konnten nicht abgerufen werden. Bitte stelle sicher, dass der Lizenzschlüssel und die Konfiguration korrekt sind. geoIpLicenseMissing=Kein Lizenzschlüssel gefunden\! Bitte besuche https\://essentialsx.net/geoip für Ersteinrichtungsanweisungen. @@ -318,6 +391,8 @@ holdPotion=§4Damit du dem Trank einem Effekt geben kannst, musst du ihn zuerst holeInFloor=§4Wooops... Da ist ein Loch im Boden\! homeCommandDescription=Zu deinem Zuhause teleportieren. homeCommandUsage=/<command> [spieler\:][name] +homeCommandUsage1=/<command> <name> +homeCommandUsage2=/<command> <player>\:<name> homes=§6Wohnorte\:§r {0} homeConfirmation=§6Du hast schon ein Zuhause mit dem Namen §c{0}§6\!\nUm dein existierendes Zuhause zu überschreiben, führe den Befehl erneut aus. homeSet=§6Zuhause auf aktuellen Standort gesetzt. @@ -384,6 +459,7 @@ itemnameClear=§6Du hast den Namen dieses Gegenstands entfernt. itemnameCommandDescription=Bennent einen Gegenstand. itemnameCommandUsage=/<command> [Name] itemnameCommandUsage1=/<command> +itemnameCommandUsage2=/<command> <name> itemnameInvalidItem=§cDu musst ein Item halten, um es umzubenennen. itemnameSuccess=§Du hast dein gehaltenes Item zu "§c{0}§6" umbenannt. itemNotEnough1=§4Du hast nicht genug Gegenstände zu verkaufen. @@ -474,7 +550,6 @@ loomCommandUsage=/<command> mailClear=§6Um deine Nachrichten zu löschen, schreibe§c /mail clear. mailCleared=§6Nachrichten wurden gelöscht\! mailCommandDescription=Verwaltet inter-spieler, intra-server Nachrichten. -mailCommandUsage=/<command> [read|clear|send [to] [nachricht]|sendall [nachricht]] mailDelay=In der letzten Minute wurden zu viele Nachrichten gesendet. Maximum\: {0} mailFormat=§6[§r{0}§6] §r{1} mailMessage={0} @@ -776,6 +851,8 @@ setBalOthers=§aDu hast den Kontostand von §6{0}§a auf §c{1} §a gesetzt. setSpawner=§6Mob-Spawner-Typ geändert zu §c{0}§6. sethomeCommandDescription=Setze dein Zuhause auf deinen momentanen Standort. sethomeCommandUsage=/<command> [[spieler\:]name] +sethomeCommandUsage1=/<command> <name> +sethomeCommandUsage2=/<command> <player>\:<name> setjailCommandDescription=Erstellt ein Gefängnis mit dem angegebenen Namen [gefängnisname]. setjailCommandUsage=/<command> <gefängnisname> setjailCommandUsage1=/<command> <gefängnisname> @@ -1030,6 +1107,7 @@ voiceSilencedReasonTime=§6Deine Stimme wurde für {0} zum Schweigen gebracht\! walking=gehend warpCommandDescription=Zeige alle Warp-Punkte an oder warpe zum angegebenen Ort. warpCommandUsage=/<command> <seitennummer|warp-punkt> [spieler] +warpCommandUsage1=/<command> [page] warpDeleteError=§4Beim Löschen der Warp-Datei ist ein Fehler aufgetreten. warpInfo=§6Informationen für Warp§c {0}§6\: warpinfoCommandDescription=Findet Standortinformationen für einen bestimmten Warp. diff --git a/Essentials/src/main/resources/messages_el.properties b/Essentials/src/main/resources/messages_el.properties index 6b47d00ee21..6b6dde24e68 100644 --- a/Essentials/src/main/resources/messages_el.properties +++ b/Essentials/src/main/resources/messages_el.properties @@ -2,66 +2,163 @@ #version: ${full.version} # Single quotes have to be doubled: '' # by: +action=§5* {0} §5{1} addedToAccount=§a{0} έχει προστεθεί στο λογαριασμό σας. addedToOthersAccount=§a{0} προστέθηκαν στον {1}§a λογαριασμό. Νέο υπόλοιπο\: {2} adventure=περιπέτεια +afkCommandDescription=Σας χαρακτηρίζει ως μακριά-από-το-πληκτρολόγιο. +afkCommandUsage=/<command> [παίχτης/μήνυμα...] +afkCommandUsage1=/<command> [μήνυμα] +afkCommandUsage2=/<command> <player> [μήνυμα] alertBroke=έσπασε\: alertFormat=§3[{0}] §r {1} §6 {2} στο\: {3} alertPlaced=τοποθετημένο\: alertUsed=χρησιμοποιημένο\: +alphaNames=§4Τα ονόματα παικτών μπορούν να περιέχουν μόνο γράμματα, αριθμούς και κάτω παύλες. antiBuildBreak=§4Δεν επιτρέπεται να σπάσεις§c {0} §4bκύβους εδώ. antiBuildCraft=§4Δεν επιτρέπεται να δημιουργήσετε§c {0}§4. antiBuildDrop=§4Δεν επιτρέπεται να ρίξετε§c {0}§4. antiBuildInteract=§4Δεν επιτρέπεται να αλληλεπιδράσετε με§c {0}§4. antiBuildPlace=§4Δεν επιτρέπεται να τοποθετήσετε§c {0} §4εδώ. antiBuildUse=§4Δεν επιτρέπεται να χρησιμοποιήσετε§c {0}§4. +antiochCommandDescription=Mια μικρή έκπληξη για τους διαχειριστές. +antiochCommandUsage=/<command> [μήνυμα] +anvilCommandDescription=Ανοίγει ένα αμόνι. +anvilCommandUsage=/<command> autoAfkKickReason=Έχετε διωχθεί επειδή μείνατε ανενεργοί για περισσότερο από {0} λεπτά. +backAfterDeath=§6Χρησιμοποιήστε την εντολή§c /back§6 για να επιστρέψετε στο σημείο του θανάτου σας. +backCommandUsage=/<command> [παίκτης] +backCommandUsage1=/<command> +backCommandUsage1Description=Σας τηλεμεταφέρει στην προηγούμενη τοποθεσία σας +backCommandUsage2Description=Τηλεμεταφέρει τον καθορισμένο παίκτη στην προηγούμενη θέση του +backupCommandUsage=/<command> backupDisabled=§4Δεν έχει ρυθμιστεί κάποιο εξωτερικό script δημιουργίας αντιγράφων ασφαλείας. backupFinished=§6Η δημιουργία αντίγραφου ασφαλείας ολοκληρώθηκε. backupStarted=§6Η δημιουργία αντίγραφου ασφαλείας ξεκίνησε. backUsageMsg=§6Επιστροφή στην προηγούμενη τοποθεσία. balance=§aΥπόλοιπο\:§c {0} +balanceCommandDescription=Δηλώνει τo τρέχον υπόλοιπο ενός παίκτη. +balanceCommandUsage=/<command> [παίκτης] +balanceCommandUsage1=/<command> +balanceCommandUsage1Description=Δηλώνει το τρέχον υπόλοιπό σας +balanceCommandUsage2Description=Εμφανίζει το υπόλοιπο του καθορισμένου παίκτη balanceOther=§aΥπόλοιπο του {0}§a\:§c {1} balanceTop=§6Κορυφαία υπόλοιπα ({0}) +balanceTopLine={0}. {1}, {2} +balancetopCommandUsage=/<command> [σελίδα] +balancetopCommandUsage1=/<command> [σελίδα] +balancetopCommandUsage1Description=Εμφανίζει την πρώτη (ή καθορισμένη) σελίδα των μεγαλύτερων τιμών υπολοίπου +banCommandDescription=Αποκλείει έναν παίκτη. +banCommandUsage=/<command> <player> [λόγος] +banCommandUsage1=/<command> <player> [λόγος] +banCommandUsage1Description=Αποκλείει τον καθορισμένο παίκτη με έναν προαιρετικό λόγο banExempt=§4Δεν μπορείτε να αποκλείσετε αυτόν τον παίκτη. +banExemptOffline=§4Δεν μπορείς να αποκλείσεις παίκτες εκτός σύνδεσης. banFormat=§4Έχετε αποκλειστεί\:\n§r{0} +banIpJoin=Η διεύθυνση IP σας έχει αποκλειστεί από αυτόν τον διακομιστή. Λόγος\: {0} +banJoin=Έχετε αποκλειστεί από αυτόν τον διακομιστή. Λόγος\: {0} +banipCommandDescription=Αποκλείει μια διεύθυνση IP. +banipCommandUsage=/<command> <address> [λόγος] +banipCommandUsage1=/<command> <address> [λόγος] +banipCommandUsage1Description=Αποκλείει την καθορισμένη διεύθυνση IP με έναν προαιρετικό λόγο bed=§oκρεβάτι§r bedMissing=§4Το κρεβάτι σας είτε δεν έχει τοποθετηθεί, λείπει ή έχει μπλοκαριστεί. bedNull=§mκρεβάτι§r +bedOffline=§4Δεν είναι δυνατή η τηλεμεταφορά στα κρεβάτια των χρηστών εκτός σύνδεσης. bedSet=§6Κρεβάτι σημείου εμφάνισης ορίστηκε\! +beezookaCommandDescription=Ρίξτε μια μέλισσα που εκρήγνυται στον αντίπαλό σας. +beezookaCommandUsage=/<command> bigTreeFailure=§4Αποτυχία παραγωγής μεγάλων δέντρων. Προσπαθήστε ξανά στο γρασίδι ή στο χώμα. bigTreeSuccess=§6Μεγάλο δέντρο εμφανίστηκε. +bigtreeCommandDescription=Δημιουργήστε ένα μεγάλο δέντρο εκεί που κοιτάτε. +bigtreeCommandUsage=/<command> <tree|redwood|jungle|darkoak> +bigtreeCommandUsage1=/<command> <tree|redwood|jungle|darkoak> +bigtreeCommandUsage1Description=Δημιουργεί ένα μεγάλο δέντρο του καθορισμένου τύπου bookAuthorSet=§6Συγγραφέας βιβλίου ορίστηκε ως {0}. +bookCommandUsage=/<command> [title|author [όνομα]] +bookCommandUsage1=/<command> +bookCommandUsage2=/<command> author <author> +bookCommandUsage2Description=Ορίζει τον συγγραφέα ενός υπογεγραμμένου βιβλίου +bookCommandUsage3=/<command> title <title> +bookCommandUsage3Description=Ορίζει τον τίτλο ενός υπογεγραμμένου βιβλίου bookLocked=§6Αυτό το βιβλίο είναι τώρα κλειδωμένο. bookTitleSet=§6Τίτλος του βιβλίου ορίστηκε σε {0}. +breakCommandDescription=Σπάει το μπλοκ που κοιτάτε. +breakCommandUsage=/<command> +broadcast=§6[§4Ανακοίνωση§6]§a {0} +broadcastCommandDescription=Στέλνει ένα μήνυμα σε ολόκληρο τον διακομιστή. +broadcastCommandUsage=/<command> <msg> +broadcastCommandUsage1Description=Στέλνει το δοσμένο μήνυμα σε ολόκληρο τον διακομιστή +broadcastworldCommandUsage=/<command> <world> <msg> +broadcastworldCommandUsage1=/<command> <world> <msg> +broadcastworldCommandUsage1Description=Στέλνει το δοσμένο μήνυμα στον καθορισμένο κόσμο +burnCommandDescription=Βάλτε φωτιά σε έναν παίκτη. +burnCommandUsage=/<command> <player> <seconds> +burnCommandUsage1=/<command> <player> <seconds> +burnCommandUsage1Description=Βάζει φωτιά στον καθορισμένο παίκτη για τον καθορισμένο αριθμό δευτερολέπτων burnMsg=§6Ορίσατε τον {0} §6στην φωτιά για§c {1} δευτερόλεπτα§6. +cannotSellNamedItem=§6Δεν επιτρέπεται να πουλάτε αντικείμενα με όνομα. cannotStackMob=§4Δεν έχετε άδεια στοίβας πολλών τεράτων. canTalkAgain=§6Τώρα μπορείτε να μιλήσετε ξανά. cantFindGeoIpDB=Δεν βρέθηκε η GeoIP βάση δεδομένων\! +cantGamemode=§4Δεν έχετε άδεια να αλλάξετε σε λειτουργία παιχνιδιού {0} cantReadGeoIpDB=Απέτυχε η ανάγνωση της GeoIP βάσης δεδομένων\! cantSpawnItem=§4Δεν επιτρέπεται η εμφάνιση του αντικειμένου§c {0}§4. +cartographytableCommandDescription=Ανοίγει ένα τραπέζι χαρτογραφίας. +cartographytableCommandUsage=/<command> +chatTypeLocal=[L] chatTypeSpy=[Spy] cleaned=Τα Αρχεία Χρήστη Διαγράφτηκαν. cleaning=Διαγραφή των αρχείων χρήστη. +clearinventoryCommandDescription=Καθαρίστε όλα τα αντικείμενα στο inventory σας. +clearinventoryCommandUsage=/<command> [παίκτης|*] [αντικείμενο[\:<data>]|*|**] [amount] +clearinventoryCommandUsage1=/<command> +clearinventoryCommandUsage1Description=Καθαρίστε όλα τα αντικείμενα στο inventory σας +clearinventoryCommandUsage2Description=Καθαρίζει όλα τα αντικείμενα από το inventory του καθορισμένου παίκτη +clearinventoryCommandUsage3=/<command> <player> <item> [amount] +clearinventoryCommandUsage3Description=Καθαρίζει όλα (ή το καθορισμένο ποσό) του δοσμένου αντικειμένου από το inventory του καθορισμένου παίκτη +clearinventoryconfirmtoggleCommandUsage=/<command> +commandArgumentOptional=§7 +commandArgumentRequired=§e +commandCooldown=§cΔεν μπορείς να πληκτρολογήσεις αυτή την εντολή για {0}. +commandDisabled=§cΗ εντολή§6 {0}§c είναι απενεργοποιημένη. commandFailed=Η εντολή {0} απέτυχε\: commandHelpFailedForPlugin=Σφάλμα κατά τη λήψη βοήθειας για την προέκταση\: {0} +commandHelpLine2=§6Περιγραφή\: §f{0} +commandHelpLine3=§6Χρήση(-εις), +commandHelpLineUsage={0} §6- {1} commandNotLoaded=§4Η εντολή {0} δεν φόρτωσε σωστά. +compassCommandUsage=/<command> +condenseCommandUsage=/<command> [item] +condenseCommandUsage1=/<command> configFileMoveError=Αποτυχία μετακίνησης του config.yml στη θέση του αντιγράφου ασφαλείας. +confirmPayment=§7Για να §lΕΠΙΒΕΒΑΙΩΣΕΤΕ§7 την πληρωμή των §6{0}§7, παρακαλώ επαναλάβετε την εντολή\: §6{1} connectedPlayers=§6Συνδεδεμένοι παίκτες§r connectionFailed=Αποτυχία ανοίγματος σύνδεσης. +consoleName=Κονσόλα cooldownWithMessage=§4Χρονοκαθυστέρηση\: {0} +coordsKeyword={0}, {1}, {2} couldNotFindTemplate=§4Δεν ήταν δυνατή η εύρεση προτύπου {0} +createKitFailed=§4Παρουσιάστηκε σφάλμα κατά τη δημιουργία του kit {0}. +createKitSeparator=§m----------------------- creatingConfigFromTemplate=Δημιουργία διαμόρφωσης από πρότυπο\: {0} creatingEmptyConfig=Δημιουργία κενών ρυθμίσεων\: {0} creative=δημιουργία +currency={0}{1} currentWorld=§6Τρέχον Κόσμος\:§c {0} day=ημέρα days=ημέρες defaultBanReason=Το Σφυρί της Απόκλεισεις μίλησε\! +deletedHomes=Όλες οι οικίες διαγράφηκαν. +deletedHomesWorld=Διαγράφηκαν όλες οι οικίες στον κόσμο {0}. deleteFileError=Δεν είναι δυνατή η διαγραφή του αρχείου\: {0} deleteHome=§6Το σπίτι§c {0} §6έχει αφαιρεθεί. deleteJail=§6Η φυλακή§c {0} §6έχει αφαιρεθεί. deleteWarp=§6Η περιοχή§c {0} §6έχει αφαιρεθεί. +deletingHomes=Διαγράφονται όλες των οικιών... +deletingHomesWorld=Διαγραφή όλων των οικιών σε {0}... +delhomeCommandDescription=Αφαιρεί μία οικία. +delhomeCommandUsage=/<command> [παίκτης\:]<name> deniedAccessCommand=§c{0} §4απαγορεύτηκε η πρόσβαση στην εντολή. denyBookEdit=§4Δεν μπορείτε να ξεκλειδώσετε αυτό το βιβλίο. denyChangeAuthor=§4Δεν μπορείτε να αλλάξετε τον συγγραφέα αυτού του βιβλίου. @@ -71,6 +168,7 @@ depthAboveSea=§6Βρίσκεσται§c {0} §6κύβο(ους) πάνω από depthBelowSea=§6Βρίσκεσται§c {0} §6κύβο(ους) κάτω από το επίπεδο της θάλασσας. destinationNotSet=Προορισμός δεν ορίστηκε\! disabled=απενεργοποιημένο +disposalCommandUsage=/<command> distance=§6Απόσταση\: {0} dontMoveMessage=§6Η τηλεμεταφορά θα ξεκινήσει σε§c {0}§6. Μην κουνηθείτε. durability=§6Αυτό το εργαλείο έχει §c{0}§6 χρήσεις ακόμα. @@ -79,21 +177,39 @@ enchantmentNotFound=§4Δεν υπάρχει αυτή η μαγεία\! enchantmentPerm=§4Δεν έχετε την άδεια για§c {0}§4. enchantmentRemoved=§6Η μαγεία§c {0} §6έχει αφαιρεθεί από το αντικείμενο που κρατάτε στα χέρια σας. enchantments=§6Μαγείες\:§r {0} +enderchestCommandUsage=/<command> [παίκτης] +enderchestCommandUsage1=/<command> errorCallingCommand=Σφάλμα κατά την κλήση της εντολής /{0} errorWithMessage=§cΣφάλμα\:§4 {0} +essentialsCommandUsage=/<command> essentialsHelp1=Το αρχείο είναι χαλασμένο και το Essentials δεν μπορεί να το ανοίξει. Το Essentials είναι πλέον απενεργοποιημένο. Εαν δεν μπορείς να το φτιάξεις μόνος σου, πήγαινε στο http\://tiny.cc/EssentialsChat essentialsHelp2=Το αρχείο είναι σπασμένο και το Essentials δεν μπορεί να το ανοίξει. Το Essentials είναι τώρα απενεργοποιημένο. Εάν δεν μπορείτε να διορθώσετε το αρχείο σας, πληκτρολογήστε /essentialshelp στο παιχνίδι ή πηγαίνετε στο http\://tiny.cc/EssentialsChat essentialsReload=§6Το Essentials ανανεωθηκε§c {0}. +extCommandUsage=/<command> [παίκτης] +extCommandUsage1=/<command> [παίκτης] failedToCloseConfig=Απέτυχε να κλείσει το config {0}. failedToCreateConfig=Απέτυχε η δημιουργία του config {0}. failedToWriteConfig=Απέτυχε να γράψει το config {0}. +feedCommandUsage=/<command> [παίκτης] +feedCommandUsage1=/<command> [παίκτης] +fireballCommandUsage1=/<command> +flyCommandUsage1=/<command> [παίκτης] flying=πετάει +gcCommandUsage=/<command> gcfree=§6Ελεύθερη μνήμη\:§c {0} MB. +getposCommandUsage=/<command> [παίκτης] +getposCommandUsage1=/<command> [παίκτης] +giveCommandUsage1=/<command> <player> <item> [amount] +godCommandUsage1=/<command> [παίκτης] godDisabledFor=§cαπενεργοποιημένο§6 for§c {0} godEnabledFor=§aενεργοποιημένο§6 for§c {0} +grindstoneCommandUsage=/<command> +hatCommandUsage1=/<command> hatPlaced=§6Απόλαυσε το καινούργιο σου καπέλο\! hatRemoved=§6Το καπέλο σου αφαιρέθηκε. heal=§6Έχεις θεραπευθεί. +healCommandUsage=/<command> [παίκτης] +healCommandUsage1=/<command> [παίκτης] healOther=§6θεραπεύτηκε§c {0}§6. helpFrom=Εντολή απο {0}\: helpMatching=§6Εντολές που ταιριάζουν "§c{0}§6"\: @@ -106,6 +222,8 @@ homes=§6Σπίτια\:§r {0} homeSet=Το σπίτι ορίστεικε στην τρέχουσα θέση. hour=ώρα hours=ώρες +iceCommandUsage=/<command> [παίκτης] +iceCommandUsage1=/<command> ignoredList=Αγνοείται\: {0} ignorePlayer=Εσυ αγνοείς player§c {0} §6απο τώρα στο. illegalDate=Μορφή παράνομης ημερομηνίας. @@ -123,11 +241,12 @@ invalidNumber=Μη έγκυρος αριθμός. invalidPotion=§4Άκυρο φίλτρο. invalidSignLine=§4Η σειρά§c {0} §4στην πινακίδα δεν είναι έγκυρη. invalidWarpName=Μη έγκυρο όνομα περιοχής\! -invalidWorld=§4Μη έγκυρος κόσμος\! +invalidWorld=§4Μη έγκυρος κόσμος. is=είναι -itemCannotBeSold=Το στοιχείο §4αυτο δεν μπορεί να πωληθεί στον server. +itemCannotBeSold=§4Aυτό το αντικείμενο δεν μπορεί να πωληθεί στον διακομιστή. itemMustBeStacked=§4Το αντικειμενο πρέπει να είναι σε στοίβες για να μπορεί να γίνει ανταλλαγή. Ποσότητα 2s θα ήταν δύο στοίβες, κλπ. itemNames=Σύντομη ονόματα\: §r {0} §6Αντικειμενο +itemnameCommandUsage1=/<command> itemNotEnough1=§4Δεν έχεις αρκετά από αυτό το στοιχείο για να το πουλήσεις. itemSellAir=Καλά προσπάθησες πραγματικά να πωλήσεις αέρα; Βάλτε ένα στοιχείο στο χέρι σας. itemSold=§aΠουλήθηκε για §c{0} §α ({1} {2} στο {3} κάθε). @@ -136,40 +255,84 @@ jailReleased=§6Παίχτης §c{0}§6 αποφυλακίστηκε. jailReleasedPlayerNotify=§6Έχεις απελευθερωθεί\! jailSentenceExtended=§6Οχρόνος φυλάκισης επεκτάθηκε σε §c{0}§6. jailSet=§6Η φυλακή§c {0} §6έχει καθοριστεί. +jailsCommandUsage=/<command> +jumpCommandUsage=/<command> +kickCommandUsage=/<command> <player> [λόγος] +kickCommandUsage1=/<command> <player> [λόγος] kickDefault=Διώχθηκε από το διακομιστή. kickedAll=§4Διώχθηκαν όλοι οι παίκτες απ τον διακοσμητή. kickExempt=§4Δεν μπορείς να kick αυτό το άτομο. kill=§6Σκοτώθηκε§c {0}§6. +kitCommandUsage1=/<command> kitInvFull=§4Το inventory σου είναι γεμάτο, το kit έπεσε στο πάτωμα. kitNotFound=§4Δεν υπάρχει αυτό το kit. kitOnce=§4Δεν μπορείς να ξανά πάρεις αυτό το kit ξανά. kitReceive=§6Πήρες το kit§c {0}§6. +kittycannonCommandUsage=/<command> kitTimed=§4Δεν μπορείς να ξανά χρησιμοποιήσεις αυτό το kit μέχρι§c {0}§4. +lightningCommandUsage1=/<command> [παίκτης] +loomCommandUsage=/<command> minute=λεπτό minutes=λεπτά month=μήνας months=μήνες +msgtoggleCommandUsage1=/<command> [παίκτης] +nearCommandUsage1=/<command> nickChanged=§6Το ψευδώνυμο άλλαξε. nickInUse=§4Αυτό όνομα είναι ήδη σε χρήση. noKitPermission=§4Χρειάζεσαι την §c{0}§4 άδεια για να χρησιμοποιήσεις αυτό το kit. noKits=§6Δεν υπάρχουν διαθέσιμα kits. noNewMail=§6Δεν έχεις νέα αλληλογραφία. now=τώρα +nukeCommandUsage=/<command> [παίκτης] +payconfirmtoggleCommandUsage=/<command> +paytoggleCommandUsage=/<command> [παίκτης] +paytoggleCommandUsage1=/<command> [παίκτης] +pingCommandUsage=/<command> +powertooltoggleCommandUsage=/<command> recipeNothing=τίποτα +repairCommandUsage1=/<command> +restCommandUsage=/<command> [παίκτης] +restCommandUsage1=/<command> [παίκτης] second=δευτερόλεπτο seconds=δευτερόλεπτα serverFull=Ο διακομιστής είναι πλήρης\! +skullCommandUsage1=/<command> +smithingtableCommandUsage=/<command> +socialspyCommandUsage1=/<command> [παίκτης] +stonecutterCommandUsage=/<command> +suicideCommandUsage=/<command> survival=επιβίωση teleportationCommencing=§6Η Τηλεμεταφορά ξεκινά... teleporting=§6Τηλεμεταφορά... teleportTop=§6Τηλεμεταφορά στην κορυφή. +timeCommandUsage1=/<command> +toggleshoutCommandUsage1=/<command> [παίκτης] +topCommandUsage=/<command> +tpacancelCommandUsage=/<command> [παίκτης] +tpacancelCommandUsage1=/<command> +tpacceptCommandUsage1=/<command> +tpallCommandUsage=/<command> [παίκτης] +tpallCommandUsage1=/<command> [παίκτης] +tpautoCommandUsage=/<command> [παίκτης] +tpautoCommandUsage1=/<command> [παίκτης] +tpdenyCommandUsage=/<command> +tpdenyCommandUsage1=/<command> +tprCommandUsage=/<command> +tprCommandUsage1=/<command> +tptoggleCommandUsage1=/<command> [παίκτης] +vanishCommandUsage1=/<command> [παίκτης] walking=περπάτημα +warpCommandUsage1=/<command> [σελίδα] warps=§6Περιοχές\:§r {0} warpSet=§6Περιοχή§c {0} §6ορίστηκε. whoisBanned=§6 - Αποκλεισμένος\:§r {0} whoisJail=§6 - Φυλακή\:§r {0} whoisLocation=§6 - Τοποθεσία\:§r ({0}, {1}, {2}, {3}) whoisMoney=§6 - Χρήματα\:§r {0} +workbenchCommandUsage=/<command> +worldCommandUsage1=/<command> year=χρόνος years=χρόνια youAreHealed=§6Έχεις θεραπευθεί. +xmppNotConfigured=Το XMPP δεν έχει ρυθμιστεί σωστά. Αν δεν ξέρετε τι είναι το XMPP, μπορεί να θέλετε να αφαιρέσετε το πρόσθετο EssentialsXXMPP από το διακομιστή σας. diff --git a/Essentials/src/main/resources/messages_en.properties b/Essentials/src/main/resources/messages_en.properties index ed7e9ea60d0..364e2ff70da 100644 --- a/Essentials/src/main/resources/messages_en.properties +++ b/Essentials/src/main/resources/messages_en.properties @@ -9,6 +9,9 @@ adventure=adventure afkCommandDescription=Marks you as away-from-keyboard. afkCommandUsage=/<command> [player/message...] afkCommandUsage1=/<command> [message] +afkCommandUsage1Description=Toggles your afk status with an optional reason +afkCommandUsage2=/<command> <player> [message] +afkCommandUsage2Description=Toggles the afk status of the specified player with an optional reason alertBroke=broke\: alertFormat=§3[{0}] §r {1} §6 {2} at\: {3} alertPlaced=placed\: @@ -33,7 +36,9 @@ backAfterDeath=§6Use the§c /back§6 command to return to your death point. backCommandDescription=Teleports you to your location prior to tp/spawn/warp. backCommandUsage=/<command> [player] backCommandUsage1=/<command> +backCommandUsage1Description=Teleports you to your prior location backCommandUsage2=/<command> <player> +backCommandUsage2Description=Teleports the specified player to their prior location backOther=§6Returned§c {0}§6 to previous location. backupCommandDescription=Runs the backup if configured. backupCommandUsage=/<command> @@ -46,20 +51,29 @@ balance=§aBalance\:§c {0} balanceCommandDescription=States the current balance of a player. balanceCommandUsage=/<command> [player] balanceCommandUsage1=/<command> +balanceCommandUsage1Description=States your current balance balanceCommandUsage2=/<command> <player> +balanceCommandUsage2Description=Displays the balance of the specified player balanceOther=§aBalance of {0}§a\:§c {1} balanceTop=§6Top balances ({0}) balanceTopLine={0}. {1}, {2} balancetopCommandDescription=Gets the top balance values. +balancetopCommandUsage=/<command> [page] +balancetopCommandUsage1=/<command> [page] +balancetopCommandUsage1Description=Displays the first (or specified) page of the top balance values banCommandDescription=Bans a player. banCommandUsage=/<command> <player> [reason] banCommandUsage1=/<command> <player> [reason] +banCommandUsage1Description=Bans the specified player with an optional reason banExempt=§4You cannot ban that player. banExemptOffline=§4You may not ban offline players. banFormat=§cYou have been banned\:\n§r{0} banIpJoin=Your IP address is banned from this server. Reason\: {0} banJoin=You are banned from this server. Reason\: {0} banipCommandDescription=Bans an IP address. +banipCommandUsage=/<command> <address> [reason] +banipCommandUsage1=/<command> <address> [reason] +banipCommandUsage1Description=Bans the specified IP address with an optional reason bed=§obed§r bedMissing=§4Your bed is either unset, missing or blocked. bedNull=§mbed§r @@ -72,12 +86,18 @@ bigTreeSuccess=§6Big tree spawned. bigtreeCommandDescription=Spawn a big tree where you are looking. bigtreeCommandUsage=/<command> <tree|redwood|jungle|darkoak> bigtreeCommandUsage1=/<command> <tree|redwood|jungle|darkoak> +bigtreeCommandUsage1Description=Spawns a big tree of the specified type blockList=§6EssentialsX is relaying the following commands to other plugins\: blockListEmpty=§6EssentialsX is not relaying any commands to other plugins. bookAuthorSet=§6Author of the book set to {0}. bookCommandDescription=Allows reopening and editing of sealed books. bookCommandUsage=/<command> [title|author [name]] bookCommandUsage1=/<command> +bookCommandUsage1Description=Locks/Unlocks a book-and-quill/signed book +bookCommandUsage2=/<command> author <author> +bookCommandUsage2Description=Sets the author of a signed book +bookCommandUsage3=/<command> title <title> +bookCommandUsage3Description=Sets the title of a signed book bookLocked=§6This book is now locked. bookTitleSet=§6Title of the book set to {0}. breakCommandDescription=Breaks the block you are looking at. @@ -86,12 +106,15 @@ broadcast=§6[§4Broadcast§6]§a {0} broadcastCommandDescription=Broadcasts a message to the entire server. broadcastCommandUsage=/<command> <msg> broadcastCommandUsage1=/<command> <message> +broadcastCommandUsage1Description=Broadcasts the given message to the entire server broadcastworldCommandDescription=Broadcasts a message to a world. broadcastworldCommandUsage=/<command> <world> <msg> broadcastworldCommandUsage1=/<command> <world> <msg> +broadcastworldCommandUsage1Description=Broadcasts the given message to the specified world burnCommandDescription=Set a player on fire. burnCommandUsage=/<command> <player> <seconds> burnCommandUsage1=/<command> <player> <seconds> +burnCommandUsage1Description=Sets the specified player on fire for the specified amount of seconds burnMsg=§6You set§c {0} §6on fire for§c {1} seconds§6. cannotSellNamedItem=§6You are not allowed to sell named items. cannotSellTheseNamedItems=§6You are not allowed to sell these named items\: §4{0} @@ -112,20 +135,34 @@ clearInventoryConfirmToggleOn=§6You will now be prompted to confirm inventory c clearinventoryCommandDescription=Clear all items in your inventory. clearinventoryCommandUsage=/<command> [player|*] [item[\:<data>]|*|**] [amount] clearinventoryCommandUsage1=/<command> +clearinventoryCommandUsage1Description=Clears all items in your inventory clearinventoryCommandUsage2=/<command> <player> +clearinventoryCommandUsage2Description=Clears all items from the specified player''s inventory +clearinventoryCommandUsage3=/<command> <player> <item> [amount] +clearinventoryCommandUsage3Description=Clears all (or the specified amount) of the given item from the specified player''s inventory clearinventoryconfirmtoggleCommandDescription=Toggles whether you are prompted to confirm inventory clears. clearinventoryconfirmtoggleCommandUsage=/<command> +commandArgumentOptional=§7 +commandArgumentRequired=§e commandCooldown=§cYou cannot type that command for {0}. commandDisabled=§cThe command§6 {0}§c is disabled. commandFailed=Command {0} failed\: commandHelpFailedForPlugin=Error getting help for plugin\: {0} +commandHelpLine1=§6Command Help\: §f/{0} +commandHelpLine2=§6Description\: §f{0} +commandHelpLine3=§6Usage(s); +commandHelpLine4=§6Aliases(s)\: §f{0} +commandHelpLineUsage={0} §6- {1} commandNotLoaded=§4Command {0} is improperly loaded. compassBearing=§6Bearing\: {0} ({1} degrees). compassCommandDescription=Describes your current bearing. compassCommandUsage=/<command> condenseCommandDescription=Condenses items into a more compact blocks. +condenseCommandUsage=/<command> [item] condenseCommandUsage1=/<command> +condenseCommandUsage1Description=Condenses all items in your inventory condenseCommandUsage2=/<command> <item> +condenseCommandUsage2Description=Condenses the specified item in your inventory configFileMoveError=Failed to move config.yml to backup location. configFileRenameError=Failed to rename temp file to config.yml. confirmClear=§7To §lCONFIRM§7 inventory clear, please repeat command\: §6{0} @@ -140,9 +177,11 @@ createdKit=§6Created kit §c{0} §6with §c{1} §6entries and delay §c{2} createkitCommandDescription=Create a kit in game\! createkitCommandUsage=/<command> <kitname> <delay> createkitCommandUsage1=/<command> <kitname> <delay> +createkitCommandUsage1Description=Creates a kit with the given name and delay createKitFailed=§4Error occurred whilst creating kit {0}. createKitSeparator=§m----------------------- createKitSuccess=§6Created Kit\: §f{0}\n§6Delay\: §f{1}\n§6Link\: §f{2}\n§6Copy contents in the link above into your kits.yml. +createKitUnsupported=§4NBT item serialization has been enabled, but this server is not running Paper 1.15.2+. Falling back to standard item serialization. creatingConfigFromTemplate=Creating config from template\: {0} creatingEmptyConfig=Creating empty config\: {0} creative=creative @@ -153,22 +192,33 @@ customtextCommandUsage=/<alias> - Define in bukkit.yml day=day days=days defaultBanReason=The Ban Hammer has spoken\! +deletedHomes=All homes deleted. +deletedHomesWorld=All homes in {0} deleted. deleteFileError=Could not delete file\: {0} deleteHome=§6Home§c {0} §6has been removed. deleteJail=§6Jail§c {0} §6has been removed. deleteKit=§6Kit§c {0} §6has been removed. deleteWarp=§6Warp§c {0} §6has been removed. +deletingHomes=Deleting all homes... +deletingHomesWorld=Deleting all homes in {0}... delhomeCommandDescription=Removes a home. delhomeCommandUsage=/<command> [player\:]<name> +delhomeCommandUsage1=/<command> <name> +delhomeCommandUsage1Description=Deletes your home with the given name +delhomeCommandUsage2=/<command> <player>\:<name> +delhomeCommandUsage2Description=Deletes the specified player''s home with the given name deljailCommandDescription=Removes a jail. deljailCommandUsage=/<command> <jailname> deljailCommandUsage1=/<command> <jailname> +deljailCommandUsage1Description=Deletes the jail with the given name delkitCommandDescription=Deletes the specified kit. delkitCommandUsage=/<command> <kit> delkitCommandUsage1=/<command> <kit> +delkitCommandUsage1Description=Deletes the kit with the given name delwarpCommandDescription=Deletes the specified warp. delwarpCommandUsage=/<command> <warp> delwarpCommandUsage1=/<command> <warp> +delwarpCommandUsage1Description=Deletes the warp with the given name deniedAccessCommand=§c{0} §4was denied access to command. denyBookEdit=§4You cannot unlock this book. denyChangeAuthor=§4You cannot change the author of this book. @@ -182,6 +232,28 @@ destinationNotSet=Destination not set\! disabled=disabled disabledToSpawnMob=§4Spawning this mob was disabled in the config file. disableUnlimited=§6Disabled unlimited placing of§c {0} §6for§c {1}§6. +discordCommandExecuteDescription=Executes a console command on the Minecraft server. +discordCommandExecuteArgumentCommand=The command to be executed +discordCommandExecuteReply=Executing command\: "/{0}" +discordCommandListDescription=Gets a list of online players. +discordCommandListArgumentGroup=A specific group to limit your search by +discordCommandMessageDescription=Messages a player on the Minecraft server. +discordCommandMessageArgumentUsername=The player to send the message to +discordCommandMessageArgumentMessage=The message to send to the player +discordErrorCommand=You added your bot to your server incorrectly. Please follow the tutorial in the config and add your bot using https\://essentialsx.net/discord.html\! +discordErrorCommandDisabled=That command is disabled\! +discordErrorLogin=An error occurred while logging into Discord, which has caused the plugin to disable itself\: \n{0} +discordErrorLoggerInvalidChannel=Discord console logging has been disabled due to an invalid channel definition\! If you intend to disable it, set the channel ID to "none"; otherwise check that your channel ID is correct. +discordErrorLoggerNoPerms=Discord console logger has been disabled due to insufficient permissions\! Please make sure your bot has the "Manage Webhooks" permissions on the server. After fixing that, run "/ess reload". +discordErrorNoGuild=Invalid or missing server ID\! Please follow the tutorial in the config in order to setup the plugin. +discordErrorNoGuildSize=Your bot is not in any servers\! Please follow the tutorial in the config in order to setup the plugin. +discordErrorNoPerms=Your bot cannot see or talk in any channel\! Please make sure your bot has read and write permissions in all channels you wish to use. +discordErrorNoToken=No token provided\! Please follow the tutorial in the config in order to setup the plugin. +discordErrorWebhook=An error occurred while sending messages to your console channel\! This was likely caused by accidentally deleting your console webhook. This can usually by fixed by ensuring your bot has the "Manage Webhooks" permission and running "/ess reload". +discordLoggingIn=Attempting to login to Discord... +discordLoggingInDone=Successfully logged in as {0} +discordNoSendPermission=Cannot send message in channel\: \#{0} Please ensure the bot has "Send Messages" permission in that channel\! +discordReloadInvalid=Tried to reload EssentialsX Discord config while the plugin is in an invalid state\! If you''ve modified your config, restart your server. disposal=Disposal disposalCommandDescription=Opens a portable disposal menu. disposalCommandUsage=/<command> @@ -193,10 +265,20 @@ durability=§6This tool has §c{0}§6 uses left. east=E ecoCommandDescription=Manages the server economy. ecoCommandUsage=/<command> <give|take|set|reset> <player> <amount> +ecoCommandUsage1=/<command> give <player> <amount> +ecoCommandUsage1Description=Gives the specified player the specified amount of money +ecoCommandUsage2=/<command> take <player> <amount> +ecoCommandUsage2Description=Takes the specified amount of money from the specified player +ecoCommandUsage3=/<command> set <player> <amount> +ecoCommandUsage3Description=Sets the specified player''s balance to the specified amount of money +ecoCommandUsage4=/<command> reset <player> <amount> +ecoCommandUsage4Description=Resets the specified player''s balance to the server''s starting balance editBookContents=§eYou may now edit the contents of this book. enabled=enabled enchantCommandDescription=Enchants the item the user is holding. enchantCommandUsage=/<command> <enchantmentname> [level] +enchantCommandUsage1=/<command> <enchantment name> [level] +enchantCommandUsage1Description=Enchants your held item with the given enchantment to an optional level enableUnlimited=§6Giving unlimited amount of§c {0} §6to §c{1}§6. enchantmentApplied=§6The enchantment§c {0} §6has been applied to your item in hand. enchantmentNotFound=§4Enchantment not found\! @@ -206,21 +288,46 @@ enchantments=§6Enchantments\:§r {0} enderchestCommandDescription=Lets you see inside an enderchest. enderchestCommandUsage=/<command> [player] enderchestCommandUsage1=/<command> +enderchestCommandUsage1Description=Opens your ender chest enderchestCommandUsage2=/<command> <player> +enderchestCommandUsage2Description=Opens the ender chest of the target player errorCallingCommand=Error calling the command /{0} errorWithMessage=§cError\:§4 {0} essentialsCommandDescription=Reloads essentials. essentialsCommandUsage=/<command> +essentialsCommandUsage1=/<command> reload +essentialsCommandUsage1Description=Reloads Essentials'' config +essentialsCommandUsage2=/<command> version +essentialsCommandUsage2Description=Gives information about the Essentials version +essentialsCommandUsage3=/<command> commands +essentialsCommandUsage3Description=Gives information about what commands Essentials is forwarding +essentialsCommandUsage4=/<command> debug +essentialsCommandUsage4Description=Toggles Essentials'' "debug mode" +essentialsCommandUsage5=/<command> reset <player> +essentialsCommandUsage5Description=Resets the given player''s userdata +essentialsCommandUsage6=/<command> cleanup +essentialsCommandUsage6Description=Cleans up old userdata +essentialsCommandUsage7=/<command> homes +essentialsCommandUsage7Description=Manages user homes essentialsHelp1=The file is broken and Essentials can''t open it. Essentials is now disabled. If you can''t fix the file yourself, go to http\://tiny.cc/EssentialsChat essentialsHelp2=The file is broken and Essentials can''t open it. Essentials is now disabled. If you can''t fix the file yourself, either type /essentialshelp in game or go to http\://tiny.cc/EssentialsChat essentialsReload=§6Essentials reloaded§c {0}. exp=§c{0} §6has§c {1} §6exp (level§c {2}§6) and needs§c {3} §6more exp to level up. expCommandDescription=Give, set, reset, or look at a players experience. -expCommandUsage=/<command> [reset|show|set|give] [playername [amount]]\n +expCommandUsage=/<command> [reset|show|set|give] [playername [amount]] +expCommandUsage1=/<command> give <player> <amount> +expCommandUsage1Description=Gives the target player the specified amount of xp +expCommandUsage2=/<command> set <playername> <amount> +expCommandUsage2Description=Sets the target player''s xp the specified amount +expCommandUsage3=/<command> show <playername> +expCommandUsage4Description=Displays the amount of xp the target player has +expCommandUsage5=/<command> reset <playername> +expCommandUsage5Description=Resets the target player''s xp to 0 expSet=§c{0} §6now has§c {1} §6exp. extCommandDescription=Extinguish players. extCommandUsage=/<command> [player] extCommandUsage1=/<command> [player] +extCommandUsage1Description=Extinguish yourself or another player if specified extinguish=§6You extinguished yourself. extinguishOthers=§6You extinguished {0}§6. failedToCloseConfig=Failed to close config {0}. @@ -231,19 +338,34 @@ feed=§6Your appetite was sated. feedCommandDescription=Satisfy the hunger. feedCommandUsage=/<command> [player] feedCommandUsage1=/<command> [player] +feedCommandUsage1Description=Fully feeds yourself or another player if specified feedOther=§6You satiated the appetite of §c{0}§6. fileRenameError=Renaming file {0} failed\! fireballCommandDescription=Throw a fireball or other assorted projectiles. fireballCommandUsage=/<command> [fireball|small|large|arrow|skull|egg|snowball|expbottle|dragon|splashpotion|lingeringpotion|trident] [speed] fireballCommandUsage1=/<command> +fireballCommandUsage1Description=Throws a regular fireball from your location +fireballCommandUsage2=/<command> <fireball|small|large|arrow|skull|egg|snowball|expbottle|dragon|splashpotion|lingeringpotion|trident> [speed] +fireballCommandUsage2Description=Throws the specified projectile from your location, with an optional speed fireworkColor=§4Invalid firework charge parameters inserted, must set a color first. fireworkCommandDescription=Allows you to modify a stack of fireworks. fireworkCommandUsage=/<command> <<meta param>|power [amount]|clear|fire [amount]> +fireworkCommandUsage1=/<command> clear +fireworkCommandUsage1Description=Clears all effects from your held firework +fireworkCommandUsage2=/<command> power <amount> +fireworkCommandUsage2Description=Sets the power of the held firework +fireworkCommandUsage3=/<command> fire [amount] +fireworkCommandUsage3Description=Launches either one, or the amount specified, copies of the held firework +fireworkCommandUsage4=/<command> <meta> +fireworkCommandUsage4Description=Adds the given effect to the held firework fireworkEffectsCleared=§6Removed all effects from held stack. fireworkSyntax=§6Firework parameters\:§c color\:<color> [fade\:<color>] [shape\:<shape>] [effect\:<effect>]\n§6To use multiple colors/effects, separate values with commas\: §cred,blue,pink\n§6Shapes\:§c star, ball, large, creeper, burst §6Effects\:§c trail, twinkle. +fixedHomes=Invalid homes deleted. +fixingHomes=Deleting invalid homes... flyCommandDescription=Take off, and soar\! flyCommandUsage=/<command> [player] [on|off] flyCommandUsage1=/<command> [player] +flyCommandUsage1Description=Toggles fly for yourself or another player if specified flying=flying flyMode=§6Set fly mode§c {0} §6for {1}§6. foreverAlone=§4You have nobody to whom you can reply. @@ -255,6 +377,7 @@ gameModeInvalid=§4You need to specify a valid player/mode. gamemodeCommandDescription=Change player gamemode. gamemodeCommandUsage=/<command> <survival|creative|adventure|spectator> [player] gamemodeCommandUsage1=/<command> <survival|creative|adventure|spectator> [player] +gamemodeCommandUsage1Description=Sets the gamemode of either you or another player if specified gcCommandDescription=Reports memory, uptime and tick info. gcCommandUsage=/<command> gcfree=§6Free memory\:§c {0} MB. @@ -265,17 +388,23 @@ geoipJoinFormat=§6Player §c{0} §6comes from §c{1}§6. getposCommandDescription=Get your current coordinates or those of a player. getposCommandUsage=/<command> [player] getposCommandUsage1=/<command> [player] +getposCommandUsage1Description=Gets the coordinates of either you or another player if specified giveCommandDescription=Give a player an item. giveCommandUsage=/<command> <player> <item|numeric> [amount [itemmeta...]] +giveCommandUsage1=/<command> <player> <item> [amount] +giveCommandUsage1Description=Gives the target player 64 (or the specified amount) of the specified item +giveCommandUsage2=/<command> <player> <item> <amount> <meta> +giveCommandUsage2Description=Gives the target player the specified amount of the specified item with the given metadata geoipCantFind=§6Player §c{0} §6comes from §aan unknown country§6. -geoIpErrorOnJoin=Unable to fetch GeoIP data for {0}. Please ensure that your license key and configuration are correct.\n -geoIpLicenseMissing=No license key found\! Please visit https\://essentialsx.net/geoip for first time setup instructions.\n +geoIpErrorOnJoin=Unable to fetch GeoIP data for {0}. Please ensure that your license key and configuration are correct. +geoIpLicenseMissing=No license key found\! Please visit https\://essentialsx.net/geoip for first time setup instructions. geoIpUrlEmpty=GeoIP download url is empty. geoIpUrlInvalid=GeoIP download url is invalid. givenSkull=§6You have been given the skull of §c{0}§6. godCommandDescription=Enables your godly powers. godCommandUsage=/<command> [player] [on|off] godCommandUsage1=/<command> [player] +godCommandUsage1Description=Toggles god mode for you or another player if specified giveSpawn=§6Giving§c {0} §6of§c {1} §6to§c {2}§6. giveSpawnFailure=§4Not enough space, §c{0} {1} §4was lost. godDisabledFor=§cdisabled§6 for§c {0} @@ -289,6 +418,9 @@ hatArmor=§4You cannot use this item as a hat\! hatCommandDescription=Get some cool new headgear. hatCommandUsage=/<command> [remove] hatCommandUsage1=/<command> +hatCommandUsage1Description=Sets your hat to your currently held item +hatCommandUsage2=/<command> remove +hatCommandUsage2Description=Removes your current hat hatCurse=§4You cannot remove a hat with the curse of binding\! hatEmpty=§4You are not wearing a hat. hatFail=§4You must have something to wear in your hand. @@ -299,6 +431,7 @@ heal=§6You have been healed. healCommandDescription=Heals you or the given player. healCommandUsage=/<command> [player] healCommandUsage1=/<command> [player] +healCommandUsage1Description=Heals you or another player if specified healDead=§4You cannot heal someone who is dead\! healOther=§6Healed§c {0}§6. helpCommandDescription=Views a list of available commands. @@ -312,23 +445,36 @@ helpPlugin=§4{0}§r\: Plugin Help\: /help {1} helpopCommandDescription=Message online admins. helpopCommandUsage=/<command> <message> helpopCommandUsage1=/<command> <message> +helpopCommandUsage1Description=Sends the given message to all online admins holdBook=§4You are not holding a writable book. holdFirework=§4You must be holding a firework to add effects. holdPotion=§4You must be holding a potion to apply effects to it. holeInFloor=§4Hole in floor\! homeCommandDescription=Teleport to your home. homeCommandUsage=/<command> [player\:][name] +homeCommandUsage1=/<command> <name> +homeCommandUsage1Description=Teleports you to your home with the given name +homeCommandUsage2=/<command> <player>\:<name> +homeCommandUsage2Description=Teleports you to the specified player''s home with the given name homes=§6Homes\:§r {0} homeConfirmation=§6You already have a home named §c{0}§6\!\nTo overwrite your existing home, type the command again. homeSet=§6Home set to current location. hour=hour hours=hours +ice=§6You feel much colder... +iceCommandDescription=Cools a player off. iceCommandUsage=/<command> [player] iceCommandUsage1=/<command> +iceCommandUsage1Description=Cools you off iceCommandUsage2=/<command> <player> +iceCommandUsage2Description=Cools the given player off +iceCommandUsage3=/<command> * +iceCommandUsage3Description=Cools all online players off +iceOther=§6Chilling§c {0}§6. ignoreCommandDescription=Ignore or unignore other players. ignoreCommandUsage=/<command> <player> ignoreCommandUsage1=/<command> <player> +ignoreCommandUsage1Description=Ignores or unignores the given player ignoredList=§6Ignored\:§r {0} ignoreExempt=§4You may not ignore that player. ignorePlayer=§6You ignore player§c {0} §6from now on. @@ -356,23 +502,34 @@ invalidSkull=§4Please hold a player skull. invalidWarpName=§4Invalid warp name\! invalidWorld=§4Invalid world. inventoryClearFail=§4Player§c {0} §4does not have§c {1} §4of§c {2}§4. -inventoryClearingAllArmor=§6Cleared all inventory items and armor from {0}§6. +inventoryClearingAllArmor=§6Cleared all inventory items and armor from§c {0}§6. inventoryClearingAllItems=§6Cleared all inventory items from§c {0}§6. inventoryClearingFromAll=§6Clearing the inventory of all users... inventoryClearingStack=§6Removed§c {0} §6of§c {1} §6from§c {2}§6. invseeCommandDescription=See the inventory of other players. invseeCommandUsage=/<command> <player> invseeCommandUsage1=/<command> <player> +invseeCommandUsage1Description=Opens the inventory of the specified player is=is isIpBanned=§6IP §c{0} §6is banned. internalError=§cAn internal error occurred while attempting to perform this command. itemCannotBeSold=§4That item cannot be sold to the server. itemCommandDescription=Spawn an item. itemCommandUsage=/<command> <item|numeric> [amount [itemmeta...]] +itemCommandUsage1=/<command> <item> [amount] +itemCommandUsage1Description=Gives you a full stack (or the specified amount) of the specified item +itemCommandUsage2=/<command> <item> <amount> <meta> +itemCommandUsage2Description=Gives you the specified amount of the specified item with the given metadata itemId=§6ID\:§c {0} itemloreClear=§6You have cleared this item''s lore. itemloreCommandDescription=Edit the lore of an item. itemloreCommandUsage=/<command> <add/set/clear> [text/line] [text] +itemloreCommandUsage1=/<command> add [text] +itemloreCommandUsage1Description=Adds the given text to the end of the held item''s lore +itemloreCommandUsage2=/<command> set <line number> <text> +itemloreCommandUsage2Description=Sets the specified line of the held item''s lore to the given text +itemloreCommandUsage3=/<command> clear +itemloreCommandUsage3Description=Clears the held item''s lore itemloreInvalidItem=§4You need to hold an item to edit its lore. itemloreNoLine=§4Your held item does not have lore text on line §c{0}§4. itemloreNoLore=§4Your held item does not have any lore text. @@ -384,6 +541,9 @@ itemnameClear=§6You have cleared this item''s name. itemnameCommandDescription=Names an item. itemnameCommandUsage=/<command> [name] itemnameCommandUsage1=/<command> +itemnameCommandUsage1Description=Clears the held item''s name +itemnameCommandUsage2=/<command> <name> +itemnameCommandUsage2Description=Sets the held item''s name to the given text itemnameInvalidItem=§cYou need to hold an item to rename it. itemnameSuccess=§6You have renamed your held item to "§c{0}§6". itemNotEnough1=§4You do not have enough of that item to sell. @@ -400,6 +560,7 @@ itemType=§6Item\:§c {0} itemdbCommandDescription=Searches for an item. itemdbCommandUsage=/<command> <item> itemdbCommandUsage1=/<command> <item> +itemdbCommandUsage1Description=Searches the item database for the given item jailAlreadyIncarcerated=§4Person is already in jail\:§c {0} jailList=§6Jails\:§r {0} jailMessage=§4You do the crime, you do the time. @@ -408,8 +569,9 @@ jailReleased=§6Player §c{0}§6 unjailed. jailReleasedPlayerNotify=§6You have been released\! jailSentenceExtended=§6Jail time extended to §c{0}§6. jailSet=§6Jail§c {0} §6has been set. +jailWorldNotExist=§4That jail''s world does not exist. jumpEasterDisable=§6Flying wizard mode disabled. -jumpEasterEnable=§6Flying wizard mode enabled.\n +jumpEasterEnable=§6Flying wizard mode enabled. jailsCommandDescription=List all jails. jailsCommandUsage=/<command> jumpCommandDescription=Jumps to the nearest block in the line of sight. @@ -418,26 +580,32 @@ jumpError=§4That would hurt your computer''s brain. kickCommandDescription=Kicks a specified player with a reason. kickCommandUsage=/<command> <player> [reason] kickCommandUsage1=/<command> <player> [reason] +kickCommandUsage1Description=Kicks the specified player with an optional reason kickDefault=Kicked from server. kickedAll=§4Kicked all players from server. kickExempt=§4You cannot kick that person. kickallCommandDescription=Kicks all players off the server except the issuer. kickallCommandUsage=/<command> [reason] kickallCommandUsage1=/<command> [reason] +kickallCommandUsage1Description=Kicks all players with an optional reason kill=§6Killed§c {0}§6. killCommandDescription=Kills specified player. killCommandUsage=/<command> <player> killCommandUsage1=/<command> <player> +killCommandUsage1Description=Kills the specified player killExempt=§4You cannot kill §c{0}§4. kitCommandDescription=Obtains the specified kit or views all available kits. kitCommandUsage=/<command> [kit] [player] kitCommandUsage1=/<command> +kitCommandUsage1Description=Lists all available kits kitCommandUsage2=/<command> <kit> [player] +kitCommandUsage2Description=Gives the specified kit to you or another player if specified kitContains=§6Kit §c{0} §6contains\: kitCost=\ §7§o({0})§r kitDelay=§m{0}§r kitError=§4There are no valid kits. kitError2=§4That kit is improperly defined. Contact an administrator. +kitError3=Cannot give kit item in kit "{0}" to user {1} as kit item requires Paper 1.15.2+ to deserialize. kitGiveTo=§6Giving kit§c {0}§6 to §c{1}§6. kitInvFull=§4Your inventory was full, placing kit on the floor. kitInvFullNoDrop=§4There is not enough room in your inventory for that kit. @@ -449,6 +617,7 @@ kitReset=§6Reset cooldown for kit §c{0}§6. kitresetCommandDescription=Resets the cooldown on the specified kit. kitresetCommandUsage=/<command> <kit> [player] kitresetCommandUsage1=/<command> <kit> [player] +kitresetCommandUsage1Description=Resets the cooldown of the specified kit for you or another player if specified kitResetOther=§6Resetting kit §c{0} §6cooldown for §c{1}§6. kits=§6Kits\:§r {0} kittycannonCommandDescription=Throw an exploding kitten at your opponent. @@ -458,6 +627,9 @@ leatherSyntax=§6Leather color syntax\:§c color\:<red>,<green>,<blue> eg\: colo lightningCommandDescription=The power of Thor. Strike at cursor or player. lightningCommandUsage=/<command> [player] [power] lightningCommandUsage1=/<command> [player] +lightningCommandUsage1Description=Strikes lighting either where you''re looking or at another player if specified +lightningCommandUsage2=/<command> <player> <power> +lightningCommandUsage2Description=Strikes lighting at the target player with the given power lightningSmited=§6Thou hast been smitten\! lightningUse=§6Smiting§c {0} listAfkTag=§7[AFK]§r @@ -466,6 +638,7 @@ listAmountHidden=§6There are §c{0}§6/§c{1}§6 out of maximum §c{2}§6 playe listCommandDescription=List all online players. listCommandUsage=/<command> [group] listCommandUsage1=/<command> [group] +listCommandUsage1Description=Lists all players on the server, or the given group if specified listGroupTag=§6{0}§r\: listHiddenTag=§7[HIDDEN]§r loadWarpError=§4Failed to load warp {0}. @@ -474,13 +647,29 @@ loomCommandDescription=Opens up a loom. loomCommandUsage=/<command> mailClear=§6To clear your mail, type§c /mail clear§6. mailCleared=§6Mail cleared\! +mailClearIndex=§4You must specify a number between 1-{0}. mailCommandDescription=Manages inter-player, intra-server mail. -mailCommandUsage=/<command> [read|clear|send [to] [message]|sendall [message]] +mailCommandUsage=/<command> [read|clear|clear [number]|send [to] [message]|sendtemp [to] [expire time] [message]|sendall [message]] +mailCommandUsage1=/<command> read [page] +mailCommandUsage1Description=Reads the first (or specified) page of your mail +mailCommandUsage2=/<command> clear [number] +mailCommandUsage2Description=Clears either all or the specified mail(s) +mailCommandUsage3=/<command> send <player> <message> +mailCommandUsage3Description=Sends the specified player the given message +mailCommandUsage4=/<command> sendall <message> +mailCommandUsage4Description=Sends all players the given message +mailCommandUsage5=/<command> sendtemp <player> <expire time> <message> +mailCommandUsage5Description=Sends the specified player the given message which will expire in the specified time mailDelay=Too many mails have been sent within the last minute. Maximum\: {0} +mailFormatNew=§6[§r{0}§6] §6[§r{1}§6] §r{2} +mailFormatNewTimed=§6[§e⚠§6] §6[§r{0}§6] §6[§r{1}§6] §r{2} +mailFormatNewRead=§6[§r{0}§6] §6[§r{1}§6] §7§o{2} +mailFormatNewReadTimed=§6[§e⚠§6] §6[§r{0}§6] §6[§r{1}§6] §7§o{2} mailFormat=§6[§r{0}§6] §r{1} mailMessage={0} mailSent=§6Mail sent\! mailSentTo=§c{0}§6 has been sent the following mail\: +mailSentToExpire=§c{0}§6 has been sent the following mail which will expire in §c{1}§6\: mailTooLong=§4Mail message too long. Try to keep it below 1000 characters. markMailAsRead=§6To mark your mail as read, type§c /mail clear§6. matchingIPAddress=§6The following players previously logged in from that IP address\: @@ -491,9 +680,10 @@ mayNotJailOffline=§4You may not jail offline players. meCommandDescription=Describes an action in the context of the player. meCommandUsage=/<command> <description> meCommandUsage1=/<command> <description> +meCommandUsage1Description=Describes an action meSender=me meRecipient=me -minimumBalanceError=§4The minimum balance a user can have is {0}.\n +minimumBalanceError=§4The minimum balance a user can have is {0}. minimumPayAmount=§cThe minimum amount you can pay is {0}. minute=minute minutes=minutes @@ -510,6 +700,7 @@ months=months moreCommandDescription=Fills the item stack in hand to specified amount, or to maximum size if none is specified. moreCommandUsage=/<command> [amount] moreCommandUsage1=/<command> [amount] +moreCommandUsage1Description=Fills the held item to the specified amount, or its max size if none is specified moreThanZero=§4Quantities must be greater than 0. motdCommandDescription=Views the Message Of The Day. motdCommandUsage=/<command> [chapter] [page] @@ -517,6 +708,7 @@ moveSpeed=§6Set§c {0}§6 speed to§c {1} §6for §c{2}§6. msgCommandDescription=Sends a private message to the specified player. msgCommandUsage=/<command> <to> <message> msgCommandUsage1=/<command> <to> <message> +msgCommandUsage1Description=Privately sends the given message to the specified player msgDisabled=§6Receiving messages §cdisabled§6. msgDisabledFor=§6Receiving messages §cdisabled §6for §c{0}§6. msgEnabled=§6Receiving messages §cenabled§6. @@ -526,11 +718,15 @@ msgIgnore=§c{0} §4has messages disabled. msgtoggleCommandDescription=Blocks receiving all private messages. msgtoggleCommandUsage=/<command> [player] [on|off] msgtoggleCommandUsage1=/<command> [player] +msgtoggleCommandUsage1Description=Toggles fly for yourself or another player if specified multipleCharges=§4You cannot apply more than one charge to this firework. multiplePotionEffects=§4You cannot apply more than one effect to this potion. muteCommandDescription=Mutes or unmutes a player. muteCommandUsage=/<command> <player> [datediff] [reason] muteCommandUsage1=/<command> <player> +muteCommandUsage1Description=Permanently mutes the specified player or unmutes them if they were already muted +muteCommandUsage2=/<command> <player> <datediff> [reason] +muteCommandUsage2Description=Mutes the specified player for the time given with an optional reason mutedPlayer=§6Player§c {0} §6muted. mutedPlayerFor=§6Player§c {0} §6muted for§c {1}§6. mutedPlayerForReason=§6Player§c {0} §6muted for§c {1}§6. Reason\: §c{2} @@ -545,13 +741,26 @@ muteNotifyReason=§c{0} §6has muted player §c{1}§6. Reason\: §c{2} nearCommandDescription=Lists the players near by or around a player. nearCommandUsage=/<command> [playername] [radius] nearCommandUsage1=/<command> +nearCommandUsage1Description=Lists all players within the default near radius of you +nearCommandUsage2=/<command> <radius> +nearCommandUsage2Description=Lists all players within the given radius of you nearCommandUsage3=/<command> <player> +nearCommandUsage3Description=Lists all players within the default near radius of the specified player +nearCommandUsage4=/<command> <player> <radius> +nearCommandUsage4Description=Lists all players within the given radius of the specified player nearbyPlayers=§6Players nearby\:§r {0} negativeBalanceError=§4User is not allowed to have a negative balance. nickChanged=§6Nickname changed. nickCommandDescription=Change your nickname or that of another player. nickCommandUsage=/<command> [player] <nickname|off> nickCommandUsage1=/<command> <nickname> +nickCommandUsage1Description=Changes your nickname to the given text +nickCommandUsage2=/<command> off +nickCommandUsage2Description=Removes your nickname +nickCommandUsage3=/<command> <player> <nickname> +nickCommandUsage3Description=Changes the specified player''s nickname to the given text +nickCommandUsage4=/<command> <player> off +nickCommandUsage4Description=Removes the given player''s nickname nickDisplayName=§4You have to enable change-displayname in Essentials config. nickInUse=§4That name is already in use. nickNameBlacklist=§4That nickname is not allowed. @@ -604,6 +813,8 @@ noWarpsDefined=§6No warps defined. nuke=§5May death rain upon them. nukeCommandDescription=May death rain upon them. nukeCommandUsage=/<command> [player] +nukeCommandUsage1=/<command> [players...] +nukeCommandUsage1Description=Sends a nuke over all players or another player(s), if specified numberRequired=A number goes there, silly. onlyDayNight=/time only supports day/night. onlyPlayers=§4Only in-game players can use §c{0}§4. @@ -617,9 +828,10 @@ passengerTeleportFail=§4You cannot be teleported while carrying passengers. payCommandDescription=Pays another player from your balance. payCommandUsage=/<command> <player> <amount> payCommandUsage1=/<command> <player> <amount> +payCommandUsage1Description=Pays the specified player the given amount of money payConfirmToggleOff=§6You will no longer be prompted to confirm payments. payConfirmToggleOn=§6You will now be prompted to confirm payments. -payDisabledFor=§6Disabled accepting payments for §c{0}§6.\n +payDisabledFor=§6Disabled accepting payments for §c{0}§6. payEnabledFor=§6Enabled accepting payments for §c{0}§6. payMustBePositive=§4Amount to pay must be positive. payOffline=§4You cannot pay offline users. @@ -630,6 +842,7 @@ payconfirmtoggleCommandUsage=/<command> paytoggleCommandDescription=Toggles whether you are accepting payments. paytoggleCommandUsage=/<command> [player] paytoggleCommandUsage1=/<command> [player] +paytoggleCommandUsage1Description=Toggles if you, or another player if specified, are accepting payments pendingTeleportCancelled=§4Pending teleportation request cancelled. pingCommandDescription=Pong\! pingCommandUsage=/<command> @@ -654,6 +867,12 @@ posPitch=§6Pitch\: {0} (Head angle) possibleWorlds=§6Possible worlds are the numbers §c0§6 through §c{0}§6. potionCommandDescription=Adds custom potion effects to a potion. potionCommandUsage=/<command> <clear|apply|effect\:<effect> power\:<power> duration\:<duration>> +potionCommandUsage1=/<command> clear +potionCommandUsage1Description=Clears all effects on the held potion +potionCommandUsage2=/<command> apply +potionCommandUsage2Description=Applies all effects on the held potion onto you without consuming the potion +potionCommandUsage3=/<command> effect\:<effect> power\:<power> duration\:<duration> +potionCommandUsage3Description=Applies the given potion meta to the held potion posX=§6X\: {0} (+East <-> -West) posY=§6Y\: {0} (+Up <-> -Down) posYaw=§6Yaw\: {0} (Rotation) @@ -672,12 +891,34 @@ powerToolsDisabled=§6All of your power tools have been disabled. powerToolsEnabled=§6All of your power tools have been enabled. powertoolCommandDescription=Assigns a command to the item in hand. powertoolCommandUsage=/<command> [l\:|a\:|r\:|c\:|d\:][command] [arguments] - {player} can be replaced by name of a clicked player. +powertoolCommandUsage1=/<command> l\: +powertoolCommandUsage1Description=Lists all powertools on the held item +powertoolCommandUsage2=/<command> d\: +powertoolCommandUsage2Description=Deletes all powertools on the held item +powertoolCommandUsage3=/<command> r\:<cmd> +powertoolCommandUsage3Description=Removes the given command from the held item +powertoolCommandUsage4=/<command> <cmd> +powertoolCommandUsage4Description=Sets the powertool command of the held item to the given command +powertoolCommandUsage5=/<command> a\:<cmd> +powertoolCommandUsage5Description=Adds the given powertool command to the held item powertooltoggleCommandDescription=Enables or disables all current powertools. powertooltoggleCommandUsage=/<command> ptimeCommandDescription=Adjust player''s client time. Add @ prefix to fix. ptimeCommandUsage=/<command> [list|reset|day|night|dawn|17\:30|4pm|4000ticks] [player|*] +ptimeCommandUsage1=/<command> list [player|*] +ptimeCommandUsage1Description=Lists the player time for either you or other player(s) if specified +ptimeCommandUsage2=/<command> <time> [player|*] +ptimeCommandUsage2Description=Sets the time for you or other player(s) if specified to the given time +ptimeCommandUsage3=/<command> reset [player|*] +ptimeCommandUsage3Description=Resets the time for you or other player(s) if specified pweatherCommandDescription=Adjust a player''s weather pweatherCommandUsage=/<command> [list|reset|storm|sun|clear] [player|*] +pweatherCommandUsage1=/<command> list [player|*] +pweatherCommandUsage1Description=Lists the player weather for either you or other player(s) if specified +pweatherCommandUsage2=/<command> <storm|sun> [player|*] +pweatherCommandUsage2Description=Sets the weather for you or other player(s) if specified to the given weather +pweatherCommandUsage3=/<command> reset [player|*] +pweatherCommandUsage3Description=Resets the weather for you or other player(s) if specified pTimeCurrent=§c{0}§6''s time is§c {1}§6. pTimeCurrentFixed=§c{0}§6''s time is fixed to§c {1}§6. pTimeNormal=§c{0}§6''s time is normal and matches the server. @@ -697,17 +938,21 @@ questionFormat=§2[Question]§r {0} rCommandDescription=Quickly reply to the last player to message you. rCommandUsage=/<command> <message> rCommandUsage1=/<command> <message> +rCommandUsage1Description=Replies to the last player to message you with the given text radiusTooBig=§4Radius is too big\! Maximum radius is§c {0}§4. readNextPage=§6Type§c /{0} {1} §6to read the next page. realName=§f{0}§r§6 is §f{1} realnameCommandDescription=Displays the username of a user based on nick. realnameCommandUsage=/<command> <nickname> realnameCommandUsage1=/<command> <nickname> +realnameCommandUsage1Description=Displays the username of a user based on the given nickname recentlyForeverAlone=§4{0} recently went offline. recipe=§6Recipe for §c{0}§6 (§c{1}§6 of §c{2}§6) recipeBadIndex=There is no recipe by that number. recipeCommandDescription=Displays how to craft items. recipeCommandUsage=/<command> <item> [number] +recipeCommandUsage1=/<command> <item> [page] +recipeCommandUsage1Description=Displays how to craft the given item recipeFurnace=§6Smelt\: §c{0}§6. recipeGrid=§c{0}X §6| §{1}X §6| §{2}X recipeGridItem=§c{0}X §6is §c{1} @@ -718,15 +963,23 @@ recipeShapeless=§6Combine §c{0} recipeWhere=§6Where\: {0} removeCommandDescription=Removes entities in your world. removeCommandUsage=/<command> <all|tamed|named|drops|arrows|boats|minecarts|xp|paintings|itemframes|endercrystals|monsters|animals|ambient|mobs|[mobType]> [radius|world] +removeCommandUsage1=/<command> <mob type> [world] +removeCommandUsage1Description=Removes all of the given mob type in the current world or another one if specified +removeCommandUsage2=/<command> <mob type> <radius> [world] +removeCommandUsage2Description=Removes the given mob type within the given radius in the current world or another one if specified removed=§6Removed§c {0} §6entities. repair=§6You have successfully repaired your\: §c{0}§6. repairAlreadyFixed=§4This item does not need repairing. repairCommandDescription=Repairs the durability of one or all items. repairCommandUsage=/<command> [hand|all] repairCommandUsage1=/<command> +repairCommandUsage1Description=Repairs the held item +repairCommandUsage2=/<command> all +repairCommandUsage2Description=Repairs all items in your inventory repairEnchanted=§4You are not allowed to repair enchanted items. repairInvalidType=§4This item cannot be repaired. repairNone=§4There were no items that needed repairing. +replyFromDiscord=**Reply from {0}\:** `{1}` replyLastRecipientDisabled=§6Replying to last message recipient §cdisabled§6. replyLastRecipientDisabledFor=§6Replying to last message recipient §cdisabled §6for §c{0}§6. replyLastRecipientEnabled=§6Replying to last message recipient §cenabled§6. @@ -746,6 +999,7 @@ rest=§6You feel well rested. restCommandDescription=Rests you or the given player. restCommandUsage=/<command> [player] restCommandUsage1=/<command> [player] +restCommandUsage1Description=Resets the time since rest of you or another player if specified restOther=§6Resting§c {0}§6. returnPlayerToJailError=§4Error occurred when trying to return player§c {0} §4to jail\: §c{1}§4\! rtoggleCommandDescription=Change whether the recipient of the reply is last recipient or last sender @@ -759,10 +1013,20 @@ seenAccounts=§6Player has also been known as\:§c {0} seenCommandDescription=Shows the last logout time of a player. seenCommandUsage=/<command> <playername> seenCommandUsage1=/<command> <playername> +seenCommandUsage1Description=Shows the logout time, ban, mute, and UUID information of the specified player seenOffline=§6Player§c {0} §6has been §4offline§6 since §c{1}§6. seenOnline=§6Player§c {0} §6has been §aonline§6 since §c{1}§6. sellBulkPermission=§6You do not have permission to bulk sell. sellCommandDescription=Sells the item currently in your hand. +sellCommandUsage=/<command> <<itemname>|<id>|hand|inventory|blocks> [amount] +sellCommandUsage1=/<command> <itemname> [amount] +sellCommandUsage1Description=Sells all (or the given amount, if specified) of the given item in your inventory +sellCommandUsage2=/<command> hand [amount] +sellCommandUsage2Description=Sells all (or the given amount, if specified) of the held item +sellCommandUsage3=/<command> all +sellCommandUsage3Description=Sells all possible items in your inventory +sellCommandUsage4=/<command> blocks [amount] +sellCommandUsage4Description=Sells all (or the given amount, if specified) of blocks in your inventory sellHandPermission=§6You do not have permission to hand sell. serverFull=Server is full\! serverReloading=There''s a good chance you''re reloading your server right now. If that''s the case, why do you hate yourself? Expect no support from the EssentialsX team when using /reload. @@ -778,18 +1042,34 @@ setBalOthers=§aYou set {0}§a''s balance to {1}. setSpawner=§6Changed spawner type to§c {0}§6. sethomeCommandDescription=Set your home to your current location. sethomeCommandUsage=/<command> [[player\:]name] +sethomeCommandUsage1=/<command> <name> +sethomeCommandUsage1Description=Sets your home with the given name at your location +sethomeCommandUsage2=/<command> <player>\:<name> +sethomeCommandUsage2Description=Sets the specified player''s home with the given name at your location setjailCommandDescription=Creates a jail where you specified named [jailname]. setjailCommandUsage=/<command> <jailname> setjailCommandUsage1=/<command> <jailname> +setjailCommandUsage1Description=Sets the jail with the specified name to your location settprCommandDescription=Set the random teleport location and parameters. settprCommandUsage=/<command> [center|minrange|maxrange] [value] +settprCommandUsage1=/<command> center +settprCommandUsage1Description=Sets the random teleport center to your location +settprCommandUsage2=/<command> minrange <radius> +settprCommandUsage2Description=Sets the minimum random teleport radius to the given value +settprCommandUsage3=/<command> maxrange <radius> +settprCommandUsage3Description=Sets the maximum random teleport radius to the given value settpr=§6Set random teleport center. settprValue=§6Set random teleport §c{0}§6 to §c{1}§6. setwarpCommandDescription=Creates a new warp. setwarpCommandUsage=/<command> <warp> setwarpCommandUsage1=/<command> <warp> +setwarpCommandUsage1Description=Sets the warp with the specified name to your location setworthCommandDescription=Set the sell value of an item. setworthCommandUsage=/<command> [itemname|id] <price> +setworthCommandUsage1=/<command> <price> +setworthCommandUsage1Description=Sets the worth of your held item to the given price +setworthCommandUsage2=/<command> <itemname> <price> +setworthCommandUsage2Description=Sets the worth of the specified item to the given price sheepMalformedColor=§4Malformed color. shoutDisabled=§6Shout mode §cdisabled§6. shoutDisabledFor=§6Shout mode §cdisabled §6for §c{0}§6. @@ -801,6 +1081,7 @@ editsignCommandClearLine=§6Cleared line§c {0}§6. showkitCommandDescription=Show contents of a kit. showkitCommandUsage=/<command> <kitname> showkitCommandUsage1=/<command> <kitname> +showkitCommandUsage1Description=Displays a summary of the items in the specified kit editsignCommandDescription=Edits a sign in the world. editsignCommandLimit=§4Your provided text is too big to fit on the target sign. editsignCommandNoLine=§4You must enter a line number between §c1-4§4. @@ -810,7 +1091,15 @@ editsignCopy=§6Sign copied\! Paste it with §c/{0} paste§6. editsignCopyLine=§6Copied line §c{0} §6of sign\! Paste it with §c/{1} paste {0}§6. editsignPaste=§6Sign pasted\! editsignPasteLine=§6Pasted line §c{0} §6of sign\! -editsignCommandUsage=/<command> <set/clear/copy/paste> [line number] +editsignCommandUsage=/<command> <set/clear/copy/paste> [line number] [text] +editsignCommandUsage1=/<command> set <line number> <text> +editsignCommandUsage1Description=Sets the specified line of the target sign to the given text +editsignCommandUsage2=/<command> clear <line number> +editsignCommandUsage2Description=Clears the specified line of the target sign +editsignCommandUsage3=/<command> copy [line number] +editsignCommandUsage3Description=Copies the all (or the specified line) of the target sign to your clipboard +editsignCommandUsage4=/<command> paste [line number] +editsignCommandUsage4Description=Pastes your clipboard to the entire (or the specified line) of the target sign signFormatFail=§4[{0}] signFormatSuccess=§1[{0}] signFormatTemplate=[{0}] @@ -823,7 +1112,9 @@ skullChanged=§6Skull changed to §c{0}§6. skullCommandDescription=Set the owner of a player skull skullCommandUsage=/<command> [owner] skullCommandUsage1=/<command> +skullCommandUsage1Description=Gets your own skull skullCommandUsage2=/<command> <player> +skullCommandUsage2Description=Gets the skull of the specified player slimeMalformedSize=§4Malformed size. smithingtableCommandDescription=Opens up a smithing table. smithingtableCommandUsage=/<command> @@ -833,22 +1124,34 @@ socialSpyMutedPrefix=§f[§6SS§f] §7(muted) §r socialspyCommandDescription=Toggles if you can see msg/mail commands in chat. socialspyCommandUsage=/<command> [player] [on|off] socialspyCommandUsage1=/<command> [player] +socialspyCommandUsage1Description=Toggles social spy for yourself or another player if specified socialSpyPrefix=§f[§6SS§f] §r soloMob=§4That mob likes to be alone. spawned=spawned spawnerCommandDescription=Change the mob type of a spawner. spawnerCommandUsage=/<command> <mob> [delay] spawnerCommandUsage1=/<command> <mob> [delay] +spawnerCommandUsage1Description=Changes the mob type (and optionally, the delay) of the spawner you''re looking at spawnmobCommandDescription=Spawns a mob. spawnmobCommandUsage=/<command> <mob>[\:data][,<mount>[\:data]] [amount] [player] +spawnmobCommandUsage1=/<command> <mob>[\:data] [amount] [player] +spawnmobCommandUsage1Description=Spawns one (or the specified amount) of the given mob at your location (or another player if specified) +spawnmobCommandUsage2=/<command> <mob>[\:data],<mount>[\:data] [amount] [player] +spawnmobCommandUsage2Description=Spawns one (or the specified amount) of the given mob riding the given mob at your location (or another player if specified) spawnSet=§6Spawn location set for group§c {0}§6. spectator=spectator speedCommandDescription=Change your speed limits. speedCommandUsage=/<command> [type] <speed> [player] +speedCommandUsage1=/<command> <speed> +speedCommandUsage1Description=Sets either your fly or walk speed to the given speed +speedCommandUsage2=/<command> <type> <speed> [player] +speedCommandUsage2Description=Sets either the specified type of speed to the given speed for you or another player if specified stonecutterCommandDescription=Opens up a stonecutter. stonecutterCommandUsage=/<command> sudoCommandDescription=Make another user perform a command. sudoCommandUsage=/<command> <player> <command [args]> +sudoCommandUsage1=/<command> <player> <command> [args] +sudoCommandUsage1Description=Makes the specified player run the given command sudoExempt=§4You cannot sudo §c{0}. sudoRun=§6Forcing§c {0} §6to run\:§r /{1} suicideCommandDescription=Causes you to perish. @@ -887,27 +1190,42 @@ tempbanExemptOffline=§4You may not tempban offline players. tempbanJoin=You are banned from this server for {0}. Reason\: {1} tempBanned=§cYou have been temporarily banned for§r {0}\:\n§r{2} tempbanCommandDescription=Temporary ban a user. +tempbanCommandUsage=/<command> <playername> <datediff> [reason] +tempbanCommandUsage1=/<command> <player> <datediff> [reason] +tempbanCommandUsage1Description=Bans the given player for the specified amount of time with an optional reason tempbanipCommandDescription=Temporarily ban an IP Address. +tempbanipCommandUsage=/<command> <playername> <datediff> [reason] +tempbanipCommandUsage1=/<command> <player|ip-address> <datediff> [reason] +tempbanipCommandUsage1Description=Bans the given IP address for the specified amount of time with an optional reason thunder=§6You§c {0} §6thunder in your world. thunderCommandDescription=Enable/disable thunder. thunderCommandUsage=/<command> <true/false> [duration] +thunderCommandUsage1=/<command> <true|false> [duration] +thunderCommandUsage1Description=Enables/disables thunder for an optional duration thunderDuration=§6You§c {0} §6thunder in your world for§c {1} §6seconds. timeBeforeHeal=§4Time before next heal\:§c {0}§4. timeBeforeTeleport=§4Time before next teleport\:§c {0}§4. timeCommandDescription=Display/Change the world time. Defaults to current world. timeCommandUsage=/<command> [set|add] [day|night|dawn|17\:30|4pm|4000ticks] [worldname|all] timeCommandUsage1=/<command> +timeCommandUsage1Description=Displays the times in all worlds +timeCommandUsage2=/<command> set <time> [world|all] +timeCommandUsage2Description=Sets the time in the current (or specified) world to the given time +timeCommandUsage3=/<command> add <time> [world|all] +timeCommandUsage3Description=Adds the given time to the current (or specified) world''s time timeFormat=§c{0}§6 or §c{1}§6 or §c{2}§6 timeSetPermission=§4You are not authorized to set the time. timeSetWorldPermission=§4You are not authorized to set the time in world ''{0}''. timeWorldAdd=§6The time was moved forward by§c {0} §6in\: §c{1}§6. timeWorldCurrent=§6The current time in§c {0} §6is §c{1}§6. +timeWorldCurrentSign=§6The current time is §c{0}§6. timeWorldSet=§6The time was set to§c {0} §6in\: §c{1}§6. togglejailCommandDescription=Jails/Unjails a player, TPs them to the jail specified. togglejailCommandUsage=/<command> <player> <jailname> [datediff] toggleshoutCommandDescription=Toggles whether you are talking in shout mode toggleshoutCommandUsage=/<command> [player] [on|off] toggleshoutCommandUsage1=/<command> [player] +toggleshoutCommandUsage1Description=Toggles shout mode for yourself or another player if specified topCommandDescription=Teleport to the highest block at your current position. topCommandUsage=/<command> totalSellableAll=§aThe total worth of all sellable items and blocks is §c{1}§a. @@ -917,59 +1235,81 @@ totalWorthBlocks=§aSold all blocks for a total worth of §c{1}§a. tpCommandDescription=Teleport to a player. tpCommandUsage=/<command> <player> [otherplayer] tpCommandUsage1=/<command> <player> +tpCommandUsage1Description=Teleports you to the specified player +tpCommandUsage2=/<command> <player> <other player> +tpCommandUsage2Description=Teleports the first specified player to the second tpaCommandDescription=Request to teleport to the specified player. tpaCommandUsage=/<command> <player> tpaCommandUsage1=/<command> <player> +tpaCommandUsage1Description=Requests to teleport to the specified player tpaallCommandDescription=Requests all players online to teleport to you. tpaallCommandUsage=/<command> <player> tpaallCommandUsage1=/<command> <player> +tpaallCommandUsage1Description=Requests for all players to teleport to you tpacancelCommandDescription=Cancel all outstanding teleport requests. Specify [player] to cancel requests with them. tpacancelCommandUsage=/<command> [player] tpacancelCommandUsage1=/<command> +tpacancelCommandUsage1Description=Cancels all your outstanding teleport requests tpacancelCommandUsage2=/<command> <player> +tpacancelCommandUsage2Description=Cancels all your outstanding teleport request with the specified player tpacceptCommandDescription=Accepts a teleport request. tpacceptCommandUsage=/<command> [otherplayer] tpacceptCommandUsage1=/<command> +tpacceptCommandUsage1Description=Accepts an incoming teleport request tpahereCommandDescription=Request that the specified player teleport to you. tpahereCommandUsage=/<command> <player> tpahereCommandUsage1=/<command> <player> +tpahereCommandUsage1Description=Requests for the specified player to teleport to you tpallCommandDescription=Teleport all online players to another player. tpallCommandUsage=/<command> [player] tpallCommandUsage1=/<command> [player] +tpallCommandUsage1Description=Teleports all players to you, or another player if specified tpautoCommandDescription=Automatically accept teleportation requests. tpautoCommandUsage=/<command> [player] tpautoCommandUsage1=/<command> [player] +tpautoCommandUsage1Description=Toggles if tpa requests are auto accepted for yourself or another player if specified tpdenyCommandDescription=Reject a teleport request. tpdenyCommandUsage=/<command> tpdenyCommandUsage1=/<command> +tpdenyCommandUsage1Description=Rejects an incoming teleport request tphereCommandDescription=Teleport a player to you. tphereCommandUsage=/<command> <player> tphereCommandUsage1=/<command> <player> +tphereCommandUsage1Description=Teleports the specified player to you tpoCommandDescription=Teleport override for tptoggle. tpoCommandUsage=/<command> <player> [otherplayer] tpoCommandUsage1=/<command> <player> +tpoCommandUsage1Description=Teleports the specified player to you whilst overriding their preferences +tpoCommandUsage2=/<command> <player> <other player> +tpoCommandUsage2Description=Teleports the first specified player to the second whilst overriding their preferences tpofflineCommandDescription=Teleport to a player''s last known logout location tpofflineCommandUsage=/<command> <player> tpofflineCommandUsage1=/<command> <player> +tpofflineCommandUsage1Description=Teleports you to the specified player''s logout location tpohereCommandDescription=Teleport here override for tptoggle. tpohereCommandUsage=/<command> <player> tpohereCommandUsage1=/<command> <player> +tpohereCommandUsage1Description=Teleports the specified player to you whilst overriding their preferences tpposCommandDescription=Teleport to coordinates. tpposCommandUsage=/<command> <x> <y> <z> [yaw] [pitch] [world] tpposCommandUsage1=/<command> <x> <y> <z> [yaw] [pitch] [world] +tpposCommandUsage1Description=Teleports you to the specified location at an optional yaw, pitch, and/or world tprCommandDescription=Teleport randomly. tprCommandUsage=/<command> tprCommandUsage1=/<command> +tprCommandUsage1Description=Teleports you to a random location tprSuccess=§6Teleporting to a random location... tps=§6Current TPS \= {0} tptoggleCommandDescription=Blocks all forms of teleportation. tptoggleCommandUsage=/<command> [player] [on|off] tptoggleCommandUsage1=/<command> [player] +tptoggleCommandUsageDescription=Toggles if teleports are enabled for yourself or another player if specified tradeSignEmpty=§4The trade sign has nothing available for you. tradeSignEmptyOwner=§4There is nothing to collect from this trade sign. treeCommandDescription=Spawn a tree where you are looking. treeCommandUsage=/<command> <tree|birch|redwood|redmushroom|brownmushroom|jungle|junglebush|swamp> treeCommandUsage1=/<command> <tree|birch|redwood|redmushroom|brownmushroom|jungle|junglebush|swamp> +treeCommandUsage1Description=Spawns a tree of the specified type where you''re looking treeFailure=§4Tree generation failure. Try again on grass or dirt. treeSpawned=§6Tree spawned. true=§atrue§r @@ -982,15 +1322,23 @@ unableToSpawnMob=§4Unable to spawn mob. unbanCommandDescription=Unbans the specified player. unbanCommandUsage=/<command> <player> unbanCommandUsage1=/<command> <player> +unbanCommandUsage1Description=Unbans the specified player unbanipCommandDescription=Unbans the specified IP address. unbanipCommandUsage=/<command> <address> unbanipCommandUsage1=/<command> <address> +unbanipCommandUsage1Description=Unbans the specified IP address unignorePlayer=§6You are not ignoring player§c {0} §6anymore. unknownItemId=§4Unknown item id\:§r {0}§4. unknownItemInList=§4Unknown item {0} in {1} list. unknownItemName=§4Unknown item name\: {0}. unlimitedCommandDescription=Allows the unlimited placing of items. unlimitedCommandUsage=/<command> <list|item|clear> [player] +unlimitedCommandUsage1=/<command> list [player] +unlimitedCommandUsage1Description=Displays a list of unlimited items for yourself or another player if specified +unlimitedCommandUsage2=/<command> <item> [player] +unlimitedCommandUsage2Description=Toggles if the given item is unlimited for yourself or another player if specified +unlimitedCommandUsage3=/<command> clear [player] +unlimitedCommandUsage3Description=Clears all unlimited items for yourself or another player if specified unlimitedItemPermission=§4No permission for unlimited item §c{0}§4. unlimitedItems=§6Unlimited items\:§r unmutedPlayer=§6Player§c {0} §6unmuted. @@ -1019,6 +1367,7 @@ vanish=§6Vanish for {0}§6\: {1} vanishCommandDescription=Hide yourself from other players. vanishCommandUsage=/<command> [player] [on|off] vanishCommandUsage1=/<command> [player] +vanishCommandUsage1Description=Toggles vanish for yourself or another player if specified vanished=§6You are now completely invisible to normal users, and hidden from in-game commands. versionCheckDisabled=§6Update checking disabled in config. versionCustom=§6Unable to check your version\! Self-built? Build information\: §c{0}§6. @@ -1035,6 +1384,7 @@ versionOutputFine=§6{0} version\: §a{1} versionOutputWarn=§6{0} version\: §c{1} versionOutputUnsupported=§d{0} §6version\: §d{1} versionOutputUnsupportedPlugins=§6You are running §dunsupported plugins§6\! +versionOutputEconLayer=§6Economy Layer\: §r{0} versionMismatch=§4Version mismatch\! Please update {0} to the same version. versionMismatchAll=§4Version mismatch\! Please update all Essentials jars to the same version. versionReleaseLatest=§6You''re running the latest stable version of EssentialsX\! @@ -1047,11 +1397,16 @@ voiceSilencedReasonTime=§6Your voice has been silenced for {0}\! Reason\: §c{1 walking=walking warpCommandDescription=List all warps or warp to the specified location. warpCommandUsage=/<command> <pagenumber|warp> [player] +warpCommandUsage1=/<command> [page] +warpCommandUsage1Description=Gives a list of all warps on either the first or specified page +warpCommandUsage2=/<command> <warp> [player] +warpCommandUsage2Description=Teleports you or a specified player to the given warp warpDeleteError=§4Problem deleting the warp file. warpInfo=§6Information for warp§c {0}§6\: warpinfoCommandDescription=Finds location information for a specified warp. warpinfoCommandUsage=/<command> <warp> warpinfoCommandUsage1=/<command> <warp> +warpinfoCommandUsage1Description=Provides information about the given warp warpingTo=§6Warping to§c {0}§6. warpList={0} warpListPermission=§4You do not have permission to list warps. @@ -1061,9 +1416,13 @@ warps=§6Warps\:§r {0} warpsCount=§6There are§c {0} §6warps. Showing page §c{1} §6of §c{2}§6. weatherCommandDescription=Sets the weather. weatherCommandUsage=/<command> <storm/sun> [duration] +weatherCommandUsage1=/<command> <storm|sun> [duration] +weatherCommandUsage1Description=Sets the weather to the given type for an optional duration warpSet=§6Warp§c {0} §6set. warpUsePermission=§4You do not have permission to use that warp. weatherInvalidWorld=World named {0} not found\! +weatherSignStorm=§6Weather\: §cstormy§6. +weatherSignSun=§6Weather\: §csunny§6. weatherStorm=§6You set the weather to §cstorm§6 in§c {0}§6. weatherStormFor=§6You set the weather to §cstorm§6 in§c {0} §6for§c {1} seconds§6. weatherSun=§6You set the weather to §csun§6 in§c {0}§6. @@ -1075,6 +1434,7 @@ whoisBanned=§6 - Banned\:§r {0} whoisCommandDescription=Determine the username behind a nickname. whoisCommandUsage=/<command> <nickname> whoisCommandUsage1=/<command> <player> +whoisCommandUsage1Description=Gives basic information about the specified player whoisExp=§6 - Exp\:§r {0} (Level {1}) whoisFly=§6 - Fly mode\:§r {0} ({1}) whoisSpeed=§6 - Speed\:§r {0} @@ -1100,9 +1460,20 @@ workbenchCommandUsage=/<command> worldCommandDescription=Switch between worlds. worldCommandUsage=/<command> [world] worldCommandUsage1=/<command> +worldCommandUsage1Description=Teleports to your corresponding location in the nether or overworld +worldCommandUsage2=/<command> <world> +worldCommandUsage2Description=Teleports to your location in the given world worth=§aStack of {0} worth §c{1}§a ({2} item(s) at {3} each) worthCommandDescription=Calculates the worth of items in hand or as specified. worthCommandUsage=/<command> <<itemname>|<id>|hand|inventory|blocks> [-][amount] +worthCommandUsage1=/<command> <itemname> [amount] +worthCommandUsage1Description=Checks the worth of all (or the given amount, if specified) of the given item in your inventory +worthCommandUsage2=/<command> hand [amount] +worthCommandUsage2Description=Checks the worth of all (or the given amount, if specified) of the held item +worthCommandUsage3=/<command> all +worthCommandUsage3Description=Checks the worth of all possible items in your inventory +worthCommandUsage4=/<command> blocks [amount] +worthCommandUsage4Description=Checks the worth of all (or the given amount, if specified) of blocks in your inventory worthMeta=§aStack of {0} with metadata of {1} worth §c{2}§a ({3} item(s) at {4} each) worthSet=§6Worth value set year=year diff --git a/Essentials/src/main/resources/messages_en_GB.properties b/Essentials/src/main/resources/messages_en_GB.properties index b66f662257b..a14a4fe85c2 100644 --- a/Essentials/src/main/resources/messages_en_GB.properties +++ b/Essentials/src/main/resources/messages_en_GB.properties @@ -9,6 +9,9 @@ adventure=adventure afkCommandDescription=Marks you as away-from-keyboard. afkCommandUsage=/<command> [player/message...] afkCommandUsage1=/<command> [message]\n +afkCommandUsage1Description=Toggles your afk status with an optional reason +afkCommandUsage2=/<command> <player> [message] +afkCommandUsage2Description=Toggles the afk status of the specified player with an optional reason alertBroke=broke\: alertFormat=§3[{0}] §r {1} §6 {2} at\: {3} alertPlaced=placed\: @@ -33,7 +36,9 @@ backAfterDeath=§6Use the§c /back§6 command to return to your death point. backCommandDescription=Teleports you to your location prior to tp/spawn/warp. backCommandUsage=/<command> [player] backCommandUsage1=/<command> +backCommandUsage1Description=Teleports you to your prior location backCommandUsage2=/<command> <player> +backCommandUsage2Description=Teleports the specified player to their prior location backOther=§6Returned§c {0}§6 to previous location. backupCommandDescription=Runs the backup if configured. backupCommandUsage=/<command> @@ -46,20 +51,29 @@ balance=§aBalance\:§c {0} balanceCommandDescription=States the current balance of a player. balanceCommandUsage=/<command> [player] balanceCommandUsage1=/<command> +balanceCommandUsage1Description=States your current balance balanceCommandUsage2=/<command> <player> +balanceCommandUsage2Description=Displays the balance of the specified player balanceOther=§aBalance of {0}§a\:§c {1} balanceTop=§6Top balances ({0}) balanceTopLine={0}. {1}, {2} balancetopCommandDescription=Gets the top balance values. +balancetopCommandUsage=/<command> [page] +balancetopCommandUsage1=/<command> [page] +balancetopCommandUsage1Description=Displays the first (or specified) page of the top balance values banCommandDescription=Bans a player. banCommandUsage=/<command> <player> [reason] banCommandUsage1=/<command> <player> [reason] +banCommandUsage1Description=Bans the specified player with an optional reason banExempt=§4You cannot ban that player. banExemptOffline=§4You may not ban offline players. banFormat=§cYou have been banned\:\n§r{0} banIpJoin=Your IP address is banned from this server. Reason\: {0} banJoin=You are banned from this server. Reason\: {0} banipCommandDescription=Bans an IP address. +banipCommandUsage=/<command> <address> [reason] +banipCommandUsage1=/<command> <address> [reason] +banipCommandUsage1Description=Bans the specified IP address with an optional reason bed=§obed§r bedMissing=§4Your bed is either unset, missing or blocked. bedNull=§mbed§r @@ -72,12 +86,18 @@ bigTreeSuccess=§6Big tree spawned. bigtreeCommandDescription=Spawn a big tree where you are looking. bigtreeCommandUsage=/<command> <tree|redwood|jungle|darkoak> bigtreeCommandUsage1=/<command> <tree|redwood|jungle|darkoak> +bigtreeCommandUsage1Description=Spawns a big tree of the specified type blockList=§6EssentialsX is relaying the following commands to other plugins\: blockListEmpty=§6EssentialsX is not relaying any commands to other plugins. bookAuthorSet=§6Author of the book set to {0}. bookCommandDescription=Allows reopening and editing of sealed books. bookCommandUsage=/<command> [title|author [name]]\n bookCommandUsage1=/<command> +bookCommandUsage1Description=Locks/Unlocks a book-and-quill/signed book +bookCommandUsage2=/<command> author <author> +bookCommandUsage2Description=Sets the author of a signed book +bookCommandUsage3=/<command> title <title> +bookCommandUsage3Description=Sets the title of a signed book bookLocked=§6This book is now locked. bookTitleSet=§6Title of the book set to {0}. breakCommandDescription=Breaks the block you are looking at. @@ -86,12 +106,15 @@ broadcast=§6[§4Broadcast§6]§a {0} broadcastCommandDescription=Broadcasts a message to the entire server. broadcastCommandUsage=/<command> <msg> broadcastCommandUsage1=/<command> <message> +broadcastCommandUsage1Description=Broadcasts the given message to the entire server broadcastworldCommandDescription=Broadcasts a message to a world. broadcastworldCommandUsage=/<command> <world> <msg> broadcastworldCommandUsage1=/<command> <world> <msg> +broadcastworldCommandUsage1Description=Broadcasts the given message to the specified world burnCommandDescription=Set a player on fire. burnCommandUsage=/<command> <player> <seconds> burnCommandUsage1=/<command> <player> <seconds> +burnCommandUsage1Description=Sets the specified player on fire for the specified amount of seconds burnMsg=§6You set§c {0} §6on fire for§c {1} seconds§6. cannotSellNamedItem=§6You are not allowed to sell named items. cannotSellTheseNamedItems=§6You are not allowed to sell these named items\: §4{0} @@ -112,20 +135,34 @@ clearInventoryConfirmToggleOn=§6You will now be prompted to confirm inventory c clearinventoryCommandDescription=Clear all items in your inventory. clearinventoryCommandUsage=/<command> [player|*] [item[\:<data>]|*|**] [amount] clearinventoryCommandUsage1=/<command> +clearinventoryCommandUsage1Description=Clears all items in your inventory clearinventoryCommandUsage2=/<command> <player> +clearinventoryCommandUsage2Description=Clears all items from the specified player''s inventory +clearinventoryCommandUsage3=/<command> <player> <item> [amount] +clearinventoryCommandUsage3Description=Clears all (or the specified amount) of the given item from the specified player''s inventory clearinventoryconfirmtoggleCommandDescription=Toggles whether you are prompted to confirm inventory clears. clearinventoryconfirmtoggleCommandUsage=/<command> +commandArgumentOptional=§7 +commandArgumentRequired=§e commandCooldown=§cYou cannot type that command for {0}. commandDisabled=§cThe command§6 {0}§c is disabled. commandFailed=Command {0} failed\: commandHelpFailedForPlugin=Error getting help for plugin\: {0} +commandHelpLine1=§6Command Help\: §f/{0} +commandHelpLine2=§6Description\: §f{0} +commandHelpLine3=§6Usage(s); +commandHelpLine4=§6Aliases(s)\: §f{0} +commandHelpLineUsage={0} §6- {1} commandNotLoaded=§4Command {0} is improperly loaded. compassBearing=§6Bearing\: {0} ({1} degrees). compassCommandDescription=Describes your current bearing. compassCommandUsage=/<command> condenseCommandDescription=Condenses items into a more compact blocks. +condenseCommandUsage=/<command> [item] condenseCommandUsage1=/<command> +condenseCommandUsage1Description=Condenses all items in your inventory condenseCommandUsage2=/<command> <item> +condenseCommandUsage2Description=Condenses the specified item in your inventory configFileMoveError=Failed to move config.yml to backup location. configFileRenameError=Failed to rename temp file to config.yml. confirmClear=§7To §lCONFIRM§7 inventory clear, please repeat command\: §6{0} @@ -140,9 +177,11 @@ createdKit=§6Created kit §c{0} §6with §c{1} §6entries and delay §c{2} createkitCommandDescription=Create a kit in game\! createkitCommandUsage=/<command> <kitname> <delay> createkitCommandUsage1=/<command> <kitname> <delay> +createkitCommandUsage1Description=Creates a kit with the given name and delay createKitFailed=§4Error occurred whilst creating kit {0}. createKitSeparator=§m----------------------- createKitSuccess=§6Created Kit\: §f{0}\n§6Delay\: §f{1}\n§6Link\: §f{2}\n§6Copy contents in the link above into your kits.yml. +createKitUnsupported=§4NBT item serialization has been enabled, but this server is not running Paper 1.15.2+. Falling back to standard item serialization. creatingConfigFromTemplate=Creating config from template\: {0} creatingEmptyConfig=Creating empty config\: {0} creative=creative @@ -153,22 +192,33 @@ customtextCommandUsage=/<alias> - Define in bukkit.yml day=day days=days defaultBanReason=The Ban Hammer has spoken\! +deletedHomes=All homes deleted. +deletedHomesWorld=All homes in {0} deleted. deleteFileError=Could not delete file\: {0} deleteHome=§6Home§c {0} §6has been removed. deleteJail=§6Jail§c {0} §6has been removed. deleteKit=§6Kit§c {0} §6has been removed. deleteWarp=§6Warp§c {0} §6has been removed. +deletingHomes=Deleting all homes... +deletingHomesWorld=Deleting all homes in {0}... delhomeCommandDescription=Removes a home. delhomeCommandUsage=/<command> [player\:]<name> +delhomeCommandUsage1=/<command> <name> +delhomeCommandUsage1Description=Deletes your home with the given name +delhomeCommandUsage2=/<command> <player>\:<name> +delhomeCommandUsage2Description=Deletes the specified player''s home with the given name deljailCommandDescription=Removes a jail. deljailCommandUsage=/<command> <jailname> deljailCommandUsage1=/<command> <jailname> +deljailCommandUsage1Description=Deletes the jail with the given name delkitCommandDescription=Deletes the specified kit. delkitCommandUsage=/<command> <kit> delkitCommandUsage1=/<command> <kit> +delkitCommandUsage1Description=Deletes the kit with the given name delwarpCommandDescription=Deletes the specified warp. delwarpCommandUsage=/<command> <warp> delwarpCommandUsage1=/<command> <warp> +delwarpCommandUsage1Description=Deletes the warp with the given name deniedAccessCommand=§c{0} §4was denied access to command. denyBookEdit=§4You cannot unlock this book. denyChangeAuthor=§4You cannot change the author of this book. @@ -182,6 +232,28 @@ destinationNotSet=Destination not set\! disabled=disabled disabledToSpawnMob=§4Spawning this mob was disabled in the config file. disableUnlimited=§6Disabled unlimited placing of§c {0} §6for§c {1}§6. +discordCommandExecuteDescription=Executes a console command on the Minecraft server. +discordCommandExecuteArgumentCommand=The command to be executed +discordCommandExecuteReply=Executing command\: "/{0}" +discordCommandListDescription=Gets a list of online players. +discordCommandListArgumentGroup=A specific group to limit your search by +discordCommandMessageDescription=Messages a player on the Minecraft server. +discordCommandMessageArgumentUsername=The player to send the message to +discordCommandMessageArgumentMessage=The message to send to the player +discordErrorCommand=You added your bot to your server incorrectly. Please follow the tutorial in the config and add your bot using https\://essentialsx.net/discord.html\! +discordErrorCommandDisabled=That command is disabled\! +discordErrorLogin=An error occurred while logging into Discord, which has caused the plugin to disable itself\: \n{0} +discordErrorLoggerInvalidChannel=Discord console logging has been disabled due to an invalid channel definition\! If you intend to disable it, set the channel ID to "none"; otherwise check that your channel ID is correct. +discordErrorLoggerNoPerms=Discord console logger has been disabled due to insufficient permissions\! Please make sure your bot has the "Manage Webhooks" permissions on the server. After fixing that, run "/ess reload". +discordErrorNoGuild=Invalid or missing server ID\! Please follow the tutorial in the config in order to setup the plugin. +discordErrorNoGuildSize=Your bot is not in any servers\! Please follow the tutorial in the config in order to setup the plugin. +discordErrorNoPerms=Your bot cannot see or talk in any channel\! Please make sure your bot has read and write permissions in all channels you wish to use. +discordErrorNoToken=No token provided\! Please follow the tutorial in the config in order to setup the plugin. +discordErrorWebhook=An error occurred while sending messages to your console channel\! This was likely caused by accidentally deleting your console webhook. This can usually by fixed by ensuring your bot has the "Manage Webhooks" permission and running "/ess reload". +discordLoggingIn=Attempting to login to Discord... +discordLoggingInDone=Successfully logged in as {0} +discordNoSendPermission=Cannot send message in channel\: \#{0} Please ensure the bot has "Send Messages" permission in that channel\! +discordReloadInvalid=Tried to reload EssentialsX Discord config while the plugin is in an invalid state\! If you''ve modified your config, restart your server. disposal=Disposal disposalCommandDescription=Opens a portable disposal menu. disposalCommandUsage=/<command> @@ -193,10 +265,20 @@ durability=§6This tool has §c{0}§6 uses left. east=E ecoCommandDescription=Manages the server economy. ecoCommandUsage=/<command> <give|take|set|reset> <player> <amount> +ecoCommandUsage1=/<command> give <player> <amount> +ecoCommandUsage1Description=Gives the specified player the specified amount of money +ecoCommandUsage2=/<command> take <player> <amount> +ecoCommandUsage2Description=Takes the specified amount of money from the specified player +ecoCommandUsage3=/<command> set <player> <amount> +ecoCommandUsage3Description=Sets the specified player''s balance to the specified amount of money +ecoCommandUsage4=/<command> reset <player> <amount> +ecoCommandUsage4Description=Resets the specified player''s balance to the server''s starting balance editBookContents=§eYou may now edit the contents of this book. enabled=enabled enchantCommandDescription=Enchants the item the user is holding. enchantCommandUsage=/<command> <enchantmentname> [level] +enchantCommandUsage1=/<command> <enchantment name> [level] +enchantCommandUsage1Description=Enchants your held item with the given enchantment to an optional level enableUnlimited=§6Giving unlimited amount of§c {0} §6to §c{1}§6. enchantmentApplied=§6The enchantment§c {0} §6has been applied to your item in hand. enchantmentNotFound=§4Enchantment not found\! @@ -206,21 +288,46 @@ enchantments=§6Enchantments\:§r {0} enderchestCommandDescription=Lets you see inside an enderchest. enderchestCommandUsage=/<command> [player] enderchestCommandUsage1=/<command> +enderchestCommandUsage1Description=Opens your ender chest enderchestCommandUsage2=/<command> <player> +enderchestCommandUsage2Description=Opens the ender chest of the target player errorCallingCommand=Error calling the command /{0} errorWithMessage=§cError\:§4 {0} essentialsCommandDescription=Reloads essentials. essentialsCommandUsage=/<command> +essentialsCommandUsage1=/<command> reload +essentialsCommandUsage1Description=Reloads Essentials'' config +essentialsCommandUsage2=/<command> version +essentialsCommandUsage2Description=Gives information about the Essentials version +essentialsCommandUsage3=/<command> commands +essentialsCommandUsage3Description=Gives information about what commands Essentials is forwarding +essentialsCommandUsage4=/<command> debug +essentialsCommandUsage4Description=Toggles Essentials'' "debug mode" +essentialsCommandUsage5=/<command> reset <player> +essentialsCommandUsage5Description=Resets the given player''s userdata +essentialsCommandUsage6=/<command> cleanup +essentialsCommandUsage6Description=Cleans up old userdata +essentialsCommandUsage7=/<command> homes +essentialsCommandUsage7Description=Manages user homes essentialsHelp1=The file is broken and Essentials can''t open it. Essentials is now disabled. If you can''t fix the file yourself, go to http\://tiny.cc/EssentialsChat essentialsHelp2=The file is broken and Essentials can''t open it. Essentials is now disabled. If you can''t fix the file yourself, either type /essentialshelp in game or go to http\://tiny.cc/EssentialsChat essentialsReload=§6Essentials reloaded§c {0}. exp=§c{0} §6has§c {1} §6exp (level§c {2}§6) and needs§c {3} §6more exp to level up. expCommandDescription=Give, set, reset, or look at a players experience. expCommandUsage=/<command> [reset|show|set|give] [playername [amount]] +expCommandUsage1=/<command> give <player> <amount> +expCommandUsage1Description=Gives the target player the specified amount of xp +expCommandUsage2=/<command> set <playername> <amount> +expCommandUsage2Description=Sets the target player''s xp the specified amount +expCommandUsage3=/<command> show <playername> +expCommandUsage4Description=Displays the amount of xp the target player has +expCommandUsage5=/<command> reset <playername> +expCommandUsage5Description=Resets the target player''s xp to 0 expSet=§c{0} §6now has§c {1} §6exp. extCommandDescription=Extinguish players. extCommandUsage=/<command> [player] extCommandUsage1=/<command> [player] +extCommandUsage1Description=Extinguish yourself or another player if specified extinguish=§6You extinguished yourself. extinguishOthers=§6You extinguished {0}§6. failedToCloseConfig=Failed to close config {0}. @@ -231,19 +338,34 @@ feed=§6Your appetite was sated. feedCommandDescription=Satisfy the hunger. feedCommandUsage=/<command> [player] feedCommandUsage1=/<command> [player] +feedCommandUsage1Description=Fully feeds yourself or another player if specified feedOther=§6You satiated the appetite of §c{0}§6. fileRenameError=Renaming file {0} failed\! fireballCommandDescription=Throw a fireball or other assorted projectiles. fireballCommandUsage=/<command> [fireball|small|large|arrow|skull|egg|snowball|expbottle|dragon|splashpotion|lingeringpotion|trident] [speed] fireballCommandUsage1=/<command> +fireballCommandUsage1Description=Throws a regular fireball from your location +fireballCommandUsage2=/<command> <fireball|small|large|arrow|skull|egg|snowball|expbottle|dragon|splashpotion|lingeringpotion|trident> [speed] +fireballCommandUsage2Description=Throws the specified projectile from your location, with an optional speed fireworkColor=§4Invalid firework charge parameters inserted, must set a colour first. fireworkCommandDescription=Allows you to modify a stack of fireworks. fireworkCommandUsage=/<command> <<meta param>|power [amount]|clear|fire [amount]> +fireworkCommandUsage1=/<command> clear +fireworkCommandUsage1Description=Clears all effects from your held firework +fireworkCommandUsage2=/<command> power <amount> +fireworkCommandUsage2Description=Sets the power of the held firework +fireworkCommandUsage3=/<command> fire [amount] +fireworkCommandUsage3Description=Launches either one, or the amount specified, copies of the held firework +fireworkCommandUsage4=/<command> <meta> +fireworkCommandUsage4Description=Adds the given effect to the held firework fireworkEffectsCleared=§6Removed all effects from held stack. fireworkSyntax=§6Firework parameters\:§c color\:<colour> [fade\:<colour>] [shape\:<shape>] [effect\:<effect>]\n§6To use multiple colours/effects, separate values with commas\: §cred,blue,pink\n§6Shapes\:§c star, ball, large, creeper, burst §6Effects\:§c trail, twinkle. +fixedHomes=Invalid homes deleted. +fixingHomes=Deleting invalid homes... flyCommandDescription=Take off, and soar\! flyCommandUsage=/<command> [player] [on|off] flyCommandUsage1=/<command> [player] +flyCommandUsage1Description=Toggles fly for yourself or another player if specified flying=flying flyMode=§6Set fly mode§c {0} §6for {1}§6. foreverAlone=§4You have nobody to whom you can reply. @@ -255,6 +377,7 @@ gameModeInvalid=§4You need to specify a valid player/mode. gamemodeCommandDescription=Change player gamemode. gamemodeCommandUsage=/<command> <survival|creative|adventure|spectator> [player] gamemodeCommandUsage1=/<command> <survival|creative|adventure|spectator> [player] +gamemodeCommandUsage1Description=Sets the gamemode of either you or another player if specified gcCommandDescription=Reports memory, uptime and tick info. gcCommandUsage=/<command> gcfree=§6Free memory\:§c {0} MB. @@ -265,8 +388,13 @@ geoipJoinFormat=§6Player §c{0} §6comes from §c{1}§6. getposCommandDescription=Get your current coordinates or those of a player. getposCommandUsage=/<command> [player] getposCommandUsage1=/<command> [player] +getposCommandUsage1Description=Gets the coordinates of either you or another player if specified giveCommandDescription=Give a player an item. giveCommandUsage=/<command> <player> <item|numeric> [amount [itemmeta...]] +giveCommandUsage1=/<command> <player> <item> [amount] +giveCommandUsage1Description=Gives the target player 64 (or the specified amount) of the specified item +giveCommandUsage2=/<command> <player> <item> <amount> <meta> +giveCommandUsage2Description=Gives the target player the specified amount of the specified item with the given metadata geoipCantFind=§6Player §c{0} §6comes from §aan unknown country§6. geoIpErrorOnJoin=Unable to fetch GeoIP data for {0}. Please ensure that your license key and configuration are correct. geoIpLicenseMissing=No license key found\! Please visit https\://essentialsx.net/geoip for first time setup instructions. @@ -276,6 +404,7 @@ givenSkull=§6You have been given the skull of §c{0}§6. godCommandDescription=Enables your godly powers. godCommandUsage=/<command> [player] [on|off] godCommandUsage1=/<command> [player] +godCommandUsage1Description=Toggles god mode for you or another player if specified giveSpawn=§6Giving§c {0} §6of§c {1} §6to§c {2}§6. giveSpawnFailure=§4Not enough space, §c{0} {1} §4was lost. godDisabledFor=§cdisabled§6 for§c {0} @@ -289,6 +418,9 @@ hatArmor=§4You cannot use this item as a hat\! hatCommandDescription=Get some cool new headgear. hatCommandUsage=/<command> [remove] hatCommandUsage1=/<command> +hatCommandUsage1Description=Sets your hat to your currently held item +hatCommandUsage2=/<command> remove +hatCommandUsage2Description=Removes your current hat hatCurse=§4You cannot remove a hat with the curse of binding\! hatEmpty=§4You are not wearing a hat. hatFail=§4You must have something to wear in your hand. @@ -299,6 +431,7 @@ heal=§6You have been healed. healCommandDescription=Heals you or the given player. healCommandUsage=/<command> [player] healCommandUsage1=/<command> [player] +healCommandUsage1Description=Heals you or another player if specified healDead=§4You cannot heal someone who is dead\! healOther=§6Healed§c {0}§6. helpCommandDescription=Views a list of available commands. @@ -312,23 +445,36 @@ helpPlugin=§4{0}§r\: Plugin Help\: /help {1} helpopCommandDescription=Message online admins. helpopCommandUsage=/<command> <message> helpopCommandUsage1=/<command> <message> +helpopCommandUsage1Description=Sends the given message to all online admins holdBook=§4You are not holding a writable book. holdFirework=§4You must be holding a firework to add effects. holdPotion=§4You must be holding a potion to apply effects to it. holeInFloor=§4Hole in floor\! homeCommandDescription=Teleport to your home. homeCommandUsage=/<command> [player\:][name] +homeCommandUsage1=/<command> <name> +homeCommandUsage1Description=Teleports you to your home with the given name +homeCommandUsage2=/<command> <player>\:<name> +homeCommandUsage2Description=Teleports you to the specified player''s home with the given name homes=§6Homes\:§r {0} homeConfirmation=§6You already have a home named §c{0}§6\!\nTo overwrite your existing home, type the command again. homeSet=§6Home set to current location. hour=hour hours=hours +ice=§6You feel much colder... +iceCommandDescription=Cools a player off. iceCommandUsage=/<command> [player] iceCommandUsage1=/<command> +iceCommandUsage1Description=Cools you off iceCommandUsage2=/<command> <player> +iceCommandUsage2Description=Cools the given player off +iceCommandUsage3=/<command> * +iceCommandUsage3Description=Cools all online players off +iceOther=§6Chilling§c {0}§6. ignoreCommandDescription=Ignore or unignore other players. ignoreCommandUsage=/<command> <player> ignoreCommandUsage1=/<command> <player> +ignoreCommandUsage1Description=Ignores or unignores the given player ignoredList=§6Ignored\:§r {0} ignoreExempt=§4You may not ignore that player. ignorePlayer=§6You ignore player§c {0} §6from now on. @@ -363,16 +509,27 @@ inventoryClearingStack=§6Removed§c {0} §6of§c {1} §6from§c {2}§6. invseeCommandDescription=See the inventory of other players. invseeCommandUsage=/<command> <player> invseeCommandUsage1=/<command> <player> +invseeCommandUsage1Description=Opens the inventory of the specified player is=is isIpBanned=§6IP §c{0} §6is banned. internalError=§cAn internal error occurred while attempting to perform this command. itemCannotBeSold=§4That item cannot be sold to the server. itemCommandDescription=Spawn an item. itemCommandUsage=/<command> <item|numeric> [amount [itemmeta...]] +itemCommandUsage1=/<command> <item> [amount] +itemCommandUsage1Description=Gives you a full stack (or the specified amount) of the specified item +itemCommandUsage2=/<command> <item> <amount> <meta> +itemCommandUsage2Description=Gives you the specified amount of the specified item with the given metadata itemId=§6ID\:§c {0} itemloreClear=§6You have cleared this item''s lore. itemloreCommandDescription=Edit the lore of an item. itemloreCommandUsage=/<command> <add/set/clear> [text/line] [text] +itemloreCommandUsage1=/<command> add [text] +itemloreCommandUsage1Description=Adds the given text to the end of the held item''s lore +itemloreCommandUsage2=/<command> set <line number> <text> +itemloreCommandUsage2Description=Sets the specified line of the held item''s lore to the given text +itemloreCommandUsage3=/<command> clear +itemloreCommandUsage3Description=Clears the held item''s lore itemloreInvalidItem=§4You need to hold an item to edit its lore. itemloreNoLine=§4Your held item does not have lore text on line §c{0}§4. itemloreNoLore=§4Your held item does not have any lore text. @@ -384,6 +541,9 @@ itemnameClear=§6You have cleared this item''s name. itemnameCommandDescription=Names an item. itemnameCommandUsage=/<command> [name] itemnameCommandUsage1=/<command> +itemnameCommandUsage1Description=Clears the held item''s name +itemnameCommandUsage2=/<command> <name> +itemnameCommandUsage2Description=Sets the held item''s name to the given text itemnameInvalidItem=§cYou need to hold an item to rename it. itemnameSuccess=§6You have renamed your held item to "§c{0}§6". itemNotEnough1=§4You do not have enough of that item to sell. @@ -400,6 +560,7 @@ itemType=§6Item\:§c {0} §6 itemdbCommandDescription=Searches for an item. itemdbCommandUsage=/<command> <item> itemdbCommandUsage1=/<command> <item> +itemdbCommandUsage1Description=Searches the item database for the given item jailAlreadyIncarcerated=§4Person is already in jail\:§c {0} jailList=§6Jails\:§r {0} jailMessage=§4You do the crime, you do the time. @@ -408,6 +569,7 @@ jailReleased=§6Player §c{0}§6 unjailed. jailReleasedPlayerNotify=§6You have been released\! jailSentenceExtended=§6Jail time extended to §c{0}§6. jailSet=§6Jail§c {0} §6has been set. +jailWorldNotExist=§4That jail''s world does not exist. jumpEasterDisable=§6Flying wizard mode disabled. jumpEasterEnable=§6Flying wizard mode enabled. jailsCommandDescription=List all jails. @@ -418,26 +580,32 @@ jumpError=§4That would hurt your computer''s brain. kickCommandDescription=Kicks a specified player with a reason. kickCommandUsage=/<command> <player> [reason] kickCommandUsage1=/<command> <player> [reason] +kickCommandUsage1Description=Kicks the specified player with an optional reason kickDefault=Kicked from server. kickedAll=§4Kicked all players from server. kickExempt=§4You cannot kick that person. kickallCommandDescription=Kicks all players off the server except the issuer. kickallCommandUsage=/<command> [reason] kickallCommandUsage1=/<command> [reason] +kickallCommandUsage1Description=Kicks all players with an optional reason kill=§6Killed§c {0}§6. killCommandDescription=Kills specified player. killCommandUsage=/<command> <player> killCommandUsage1=/<command> <player> +killCommandUsage1Description=Kills the specified player killExempt=§4You cannot kill §c{0}§4. kitCommandDescription=Obtains the specified kit or views all available kits. kitCommandUsage=/<command> [kit] [player] kitCommandUsage1=/<command> +kitCommandUsage1Description=Lists all available kits kitCommandUsage2=/<command> <kit> [player] +kitCommandUsage2Description=Gives the specified kit to you or another player if specified kitContains=§6Kit §c{0} §6contains\: kitCost=\ §7§o({0})§r kitDelay=§m{0}§r kitError=§4There are no valid kits. kitError2=§4That kit is improperly defined. Contact an administrator. +kitError3=Cannot give kit item in kit "{0}" to user {1} as kit item requires Paper 1.15.2+ to deserialize. kitGiveTo=§6Giving kit§c {0}§6 to §c{1}§6. kitInvFull=§4Your inventory was full, placing kit on the floor. kitInvFullNoDrop=§4There is not enough room in your inventory for that kit. @@ -449,6 +617,7 @@ kitReset=§6Reset cooldown for kit §c{0}§6. kitresetCommandDescription=Resets the cooldown on the specified kit. kitresetCommandUsage=/<command> <kit> [player] kitresetCommandUsage1=/<command> <kit> [player] +kitresetCommandUsage1Description=Resets the cooldown of the specified kit for you or another player if specified kitResetOther=§6Resetting kit §c{0} §6cooldown for §c{1}§6. kits=§6Kits\:§r {0} kittycannonCommandDescription=Throw an exploding kitten at your opponent. @@ -458,6 +627,9 @@ leatherSyntax=§6Leather colour syntax\:§c color\:<red>,<green>,<blue> eg\: col lightningCommandDescription=The power of Thor. Strike at cursor or player. lightningCommandUsage=/<command> [player] [power] lightningCommandUsage1=/<command> [player] +lightningCommandUsage1Description=Strikes lighting either where you''re looking or at another player if specified +lightningCommandUsage2=/<command> <player> <power> +lightningCommandUsage2Description=Strikes lighting at the target player with the given power lightningSmited=§6Thou hast been smitten\! lightningUse=§6Smiting§c {0} listAfkTag=§7[AFK]§r @@ -466,6 +638,7 @@ listAmountHidden=§6There are §c{0}§6/§c{1}§6 out of maximum §c{2}§6 playe listCommandDescription=List all online players. listCommandUsage=/<command> [group] listCommandUsage1=/<command> [group] +listCommandUsage1Description=Lists all players on the server, or the given group if specified listGroupTag=§6{0}§r\: listHiddenTag=§7[HIDDEN]§r loadWarpError=§4Failed to load warp {0}. @@ -474,13 +647,29 @@ loomCommandDescription=Opens up a loom. loomCommandUsage=/<command> mailClear=§6To mark your mail as read, type§c /mail clear§6. mailCleared=§6Mail cleared\! +mailClearIndex=§4You must specify a number between 1-{0}. mailCommandDescription=Manages inter-player, intra-server mail. -mailCommandUsage=/<command> [read|clear|send [to] [message]|sendall [message]] +mailCommandUsage=/<command> [read|clear|clear [number]|send [to] [message]|sendtemp [to] [expire time] [message]|sendall [message]] +mailCommandUsage1=/<command> read [page] +mailCommandUsage1Description=Reads the first (or specified) page of your mail +mailCommandUsage2=/<command> clear [number] +mailCommandUsage2Description=Clears either all or the specified mail(s) +mailCommandUsage3=/<command> send <player> <message> +mailCommandUsage3Description=Sends the specified player the given message +mailCommandUsage4=/<command> sendall <message> +mailCommandUsage4Description=Sends all players the given message +mailCommandUsage5=/<command> sendtemp <player> <expire time> <message> +mailCommandUsage5Description=Sends the specified player the given message which will expire in the specified time mailDelay=Too many mails have been sent within the last minute. Maximum\: {0} +mailFormatNew=§6[§r{0}§6] §6[§r{1}§6] §r{2} +mailFormatNewTimed=§6[§e⚠§6] §6[§r{0}§6] §6[§r{1}§6] §r{2} +mailFormatNewRead=§6[§r{0}§6] §6[§r{1}§6] §7§o{2} +mailFormatNewReadTimed=§6[§e⚠§6] §6[§r{0}§6] §6[§r{1}§6] §7§o{2} mailFormat=§6[§r{0}§6] §r{1} mailMessage={0} mailSent=§6Mail sent\! mailSentTo=§c{0}§6 has been sent the following mail\: +mailSentToExpire=§c{0}§6 has been sent the following mail which will expire in §c{1}§6\: mailTooLong=§4Mail message too long. Try to keep it below 1000 characters. markMailAsRead=§6To mark your mail as read, type§c /mail clear§6. matchingIPAddress=§6The following players previously logged in from that IP address\: @@ -491,6 +680,7 @@ mayNotJailOffline=§4You may not jail offline players. meCommandDescription=Describes an action in the context of the player. meCommandUsage=/<command> <description> meCommandUsage1=/<command> <description> +meCommandUsage1Description=Describes an action meSender=me meRecipient=me minimumBalanceError=§4The minimum balance a user can have is {0}. @@ -510,6 +700,7 @@ months=months moreCommandDescription=Fills the item stack in hand to specified amount, or to maximum size if none is specified. moreCommandUsage=/<command> [amount] moreCommandUsage1=/<command> [amount] +moreCommandUsage1Description=Fills the held item to the specified amount, or its max size if none is specified moreThanZero=§4Quantities must be greater than 0. motdCommandDescription=Views the Message Of The Day. motdCommandUsage=/<command> [chapter] [page] @@ -517,6 +708,7 @@ moveSpeed=§6Set§c {0}§6 speed to§c {1} §6for §c{2}§6. msgCommandDescription=Sends a private message to the specified player. msgCommandUsage=/<command> <to> <message> msgCommandUsage1=/<command> <to> <message> +msgCommandUsage1Description=Privately sends the given message to the specified player msgDisabled=§6Receiving messages §cdisabled§6. msgDisabledFor=§6Receiving messages §cdisabled §6for §c{0}§6. msgEnabled=§6Receiving messages §cenabled§6. @@ -526,11 +718,15 @@ msgIgnore=§c{0} §4has messages disabled. msgtoggleCommandDescription=Blocks receiving all private messages. msgtoggleCommandUsage=/<command> [player] [on|off] msgtoggleCommandUsage1=/<command> [player] +msgtoggleCommandUsage1Description=Toggles fly for yourself or another player if specified multipleCharges=§4You cannot apply more than one charge to this firework. multiplePotionEffects=§4You cannot apply more than one effect to this potion. muteCommandDescription=Mutes or unmutes a player. muteCommandUsage=/<command> <player> [datediff] [reason] muteCommandUsage1=/<command> <player> +muteCommandUsage1Description=Permanently mutes the specified player or unmutes them if they were already muted +muteCommandUsage2=/<command> <player> <datediff> [reason] +muteCommandUsage2Description=Mutes the specified player for the time given with an optional reason mutedPlayer=§6Player§c {0} §6muted. mutedPlayerFor=§6Player§c {0} §6muted for§c {1}§6. mutedPlayerForReason=§6Player§c {0} §6muted for§c {1}§6. Reason\: §c{2} @@ -545,13 +741,26 @@ muteNotifyReason=§c{0} §6has muted player §c{1}§6. Reason\: §c{2} nearCommandDescription=Lists the players near by or around a player. nearCommandUsage=/<command> [playername] [radius] nearCommandUsage1=/<command> +nearCommandUsage1Description=Lists all players within the default near radius of you +nearCommandUsage2=/<command> <radius> +nearCommandUsage2Description=Lists all players within the given radius of you nearCommandUsage3=/<command> <player> +nearCommandUsage3Description=Lists all players within the default near radius of the specified player +nearCommandUsage4=/<command> <player> <radius> +nearCommandUsage4Description=Lists all players within the given radius of the specified player nearbyPlayers=§6Players nearby\:§r {0} negativeBalanceError=§4User is not allowed to have a negative balance. nickChanged=§6Nickname changed. nickCommandDescription=Change your nickname or that of another player. nickCommandUsage=/<command> [player] <nickname|off> nickCommandUsage1=/<command> <nickname> +nickCommandUsage1Description=Changes your nickname to the given text +nickCommandUsage2=/<command> off +nickCommandUsage2Description=Removes your nickname +nickCommandUsage3=/<command> <player> <nickname> +nickCommandUsage3Description=Changes the specified player''s nickname to the given text +nickCommandUsage4=/<command> <player> off +nickCommandUsage4Description=Removes the given player''s nickname nickDisplayName=§4You have to enable change-displayname in Essentials config. nickInUse=§4That name is already in use. nickNameBlacklist=§4That nickname is not allowed. @@ -604,6 +813,8 @@ noWarpsDefined=§6No warps defined. nuke=§5May death rain upon them. nukeCommandDescription=May death rain upon them. nukeCommandUsage=/<command> [player] +nukeCommandUsage1=/<command> [players...] +nukeCommandUsage1Description=Sends a nuke over all players or another player(s), if specified numberRequired=A number goes there, silly. onlyDayNight=/time only supports day/night. onlyPlayers=§4Only in-game players can use §c{0}§4. @@ -617,6 +828,7 @@ passengerTeleportFail=§4You cannot be teleported while carrying passengers. payCommandDescription=Pays another player from your balance. payCommandUsage=/<command> <player> <amount> payCommandUsage1=/<command> <player> <amount> +payCommandUsage1Description=Pays the specified player the given amount of money payConfirmToggleOff=§6You will no longer be prompted to confirm payments. payConfirmToggleOn=§6You will now be prompted to confirm payments. payDisabledFor=§6Disabled accepting payments for §c{0}§6. @@ -630,6 +842,7 @@ payconfirmtoggleCommandUsage=/<command> paytoggleCommandDescription=Toggles whether you are accepting payments. paytoggleCommandUsage=/<command> [player] paytoggleCommandUsage1=/<command> [player] +paytoggleCommandUsage1Description=Toggles if you, or another player if specified, are accepting payments pendingTeleportCancelled=§4Pending teleportation request cancelled. pingCommandDescription=Pong\! pingCommandUsage=/<command> @@ -654,6 +867,12 @@ posPitch=§6Pitch\: {0} (Head angle) possibleWorlds=§6Possible worlds are the numbers §c0§6 through §c{0}§6. potionCommandDescription=Adds custom potion effects to a potion. potionCommandUsage=/<command> <clear|apply|effect\:<effect> power\:<power> duration\:<duration>> +potionCommandUsage1=/<command> clear +potionCommandUsage1Description=Clears all effects on the held potion +potionCommandUsage2=/<command> apply +potionCommandUsage2Description=Applies all effects on the held potion onto you without consuming the potion +potionCommandUsage3=/<command> effect\:<effect> power\:<power> duration\:<duration> +potionCommandUsage3Description=Applies the given potion meta to the held potion posX=§6X\: {0} (+East <-> -West) posY=§6Y\: {0} (+Up <-> -Down) posYaw=§6Yaw\: {0} (Rotation) @@ -672,12 +891,34 @@ powerToolsDisabled=§6All of your power tools have been disabled. powerToolsEnabled=§6All of your power tools have been enabled. powertoolCommandDescription=Assigns a command to the item in hand. powertoolCommandUsage=/<command> [l\:|a\:|r\:|c\:|d\:][command] [arguments] - {player} can be replaced by name of a clicked player. +powertoolCommandUsage1=/<command> l\: +powertoolCommandUsage1Description=Lists all powertools on the held item +powertoolCommandUsage2=/<command> d\: +powertoolCommandUsage2Description=Deletes all powertools on the held item +powertoolCommandUsage3=/<command> r\:<cmd> +powertoolCommandUsage3Description=Removes the given command from the held item +powertoolCommandUsage4=/<command> <cmd> +powertoolCommandUsage4Description=Sets the powertool command of the held item to the given command +powertoolCommandUsage5=/<command> a\:<cmd> +powertoolCommandUsage5Description=Adds the given powertool command to the held item powertooltoggleCommandDescription=Enables or disables all current powertools. powertooltoggleCommandUsage=/<command> ptimeCommandDescription=Adjust player''s client time. Add @ prefix to fix. ptimeCommandUsage=/<command> [list|reset|day|night|dawn|17\:30|4pm|4000ticks] [player|*] +ptimeCommandUsage1=/<command> list [player|*] +ptimeCommandUsage1Description=Lists the player time for either you or other player(s) if specified +ptimeCommandUsage2=/<command> <time> [player|*] +ptimeCommandUsage2Description=Sets the time for you or other player(s) if specified to the given time +ptimeCommandUsage3=/<command> reset [player|*] +ptimeCommandUsage3Description=Resets the time for you or other player(s) if specified pweatherCommandDescription=Adjust a player''s weather pweatherCommandUsage=/<command> [list|reset|storm|sun|clear] [player|*] +pweatherCommandUsage1=/<command> list [player|*] +pweatherCommandUsage1Description=Lists the player weather for either you or other player(s) if specified +pweatherCommandUsage2=/<command> <storm|sun> [player|*] +pweatherCommandUsage2Description=Sets the weather for you or other player(s) if specified to the given weather +pweatherCommandUsage3=/<command> reset [player|*] +pweatherCommandUsage3Description=Resets the weather for you or other player(s) if specified pTimeCurrent=§c{0}§6''s time is§c {1}§6. pTimeCurrentFixed=§c{0}§6''s time is fixed to§c {1}§6. pTimeNormal=§c{0}§6''s time is normal and matches the server. @@ -697,17 +938,21 @@ questionFormat=§2[Question]§r {0} rCommandDescription=Quickly reply to the last player to message you. rCommandUsage=/<command> <message> rCommandUsage1=/<command> <message> +rCommandUsage1Description=Replies to the last player to message you with the given text radiusTooBig=§4Radius is too big\! Maximum radius is§c {0}§4. readNextPage=§6Type§c /{0} {1} §6to read the next page. realName=§f{0}§r§6 is §f{1} realnameCommandDescription=Displays the username of a user based on nick. realnameCommandUsage=/<command> <nickname> realnameCommandUsage1=/<command> <nickname> +realnameCommandUsage1Description=Displays the username of a user based on the given nickname recentlyForeverAlone=§4{0} recently went offline. recipe=§6Recipe for §c{0}§6 (§c{1}§6 of §c{2}§6) recipeBadIndex=There is no recipe by that number. recipeCommandDescription=Displays how to craft items. recipeCommandUsage=/<command> <item> [number] +recipeCommandUsage1=/<command> <item> [page] +recipeCommandUsage1Description=Displays how to craft the given item recipeFurnace=§6Smelt\: §c{0}§6. recipeGrid=§c{0}X §6| §{1}X §6| §{2}X recipeGridItem=§c{0}X §6is §c{1} @@ -718,15 +963,23 @@ recipeShapeless=§6Combine §c{0} recipeWhere=§6Where\: {0} removeCommandDescription=Removes entities in your world. removeCommandUsage=/<command> <all|tamed|named|drops|arrows|boats|minecarts|xp|paintings|itemframes|endercrystals|monsters|animals|ambient|mobs|[mobType]> [radius|world] +removeCommandUsage1=/<command> <mob type> [world] +removeCommandUsage1Description=Removes all of the given mob type in the current world or another one if specified +removeCommandUsage2=/<command> <mob type> <radius> [world] +removeCommandUsage2Description=Removes the given mob type within the given radius in the current world or another one if specified removed=§6Removed§c {0} §6entities. repair=§6You have successfully repaired your\: §c{0}§6. repairAlreadyFixed=§4This item does not need repairing. repairCommandDescription=Repairs the durability of one or all items. repairCommandUsage=/<command> [hand|all] repairCommandUsage1=/<command> +repairCommandUsage1Description=Repairs the held item +repairCommandUsage2=/<command> all +repairCommandUsage2Description=Repairs all items in your inventory repairEnchanted=§4You are not allowed to repair enchanted items. repairInvalidType=§4This item cannot be repaired. repairNone=§4There were no items that needed repairing. +replyFromDiscord=**Reply from {0}\:** `{1}` replyLastRecipientDisabled=§6Replying to last message recipient §cdisabled§6. replyLastRecipientDisabledFor=§6Replying to last message recipient §cdisabled §6for §c{0}§6. replyLastRecipientEnabled=§6Replying to last message recipient §cenabled§6. @@ -746,6 +999,7 @@ rest=§6You feel well rested. restCommandDescription=Rests you or the given player. restCommandUsage=/<command> [player] restCommandUsage1=/<command> [player] +restCommandUsage1Description=Resets the time since rest of you or another player if specified restOther=§6Resting§c {0}§6. returnPlayerToJailError=§4Error occurred when trying to return player§c {0} §4to jail\: §c{1}§4\! rtoggleCommandDescription=Change whether the recipient of the reply is last recipient or last sender @@ -759,10 +1013,20 @@ seenAccounts=§6Player has also been known as\:§c {0} seenCommandDescription=Shows the last logout time of a player. seenCommandUsage=/<command> <playername> seenCommandUsage1=/<command> <playername> +seenCommandUsage1Description=Shows the logout time, ban, mute, and UUID information of the specified player seenOffline=§6Player§c {0} §6has been §4offline§6 since §c{1}§6. seenOnline=§6Player§c {0} §6has been §aonline§6 since §c{1}§6. sellBulkPermission=§6You do not have permission to bulk sell. sellCommandDescription=Sells the item currently in your hand. +sellCommandUsage=/<command> <<itemname>|<id>|hand|inventory|blocks> [amount] +sellCommandUsage1=/<command> <itemname> [amount] +sellCommandUsage1Description=Sells all (or the given amount, if specified) of the given item in your inventory +sellCommandUsage2=/<command> hand [amount] +sellCommandUsage2Description=Sells all (or the given amount, if specified) of the held item +sellCommandUsage3=/<command> all +sellCommandUsage3Description=Sells all possible items in your inventory +sellCommandUsage4=/<command> blocks [amount] +sellCommandUsage4Description=Sells all (or the given amount, if specified) of blocks in your inventory sellHandPermission=§6You do not have permission to hand sell. serverFull=Server is full\! serverReloading=There''s a good chance you''re reloading your server right now. If that''s the case, why do you hate yourself? Expect no support from the EssentialsX team when using /reload. @@ -778,18 +1042,34 @@ setBalOthers=§aYou set {0}§a''s balance to {1}. setSpawner=§6Changed spawner type to§c {0}§6. sethomeCommandDescription=Set your home to your current location. sethomeCommandUsage=/<command> [[player\:]name] +sethomeCommandUsage1=/<command> <name> +sethomeCommandUsage1Description=Sets your home with the given name at your location +sethomeCommandUsage2=/<command> <player>\:<name> +sethomeCommandUsage2Description=Sets the specified player''s home with the given name at your location setjailCommandDescription=Creates a jail where you specified named [jailname]. setjailCommandUsage=/<command> <jailname> setjailCommandUsage1=/<command> <jailname> +setjailCommandUsage1Description=Sets the jail with the specified name to your location settprCommandDescription=Set the random teleport location and parameters. settprCommandUsage=/<command> [center|minrange|maxrange] [value] +settprCommandUsage1=/<command> center +settprCommandUsage1Description=Sets the random teleport center to your location +settprCommandUsage2=/<command> minrange <radius> +settprCommandUsage2Description=Sets the minimum random teleport radius to the given value +settprCommandUsage3=/<command> maxrange <radius> +settprCommandUsage3Description=Sets the maximum random teleport radius to the given value settpr=§6Set random teleport center. settprValue=§6Set random teleport §c{0}§6 to §c{1}§6. setwarpCommandDescription=Creates a new warp. setwarpCommandUsage=/<command> <warp> setwarpCommandUsage1=/<command> <warp> +setwarpCommandUsage1Description=Sets the warp with the specified name to your location setworthCommandDescription=Set the sell value of an item. setworthCommandUsage=/<command> [itemname|id] <price> +setworthCommandUsage1=/<command> <price> +setworthCommandUsage1Description=Sets the worth of your held item to the given price +setworthCommandUsage2=/<command> <itemname> <price> +setworthCommandUsage2Description=Sets the worth of the specified item to the given price sheepMalformedColor=§4Malformed colour. shoutDisabled=§6Shout mode §cdisabled§6. shoutDisabledFor=§6Shout mode §cdisabled §6for §c{0}§6. @@ -801,6 +1081,7 @@ editsignCommandClearLine=§6Cleared line§c {0}§6. showkitCommandDescription=Show contents of a kit. showkitCommandUsage=/<command> <kitname> showkitCommandUsage1=/<command> <kitname> +showkitCommandUsage1Description=Displays a summary of the items in the specified kit editsignCommandDescription=Edits a sign in the world. editsignCommandLimit=§4Your provided text is too big to fit on the target sign. editsignCommandNoLine=§4You must enter a line number between §c1-4§4. @@ -811,6 +1092,14 @@ editsignCopyLine=§6Copied line §c{0} §6of sign\! Paste it with §c/{1} paste editsignPaste=§6Sign pasted\! editsignPasteLine=§6Pasted line §c{0} §6of sign\! editsignCommandUsage=/<command> <set/clear/copy/paste> [line number] +editsignCommandUsage1=/<command> set <line number> <text> +editsignCommandUsage1Description=Sets the specified line of the target sign to the given text +editsignCommandUsage2=/<command> clear <line number> +editsignCommandUsage2Description=Clears the specified line of the target sign +editsignCommandUsage3=/<command> copy [line number] +editsignCommandUsage3Description=Copies the all (or the specified line) of the target sign to your clipboard +editsignCommandUsage4=/<command> paste [line number] +editsignCommandUsage4Description=Pastes your clipboard to the entire (or the specified line) of the target sign signFormatFail=§4[{0}] signFormatSuccess=§1[{0}] signFormatTemplate=[{0}] @@ -823,7 +1112,9 @@ skullChanged=§6Skull changed to §c{0}§6. skullCommandDescription=Set the owner of a player skull skullCommandUsage=/<command> [owner] skullCommandUsage1=/<command> +skullCommandUsage1Description=Gets your own skull skullCommandUsage2=/<command> <player> +skullCommandUsage2Description=Gets the skull of the specified player slimeMalformedSize=§4Malformed size. smithingtableCommandDescription=Opens up a smithing table. smithingtableCommandUsage=/<command> @@ -833,22 +1124,34 @@ socialSpyMutedPrefix=§f[§6SS§f] §7(muted) §r socialspyCommandDescription=Toggles if you can see msg/mail commands in chat. socialspyCommandUsage=/<command> [player] [on|off] socialspyCommandUsage1=/<command> [player] +socialspyCommandUsage1Description=Toggles social spy for yourself or another player if specified socialSpyPrefix=§f[§6SS§f] §r soloMob=§4That mob likes to be alone. spawned=spawned spawnerCommandDescription=Change the mob type of a spawner. spawnerCommandUsage=/<command> <mob> [delay] spawnerCommandUsage1=/<command> <mob> [delay] +spawnerCommandUsage1Description=Changes the mob type (and optionally, the delay) of the spawner you''re looking at spawnmobCommandDescription=Spawns a mob. spawnmobCommandUsage=/<command> <mob>[\:data][,<mount>[\:data]] [amount] [player] +spawnmobCommandUsage1=/<command> <mob>[\:data] [amount] [player] +spawnmobCommandUsage1Description=Spawns one (or the specified amount) of the given mob at your location (or another player if specified) +spawnmobCommandUsage2=/<command> <mob>[\:data],<mount>[\:data] [amount] [player] +spawnmobCommandUsage2Description=Spawns one (or the specified amount) of the given mob riding the given mob at your location (or another player if specified) spawnSet=§6Spawn location set for group§c {0}§6. spectator=spectator speedCommandDescription=Change your speed limits. speedCommandUsage=/<command> [type] <speed> [player] +speedCommandUsage1=/<command> <speed> +speedCommandUsage1Description=Sets either your fly or walk speed to the given speed +speedCommandUsage2=/<command> <type> <speed> [player] +speedCommandUsage2Description=Sets either the specified type of speed to the given speed for you or another player if specified stonecutterCommandDescription=Opens up a stonecutter. stonecutterCommandUsage=/<command> sudoCommandDescription=Make another user perform a command. sudoCommandUsage=/<command> <player> <command [args]> +sudoCommandUsage1=/<command> <player> <command> [args] +sudoCommandUsage1Description=Makes the specified player run the given command sudoExempt=§4You cannot sudo this user. sudoRun=§6Forcing§c {0} §6to run\:§r /{1} suicideCommandDescription=Causes you to perish. @@ -887,27 +1190,42 @@ tempbanExemptOffline=§4You may not tempban offline players. tempbanJoin=You are banned from this server for {0}. Reason\: {1} tempBanned=§cYou have been temporarily banned for§r {0}\:\n§r{2} tempbanCommandDescription=Temporary ban a user. +tempbanCommandUsage=/<command> <playername> <datediff> [reason] +tempbanCommandUsage1=/<command> <player> <datediff> [reason] +tempbanCommandUsage1Description=Bans the given player for the specified amount of time with an optional reason tempbanipCommandDescription=Temporarily ban an IP Address. +tempbanipCommandUsage=/<command> <playername> <datediff> [reason] +tempbanipCommandUsage1=/<command> <player|ip-address> <datediff> [reason] +tempbanipCommandUsage1Description=Bans the given IP address for the specified amount of time with an optional reason thunder=§6You§c {0} §6thunder in your world. thunderCommandDescription=Enable/disable thunder. thunderCommandUsage=/<command> <true/false> [duration] +thunderCommandUsage1=/<command> <true|false> [duration] +thunderCommandUsage1Description=Enables/disables thunder for an optional duration thunderDuration=§6You§c {0} §6thunder in your world for§c {1} §6seconds. timeBeforeHeal=§4Time before next heal\:§c {0}§4. timeBeforeTeleport=§4Time before next teleport\:§c {0}§4. timeCommandDescription=Display/Change the world time. Defaults to current world. timeCommandUsage=/<command> [set|add] [day|night|dawn|17\:30|4pm|4000ticks] [worldname|all] timeCommandUsage1=/<command> +timeCommandUsage1Description=Displays the times in all worlds +timeCommandUsage2=/<command> set <time> [world|all] +timeCommandUsage2Description=Sets the time in the current (or specified) world to the given time +timeCommandUsage3=/<command> add <time> [world|all] +timeCommandUsage3Description=Adds the given time to the current (or specified) world''s time timeFormat=§c{0}§6 or §c{1}§6 or §c{2}§6 timeSetPermission=§4You are not authorised to set the time. timeSetWorldPermission=§4You are not authorised to set the time in world ''{0}''. timeWorldAdd=§6The time was moved forward by§c {0} §6in\: §c{1}§6. timeWorldCurrent=§6The current time in§c {0} §6is §c{1}§6. +timeWorldCurrentSign=§6The current time is §c{0}§6. timeWorldSet=§6The time was set to§c {0} §6in\: §c{1}§6. togglejailCommandDescription=Jails/Unjails a player, TPs them to the jail specified. togglejailCommandUsage=/<command> <player> <jailname> [datediff] toggleshoutCommandDescription=Toggles whether you are talking in shout mode toggleshoutCommandUsage=/<command> [player] [on|off] toggleshoutCommandUsage1=/<command> [player] +toggleshoutCommandUsage1Description=Toggles shout mode for yourself or another player if specified topCommandDescription=Teleport to the highest block at your current position. topCommandUsage=/<command> totalSellableAll=§aThe total worth of all sellable items and blocks is §c{1}§a. @@ -917,59 +1235,81 @@ totalWorthBlocks=§aSold all blocks for a total worth of §c{1}§a. tpCommandDescription=Teleport to a player. tpCommandUsage=/<command> <player> [otherplayer] tpCommandUsage1=/<command> <player> +tpCommandUsage1Description=Teleports you to the specified player +tpCommandUsage2=/<command> <player> <other player> +tpCommandUsage2Description=Teleports the first specified player to the second tpaCommandDescription=Request to teleport to the specified player. tpaCommandUsage=/<command> <player> tpaCommandUsage1=/<command> <player> +tpaCommandUsage1Description=Requests to teleport to the specified player tpaallCommandDescription=Requests all players online to teleport to you. tpaallCommandUsage=/<command> <player> tpaallCommandUsage1=/<command> <player> +tpaallCommandUsage1Description=Requests for all players to teleport to you tpacancelCommandDescription=Cancel all outstanding teleport requests. Specify [player] to cancel requests with them. tpacancelCommandUsage=/<command> [player] tpacancelCommandUsage1=/<command> +tpacancelCommandUsage1Description=Cancels all your outstanding teleport requests tpacancelCommandUsage2=/<command> <player> +tpacancelCommandUsage2Description=Cancels all your outstanding teleport request with the specified player tpacceptCommandDescription=Accepts a teleport request. tpacceptCommandUsage=/<command> [otherplayer] tpacceptCommandUsage1=/<command> +tpacceptCommandUsage1Description=Accepts an incoming teleport request tpahereCommandDescription=Request that the specified player teleport to you. tpahereCommandUsage=/<command> <player> tpahereCommandUsage1=/<command> <player> +tpahereCommandUsage1Description=Requests for the specified player to teleport to you tpallCommandDescription=Teleport all online players to another player. tpallCommandUsage=/<command> [player] tpallCommandUsage1=/<command> [player] +tpallCommandUsage1Description=Teleports all players to you, or another player if specified tpautoCommandDescription=Automatically accept teleportation requests. tpautoCommandUsage=/<command> [player] tpautoCommandUsage1=/<command> [player] +tpautoCommandUsage1Description=Toggles if tpa requests are auto accepted for yourself or another player if specified tpdenyCommandDescription=Reject a teleport request. tpdenyCommandUsage=/<command> tpdenyCommandUsage1=/<command> +tpdenyCommandUsage1Description=Rejects an incoming teleport request tphereCommandDescription=Teleport a player to you. tphereCommandUsage=/<command> <player> tphereCommandUsage1=/<command> <player> +tphereCommandUsage1Description=Teleports the specified player to you tpoCommandDescription=Teleport override for tptoggle. tpoCommandUsage=/<command> <player> [otherplayer] tpoCommandUsage1=/<command> <player> +tpoCommandUsage1Description=Teleports the specified player to you whilst overriding their preferences +tpoCommandUsage2=/<command> <player> <other player> +tpoCommandUsage2Description=Teleports the first specified player to the second whilst overriding their preferences tpofflineCommandDescription=Teleport to a player''s last known logout location tpofflineCommandUsage=/<command> <player> tpofflineCommandUsage1=/<command> <player> +tpofflineCommandUsage1Description=Teleports you to the specified player''s logout location tpohereCommandDescription=Teleport here override for tptoggle. tpohereCommandUsage=/<command> <player> tpohereCommandUsage1=/<command> <player> +tpohereCommandUsage1Description=Teleports the specified player to you whilst overriding their preferences tpposCommandDescription=Teleport to coordinates. tpposCommandUsage=/<command> <x> <y> <z> [yaw] [pitch] [world] tpposCommandUsage1=/<command> <x> <y> <z> [yaw] [pitch] [world] +tpposCommandUsage1Description=Teleports you to the specified location at an optional yaw, pitch, and/or world tprCommandDescription=Teleport randomly. tprCommandUsage=/<command> tprCommandUsage1=/<command> +tprCommandUsage1Description=Teleports you to a random location tprSuccess=§6Teleporting to a random location... tps=§6Current TPS \= {0} tptoggleCommandDescription=Blocks all forms of teleportation. tptoggleCommandUsage=/<command> [player] [on|off] tptoggleCommandUsage1=/<command> [player] +tptoggleCommandUsageDescription=Toggles if teleports are enabled for yourself or another player if specified tradeSignEmpty=§4The trade sign has nothing available for you. tradeSignEmptyOwner=§4There is nothing to collect from this trade sign. treeCommandDescription=Spawn a tree where you are looking. treeCommandUsage=/<command> <tree|birch|redwood|redmushroom|brownmushroom|jungle|junglebush|swamp> treeCommandUsage1=/<command> <tree|birch|redwood|redmushroom|brownmushroom|jungle|junglebush|swamp> +treeCommandUsage1Description=Spawns a tree of the specified type where you''re looking treeFailure=§4Tree generation failure. Try again on grass or dirt. treeSpawned=§6Tree spawned. true=§atrue§r @@ -982,15 +1322,23 @@ unableToSpawnMob=§4Unable to spawn mob. unbanCommandDescription=Unbans the specified player. unbanCommandUsage=/<command> <player> unbanCommandUsage1=/<command> <player> +unbanCommandUsage1Description=Unbans the specified player unbanipCommandDescription=Unbans the specified IP address. unbanipCommandUsage=/<command> <address> unbanipCommandUsage1=/<command> <address> +unbanipCommandUsage1Description=Unbans the specified IP address unignorePlayer=§6You are not ignoring player§c {0} §6anymore. unknownItemId=§4Unknown item id\:§r {0}§4. unknownItemInList=§4Unknown item {0} in {1} list. unknownItemName=§4Unknown item name\: {0}. unlimitedCommandDescription=Allows the unlimited placing of items. unlimitedCommandUsage=/<command> <list|item|clear> [player] +unlimitedCommandUsage1=/<command> list [player] +unlimitedCommandUsage1Description=Displays a list of unlimited items for yourself or another player if specified +unlimitedCommandUsage2=/<command> <item> [player] +unlimitedCommandUsage2Description=Toggles if the given item is unlimited for yourself or another player if specified +unlimitedCommandUsage3=/<command> clear [player] +unlimitedCommandUsage3Description=Clears all unlimited items for yourself or another player if specified unlimitedItemPermission=§4No permission for unlimited item §c{0}§4. unlimitedItems=§6Unlimited items\:§r unmutedPlayer=§6Player§c {0} §6unmuted. @@ -1019,6 +1367,7 @@ vanish=§6Vanish for {0}§6\: {1} vanishCommandDescription=Hide yourself from other players. vanishCommandUsage=/<command> [player] [on|off] vanishCommandUsage1=/<command> [player] +vanishCommandUsage1Description=Toggles vanish for yourself or another player if specified vanished=§6You are now completely invisible to normal users, and hidden from in-game commands. versionCheckDisabled=§6Update checking disabled in config. versionCustom=§6Unable to check your version\! Self-built? Build information\: §c{0}§6. @@ -1035,6 +1384,7 @@ versionOutputFine=§6{0} version\: §a{1} versionOutputWarn=§6{0} version\: §c{1} versionOutputUnsupported=§d{0} §6version\: §d{1} versionOutputUnsupportedPlugins=§6You are running §dunsupported plugins§6\! +versionOutputEconLayer=§6Economy Layer\: §r{0} versionMismatch=§4Version mismatch\! Please update {0} to the same version. versionMismatchAll=§4Version mismatch\! Please update all Essentials jars to the same version. versionReleaseLatest=§6You''re running the latest stable version of EssentialsX\! @@ -1047,11 +1397,16 @@ voiceSilencedReasonTime=§6Your voice has been silenced for {0}\! Reason\: §c{1 walking=walking warpCommandDescription=List all warps or warp to the specified location. warpCommandUsage=/<command> <pagenumber|warp> [player] +warpCommandUsage1=/<command> [page] +warpCommandUsage1Description=Gives a list of all warps on either the first or specified page +warpCommandUsage2=/<command> <warp> [player] +warpCommandUsage2Description=Teleports you or a specified player to the given warp warpDeleteError=§4Problem deleting the warp file. warpInfo=§6Information for warp§c {0}§6\: warpinfoCommandDescription=Finds location information for a specified warp. warpinfoCommandUsage=/<command> <warp> warpinfoCommandUsage1=/<command> <warp> +warpinfoCommandUsage1Description=Provides information about the given warp warpingTo=§6Warping to§c {0}§6. warpList={0} warpListPermission=§4You do not have permission to list warps. @@ -1061,9 +1416,13 @@ warps=§6Warps\:§r {0} warpsCount=§6There are§c {0} §6warps. Showing page §c{1} §6of §c{2}§6. weatherCommandDescription=Sets the weather. weatherCommandUsage=/<command> <storm/sun> [duration] +weatherCommandUsage1=/<command> <storm|sun> [duration] +weatherCommandUsage1Description=Sets the weather to the given type for an optional duration warpSet=§6Warp§c {0} §6set. warpUsePermission=§4You do not have permission to use that warp. weatherInvalidWorld=World named {0} not found\! +weatherSignStorm=§6Weather\: §cstormy§6. +weatherSignSun=§6Weather\: §csunny§6. weatherStorm=§6You set the weather to §cstorm§6 in§c {0}§6. weatherStormFor=§6You set the weather to §cstorm§6 in§c {0} §6for§c {1} seconds§6. weatherSun=§6You set the weather to §csun§6 in§c {0}§6. @@ -1075,6 +1434,7 @@ whoisBanned=§6 - Banned\:§r {0} whoisCommandDescription=Determine the username behind a nickname. whoisCommandUsage=/<command> <nickname> whoisCommandUsage1=/<command> <player> +whoisCommandUsage1Description=Gives basic information about the specified player whoisExp=§6 - Exp\:§r {0} (Level {1}) whoisFly=§6 - Fly mode\:§r {0} ({1}) whoisSpeed=§6 - Speed\:§r {0} @@ -1100,9 +1460,20 @@ workbenchCommandUsage=/<command> worldCommandDescription=Switch between worlds. worldCommandUsage=/<command> [world] worldCommandUsage1=/<command> +worldCommandUsage1Description=Teleports to your corresponding location in the nether or overworld +worldCommandUsage2=/<command> <world> +worldCommandUsage2Description=Teleports to your location in the given world worth=§aStack of {0} worth §c{1}§a ({2} item(s) at {3} each) worthCommandDescription=Calculates the worth of items in hand or as specified. worthCommandUsage=/<command> <<itemname>|<id>|hand|inventory|blocks> [-][amount] +worthCommandUsage1=/<command> <itemname> [amount] +worthCommandUsage1Description=Checks the worth of all (or the given amount, if specified) of the given item in your inventory +worthCommandUsage2=/<command> hand [amount] +worthCommandUsage2Description=Checks the worth of all (or the given amount, if specified) of the held item +worthCommandUsage3=/<command> all +worthCommandUsage3Description=Checks the worth of all possible items in your inventory +worthCommandUsage4=/<command> blocks [amount] +worthCommandUsage4Description=Checks the worth of all (or the given amount, if specified) of blocks in your inventory worthMeta=§aStack of {0} with metadata of {1} worth §c{2}§a ({3} item(s) at {4} each) worthSet=§6Worth value set year=year diff --git a/Essentials/src/main/resources/messages_es.properties b/Essentials/src/main/resources/messages_es.properties index 504cb7c40b3..3b3d9c8aa84 100644 --- a/Essentials/src/main/resources/messages_es.properties +++ b/Essentials/src/main/resources/messages_es.properties @@ -10,6 +10,7 @@ afkCommandDescription=Te pone como ausente. afkCommandUsage=/<command> [jugador/mensaje...] afkCommandUsage1=/<command> [message] afkCommandUsage1Description=Cambia tu estado de ausente con un motivo opcional +afkCommandUsage2=/<comando> <jugador> [mensaje] afkCommandUsage2Description=Alterna el estado de afk de el jugador especificado con una razón opcional alertBroke=roto\: alertFormat=§3[{0}] §f {1} §6 {2} en\: {3} @@ -50,12 +51,15 @@ balance=§aDinero\:§c {0} balanceCommandDescription=Muestra el saldo actual de un jugador. balanceCommandUsage=/<command> [jugador] balanceCommandUsage1=/<command> +balanceCommandUsage1Description=Establece tu saldo actual balanceCommandUsage2=/<command> <jugador> balanceCommandUsage2Description=Muestra el saldo de un jugador especificado balanceOther=§aDinero de {0} §a\:§c {1} balanceTop=§6Ranking de economías ({0}) balanceTopLine={0}. {1}, {2} balancetopCommandDescription=Obtiene los valores más altos de dinero. +balancetopCommandUsage=/<comando> [página] +balancetopCommandUsage1=/<comando> [página] balancetopCommandUsage1Description=Muestra la primera (o especificada) página de el top valores de saldo banCommandDescription=Banea a un jugador. banCommandUsage=/<command> <jugador> [razón] @@ -67,6 +71,8 @@ banFormat=§4Baneado\: §r {0} banIpJoin=Your IP address is banned from this server. Reason\: {0} banJoin=Estás baneado de este servidor. Motivo\: {0} banipCommandDescription=Banea una dirección IP. +banipCommandUsage=/<comando> <dirección> [motivo] +banipCommandUsage1=/<comando> <dirección> [motivo] banipCommandUsage1Description=Banea la dirección IP especificada con una razón opcional bed=§ocama§r bedMissing=§cTu cama no esta, se encuentra obstruída o no esta segura @@ -88,7 +94,9 @@ bookCommandDescription=Permite reabrir y editar libros sellados. bookCommandUsage=/<command> [título|autor [nombre]] bookCommandUsage1=/<command> bookCommandUsage1Description=Bloquea/desbloquea un libro con pluma/libro firmado +bookCommandUsage2=/<comando> author <autor> bookCommandUsage2Description=Establece el autor de un libro firmado +bookCommandUsage3=/<comando> title <título> bookCommandUsage3Description=Establece el título de un libro firmado bookLocked=§6El libro ha sido bloqueado. bookTitleSet=§6Ahora el título del libro es {0}. @@ -98,12 +106,15 @@ broadcast=§6[§4Aviso§6]§a {0} broadcastCommandDescription=Transmite un mensaje a todo el servidor. broadcastCommandUsage=/<command> <mensaje> broadcastCommandUsage1=/<command> <mensaje> +broadcastCommandUsage1Description=Retransmite el mensaje a todo el servidor broadcastworldCommandDescription=Transmite un mensaje a un mundo. broadcastworldCommandUsage=/<command> <mundo> <mensaje> broadcastworldCommandUsage1=/<command> <mundo> <mensaje> +broadcastworldCommandUsage1Description=Retransmite el mensaje al mundo especificado burnCommandDescription=Prender fuego a un jugador. burnCommandUsage=/<command> <jugador> <segundos> burnCommandUsage1=/<command> <jugador> <segundos> +burnCommandUsage1Description=Prende en llamas al jugador especificado por la cantidad especificada de segundos burnMsg=§7Has puesto a {0} en fuego durante {1} segundos. cannotSellNamedItem=§4No tienes permiso para vender un ítem nombrado. cannotSellTheseNamedItems=§6No tienes permiso para vender estos ítems nombrados\: §4{0} @@ -125,17 +136,26 @@ clearinventoryCommandDescription=Desecha todos los objetos de tu inventario. clearinventoryCommandUsage=/<command> [jugador|*] [item[\:<data>]|*|**] [cantidad] clearinventoryCommandUsage1=/<command> clearinventoryCommandUsage2=/<command> <jugador> +clearinventoryCommandUsage3=/<comando> <jugador> <objeto> [cantidad] clearinventoryconfirmtoggleCommandDescription=Alterna la configuración de confirmación al eliminar el inventario. clearinventoryconfirmtoggleCommandUsage=/<command> +commandArgumentOptional=§7 +commandArgumentRequired=§e commandCooldown=§cNo puedes usar ese comando durante {0}. commandDisabled=§cEl comando§6 {0}§c está desactivado. commandFailed=Comando {0} fallido\: commandHelpFailedForPlugin=Error al obtener ayuda para el plugin\: {0} +commandHelpLine1=§6Comando de ayuda\: §f/{0} +commandHelpLine2=§6Descripción\: §f{0} +commandHelpLine3=§6Uso(s); +commandHelpLine4=§6Alias\: §f{0} +commandHelpLineUsage={0} §6- {1} commandNotLoaded=§4El comando {0} no está cargado correctamente. compassBearing=§6Orientación\: {0} ({1} grados). compassCommandDescription=Describe tu rumbo actual. compassCommandUsage=/<command> condenseCommandDescription=Condensa ítems en bloques más compactos. +condenseCommandUsage=/<comando> [objeto] condenseCommandUsage1=/<command> condenseCommandUsage2=/<command> <item> configFileMoveError=Error al mover config.yml a la carpeta de la copia de seguridad. @@ -152,6 +172,7 @@ createdKit=§6Kit §c{0} §6creado con §c{1} §6articulos y un tiempo de espera createkitCommandDescription=¡Crea un kit en el juego\! createkitCommandUsage=/<command> <kit> <retraso> createkitCommandUsage1=/<command> <kit> <retraso> +createkitCommandUsage1Description=Crea un kit con el nombre y tiempo de espera dados createKitFailed=§4Ocurrio un error durante la creacion del kit {0}. createKitSeparator=§m----------------------- createKitSuccess=§6Kit creado\: §f{0}\n§6Tiempo de espera\: §f{1}\n§6Link\: §f{2}\n§6Copia el contenido del link de arriba en tu archivo kits.yml. @@ -165,22 +186,33 @@ customtextCommandUsage=/<alias> - Define en bukkit.yml day=día days=días defaultBanReason=¡Baneado por mal comportamiento\! +deletedHomes=Todas las casas eliminadas. +deletedHomesWorld=Todas las casas de {0} eliminadas. deleteFileError=No se puede eliminar archivo\: {0} deleteHome=§7El hogar§c {0} §7ha sido eliminado. deleteJail=§7La cárcel {0} §7ha sido eliminada. deleteKit=§6Kit§c {0} §6ha sido eliminado. deleteWarp=§6El warp§c {0} §6ha sido borrado. +deletingHomes=Eliminando todas las casas... +deletingHomesWorld=Eliminando todas las casas en {0}... delhomeCommandDescription=Elimina una casa. delhomeCommandUsage=/<command> [jugador\:]<nombre> +delhomeCommandUsage1=/<comando> <nombre> +delhomeCommandUsage1Description=Elimina tu casa por su nombre +delhomeCommandUsage2=/<comando> <jugador>\:<nombre> +delhomeCommandUsage2Description=Elimina la casa del jugador especificado por su nombre deljailCommandDescription=Elimina una cárcel. deljailCommandUsage=/<command> <cárcel> deljailCommandUsage1=/<command> <cárcel> +deljailCommandUsage1Description=Elimina la cárcel por su nombre delkitCommandDescription=Elimina el kit especificado. delkitCommandUsage=/<command> <kit> delkitCommandUsage1=/<command> <kit> +delkitCommandUsage1Description=Elimina el kit por su nombre delwarpCommandDescription=Elimina el warp especificado. delwarpCommandUsage=/<command> <warp> delwarpCommandUsage1=/<command> <warp> +delwarpCommandUsage1Description=Elimina el warp por su nombre deniedAccessCommand=§c{0} §4ha denegado el acceso al comando. denyBookEdit=§4No puedes desbloquear este libro. denyChangeAuthor=§4No puedes cambiar el autor de este libro. @@ -194,6 +226,28 @@ destinationNotSet=¡Destino no establecido\! disabled=desactivado disabledToSpawnMob=§4El spawn de este mob está deshabilitado en la configuración. disableUnlimited=Desactivada colocación ilimitada de §c {0} §6para§c {1}§6. +discordCommandExecuteDescription=Ejecuta un comando de consola en el servidor de Minecraft. +discordCommandExecuteArgumentCommand=El comando a ejecutar +discordCommandExecuteReply=Ejecutando comando\: «/{0}» +discordCommandListDescription=Genera una lista de jugador en línea. +discordCommandListArgumentGroup=Un grupo específico para limitar tu búsqueda +discordCommandMessageDescription=Envía un mensaje a un jugador del servidor de Minecraft. +discordCommandMessageArgumentUsername=El jugador al que enviar el mensaje +discordCommandMessageArgumentMessage=El mensaje a enviar al jugador +discordErrorCommand=El bot se ha añadido al servidor de forma incorrecta. ¡Sigue el tutorial de configuración y añade el bot usando https\://essentialsx.net/discord.html\! +discordErrorCommandDisabled=¡Ese comando está desactivado\! +discordErrorLogin=Error al iniciar sesión en Discord. El plugin se ha desactivado por sí mismo\: \n{0} +discordErrorLoggerInvalidChannel=¡El inicio de sesión en la consola de Discord se ha desactivado por una definición del canal no válida\! Si quieres reactivarlo, establece la id. del canal en «none», de lo contrario comprueba que la identificación del canal es correcta. +discordErrorLoggerNoPerms=¡El identificador de la consola de Discord se ha desactivado por falta de permisos\! Asegúrate de que tu bot tiene permisos para «Administrar webhooks» en el servidor. Tras corregir eso, ejecuta «/ess reload». +discordErrorNoGuild=¡La id. del servidor no se encuentra o no es válida\! Sigue el tutorial de configuración para poner en marcha el plugin. +discordErrorNoGuildSize=¡Tu bot no está en ningún servidor\! Sigue el tutorial de configuración para poner en marcha el plugin. +discordErrorNoPerms=¡Tu bot no puede ver ni hablar en ningún canal\! Asegúrate de que tu bot tiene permisos de lectura y escritura en todos los canales que quieras usar. +discordErrorNoToken=¡No hay token\! Sigue el tutorial de configuración para poner en marcha el plugin. +discordErrorWebhook=¡Se ha producido un error al enviar mensajes al canal de la consola\! Esto puede deberse a que se haya eliminado accidentalmente tu webhook de consola. Esto se puede corregir asegurándote de que tu bot tiene permiso para «Administrar webhooks» y ejecutar «/ess reload». +discordLoggingIn=Intentando iniciar sesión en Discord... +discordLoggingInDone=Se ha iniciado sesión con éxito como {0} +discordNoSendPermission=Error al enviar el mensaje al canal\: \#{0}. ¡Asegúrate de que el bot tiene permisos para «Enviar mensajes» en ese canal\! +discordReloadInvalid=¡Se ha intentado recargar la configuración de Discord de EssentialsX pero el plugin no era válido\! Si has modificado tu configuración, reinicia tu servidor. disposal=Basura disposalCommandDescription=Abre un menú portable de desechos. disposalCommandUsage=/<command> @@ -205,10 +259,20 @@ durability=§7Esta herramienta tiene §c{0}§7 usos restantes. east=E ecoCommandDescription=Gestiona la economía del servidor. ecoCommandUsage=/<command><give|take|set|reset> <jugador> <cantidad> +ecoCommandUsage1=/<comando> give <jugador> <cantidad> +ecoCommandUsage1Description=Da al jugador especificado la cantidad de dinero especificada +ecoCommandUsage2=/<comando> take <jugador> <cantidad> +ecoCommandUsage2Description=Toma la cantidad especificada de dinero del jugador especificado +ecoCommandUsage3=/<command> set <jugador> <cantidad> +ecoCommandUsage3Description=Establece el saldo del jugador especificado a la cantidad de dinero especificada +ecoCommandUsage4=/<command> reset <jugador> <cantidad> +ecoCommandUsage4Description=Restablece el saldo del jugador especificado al saldo inicial del servidor editBookContents=§eAhora puedes editar los contenidos de este libro. enabled=activado enchantCommandDescription=Encanta el ítem que el usuario está sosteniendo. enchantCommandUsage=/<command> <encantamiento> [nivel] +enchantCommandUsage1=/<command> <nombre del encantamiento> [nivel] +enchantCommandUsage1Description=Encanta el objeto sostenido con el encantamiento dado a un nivel opcional enableUnlimited=§6Dando cantidad ilimitada de§c {0} §6a §c{1}§6. enchantmentApplied=§6El encantamiento§c {0} §6fue aplicado al objeto de tu mano. enchantmentNotFound=§4¡No se ha encontrado éste encantamiento\! @@ -218,17 +282,40 @@ enchantments=§7Encantamientos\: {0} enderchestCommandDescription=Te permite ver dentro de un enderchest. enderchestCommandUsage=/<command> [jugador] enderchestCommandUsage1=/<command> +enderchestCommandUsage1Description=Abre tu cofre de ender enderchestCommandUsage2=/<command> <jugador> +enderchestCommandUsage2Description=Abre el cofre de ender del jugador mencionado errorCallingCommand=Error al ejecutar el comando /{0} errorWithMessage=§cError\:§4 {0} essentialsCommandDescription=Recarga Essentials. essentialsCommandUsage=/<command> +essentialsCommandUsage1=/<command> reload +essentialsCommandUsage1Description=Recarga la configuración de Essentials +essentialsCommandUsage2=/<command> version +essentialsCommandUsage2Description=Da información sobre la versión de Essentials +essentialsCommandUsage3=/<command> commands +essentialsCommandUsage3Description=Da información acerca de cuales comandos Essentials está enviando +essentialsCommandUsage4=/<command> debug +essentialsCommandUsage4Description=Activa el "modo debug" de Essentials +essentialsCommandUsage5=/<command> reset <jugador> +essentialsCommandUsage5Description=Restablece los datos de usuario del jugador dado +essentialsCommandUsage6=/<comando> cleanup +essentialsCommandUsage6Description=Limpia los datos de usuario antiguos +essentialsCommandUsage7=/<comando> homes +essentialsCommandUsage7Description=Administra casas de usuarios essentialsHelp1=Archivo corrupto, no es posible abrirlo. Essentials está ahora desactivado. Si no puedes arreglar el archivo, ve a http\://tiny.cc/EssentialsChat essentialsHelp2=Archivo corrupto, no es posible abrirlo. Essentials está ahora desactivado. Si no puedes arreglar el archivo, escribe /essentialshelp dentro del juego o ve a http\://tiny.cc/EssentialsChat essentialsReload=§6Essentials ha sido recargado. La versión es§c {0}. exp=§c{0} §6tiene§c {1} §6 de exp. (nivel§c {2}§6) y necesita§c {3} §6de exp para subir su nivel. expCommandDescription=Da, establece, restablece o mira a la experiencia de un jugador. expCommandUsage=/<command> [reset|show|set|give] [jugador [cantidad]] +expCommandUsage1=/<comando> give <jugador> <cantidad> +expCommandUsage1Description=Da al jugador mencionado la cantidad de xp especificada +expCommandUsage2=/<command> set <jugador> <cantidad> +expCommandUsage2Description=Establece el xp del jugador mencionado a la cantidad especificada +expCommandUsage3=/<command> show <jugador> +expCommandUsage4Description=Muestra la cantidad de xp que el jugador mencionado tiene +expCommandUsage5=/<command> reset <jugador> expSet=§c{0} §6ahora tiene§c {1} §6de exp. extCommandDescription=Extingue el fuego de un jugador. extCommandUsage=/<command> [jugador] @@ -248,11 +335,20 @@ fileRenameError=Error al renombrar el archivo {0} fireballCommandDescription=Lanza una bola de fuego u otros proyectiles variados. fireballCommandUsage=/<command> [fireball|small|large|arrow|skull|egg|snowball|expbottle|dragon|splashpotion|lingeringpotion|trident] [velocidad] fireballCommandUsage1=/<command> +fireballCommandUsage1Description=Lanza una bola de fuego normal desde tu ubicación +fireballCommandUsage2=/<command> <fireball|small|large|arrow|skull|egg|snowball|expbottle|dragon|splashpotion|lingeringpotion|trident> [velocidad] +fireballCommandUsage2Description=Lanza el proyectil especificado desde tu ubicación, con una velocidad opcional fireworkColor=§4Parámetros inválidos. Inserta primero el color. fireworkCommandDescription=Te permite modificar un stack de fuegos artificiales. fireworkCommandUsage=/<command> <<meta param>|power [cantidad]|clear|fire [cantidad]> +fireworkCommandUsage1=/<command> clear +fireworkCommandUsage2=/<command> power <cantidad> +fireworkCommandUsage3=/<command> fire [cantidad] +fireworkCommandUsage4=/<command> <meta> fireworkEffectsCleared=§7Borrados todos los efectos. fireworkSyntax=§7Parametros de firework\:§c color\:<color> [color\:<color>] [forma\:<shape>] [efecto de explosión\:<effect>]\n§7Para usar múltiples colores/efectos, separa los nombres mediante comas\: §cred,blue,pink\n§7Formas\:§c star, ball, large, creeper, burst §6Efectos\:§c trail, twinkle. +fixedHomes=Se han eliminado las casas no válidas. +fixingHomes=Eliminando casas no válidas... flyCommandDescription=¡Despega, y a volar\! flyCommandUsage=/<command> [jugador] [on|off] flyCommandUsage1=/<command> [jugador] @@ -279,6 +375,7 @@ getposCommandUsage=/<command> [jugador] getposCommandUsage1=/<command> [jugador] giveCommandDescription=Da un item a un jugador. giveCommandUsage=/<command> <jugador> <item|numeric> [cantidad [itemmeta...]] +giveCommandUsage1=/<comando> <jugador> <objeto> [cantidad] geoipCantFind=§c{0} §6viene de §aun país desconocido§6. geoIpErrorOnJoin=No se pudo obtener información GeoIP de {0}. Por favor, asegúrese que su llave de licencia y configuración son correctos. geoIpLicenseMissing=No se encontró una llave de licencia\! Por favor, visita https\://essentialsx.net/geoip para instrucciones de configuración. @@ -330,6 +427,8 @@ holdPotion=§4No tienes pociones a las que agregar efectos. holeInFloor=§4¡No hay suelo en el punto de aparición\! homeCommandDescription=Teletransportarte a tu casa. homeCommandUsage=/<command> [player\:][nombre] +homeCommandUsage1=/<comando> <nombre> +homeCommandUsage2=/<comando> <jugador>\:<nombre> homes=§6Hogares\:§r {0} homeConfirmation=§6Ya tienes una casa llamada §c{0}§6\!\nPara sobrescribir tu casa existente, escribe el comando de nuevo. homeSet=§7Hogar establecido. @@ -341,6 +440,7 @@ iceCommandUsage=/<command> [jugador] iceCommandUsage1=/<command> iceCommandUsage1Description=Te enfría iceCommandUsage2=/<command> <jugador> +iceCommandUsage3=/<comando> * ignoreCommandDescription=Ignorar o dejar de ignorar a otros jugadores. ignoreCommandUsage=/<command> <jugador> ignoreCommandUsage1=/<command> <jugador> @@ -388,6 +488,8 @@ itemId=§6ID\:§c {0} itemloreClear=§6Has eliminado el lore de este objeto. itemloreCommandDescription=Editar el lore de un elemento. itemloreCommandUsage=/<command> <add/set/clear> [texto/línea] [texto] +itemloreCommandUsage1=/<comando> add [texto] +itemloreCommandUsage3=/<command> clear itemloreInvalidItem=§4Necesitas un item en la mano para editar su lore. itemloreNoLine=§4El objeto sostenido no tiene un texto de lore en línea §c{0}§4. itemloreNoLore=§4El item sostenido no contiene ningún lore. @@ -399,6 +501,7 @@ itemnameClear=§6Has eliminado el nombre de este objeto. itemnameCommandDescription=Nombra un item. itemnameCommandUsage=/<command> [nombre] itemnameCommandUsage1=/<command> +itemnameCommandUsage2=/<comando> <nombre> itemnameInvalidItem=§cNecesitas tener un objeto en la mano para renombrarlo. itemnameSuccess=§6Has renombrado el objeto de tu mano a "§c{0}§6". itemNotEnough1=§4No tienes la suficiente cantidad del ítem para venderlo. @@ -490,13 +593,23 @@ loomCommandDescription=Abre un telar. loomCommandUsage=/<command> mailClear=§6Para marcar tu correo como leído, escribe§c /mail clear§6. mailCleared=§6¡El correo ha sido limpiado\! +mailClearIndex=§Debes especificar un número entre 1 y {0}. mailCommandDescription=Administra el correo inter-jugador e intra-servidor. -mailCommandUsage=/<command> [read|clear|send [to] [mensaje]|sendall [mensaje]] +mailCommandUsage=/<comando> [read|clear|clear [número]|send [to] [mensaje]|sendtemp [to] [fecha de caducidad] [mensaje]|sendall [mensaje]] +mailCommandUsage2=/<comando> clear [número] +mailCommandUsage2Description=Limpia todos los correos especificados +mailCommandUsage5=/<comando> sendtemp <jugador> <fecha de caducidad> <mensaje> +mailCommandUsage5Description=Envía al jugador especificado el mensaje, el cual expirará en el tiempo de caducidad establecido mailDelay=Demasiados correos han sido enviados en el último minuto. Máximo\: {0} +mailFormatNew=§6[§r{0}§6] §6[§r{1}§6] §r{2} +mailFormatNewTimed=§6[§e⚠§6] §6[§r{0}§6] §6[§r{1}§6] §r{2} +mailFormatNewRead=§6[§r{0}§6] §6[§r{1}§6] §7§o{2} +mailFormatNewReadTimed=§6[§e⚠§6] §6[§r{0}§6] §6[§r{1}§6] §7§o{2} mailFormat=§6[§r{0}§6] §r{1} mailMessage={0} mailSent=§6¡El correo ha sido enviado\! mailSentTo=§c{0}§6 has been sent the following mail\: +mailSentToExpire=§c{0}§6 se ha enviado el siguiente correo que expirará en §c{1}§6\: mailTooLong=§4Mensaje muy largo. Intenta menos de 1000 caracteres. markMailAsRead=§6Para marcar tu correo como leído, escribe§c /mail clear§6. matchingIPAddress=§6Los siguientes jugadores entraron previamente con la IP\: @@ -670,6 +783,7 @@ posPitch=§7Giro\: {0} (Ángulo de cabeza) possibleWorlds=§6Posibles mundos son los números desde el §c0§6 hasta el §c{0}§6. potionCommandDescription=Añade efectos personalizados a una poción. potionCommandUsage=/<command> <clear|apply|effect\:<efecto> power\:<poder> duration\:<duración>> +potionCommandUsage1=/<command> clear posX=§7X\: {0} (+Este <-> -Oeste) posY=§7Y\: {0} (+Arriba <-> -Abajo) posYaw=§7Yaw\: {0} (Rotación) @@ -743,6 +857,7 @@ repairCommandUsage1=/<command> repairEnchanted=§4No tienes permiso para reparar un ítem encantado. repairInvalidType=§4Ese ítem no puede ser reparado. repairNone=§4No hay ítems que necesiten ser reparados. +replyFromDiscord=**Respuesta de {0}\:** «{1}» replyLastRecipientDisabled=§6Respuesta al último mensaje recibido/enviado §cdesactivado§6. replyLastRecipientDisabledFor=§6Respuesta al último mensaje recibido/enviado §cdesactivado §6por §c{0}§6. replyLastRecipientEnabled=§6Respuesta al último mensaje recibido/enviado §cactivado§6. @@ -794,6 +909,8 @@ setBalOthers=§aLa economia de {0}§a ha sido establecida a {1}. setSpawner=§Cambiado tipo de generador a§c {0}§6. sethomeCommandDescription=Establece tu hogar en tu posición actual. sethomeCommandUsage=/<command> [[jugador\:]nombre] +sethomeCommandUsage1=/<comando> <nombre> +sethomeCommandUsage2=/<comando> <jugador>\:<nombre> setjailCommandDescription=Crea una cárcel donde especificaste, llamada [jailname]. setjailCommandUsage=/<command> <cárcel> setjailCommandUsage1=/<command> <cárcel> @@ -1052,6 +1169,7 @@ versionOutputFine=§6{0} version\: §a{1} versionOutputWarn=§6{0} version\: §c{1} versionOutputUnsupported=§d{0} §6version\: §d{1} versionOutputUnsupportedPlugins=§6Estas ejecutando §dplugins no soportados§6\! +versionOutputEconLayer=§6Capa de economía\: §r{0} versionMismatch=La version no coincide\! Por favor actualiza {0} a la misma version. versionMismatchAll=La version no coincide\! Por favor actualiza todos los jars de Essentials a la misma version. versionReleaseLatest=§6¡Estás ejecutando la versión más estable de EssentialsX\! @@ -1064,6 +1182,7 @@ voiceSilencedReasonTime=§6Tu voz ha sido silenciada por {0}\! Razón\: §c{1} walking=caminando warpCommandDescription=Lista todos los warp o teletransporta al warp especificado. warpCommandUsage=/<command> <página|warp> [jugador] +warpCommandUsage1=/<comando> [página] warpDeleteError=Problema al borrar el archivo de teletransporte. warpInfo=§6Información del warp§c {0}§6\: warpinfoCommandDescription=Encuentra información de ubicación de un warp específico. diff --git a/Essentials/src/main/resources/messages_et.properties b/Essentials/src/main/resources/messages_et.properties index 98de96bcec0..5f57eaff3c1 100644 --- a/Essentials/src/main/resources/messages_et.properties +++ b/Essentials/src/main/resources/messages_et.properties @@ -181,6 +181,7 @@ createkitCommandUsage1Description=Loob valitud nime ja ooteajaga abipaki createKitFailed=§4Abipaki {0} loomisel esines viga. createKitSeparator=§m----------------------- createKitSuccess=§6Abipakk loodud\: §f{0}\n§6Viivitus\: §f{1}\n§6Link\: §f{2}\n§6Kopeeri lingis olev sisu oma kits.yml faili. +createKitUnsupported=§4NBT esemete jadastamine on lubatud, kuid see server ei jookse Paper 1.15.2+ peal. Naasen tagasi standardse eseme jadastamise juurde. creatingConfigFromTemplate=Seadistuse loomine mallist\: {0} creatingEmptyConfig=Loon tühja seadistust\: {0} creative=loominguline @@ -191,11 +192,15 @@ customtextCommandUsage=/<alias> - määra failis bukkit.yml day=päev days=päeva defaultBanReason=Blokivasar on rääkinud\! +deletedHomes=Kõik kodud on kustutatud. +deletedHomesWorld=Kõik kodud asukohas {0} on kustutatud. deleteFileError=Faili ei saanud kustutada\: {0} deleteHome=§6Kodu§c {0} §6on eemaldatud. deleteJail=§6Vangla§c {0} §6on eemaldatud. deleteKit=§6Abipakk§c {0} §6on eemaldatud. deleteWarp=§6Koold§c {0} §6on eemaldatud. +deletingHomes=Kõikide kodude kustutamine... +deletingHomesWorld=Kututan kõik kodud asukohas {0}... delhomeCommandDescription=Eemaldab kodu. delhomeCommandUsage=/<käsklus> [mängija\:]<nimi> delhomeCommandUsage1=/<käsklus> <nimi> @@ -278,6 +283,10 @@ essentialsCommandUsage4=/<käsklus> debug essentialsCommandUsage4Description=Lülitab Essentialsi "silumisrežiimi" essentialsCommandUsage5=/<käsklus> reset <mängija> essentialsCommandUsage5Description=Lähtestab valitud mängija kasutajaandmed +essentialsCommandUsage6=/<käsklus> cleanup +essentialsCommandUsage6Description=Kustutab vanad kasutajate andmed +essentialsCommandUsage7=/<käsklus> homes +essentialsCommandUsage7Description=Haldab kasutaja kodusid essentialsHelp1=Fail on vigane ning Essentials ei saa seda avada. Essentials on nüüd keelatud. Kui sa ei suuda seda faili ise parandada, mine aadressile http\://tiny.cc/EssentialsChat essentialsHelp2=Fail on vigane ning Essentials ei saa seda avada. Essentials on nüüd keelatud. Kui sa ei suuda seda faili ise parandada, kirjuta mängus /essentialshelp või mine aadressile http\://tiny.cc/EssentialsChat essentialsReload=§6Essentials taaslaetud§c {0}. @@ -329,6 +338,8 @@ fireworkCommandUsage4=/<käsklus> <metaandmed> fireworkCommandUsage4Description=Lisab käesolevale ilutulestikule valitud efekti fireworkEffectsCleared=§6Kõik efektid on käesolevalt kuhjalt eemaldatud. fireworkSyntax=§6Ilutulestiku parameetrid\:§c color\:<värv> [fade\:<hajutus>] [shape\:<kuju>] [effect\:<efekt>]\n§6Et kasutada mitmeid efekte/värve korraga, eralda nad üksteisest komaga\: §cred,blue,pink\n§6Kujud\:§c star, ball, large, creeper, burst §6Efektid\:§c trail, twinkle. +fixedHomes=Mittekehtivad kodud kustutatud. +fixingHomes=Kusutan mittekehtivaid kodusid... flyCommandDescription=Võta hoogu ja tõuse lendu\! flyCommandUsage=/<käsklus> [mängija] [on|off] flyCommandUsage1=/<käsklus> [mängija] @@ -428,9 +439,16 @@ homeConfirmation=§6Sul juba on kodu nimega §c{0}§6\!\nOlemasoleva kodu üleki homeSet=§6Kodu määratud. hour=tund hours=tundi +ice=§Sa tunned end jahedana... +iceCommandDescription=Jahutab mängija maha. iceCommandUsage=/<käsklus> [mängija] iceCommandUsage1=/<käsklus> +iceCommandUsage1Description=Jahutab sind maha iceCommandUsage2=/<käsklus> <mängija> +iceCommandUsage2Description=Jahutab antud mängija maha +iceCommandUsage3=/<käsklus> * +iceCommandUsage3Description=Jahutab kõik aktiivsed mängijad maha +iceOther=§6Jahtumine§c {0}§6. ignoreCommandDescription=Ignoreeri või ära ignoreeri teisi mängijaid. ignoreCommandUsage=/<käsklus> <mängija> ignoreCommandUsage1=/<käsklus> <mängija> @@ -484,9 +502,8 @@ itemId=§6ID\:§c {0} itemloreClear=§6Sa oled tühjendanud selle eseme vihjeteksti. itemloreCommandDescription=Muuda eseme vihjeteksti. itemloreCommandUsage=/<käsklus> <add/set/clear> [text/line] [tekst] -itemloreCommandUsage1=The source string should be\n/<command> <add> [text] itemloreCommandUsage1Description=Lisatud antud teksti käes hoitava eseme vihjeteksti -itemloreCommandUsage2=/<käsklus> <set> <reanumber> <tekst> +itemloreCommandUsage2=/<käsklus> set <reanumber> <tekst> itemloreCommandUsage2Description=Määrab kindlaks etteantud eseme vihjeteksti rea itemloreCommandUsage3=/<käsklus> clear itemloreCommandUsage3Description=Tühjendab käes hoitava eseme vihjeteksti @@ -565,6 +582,7 @@ kitCost=\ §7§o({0})§r kitDelay=§m{0}§r kitError=§4Sobivaid abipakke ei leitud. kitError2=§4See abipakk on ebakorrektselt seadistatud. Kontakteeru administraatoriga. +kitError3=Ei saa anda eset komplektist "{0}" kasutajale {1} kuna komplekti ese vajab Paper 1.15.2+ mittejärjestamiseks. kitGiveTo=§6Annan mängijale §c{1}§6 abipaki§c {0}§6. kitInvFull=§4Sinu seljakott oli täis, asetasime abipaki põrandale. kitInvFullNoDrop=§4Sinu seljakotis pole selle abipaki jaoks piisavalt ruumi. @@ -607,11 +625,8 @@ loomCommandUsage=/<käsklus> mailClear=§6Postkasti tühjendamiseks kirjuta§c /mail clear§6. mailCleared=§6Postkast tühjendatud\! mailCommandDescription=Haldab üle-mängija, üle-serverilist postkastisüsteemi. -mailCommandUsage=/<käsklus> [read|clear|send [mängija] [sõnum]|sendall [sõnum]] mailCommandUsage1=/<käsklus> read [lk] mailCommandUsage1Description=Loeb teie kirja esimest (või täpsustatud) lehte -mailCommandUsage2=/<käsklus> clear -mailCommandUsage2Description=Puhastab meili mailCommandUsage3=/<käsklus> send <mängija> <sõnum> mailCommandUsage3Description=Saadab määratud mängijale antud sõnumi mailCommandUsage4=/<käsklus> sendall <sõnum> @@ -1005,13 +1020,20 @@ settprCommandUsage=/<käsklus> [center|minrange|maxrange] [väärtus] settprCommandUsage1=/<käsklus> center settprCommandUsage1Description=Seadistab suvalise teleporteerumise keskpaiga sinu asukohta settprCommandUsage2=/<käsklus> minrange <raadius> +settprCommandUsage2Description=Määrab minimaalse suvalise teleporteerumise raadiuse antud väärtusele +settprCommandUsage3=/<käsklus> maxrange <raadius> +settprCommandUsage3Description=Määrab maksimaalse suvalise teleporteerumise raadiuse antud väärtusele settpr=§6Juhusliku teleporteerumise keskkoht määratud. settprValue=§6Juhusliku teleporteerumise §c{0}§6 väärtuseks on määratud §c{1}§6. setwarpCommandDescription=Loob uue koolu. setwarpCommandUsage=/<käsklus> <koold> setwarpCommandUsage1=/<käsklus> <koold> +setwarpCommandUsage1Description=Seadistab lõimu antud nimega sinu asukohta setworthCommandDescription=Määra eseme müügihind. setworthCommandUsage=/<käsklus> [esemenimi|id] <hind> +setworthCommandUsage1=/<käsklus> <hind> +setworthCommandUsage2=/<käsklus> [esemenimi] <hind> +setworthCommandUsage2Description=Seadistab määratud esemele väärtuse antud hinnaga sheepMalformedColor=§4Moondunud värv. shoutDisabled=§6Hüüdmisrežiim §ckeelatud§6. shoutDisabledFor=§6Hüüdmisrežiim on §ckeelatud §6mängijal §c{0}§6. @@ -1023,6 +1045,7 @@ editsignCommandClearLine=§6Rida§c {0}§6 tühjendatud. showkitCommandDescription=Kuva abipaki sisu. showkitCommandUsage=/<käsklus> <abipakinimi> showkitCommandUsage1=/<käsklus> <abipakinimi> +showkitCommandUsage1Description=Näitab ülevaadet esemetest määratud komplektis editsignCommandDescription=Muudab maailmas olevat silti. editsignCommandLimit=§4Sinu pakutud tekst on liiga pikk, et sildile mahtuda. editsignCommandNoLine=§4Pead sisestama reanumbri vahemikus §c1-4§4. @@ -1033,6 +1056,14 @@ editsignCopyLine=§6Sildi §c{0}§6. rida kopeeritud\! Kleebi see käsklusega § editsignPaste=§6Silt kleebitud\! editsignPasteLine=§6Sildi §c{0}§6. rida kleebitud\! editsignCommandUsage=/<käsklus> <set/clear/copy/paste> [rea nr] [tekst] +editsignCommandUsage1=/<käsklus> set <reanumber> <tekst> +editsignCommandUsage1Description=Seadistab määratud rea teksti sihitud märgile +editsignCommandUsage2=/<käsklus> clear <reanumber> +editsignCommandUsage2Description=Puhastab määratud rea sihitud sildilt +editsignCommandUsage3=/<käsklus> copy <reanumber>] +editsignCommandUsage3Description=Kopeerib kõik(või määratud realt) teksti sildilt sinu lõikelauale +editsignCommandUsage4=/<käsklus> paste [reanumber] +editsignCommandUsage4Description=Kleebib sinu lõikelaua sildile või määratud reale sildil signFormatFail=§4[{0}] signFormatSuccess=§1[{0}] signFormatTemplate=[{0}] @@ -1045,6 +1076,7 @@ skullChanged=§6Pea muudetud\: §c{0}§6. skullCommandDescription=Määra mängija pea jaoks omanik skullCommandUsage=/<käsklus> [omanik] skullCommandUsage1=/<käsklus> +skullCommandUsage1Description=Annab sinu enda kolju skullCommandUsage2=/<käsklus> <mängija> slimeMalformedSize=§4Moondunud suurus. smithingtableCommandDescription=Avab sepistuslaua. diff --git a/Essentials/src/main/resources/messages_fi.properties b/Essentials/src/main/resources/messages_fi.properties index ec102b0bcb5..a377b1d6752 100644 --- a/Essentials/src/main/resources/messages_fi.properties +++ b/Essentials/src/main/resources/messages_fi.properties @@ -9,6 +9,9 @@ adventure=seikkailu afkCommandDescription=Merkitsee sinut "näppäimistöltä-poistuneeksi". afkCommandUsage=/<command> [pelaaja/viesti...] afkCommandUsage1=/<command> [viesti] +afkCommandUsage1Description=Vaihtaa AFK-tilasi valitulla syyllä +afkCommandUsage2=/<command> <player> [message] +afkCommandUsage2Description=Vaihtaa määritellyn pelaajan AFK-tilan valitulla syyllä alertBroke=rikkoi\: alertFormat=§3[{0}] §f {1} §6 {2} sijainnissa\: {3} alertPlaced=laittoi\: @@ -33,7 +36,9 @@ backAfterDeath=§6Käytä komentoa§c /back§6 palataksesi paikkaan, jossa kuoli backCommandDescription=Teleporttaa sinut aikaisempaan tp/spawn/warp sijaintiisi. backCommandUsage=/<command> [pelaaja] backCommandUsage1=/<command> +backCommandUsage1Description=Teleporttaa sinut aiempaan sijaintiisi backCommandUsage2=/<command> <player> +backCommandUsage2Description=Teleporttaa annetun pelaajan hänen aiempaan sijaintiinsa backOther=§6Palautettiin§c {0}§6 edelliseen sijaintiin. backupCommandDescription=Suorittaa varmuuskopioinnin, jos se on määritetty. backupCommandUsage=/<command> @@ -46,20 +51,29 @@ balance=§aRahatilanne\:§6 {0} balanceCommandDescription=Ilmoittaa pelaajan nykyisen rahatilanteen. balanceCommandUsage=/<command> [pelaaja] balanceCommandUsage1=/<command> +balanceCommandUsage1Description=Näyttää nykyisen rahamääräsi balanceCommandUsage2=/<command> <player> +balanceCommandUsage2Description=Näyttää määritetyn pelaajan rahatilanteen balanceOther=§aPelaajan {0}§a saldo\:§c {1} balanceTop=§6Top rahatilanteet ({0}) balanceTopLine={0}. {1}, {2} balancetopCommandDescription=Ilmoittaa suurimmat rahasaldot. +balancetopCommandUsage=/<command> [page] +balancetopCommandUsage1=/<command> [page] +balancetopCommandUsage1Description=Näyttää ensimmäisen (tai valitun) sivun top-rahatilannetiedoista banCommandDescription=Bannaa pelaajan. banCommandUsage=/<command> <player> [reason] banCommandUsage1=/<command> <player> [reason] +banCommandUsage1Description=Antaa porttikiellon pelaajalle määritetyllä syyllä banExempt=§4Et voi bannia tuota pelaajaa. banExemptOffline=§4Et voi bannata offline-pelaajia. banFormat=§cSinulle on annettu porttikielto\:\n§r{0} banIpJoin=IP-osoitteesi on bannattu tältä palvelimelta. Syy\: {0} banJoin=Olet bannattu tältä palvelimelta. Syy\: {0} banipCommandDescription=Bannaa IP osoitteen. +banipCommandUsage=/<command> <address> [reason] +banipCommandUsage1=/<command> <address> [reason] +banipCommandUsage1Description=Antaa porttikiellon IP-osoitteelle määritetyllä syyllä bed=§opeti§r bedMissing=§4Sänkysi puuttuu, on kadoksissa tai tukittu. bedNull=§msänky§r @@ -72,12 +86,18 @@ bigTreeSuccess=§6Iso puu luotu. bigtreeCommandDescription=Luo ison puun sinne, minne katsot. bigtreeCommandUsage=/<command> <tree|redwood|jungle|darkoak> bigtreeCommandUsage1=/<command> <tree|redwood|jungle|darkoak> +bigtreeCommandUsage1Description=Luo tietyn tyyppisen ison puun blockList=§6EssentialsX välittää seuraavat komennot muille laajennuksille\: blockListEmpty=§6EssentialsX ei välitä mitään komentoja muille laajennuksille. bookAuthorSet=§6Kirjan tekijä on nyt {0}. bookCommandDescription=Mahdollistaa suljettujen kirjojen avaamisen ja muokkauksen. bookCommandUsage=/<command> [otsikko|kirjoittaja [name]] bookCommandUsage1=/<command> +bookCommandUsage1Description=Lukitsee/avaa kirjoitetun kirjan / sulkakynäkirjan +bookCommandUsage2=/<command> tekijä <author> +bookCommandUsage2Description=Asettaa kirjalle kirjoittajan +bookCommandUsage3=/<command> otsikko <title> +bookCommandUsage3Description=Asettaa kirjalle otsikon bookLocked=§6Tämä kirja on nyt lukittu. bookTitleSet=§6Kirjan otsikko on nyt {0}. breakCommandDescription=Rikkoo palikan, johon katsot. @@ -86,12 +106,15 @@ broadcast=§6[§4Ilmoitus§6]§a {0} broadcastCommandDescription=Kuuluttaa viestin koko palvelimelle. broadcastCommandUsage=/<command> <msg> broadcastCommandUsage1=/<command> <message> +broadcastCommandUsage1Description=Ilmoittaa annetun viestin koko palvelimelle broadcastworldCommandDescription=Kuuluttaa viestin koko maahan. broadcastworldCommandUsage=/<command> <world> <msg> broadcastworldCommandUsage1=/<command> <world> <msg> +broadcastworldCommandUsage1Description=Ilmoittaa annetun viestin tiettyyn maailmaan burnCommandDescription=Asettaa pelaajan tuleen. burnCommandUsage=/<command> <player> <seconds> burnCommandUsage1=/<command> <player> <seconds> +burnCommandUsage1Description=Asettaa määritetyn pelaajan tuleen annetuksi ajaksi sekunteina burnMsg=§6Asetit pelaajan§c {0} §6tuleen§c {1} sekunniksi§6. cannotSellNamedItem=§6Et voi myydä nimettyjä tuotteita. cannotSellTheseNamedItems=§6Et voi myydä näitä nimettyjä tuotteita\: §4{0} @@ -112,13 +135,22 @@ clearInventoryConfirmToggleOn=§6Sinua kehotetaan vahvistamaan tavaraluettelon t clearinventoryCommandDescription=Tyhjentää kaikki tavarasi tavaraluettelostasi. clearinventoryCommandUsage=/<command> [pelaaja|*] [tavara[\:<data>]|*|**] [amount] clearinventoryCommandUsage1=/<command> +clearinventoryCommandUsage1Description=Poistaa kaikki tavarat tavaraluettelostasi clearinventoryCommandUsage2=/<command> <player> +clearinventoryCommandUsage2Description=Poistaa kaikki tavarat määritellyn pelaajan tavaraluettelosta +clearinventoryCommandUsage3=/<command> <player> <item> [amount] +clearinventoryCommandUsage3Description=Poistaa kaiken (tai tietyn määrän) annetun pelaajan tavaraluettelosta clearinventoryconfirmtoggleCommandDescription=Vaihdettavissa, pyydetäänkö sinua vahvistamaan tavaraluettelon tyhjennys vai ei. clearinventoryconfirmtoggleCommandUsage=/<command> +commandArgumentOptional=§7 +commandArgumentRequired=§e commandCooldown=§cEt voi kirjoittaa tätä komentoa ajassa {0}. commandDisabled=§cKomento§6 {0}§c on poistettu käytöstä. commandFailed=Komento {0} epäonnistui\: commandHelpFailedForPlugin=Virhe haettaessa apua lisäosasta\: {0} +commandHelpLine1=§6Komentoapu\: §f/{0} +commandHelpLine2=§6Kuvaus\: §f{0} +commandHelpLine3=§7Käyttö; commandNotLoaded=§4Komento {0} on väärin ladattu. compassBearing=§6Osoittaa\: {0} ({1} astetta). compassCommandDescription=Kuvailee nykyistä katsomiskulmaasi. @@ -182,6 +214,7 @@ destinationNotSet=Sijaintia ei ole määritetty\! disabled=poistettu käytöstä disabledToSpawnMob=§4Tämän mobin luominen on poistettu käytöstä config tiedostossa. disableUnlimited=§6Poistettiin käytöstä loputon asettaminen tavaralle§c {0} §6pelaajalta§c {1}§6. +discordCommandExecuteReply=Suoritetaan komento\: "/{0}" disposal=Hävittäminen disposalCommandDescription=Avaa kannettavan hävitysvalikon. disposalCommandUsage=/<command> @@ -267,6 +300,7 @@ getposCommandUsage=/<command> [pelaaja] getposCommandUsage1=/<command> [pelaaja] giveCommandDescription=Antaa pelaajalle tavaran. giveCommandUsage=/<command> <player> <item|numeric> [määrä [itemmeta...]] +giveCommandUsage1=/<command> <player> <item> [amount] geoipCantFind=§6Pelaaja §c{0} §6tulee §atuntemattomasta sijainnista§6. geoIpErrorOnJoin=GeoIP tietoja pelaajalta {0} ei voitu hakea. Varmista, että lisenssiavaimesi ja määrityksesi ovat oikein. geoIpLicenseMissing=Ei löydetty lisenssiavainta\! Käy osoitteessa https\://essentialsx.net/geoip saadaksesi ohjeet alkumääritykseen. @@ -475,7 +509,6 @@ loomCommandUsage=/<command> mailClear=§6Merkataksesi viestin luetuksi, kirjoita§c /mail clear§6. mailCleared=§6Viestit poistettu\! mailCommandDescription=Hallitsee pelaajien välistä, palvelimen sisäistä sähköpostia. -mailCommandUsage=/<command> [read|clear|send [to] [message]|sendall [message]] mailDelay=Liian monta viestiä on lähetetty viime minuutin aikana. Maksimi\: {0} mailFormat=§6[§r{0}§6] §r{1} mailMessage={0} @@ -1034,6 +1067,7 @@ voiceSilencedReasonTime=§6Sinun äänesi on hiljennetty ajaksi {0}§6\! Syynä\ walking=kävely warpCommandDescription=Listaa kaikki warpit tai warppaa tiettyyn kohteeseen. warpCommandUsage=/<command> <pagenumber|warp> [player] +warpCommandUsage1=/<command> [page] warpDeleteError=§4Virhe poistettaessa warp-tiedostoa. warpInfo=§6Tietoja warpista§c {0}§6\: warpinfoCommandDescription=Löytää sijaintitiedot määritellylle warpille. @@ -1051,6 +1085,7 @@ weatherCommandUsage=/<command> <storm/sun> [duration] warpSet=§6Warp§c {0} §6asetettu. warpUsePermission=§4Sinulla ei ole oikeutta käyttää tuota warppia. weatherInvalidWorld=Maailmaa nimellä {0} ei löydy\! +weatherSignSun=§6Sää\: §caurinkoinen§6. weatherStorm=§6Laitoit sään §cmyrskyksi§6 maailmaan§c {0}§6. weatherStormFor=§6Asetit sääksi §cmyrskyn§6 maailmaan§c {0} §6ajaksi§c {1} sekuntia§6. weatherSun=§6Laitoit sään §caurinkoiseksi§6 maailmaan §c{0}§6. @@ -1062,6 +1097,7 @@ whoisBanned=§6 - Bannattu\:§f {0} whoisCommandDescription=Näyttää lempinimen takana olevan käyttäjänimen. whoisCommandUsage=/<command> <nickname> whoisCommandUsage1=/<command> <player> +whoisCommandUsage1Description=Antaa perustietoja määritetystä pelaajasta whoisExp=§6 - Exp\:§r {0} (Taso {1}) whoisFly=§6 - Lento-tila\:§r {0} ({1}) whoisSpeed=§6 - Nopeus\:§r {0} @@ -1087,6 +1123,8 @@ workbenchCommandUsage=/<command> worldCommandDescription=Siirry maailmojen välillä. worldCommandUsage=/<command> [world] worldCommandUsage1=/<command> +worldCommandUsage2=/<command> <world> +worldCommandUsage2Description=Teleporttaa sijaintiisi annetussa maailmassa worth=§aPino tavaraa "{0}" on arvoltaan §c{1}§a ({2} tavara(a) \= {3}/kappale) worthCommandDescription=Laskee kädessä olevan tai määritettyjen esineiden arvon. worthCommandUsage=/<command> <<itemname>|<id>|hand|inventory|blocks> [-][amount] diff --git a/Essentials/src/main/resources/messages_fil_PH.properties b/Essentials/src/main/resources/messages_fil_PH.properties index 823a4ef755e..19c84090ad3 100644 --- a/Essentials/src/main/resources/messages_fil_PH.properties +++ b/Essentials/src/main/resources/messages_fil_PH.properties @@ -469,7 +469,6 @@ loomCommandUsage=/<command> mailClear=§6Upang ibura ang iyong mail, sulatin mo ang§c /mail clear§6. mailCleared=§6Ang iyong mail ay binura\! mailCommandDescription=I-papamahalaan ang inter-player at ang intra-server mail. -mailCommandUsage=/<command> [read|clear|send [sa] [mensahe]|sendall [mensahe]] mailDelay=Masyadong madaming mail ang nadala sa huling minuto. Pinakamataas\: {0} mailFormat=§6[§r{0}§6] §r{1} mailMessage={0} diff --git a/Essentials/src/main/resources/messages_fr.properties b/Essentials/src/main/resources/messages_fr.properties index 93ac8cced45..cadb1d51217 100644 --- a/Essentials/src/main/resources/messages_fr.properties +++ b/Essentials/src/main/resources/messages_fr.properties @@ -494,11 +494,10 @@ itemId=§6ID \:§c {0} itemloreClear=§7Vous avez effacé la description de cet objet. itemloreCommandDescription=Modifie la description d''un objet. itemloreCommandUsage=/<command> <add|set|clear> [texte|ligne] [texte] -itemloreCommandUsage1=/<command> add [texte] itemloreCommandUsage1Description=Ajoute le texte donné à la fin de la description de l''objet tenu en main -itemloreCommandUsage2=/<command> set <ligne> <texte> +itemloreCommandUsage2=/<command> set <numéro de ligne> <texte> itemloreCommandUsage2Description=Définit la ligne spécifiée de la description de l''objet tenu en main au texte donné -itemloreCommandUsage3=/<command> <clear> +itemloreCommandUsage3=/<command> clear itemloreCommandUsage3Description=Efface la description de l''objet tenu en main itemloreInvalidItem=§cVous devez tenir un objet pour modifier sa description. itemloreNoLine=§4Il n''y à pas de texte sur la ligne §c{0}§4 de la description de l''objet que vous tenez en mains. @@ -511,9 +510,9 @@ itemnameClear=§6Vous avez effacé le nom de cet objet. itemnameCommandDescription=Nomme un objet. itemnameCommandUsage=/<command> [nom] itemnameCommandUsage1=/<command> -itemnameCommandUsage1Description=Efface le nom de l''élément tenu en main +itemnameCommandUsage1Description=Efface le nom de l''objet tenu en main itemnameCommandUsage2=/<command> <nom> -itemnameCommandUsage2Description=Définit le nom de l''élément tenu en main au texte donné +itemnameCommandUsage2Description=Définit le texte spécifié comme nom de l''objet tenu en main itemnameInvalidItem=§cVous devez tenir un objet pour le renommer. itemnameSuccess=§6Vous avez renommé l''objet tenu en "§c{0}§6". itemNotEnough1=§4Vous n''avez pas une quantité suffisante de cet objet pour le vendre. @@ -550,14 +549,14 @@ jumpError=Ça aurait pu faire mal au cerveau de votre ordinateur. kickCommandDescription=Expulse un joueur spécifié avec une raison. kickCommandUsage=/<command> <joueur> [raison] kickCommandUsage1=/<command> <joueur> [raison] -kickCommandUsage1Description=Expulse le joueur spécifié avec un motif optionnel +kickCommandUsage1Description=Expulse le joueur spécifié avec un motif facultatif kickDefault=Expulsé(e) du serveur. kickedAll=§4Tous les joueurs ont été expulsés du serveur. kickExempt=§4Vous ne pouvez pas expulser ce joueur. kickallCommandDescription=Expulse tous les joueurs du serveur sauf l''émetteur de la commande. kickallCommandUsage=/<command> [raison] kickallCommandUsage1=/<command> [raison] -kickallCommandUsage1Description=Expulse tous les joueurs avec un motif optionnel +kickallCommandUsage1Description=Expulse tous les joueurs avec un motif facultatif kill=§c{0}§6 a été tué. killCommandDescription=Tue le joueur spécifié. killCommandUsage=/<command> <joueur> @@ -569,7 +568,7 @@ kitCommandUsage=/<command> [kit] [joueur] kitCommandUsage1=/<command> kitCommandUsage1Description=Liste tous les kits disponibles kitCommandUsage2=/<command> <kit> [joueur] -kitCommandUsage2Description=Vous donne le kit spécifié ou à un autre joueur si spécifié +kitCommandUsage2Description=Vous donne le kit spécifié ou le donne à un autre joueur si spécifié kitContains=§6Le kit §c{0} §6contient \: kitCost=\ §7§o({0})§r kitDelay=§m{0}§r @@ -607,7 +606,7 @@ listAmountHidden=§6Il y a §c{0}§6/§c{1}§6 joueurs en ligne sur un maximum d listCommandDescription=Liste tous les joueurs en ligne. listCommandUsage=/<command> [groupe] listCommandUsage1=/<command> [groupe] -listCommandUsage1Description=Liste tous les joueurs du serveur, ou le groupe donné si spécifié +listCommandUsage1Description=Liste tous les joueurs connectés serveur, ou le groupe donné, si spécifié listGroupTag=§6{0}§r \: listHiddenTag=§7[MASQUÉ]§f loadWarpError=§4Échec du chargement du point de téléportation {0}. @@ -617,11 +616,8 @@ loomCommandUsage=/<command> mailClear=§6Pour supprimer votre courrier, tapez§c /mail clear§6. mailCleared=§6Courrier supprimé \! mailCommandDescription=Gère le courrier inter-joueur, intra-serveur. -mailCommandUsage=/<command> [read|clear|send [to] [message]|sendall [message]] mailCommandUsage1=/<command> read [page] mailCommandUsage1Description=Lit la première page (ou la page spécifiée) de votre courrier -mailCommandUsage2=/<command> clear -mailCommandUsage2Description=Efface tout votre courrier mailCommandUsage3=/<command> send <joueur> <message> mailCommandUsage3Description=Envoie le message donné au joueur spécifié mailCommandUsage4=/<command> sendall <message> @@ -715,13 +711,13 @@ nickChanged=§6Surnom changé. nickCommandDescription=Changer votre pseudo ou celui d''un autre joueur. nickCommandUsage=/<commande> [joueur] <surnom|off> nickCommandUsage1=/<command> <surnom> -nickCommandUsage1Description=Change votre pseudo par le texte donné +nickCommandUsage1Description=Remplace votre pseudo par le texte donné nickCommandUsage2=/<command> off -nickCommandUsage2Description=Supprime votre pseudo +nickCommandUsage2Description=Supprime votre surnom nickCommandUsage3=/<command> <joueur> <surnom> nickCommandUsage3Description=Change le pseudo du joueur spécifié par le texte donné nickCommandUsage4=/<command> <joueur> off -nickCommandUsage4Description=Supprime le pseudo du joueur donné +nickCommandUsage4Description=Supprime le surnom du joueur donné nickDisplayName=§7Vous devez activer change-displayname dans la configuration Essentials. nickInUse=§cCe nom est déjà utilisé. nickNameBlacklist=§4Ce surnom n''est pas autorisé. @@ -828,9 +824,9 @@ possibleWorlds=§6Les mondes possibles sont les nombres de §c0§6 à §c{0}§6. potionCommandDescription=Ajoute des effets de potion personnalisés à une potion. potionCommandUsage=/<command> <clear|apply|effect\:<effet> power\:<puissance> duration\:<durée> potionCommandUsage1=/<command> clear -potionCommandUsage1Description=Efface tous les effets sur la potion tenue en main +potionCommandUsage1Description=Neutralise tous les effets de la potion tenue en main potionCommandUsage2=/<command> apply -potionCommandUsage2Description=Applique tous les effets sur la potion tenue en main sur vous sans consommer la potion +potionCommandUsage2Description=Applique sur vous tous les effets de la potion tenue en main sans la consommer potionCommandUsage3=/<command> effect\:<effet> power\:<puissance> duration\:<durée> potionCommandUsage3Description=Applique la méta de potion donnée à la potion tenue en main posX=§6X\: {0} (+Est <-> -Ouest) @@ -894,7 +890,7 @@ questionFormat=§2[Question]§r {0} rCommandDescription=Répondre à l''expéditeur ou au receveur du dernier message privé. rCommandUsage=/<command> <message> rCommandUsage1=/<command> <message> -rCommandUsage1Description=Répond au dernier joueur avec le texte donné +rCommandUsage1Description=Répond au dernier joueur vous ayant envoyé un message avec le texte donné radiusTooBig=§4Le rayon est trop grand \! Le rayon maximum est§c {0}§4. readNextPage=§6Tapez§c /{0} {1} §6pour lire la page suivante. realName=§f{0}§r§6 est §f{1} @@ -908,7 +904,7 @@ recipeBadIndex=Il n''y a pas de recette pour ce numéro. recipeCommandDescription=Affiche la recette de fabrication de l''objet spécifié. recipeCommandUsage=/<command> <objet> [nombre] recipeCommandUsage1=/<command> <objet> [page] -recipeCommandUsage1Description=Affiche comment fabriquer l''objet donné +recipeCommandUsage1Description=Affiche la recette de fabrication de l''objet donné recipeFurnace=§6Faire fondre \: §c{0}§6. recipeGrid=§c{0}X §6| §{1}X §6| §{2}X recipeGridItem=§c{0}X §6est §c{1} @@ -1190,17 +1186,17 @@ totalWorthBlocks=§aTous les blocs ont été vendus pour une valeur totale de § tpCommandDescription=Se téléporter à un autre joueur. tpCommandUsage=/<command> <joueur> [autre joueur] tpCommandUsage1=/<command> <joueur> -tpCommandUsage1Description=Vous téléporte sur le joueur spécifié +tpCommandUsage1Description=Vous téléporte vers le joueur spécifié tpCommandUsage2=/<command> <joueur> <autre joueur> -tpCommandUsage2Description=Téléporte le premier joueur spécifié au second +tpCommandUsage2Description=Téléporte le premier joueur spécifié vers le second tpaCommandDescription=Envoie une requête de téléportation au joueur spécifié. tpaCommandUsage=/<command> <joueur> tpaCommandUsage1=/<command> <joueur> -tpaCommandUsage1Description=Demande une téléportation au joueur spécifié +tpaCommandUsage1Description=Demande une téléportation vers le joueur spécifié tpaallCommandDescription=Envoie une requête de téléportation à votre position actuelle à tous les joueurs connectés. tpaallCommandUsage=/<command> <joueur> tpaallCommandUsage1=/<command> <joueur> -tpaallCommandUsage1Description=Demande à tous les joueurs de se téléporter sur vous +tpaallCommandUsage1Description=Demande à tous les joueurs de se téléporter vers vous tpacancelCommandDescription=Annule toutes les requêtes de téléportation en cours. Utilisez le paramètre [joueur] pour annuler les requêtes d''un joueur spécifique. tpacancelCommandUsage=/<command> [joueur] tpacancelCommandUsage1=/<command> @@ -1214,15 +1210,15 @@ tpacceptCommandUsage1Description=Accepte une demande de téléportation entrante tpahereCommandDescription=Envoie une requête au joueur spécifié pour qu''il se téléporte à vous. tpahereCommandUsage=/<command> <joueur> tpahereCommandUsage1=/<command> <joueur> -tpahereCommandUsage1Description=Demande au joueur spécifié de se téléporter sur vous +tpahereCommandUsage1Description=Demande au joueur spécifié de se téléporter vers vous tpallCommandDescription=Téléporte tous les joueurs connectés au joueur spécifié. tpallCommandUsage=/<command> [joueur] tpallCommandUsage1=/<command> [joueur] -tpallCommandUsage1Description=Téléporte tous les joueurs sur vous, ou sur un autre joueur si spécifié +tpallCommandUsage1Description=Téléporte tous les joueurs vers vous, ou vers un autre joueur si spécifié tpautoCommandDescription=Accepte automatiquement les requêtes de téléportation. tpautoCommandUsage=/<command> [joueur] tpautoCommandUsage1=/<command> [joueur] -tpautoCommandUsage1Description=Active/désactive si les requêtes tpa sont automatiquement acceptées pour vous ou pour un autre joueur si spécifié +tpautoCommandUsage1Description=Active/désactive l''acceptation automatique des requêtes tpa pour vous ou pour un autre joueur si spécifié tpdenyCommandDescription=Rejette une requête de téléportation. tpdenyCommandUsage=/<command> tpdenyCommandUsage1=/<command> @@ -1234,9 +1230,9 @@ tphereCommandUsage1Description=Téléporte le joueur spécifié à vous tpoCommandDescription=Téléportation en outrepassant le tptoggle. tpoCommandUsage=/<command> <joueur> [autre joueur] tpoCommandUsage1=/<command> <joueur> -tpoCommandUsage1Description=Téléporte le joueur spécifié à vous en ignorant ses préférences +tpoCommandUsage1Description=Téléporte le joueur spécifié à vous en outrepassant ses préférences tpoCommandUsage2=/<command> <joueur> <autre joueur> -tpoCommandUsage2Description=Téléporte le premier joueur spécifié au second tout en ignorant leurs préférences +tpoCommandUsage2Description=Téléporte le premier joueur spécifié au second tout en outrepassant leurs préférences tpofflineCommandDescription=Se téléporter au dernier lieu de déconnexion connu d''un joueur tpofflineCommandUsage=/<command> <joueur> tpofflineCommandUsage1=/<command> <joueur> @@ -1244,11 +1240,11 @@ tpofflineCommandUsage1Description=Vous téléporte à l''emplacement de déconne tpohereCommandDescription=Se téléporter ici en outrepassant le tptoggle. tpohereCommandUsage=/<command> <joueur> tpohereCommandUsage1=/<command> <joueur> -tpohereCommandUsage1Description=Téléporte le joueur spécifié à vous en ignorant ses préférences +tpohereCommandUsage1Description=Téléporte le joueur spécifié à vous en outrepassant ses préférences tpposCommandDescription=Se téléporter aux coordonnées spécifiées. tpposCommandUsage=/<command> <x> <y> <z> [yaw] [pitch] [monde] tpposCommandUsage1=/<command> <x> <y> <z> [yaw] [pitch] [monde] -tpposCommandUsage1Description=Vous téléporte à l''emplacement spécifié avec un yaw, un pitch et/ou un monde optionnels +tpposCommandUsage1Description=Vous téléporte à l''emplacement spécifié avec un yaw, un pitch et/ou un monde facultatifs tprCommandDescription=Se téléporter aléatoirement. tprCommandUsage=/<command> tprCommandUsage1=/<command> @@ -1258,7 +1254,7 @@ tps=§6TPS actuel \= {0} tptoggleCommandDescription=Bloque toutes les formes de téléportation. tptoggleCommandUsage=/<commande> [joueur] [on|off] tptoggleCommandUsage1=/<command> [joueur] -tptoggleCommandUsageDescription=Active/désactive si les téléportations sont activés pour vous ou pour un autre joueur si spécifié +tptoggleCommandUsageDescription=Active/désactive les téléportations pour vous ou pour un autre joueur si spécifié tradeSignEmpty=Le panneau de vente n''a pas encore assez de stock. tradeSignEmptyOwner=Il n''y a rien à collecter de cette pancarte d''échange commercial. treeCommandDescription=Fait apparaître un arbre où vous regardez. @@ -1291,7 +1287,7 @@ unlimitedCommandUsage=/<command> <list|item|clear> [joueur] unlimitedCommandUsage1=/<command> list [joueur] unlimitedCommandUsage1Description=Affiche une liste d''objets illimités pour vous ou pour un autre joueur si spécifié unlimitedCommandUsage2=/<command> <objet> [joueur] -unlimitedCommandUsage2Description=Active/désactive si l''objet donné est illimité pour vous ou pour un autre joueur si spécifié +unlimitedCommandUsage2Description=Active/désactive le don d''objet illimité pour vous ou pour un autre joueur si spécifié unlimitedCommandUsage3=/<command> clear [joueur] unlimitedCommandUsage3Description=Efface tous les objets illimités pour vous ou pour un autre joueur si spécifié unlimitedItemPermission=§4Pas de permission pour l''objet illimité §c{0}§4. @@ -1370,7 +1366,7 @@ warpsCount=§6Il y a§c {0} §6points de téléportation. Page §c{1} §6sur §c weatherCommandDescription=Définit la météo. weatherCommandUsage=/<command> <storm/sun> [durée] weatherCommandUsage1=/<command> <storm|sun> [durée] -weatherCommandUsage1Description=Définit la météo au type donné pour une durée optionnelle +weatherCommandUsage1Description=Définit la météo au type donné pour une durée facultative warpSet=§6Le point de téléportation§c {0} §6a été défini. warpUsePermission=§4Vous n''avez pas la permission d''utiliser ce point de téléportation. weatherInvalidWorld=Le monde {0} est introuvable \! @@ -1420,13 +1416,13 @@ worth=§7Un stack de {0} vaut §c{1}§7 ({2} objet(s) à {3} chacun) worthCommandDescription=Calcule la valeur des objets en main ou tel que spécifié. worthCommandUsage=/<command> <<nom de l''item>|<id>|hand|inventory|blocks> [-][quantité] worthCommandUsage1=/<command> <objet> [quantité] -worthCommandUsage1Description=Vérifie la valeur de tout (ou du montant donné, si spécifié) de l''objet donné dans votre inventaire +worthCommandUsage1Description=Vérifie la valeur de tous (ou du montant donné, si spécifié) les objets donnés dans votre inventaire worthCommandUsage2=/<command> hand [quantité] -worthCommandUsage2Description=Vérifie la valeur de tout (ou du montant donné, si spécifié) de l''objet tenu en main +worthCommandUsage2Description=Vérifie la valeur de tous (ou du montant donné, si spécifié) les objets tenus en main worthCommandUsage3=/<command> all worthCommandUsage3Description=Vérifie la valeur de tous les objets possibles dans votre inventaire worthCommandUsage4=/<command> blocks [quantité] -worthCommandUsage4Description=Vérifie la valeur de tout (ou le montant donné, si spécifié) les blocs dans votre inventaire +worthCommandUsage4Description=Vérifie la valeur de tous (ou le montant donné, si spécifié) les blocs dans votre inventaire worthMeta=§aUn stack de {0} de type {1} vaut §c{2}§a ({3} objet(s) à {4} chacun) worthSet=§6Valeur définie year=année diff --git a/Essentials/src/main/resources/messages_he.properties b/Essentials/src/main/resources/messages_he.properties index a9b66a8b079..073bd9e4696 100644 --- a/Essentials/src/main/resources/messages_he.properties +++ b/Essentials/src/main/resources/messages_he.properties @@ -6,6 +6,12 @@ action=§5{0} §5{1} addedToAccount=§a{0} נוסף לחשבון שלך. addedToOthersAccount=§a{0} נוסף לחשבונו של {1}§a. מאזן חדש\: {2} adventure=הרפתקה +afkCommandDescription=שם אותך כ-רחוק מהמקלדת. +afkCommandUsage=[שחקן/הודעה...] +afkCommandUsage1=[הודעה] +afkCommandUsage1Description=מחליף את מצב ה-רחוק מהמקלדת שלך עם סיבה אופציונלית +afkCommandUsage2=[הודעה] +afkCommandUsage2Description=מחליף את מצב ה-רחוק מהמקלדת של השחקן הספציפי עם סיבה אופציונלית alertBroke=נשבר\: alertFormat=§3[{0}] §r {1} §6 {2} ב\: {3} alertPlaced=מוקם\: @@ -17,42 +23,64 @@ antiBuildDrop=§4 אתה לא רשאי להפיל §c {0}§4. antiBuildInteract=§4 אתה לא רשאי ליצור קשר עם §c {0}§4. antiBuildPlace=§4 אתה לא רשאי למקם §c {0} §4 פה. antiBuildUse=§4 אתה לא רשאי להשתמש ב§c {0}§4. +antiochCommandDescription=הפתעה קטנה למפעילים. +antiochCommandUsage=[הודעה] +anvilCommandDescription=פותח סדן. +anvilCommandUsage=/<command> autoAfkKickReason=אתה קיבלת קיק על אי פעילות של יותר מ {0} דקות. autoTeleportDisabled=§6אתה לא מאשר בקשות השתגרות באופן אוטומטי יותר. autoTeleportDisabledFor=§{0} לא מאשר בקשות השתגרות באופן אוטומטי יותר. autoTeleportEnabled=§6 אתה כעת מאשר בקשות השתגרות באופן אוטומטי. autoTeleportEnabledFor=§c{0}§6 כעת מאשר בקשות השתגרות באופן אוטומטי. backAfterDeath=§6השתמש בפקודת /back על מנת לחזור למקום בו מתת. +backCommandDescription=משחק אותך למיקום קודם לtp/spawn/warp. +backCommandUsage=שחקן +backCommandUsage1=/<command> +backCommandUsage1Description=משגר אותך למקום הקודם שלך +backupCommandUsage=/<command> backupDisabled=§4Aסקריפט גיבוי חיצוני לא הוגדר. backupFinished=§6 גיבוי הושלם. backupStarted=§6B הגיבוי התחיל. backUsageMsg=§6 חוזר למיקום הקודם. balance=§a מאזנך\:§c {0} +balanceCommandUsage=שחקן +balanceCommandUsage1=/<command> balanceOther=§aיתרה של {0}§a\:§c {1} balanceTop=§6 בעלי המאזן הגבוה ביותר\: ({0}) +balanceTopLine={0}. {1}, {2} banExempt=§4 אתה לא יכול לתת באן לשחקן הזה. banFormat=§4 נתן באן ל\: \n§r{0} bed=\n§oמיטה§r\n bedMissing=§4 המיטה שלך לא ממוקמת,חסרה או חסומה. bedNull=\n§mמיטה§r\n bedSet=§6 מיקום לא מתאים לזימון\! +beezookaCommandUsage=/<command> bigTreeFailure=§4 זימון עץ גדול נכשל.תנסה שובה על דשא או אדמה. bigTreeSuccess=§6 עץ גדול זומן. bookAuthorSet=§6 מחבר הספר נקבע ל\: {0}. +bookCommandUsage1=/<command> bookLocked=§6 ספר זה נעול. bookTitleSet=§6 כותרת הספר נקבע ל {0}. +breakCommandUsage=/<command> burnMsg=§6 אתה העלת §c {0} §6 באש ל§c {1} שניות §6. cannotStackMob=§4 אין לך הרשאה לאסוף מספר חיות. canTalkAgain=§6 אתה יכול לדבר עכשיו שוב. cantFindGeoIpDB=לא הייתה אפשרות למצוא GeoIP database\! cantReadGeoIpDB=לא יכול לקרוא GeoIP database\! cantSpawnItem=§4 אתה לא רשאי לזמן את החפץ §c {0}§4. +cartographytableCommandUsage=/<command> chatTypeSpy=[מרגל] cleaned=פרטי המשתמש נוקו. cleaning=מנקה את פרטי המשתמש. +clearinventoryCommandUsage1=/<command> +clearinventoryconfirmtoggleCommandUsage=/<command> +commandArgumentOptional=§7 +commandArgumentRequired=§e commandFailed=פקודה {0} נכשלה\: commandHelpFailedForPlugin=שגיאה בקבלת עזרה לפלאגין\: {0} commandNotLoaded=\ {0} פקודה {0} לא נטענה כמו שצריך. +compassCommandUsage=/<command> +condenseCommandUsage1=/<command> configFileMoveError=נכשלה העברת config.yml למיקומי הגיבויים. configFileRenameError=נכשל שינוי השם של קבצי temp ל config.yml. connectedPlayers=§6 התחברו שחקנים §r @@ -77,8 +105,10 @@ denyChangeTitle=\n§4אינך יכול לשנות את שם ספר זה.\n depth=§6אתה בגובה הים. disabled=מופסק disabledToSpawnMob=\n§4שיגור mob זה בוטל בקובץ הקונפיג.\n +disposalCommandUsage=/<command> dontMoveMessage=\n§6שיגור יתבצע בעוד§c {0}§6. אל תזוז.\n durability=\n§6לחפץ זה יש §c{0}§6 שימושים שנותרו.\n +east=מזרח editBookContents=\n§eכעת אתה יכול לערוך את התוכן של ספר זה.\n enabled=הופעל enableUnlimited=\n§6נותן ללא הגבלה בסכום של§c {0} §6ל §c{1}§6.\n @@ -87,13 +117,18 @@ enchantmentNotFound=§4כישוף לא נמצא\! enchantmentPerm=\n§4אין לך הרשאות ל§c {0}§4.\n enchantmentRemoved=\n§6הכישוף§c {0} §6הוסר מהחפץ בידך.\n enchantments=\n§6כישופים\:§r {0}\n +enderchestCommandUsage=שחקן +enderchestCommandUsage1=/<command> errorCallingCommand=\nשגיאה בניסיון להרצת הפקודה /{0}\n errorWithMessage=\n§cשגיאה\:§4 {0}\n +essentialsCommandUsage=/<command> essentialsHelp1=\nהקובץ פגום וEssentials לא יכול להריץ אותו. Essentials עכשיו מכובה. אם אינך יכול לתקן את הקובץ בעצמך, עבור אל הכתובת הבאה http\://tiny.cc/EssentialsChat\n essentialsHelp2=\nהקובץ פגום וEssentials לא יכול להריץ אותו. Essentials עכשיו מכובה. אם אינך יכול לתקן את הקובץ בעצמך, כתוב /essentialshelp במשחק, או עבור אל http\://tiny.cc/EssentialsChat\n essentialsReload=\n§6Essentials נטען מחדש בהצלחה§c {0}.\n exp=\n§c{0} §6יש§c {1} §6exp (רמה§c {2}§6) וצריך§c {3} §6עוד exp לעלות רמה.\n expSet=\n§c{0} §6יש כעת§c {1} §6exp.\n +extCommandUsage=שחקן +extCommandUsage1=שחקן extinguish=\n§6אתה כיבית את עצמך.\n extinguishOthers=\n§6אתה כיבית את {0}§6.\n failedToCloseConfig=שגיאה בעת סגירת ה Config @@ -101,19 +136,31 @@ failedToCreateConfig=\nשגיאה בניסיון ליצור את קובץ הקו failedToWriteConfig=שגיעה בעת כתיבה ל Config false=לא נכון feed=\n§6הרעב שלך התמלא.\n +feedCommandUsage=שחקן +feedCommandUsage1=שחקן feedOther=\n§6מילאת את הרעב של §c{0}§6.\n fileRenameError=\nשינוי שם של הקובץ {0} נכשל\!\n +fireballCommandUsage1=/<command> fireworkColor=\n§4הנתונים של הזיקוק שהוכנו שגויים, עליך לבחור צבע קודם.\n fireworkEffectsCleared=\n§6הוסרו כל האפקטים מהמחסנית.\n fireworkSyntax=§6נתוני זיקוק\:§c צבע\:<צבע> [דעיכה\:<צבע>] [צורה\:<צורה>] [אפקט\:<אפקט>]\n §6בשביל להשתמש בכמה צבעים או אפקטים, הפרד בפסיקים\: §cאדום,כחול,ורוד\n §6Sצורות\:§c כוכב, כדור, גדול, קריפר, פרץ §6אפקטים\:§cשובל, נוצץ. +flyCommandUsage1=שחקן flying=עף / לעוף flyMode=\n§6מצב תעופה הוגדר §c {0} §6ל {1}§6.\n foreverAlone=\n§4אין לך אף אחד להחזיר אליו הודעה.\n fullStack=כבר יש לך סטאק שלם gameMode=מצב המשחק שלך הוגדר ל x +gcCommandUsage=/<command> +getposCommandUsage=שחקן +getposCommandUsage1=שחקן +godCommandUsage1=שחקן +grindstoneCommandUsage=/<command> hatArmor=§4אתה לא יכול להשתמש בפריט הזה בתור כובע\! +hatCommandUsage1=/<command> hatEmpty=§4אתה לא חובש כובע.\n hatRemoved=§6הכובע שלך נמחק. +healCommandUsage=שחקן +healCommandUsage1=שחקן helpFrom=§6פקודות מ {0}\: helpPlugin=מידע על הפלאגין\: /help holdBook=אתה לא מחזיק בספר כתיבה. @@ -121,6 +168,8 @@ holeInFloor=חור ברצפה \! homeSet=הבית הוגדר. hour=שעה hours=שעות +iceCommandUsage=שחקן +iceCommandUsage1=/<command> illegalDate=תבנית תאריך לא חוקית. infoChapter=§6בחר פרק\: infoUnknownChapter=\n§4נתון לא ידוע.\n @@ -138,6 +187,7 @@ is=זה itemCannotBeSold=החפץ הזה לא יכול להמכר לשרת. itemMustBeStacked=\n§4החפץ חייב לעבור בכמויות. כמות של 2s יהיה שתי סטאקים, וכו''.\n itemNames=\n§6שמות קצרים של החפץ\:§r {0}\n +itemnameCommandUsage1=/<command> itemNotEnough1=\n§4אין לך מספיק מחפץ לך כדי למכור.\n itemSellAir=אתה באמת ניסית למכור אוויר ? תשים חפץ ביד שלך. itemSold=\n§aנמכר ל §c{0} §a({1} {2}ל {3} אחד).\n @@ -149,12 +199,17 @@ jailReleased=השחקן x שוחרר מהכלא. jailReleasedPlayerNotify=\n§6אתה שוחררת מהכלא\!\n jailSentenceExtended=\n§6זמן בכלא עומד על §c{0}§6.\n jailSet=\n§6כלא§c {0} §6נוצר.\n +jailsCommandUsage=/<command> +jumpCommandUsage=/<command> jumpError=\n§4זה יכאב למוח של המחשב שלך.\n kickDefault=הוציאו אותך מהשרת. kickedAll=\n§4כל שחקני השרת נותקוr.\n kickExempt=אתה לא יכול לעשות kick לשחקן הזה. kill=הרג killExempt=אתה לא יכול להרוג x +kitCommandUsage1=/<command> +kitCost=\ §7§o({0})§r +kitDelay=§m{0}§r kitError=\n§4אין ערכות שנמצאו.\n kitError2=\n§4הערכה מוגדרת לא כראוי. צור קשר עם מנהל.\n kitGiveTo=מביא kit ל x @@ -163,13 +218,16 @@ kitNotFound=\n§4ערכה זאת אינה קיימת.\n kitOnce=\n§4אינך יכול להשתמש בערכה זאת שוב.\n kitReceive=\n§6נותן ערכה§c {0}§6.\n kits=\n§6ערכות\:§r {0}\n +kittycannonCommandUsage=/<command> kitTimed=\n§4תוכל להשתמש בערכה זאת רק בעוד§c {0}§4.\n +lightningCommandUsage1=שחקן lightningSmited=\n§6ברק נורה\!\n lightningUse=\n§6פוגע עם ברק ב§c {0}\n listAfkTag=§7[רחוק מהמקלדת]§r listAmount=\n§6יש כרגע §c{0}§6 מתוך מקסימום שחקנים של §c{1}§6 שחקנים מחוברים.\n listHiddenTag=\n§7[מוסתר]§r\n loadWarpError=\n§4שגיאה בניסיון לטעון שיגור {0}.\n +loomCommandUsage=/<command> mailCleared=\n§6דואר נוקה\!\n mailSent=\n§6דואר נשלח\!\n markMailAsRead=\n§6בשביל לסמן את כל הדואר כנקרא , רשום§c /mail clear§6.\n @@ -177,16 +235,23 @@ matchingIPAddress=\n§6השחקנים הבאים התחברו בפעמים קו maxHomes=\n§4אינך יכול להגיד יותר מ§c {0} §4בתים.\n mayNotJail=\n§4אינך יכול לשלוח את שחקן זה לכלא\!\n minute=דקה +minutes=דקות +mobsAvailable=§6מובים\:§r {0} +month=חודש +months=חודשים moreThanZero=§4כמות צריכה להיות גדולה מ0. +msgtoggleCommandUsage1=שחקן mutedPlayer=§6Player§c {0} §6הושתק. muteExempt=§4אתה לא יכול להשתיק שחקן זה. muteNotify=§c{0} §6השתיק את §c{1}§6. +nearCommandUsage1=/<command> nickChanged=§6כינוי שונה. nickInUse=§4כינוי זה נמצא כבר בשימוש. nickNamesAlpha=§4כינויים יכולים להכיל אותיות ומספרים בלבד. nickNoMore=§6אין לך יותר כינוי. nickSet=§6הכינוי שלך שונה ל §c{0}§6. nickTooLong=§4הכינוי שבחרת ארוך מידי. +north=צפון noHomeSetPlayer=§6השחקן לא הגדיר בית. noIgnored=§6אתה לא מתעלם מאף אחד. noKitPermission=§4אתה צריך את הגישה §c{0}§4 בשביל להשתמש בקיט זה. @@ -209,6 +274,7 @@ nothingInHand=\n§4אין לך כלום ביד.\n now=עכשיו noWarpsDefined=\n§6אין שיגורים.\n nuke=\n§5גשם מוות הופעל.\n +nukeCommandUsage=שחקן numberRequired=מספר הולך לשם, טיפשי onlyDayNight=\n/זמן תומך רק יום/לילה.\n onlyPlayers=\n§4רק שחקנים במשחק יכולים להשתמש ב §c{0}§4.\n @@ -216,8 +282,12 @@ onlyPlayerSkulls=\n§4אתה יכול רק להגדיר את הבעלים של onlySunStorm=\n§4/מזג אוויר תומך רק שמש/סופה.\n orderBalances=\n§6מסדר נתוני כסף של§c {0} §6שחקנים, אנא המתן...\n oversizedTempban=\n§4אינך יכול לאסור שחקן זה לזמן זה.\n +payconfirmtoggleCommandUsage=/<command> +paytoggleCommandUsage=שחקן +paytoggleCommandUsage1=שחקן pendingTeleportCancelled=\n§4בקשה ממתינה בוטלה.\n pingCommandDescription=פונג\! +pingCommandUsage=/<command> playerBanIpAddress=\n§6השחקן§c {0} §6אסר את כתובת האייפי הבאה§c {1} §6ל\: §c{2}§6.\n playerBanned=\n§6השחקן§c {0} §6אסר§c {1} §6ל\: §c{2}§6.\n playerJailed=\n§6השחקן§c {0} §6נכנס לכלא.\n @@ -227,6 +297,7 @@ playerNotFound=§4שחקן לא נמצא. pong=פונג\! powerToolAir=§4פקודה לא יכולה להיות מצורפת לאוויר. powerToolAlreadySet=§4הפקודה §c{0}§4 כבר רשומה ב §c{1}§4. +powertooltoggleCommandUsage=/<command> pTimeCurrent=\n§c{0}§6''s השעה היא§c {1}§6.\n pTimeCurrentFixed=\n§c{0}§6''s השעה תוקנה ל§c {1}§6.\n pTimeNormal=\n§c{0}§6''s הזמן הוא רגיל ומתאים לשרת.\n @@ -242,6 +313,9 @@ pWeatherOthersPermission=\n§4אינך רשאי לשנות את מזג האוו pWeatherPlayers=\n§6לשחקנים הבאים יש מזג אוויר משלהם\:§r\n pWeatherReset=\n§6מזג האוויר של השחקן אופס ל\: §c{0}\n pWeatherSet=\n§6מזג האוויר של השחקן שונה ל to §c{0}§6 ל\: §c{1}.\n +recipeNothing=שום דבר +recipeWhere=§6איפו\: {0} +repairCommandUsage1=/<command> repairInvalidType=§4לא ניתן לתקן את החפץ הזה. repairNone=§4לא נמצאו חפצים שצריכים תיקון. requestAccepted=§6בקשת השתגרות אושרה. @@ -250,6 +324,8 @@ requestDenied=§6בקשת ההשתגרות נדחתה. requestDeniedFrom=§c{0} §6דחה את בקשת ההשתגרות שלך. requestSent=§6בקשה נשלחה אל§c {0}§6. requestTimedOut=§4בקשת ההשתגרות עברה את הזמן המוקצב. +restCommandUsage=שחקן +restCommandUsage1=שחקן runningPlayerMatch=\n§6מריץ חיפוש לשחקנים המתאימים ל ''§c{0}§6'' (זה יכול לקחת קצת זמן).\n second=שנייה seconds=שניות @@ -262,14 +338,21 @@ setBalOthers=\n§aשינית לשחקן {0}§a''s את כמות הכסף ל {1}. setSpawner=\n§6סוג המשגר שונה ל §c {0}§6.\n sheepMalformedColor=\n§4צבע פגום.\n shoutFormat=§6[הכרזה]§r {0} +signFormatTemplate=[{0}] signProtectInvalidLocation=\n§4אינך יכול ליצור שלט כאן.\n similarWarpExist=\n§4השיגור בשם זה כבר קיים.\n +south=דרום +skullCommandUsage1=/<command> slimeMalformedSize=\n§4גודל פגום.\n +smithingtableCommandUsage=/<command> socialSpy=\n§6מעקב פקודות ל §c{0}§6\: §c{1}\n +socialspyCommandUsage1=שחקן soloMob=\n§4מפלצת זו אוהבת לחיות לבד.\n spawned=שוגר spawnSet=\n§6מיקום שיגור הוגדר לקבוצה §c {0}§6.\n +stonecutterCommandUsage=/<command> sudoRun=\n§6שולח פקודה בשם §c {0} §6הפקודה הנשלחת\:§r /{1}\n +suicideCommandUsage=/<command> suicideMessage=\n§6להתראות עולם אכזר...\n suicideSuccess=\n§6השחקן §c{0} §6התאבד על חייו.\n survival=הישרדות @@ -286,4 +369,26 @@ teleportRequest=\n§c{0}§6 ביקש להשתגר אליך.\n teleportRequestTimeoutInfo=\n§6בקשה זו תתבטל אחרי§c {0} שניות§6.\n teleportTop=\n§6משתגר לגובה.\n teleportToPlayer=§6משתגר אל §c{0}§6. +timeCommandUsage1=/<command> +toggleshoutCommandUsage1=שחקן +topCommandUsage=/<command> +tpacancelCommandUsage=שחקן +tpacancelCommandUsage1=/<command> +tpacceptCommandUsage1=/<command> +tpallCommandUsage=שחקן +tpallCommandUsage1=שחקן +tpautoCommandUsage=שחקן +tpautoCommandUsage1=שחקן +tpdenyCommandUsage=/<command> +tpdenyCommandUsage1=/<command> +tprCommandUsage=/<command> +tprCommandUsage1=/<command> +tptoggleCommandUsage1=שחקן treeSpawned=§6עץ זומן. +vanishCommandUsage1=שחקן +west=מערב +whoisTop=§6 \=\=\=\=\=\= מי זה\:§c {0} §6\=\=\=\=\=\= +workbenchCommandUsage=/<command> +worldCommandUsage1=/<command> +year=שנה +years=שנים diff --git a/Essentials/src/main/resources/messages_hr.properties b/Essentials/src/main/resources/messages_hr.properties index 301ea9841d0..7e1d52ed558 100644 --- a/Essentials/src/main/resources/messages_hr.properties +++ b/Essentials/src/main/resources/messages_hr.properties @@ -9,44 +9,79 @@ alertBroke=uništeno\: alertFormat=§3 [{0}] §3 {1} §3 {2} &7na\: &3{3} alertPlaced=postavljeno\: alertUsed=korišteno\: +alphaNames=Ime igrača može sadržavati samo slova, brojeve i donje crte. antiBuildBreak=§7Nemas dozvolu da unistavas§3 {0} §7blokove ovdje. antiBuildCraft=§7Nemas dozvolu da stvoris§3 {0}§7. antiBuildDrop=§7Nemas dozvolu da bacas stvari§3 {0}§7. antiBuildInteract=§7Nesmijes komunicirati sa§3 {0}§7. antiBuildPlace=§7Nemas dozvolu da postavis&3 {0} §7ovdje. antiBuildUse=§7Nemas dozvolu da koristis§3 {0}§7. +antiochCommandDescription=Malo iznenađenje za operatore. +anvilCommandDescription=Otvara nakovanj. +anvilCommandUsage=/<command> autoAfkKickReason=§7Izbacen si jer si bio Afk &3{0} &7minuta. +backAfterDeath=§6Koristi §c/back §6komandu da se vratiš na mjesto smrti. +backCommandUsage1=/<command> +backOther=§6Vraćanje§c {0}§6 na prethodnu lokaciju. +backupCommandUsage=/<command> backupDisabled=§7Jedna vanjska sigurnosna kopija nije konfigurirana. backupFinished=§7Backup je zavrsen. backupStarted=§7Backup je zapoceo. backUsageMsg=§7Vracanje na prethodnu lokaciju. balance=§aStanje na racunu\:§c {0} +balanceCommandUsage1=/<command> balanceOther=§aStanje na racunu od {0}§a\:§c {1} balanceTop=§6Top stanje na racunu ({0}) +balanceTopLine={0}. {1}, {2} +balancetopCommandUsage=/<command> [page] +balancetopCommandUsage1=/<command> [page] +banCommandDescription=Zabranjuje pristup igraču. +banCommandUsage=/<command> <player> [reason] +banCommandUsage1=/<command> <player> [reason] +banCommandUsage1Description=Bana određenog igrača s neobaveznim razlogom banExempt=§4Nemozes banati tog igraca. banExemptOffline=§4Nemožeš banati igrača koji nije u igri. banFormat=§cDobio si ban\! Razlog\: \n§r{0} +banIpJoin=Tvoja IP adresa je banana sa servera. Razlog\: {0} +banJoin=Ti si banan s ovog servera. Razlog\: {0} +banipCommandDescription=Bana IP adresu. +banipCommandUsage=/<command> <address> [reason] +banipCommandUsage1=/<command> <address> [reason] +banipCommandUsage1Description=Bana određenu IP adresu s neobaveznim razlogom bed=§oKrevet§r bedMissing=§4Tvoj krevet nije postavljen, nedostaje ili je blokiran. bedNull=§mKrevet§r bedSet=§6Krevet je postavljen\! +beezookaCommandUsage=/<command> bigTreeFailure=§4Generacija velikog stabla neuspjela. Pokušaj ponovo na travi ili zemlji. bigTreeSuccess=§6Veliko stablo stvoreno. +bigtreeCommandUsage=/<command> <tree|redwood|jungle|darkoak> +bigtreeCommandUsage1=/<command> <tree|redwood|jungle|darkoak> +bigtreeCommandUsage1Description=Stvara veliko drvo određene vrste bookAuthorSet=§6Author knjige postavljen na {0}. +bookCommandUsage=/<command> [title|author [name]] +bookCommandUsage1=/<command> +bookCommandUsage2=/<command> author <author> bookLocked=§6Ova knjiga je sada zaključana. bookTitleSet=§6Naslov knjige postavljen na {0}. +breakCommandUsage=/<command> burnMsg=§6Zapaslio si §c {0} §6na§c {1} sekundi§6. cannotStackMob=§4Nemaš dozvolu spajati više bića. canTalkAgain=§6Sada opet možes razgovarati. cantFindGeoIpDB=Nije moguće pronači GeoIP bazu podataka\! cantReadGeoIpDB=Nije uspjeo čitanje GeoIP baze podataka\! cantSpawnItem=Nemas dozvolu za stvaranje §c {0}. +cartographytableCommandUsage=/<command> chatTypeSpy=[Špijun] cleaned=Baza igrača očišćena. cleaning=Čišćenje baze igrača. +clearinventoryCommandUsage1=/<command> +clearinventoryconfirmtoggleCommandUsage=/<command> commandFailed=Naredba {0} nije uspjela\: commandHelpFailedForPlugin=Pogreska pri dobivanju pomoći za plugin\: {0} commandNotLoaded=Komanda {0} je uspjesno ucitana. +compassCommandUsage=/<command> +condenseCommandUsage1=/<command> configFileMoveError=Premjestiti config.yml na mjesto sigurnosne kopije nije uspjelo. configFileRenameError=Nije prava mjesavina varalica preminenovati u confiog.ym. connectedPlayers=Povezani igraci @@ -74,6 +109,7 @@ depthBelowSea=§6Vi ste§c {0} §6blok(ova) ispod razine mora. destinationNotSet=Destinacija nije postavljena\! disabled=isključen disabledToSpawnMob=§4Stvaranje ovoga moba je iskljuceno u konfiguraciji. +disposalCommandUsage=/<command> distance=§6Udaljenost\: {0} dontMoveMessage=Teleportacija ce zapoceti za {0} sekundi. duplicatedUserdata=Duplicirani korisnicki podatci\: {0} i {1}. @@ -85,8 +121,10 @@ enchantmentNotFound=§4Enchantment nije pronađen\! enchantmentPerm=&4Nemas dozvolu za &c {0}&4. enchantmentRemoved=§6Enchantment§c {0} §6je uklonjen iz vašeg itema u ruci. enchantments=§6Enchantmenti\:§r {0} +enderchestCommandUsage1=/<command> errorCallingCommand=&7Nepoznata komanda &3{0}&7 errorWithMessage=&7Error\:&3 {0} +essentialsCommandUsage=/<command> essentialsHelp1=&7Datoteka je slomljena i Essentials nije moguce otvoriti. Neophodan je sada onemoguceno. Ako ne mozete popraviti datoteku, idite na http\://tiny.cc/EssentialsChat essentialsHelp2=&7Datoteka je slomljena i Essentials nije moguce otvoriti. Neophodan je sada onemoguceno. Ako ne mozete popraviti datoteku napisite /essentialshelp u igri ili idite na http\://tiny.cc/EssentialsChat essentialsReload=&7Essentials reloaded &3{0}&7. @@ -100,6 +138,7 @@ failedToWriteConfig=Nije uspjelo zapisivanje configa {0}. feed=&7Tvoj apetit je napunjen. feedOther=&7Apetit je sada pun od &3{0}&7. fileRenameError=Preimenovanje datoteke {0} nije uspjelo\! +fireballCommandUsage1=/<command> fireworkColor=&7Nepoznat vartromet morate prvo staviti boju. fireworkEffectsCleared=§6Uklonjeni su svi efekti iz itema u ruci. fireworkSyntax=&7Stvari za vatromet\: &3Boja\: <color> [blijede\: <color> [oblik <shape>] [efekt\: <effect>] &7To koristiti vise boja/efekti, vrijednosti odvojite zarezima\: &3crvena,plava,roza &7Oblici\: &3zvijezda,lopta,veliko,puzavac.praska &7Efekti\: &3trag, svjetlucati&7. @@ -108,6 +147,7 @@ flyMode=&7Letenje je &3{0} &7za &3{1}&7. foreverAlone=§4Nemate nikoga kome možete odgovoriti. fullStack=§4Vec imas puni stack. gameMode=&6Postavjen gamemode &c {0} &6za &c{1}&6. +gcCommandUsage=/<command> gcfree=§6Slobodno memorije\: §c {0} MB. gcmax=§6Max memorije\: §c {0} MB. gctotal=&7Memorija\: &3{0} &7MB. @@ -118,9 +158,11 @@ givenSkull=&7Dobio si glavu od &3{0}&7. godDisabledFor=§ciskljucen§6 za§c {0} godEnabledFor=§aukljuceno§6 za§c {0} godMode=&7GodMode &3{0}&7. +grindstoneCommandUsage=/<command> groupDoesNotExist=§4Nitko nije online u ovoj grupi\! groupNumber=§c{0}§f online, za cijeli popis\: §c /{1} {2} hatArmor=§4Ne možete koristiti ovaj item kao šešir\! +hatCommandUsage1=/<command> hatEmpty=§4Trenutno ne nosis kapu. hatFail=§4Moras nesto nositi u ruci. hatPlaced=§6Uzivaj sa novom kapom\! @@ -141,6 +183,7 @@ homes=&6Kuce\:&r {0} homeSet=§6Home postavljen na trenutnu lokaciju. hour=sat hours=sati +iceCommandUsage1=/<command> ignoredList=§6Ignoriran\:§r {0} ignoreExempt=&7Nemozes ignorirati ovog igraca. ignorePlayer=§6Ignoriras igraca§c {0} §6od sad. @@ -168,6 +211,7 @@ isIpBanned=&7IP &3{0} &7je banovan. itemCannotBeSold=§4Ovaj item se nemoze prodati na serveru. itemMustBeStacked=&7Stvar mora biti prodana u stekovima. Kolicina 2 steka, itd. itemNames=§6Item kratka imena\: §r {0} +itemnameCommandUsage1=/<command> itemNotEnough1=§4Ti nemajs dovoljno tog itema za prodaju. itemSellAir=&7Stvarno si pokusao prodati zrak? Stavi predmet u ruke. itemSold=&7Prodaj za &3{0} ({1} {2} u {3} stvari). @@ -179,12 +223,17 @@ jailReleased=§6Igrac §c{0}§6 je pusten iz zatvora. jailReleasedPlayerNotify=§6Pusten si\! jailSentenceExtended=§6Jail vrijeme je produzeno na §c{0}§6. jailSet=§6Zatvor§c {0} §6je postavljen. +jailsCommandUsage=/<command> +jumpCommandUsage=/<command> jumpError=&7Ovo bi povrijedilo vas kompjuter. +kickCommandUsage=/<command> <player> [reason] +kickCommandUsage1=/<command> <player> [reason] kickDefault=Izbacen si sa servera. kickedAll=§4Izbaceni su svi igraci sa servera. kickExempt=§4Nemozes izbaciti tog igraca. kill=§c {0}§6 je umro. killExempt=§4Nemožes ubiti §c{0}§4. +kitCommandUsage1=/<command> kitError=§4Kitovi nepostoje. kitError2=§6Ovaj kit ne postoji, obrati se staff-teamu. kitGiveTo=Davanje kita {0} igracu {1}. @@ -193,6 +242,7 @@ kitNotFound=Taj kit ne postoji. kitOnce=Ne mozes ponovo koristiti taj kit. kitReceive=§6Dobio si kit§c {0}§6. kits=§6Kitovi\:§r {0} +kittycannonCommandUsage=/<command> kitTimed=§4Ti ne mozes koristiti taj kit ponovno za jos§c {0}§4. lightningSmited=&7Thor ga je pogodio grmljavinom\! lightningUse=&7Grmimo na &3{0}&7 @@ -200,6 +250,7 @@ listAfkTag=&7[AFK]&r listAmount=§6Online su §c{0}§6 od maksimalno §c{1}§6 igrača online. listHiddenTag=&7[Ne Vidljiv]&r loadWarpError=&3Greska&7, nemozemo ucitati warp {0}. +loomCommandUsage=/<command> mailCleared=&7Email je obrisan\! mailMessage=&3{0} mailSent=&7Email je poslan\! @@ -226,6 +277,7 @@ mutedPlayerFor=&7Igrac&3 {0} &7je mutovan za &3{1}&7. muteExempt=&7Nemozes mute ovog igraca. muteExemptOffline=&7Nemozes mutati izvanmrezne igrace. muteNotify=&3{0} &7je mutovao igraca &3{1}&7. +nearCommandUsage1=/<command> nearbyPlayers=&7Igraci u blizini\: &3{0} negativeBalanceError=&7Igrac nesmije imati negativne novce. nickChanged=&7Ime je promjenjeno. @@ -273,8 +325,10 @@ onlyPlayerSkulls=Možeš postaviti samo igračevu lubanju (§c397\:3§4). onlySunStorm=§4/weather podržava samo sun/storm. orderBalances=&7Ucitavamo stanja novaca &3{0} &figraca, molimo pricekajte... oversizedTempban=&7Nemozes banovati igraca na to vrijeme. +payconfirmtoggleCommandUsage=/<command> pendingTeleportCancelled=&7Ponistio si teleport zahtijev. pingCommandDescription=&3Strong-Pvperzzz &7<333\! +pingCommandUsage=/<command> playerBanIpAddress=&7Igrac &3{0} &7je banovao IP Adresu &3{1} &7za\: &3{2}&7. playerBanned=&7Igrac &3{0} &7je banovao &3{1} &7, razlog\: &3{2}&7. playerJailed=§6Igrac§c {0} §6zatvoren. @@ -290,6 +344,7 @@ powerToolAlreadySet=§4Command §c{0}§4 već je dodijeljena §c{1}§4. powerToolClearAll=&7Sve moci sa te stvari su izbrisane. powerToolList=§6Item §c{1} §6ima sljedeće naredbe\: §c{0}§6. powerToolNoSuchCommandAssigned=§4Command §c{0}§4 već je dodijeljena §c{1}§4. +powertooltoggleCommandUsage=/<command> pTimeCurrent=&3{0}&7 vrijeme je &3{1}&7. pTimeCurrentFixed=&3{0}&7vrijeme je popravljeno u &3{1}&7. pTimeNormal=&3{0}&7 vrijeme je normalno i odgovara na server. @@ -310,6 +365,7 @@ recipeWhere=&7Gdje\: &3{0}&7 removed=&7Izbrisano &3{0} &7stvari. repair=§6Ti su uspjesno popravili svoje\: §c{0}§6. repairAlreadyFixed=§4Taj predmet ne treba popravak. +repairCommandUsage1=/<command> repairEnchanted=§4Nije dozvoljeno popravljati enčantane iteme. repairInvalidType=§4Taj se predmet ne mose popraviti. repairNone=§4Nema stavki koje treba popraviti. @@ -332,9 +388,13 @@ setBalOthers=&7Stavio si &3{0} &7novce za &3{1}&7. setSpawner=§6Promijenjen spawner tip to§c {0}§6. similarWarpExist=§4Warp sa sličnim imenom već postoji. skullChanged=&7Glava se promjenila u &3{0}&7. +skullCommandUsage1=/<command> +smithingtableCommandUsage=/<command> socialSpy=&7Prisluskivanje za &3{0}&7\: &3{1} spawnSet=&7Spawn je postavljen na grupu &3 {0}&7. +stonecutterCommandUsage=/<command> sudoRun=&7Mucenje &3{0} &7da kaze\:&r /{1} +suicideCommandUsage=/<command> suicideMessage=§6Vidimo se za 5 sec... suicideSuccess=&7Igrac &3{0} &7je ubio sam sebe. survival=&7prezivljavanje @@ -359,9 +419,17 @@ tempbanExempt=&7Nemozes privremeno banovati ovu osobu. tempbanExemptOffline=&7Nemozes privremeno banovati izvanmrezne igrace. timeBeforeHeal=&7Vrijeme prije novog ljecenja\:&3{0}&7. timeBeforeTeleport=&7Vrijeme nakon nove teleportacije\: &3{0}&7. +timeCommandUsage1=/<command> timeFormat=&3{0}&7 ili &3{1} &7 ili &3{2}&7 timeWorldCurrent=&7Trenutno vrijeme u &3{0} &7je &3{1}&7. timeWorldSet=&7Vrijeme je postavljeno sa &3{0}&7u\: &3{1}&7. +topCommandUsage=/<command> +tpacancelCommandUsage1=/<command> +tpacceptCommandUsage1=/<command> +tpdenyCommandUsage=/<command> +tpdenyCommandUsage1=/<command> +tprCommandUsage=/<command> +tprCommandUsage1=/<command> tps=&7Trenutacni TPS \= &3{0} typeTpaccept=§6Za teleport, kucaj §c/tpaccept§6. typeTpdeny=§6Za odbiti ovaj zahtjev, kucaj §c/tpdeny§6. @@ -381,6 +449,7 @@ versionMismatch=§4Version ne podudaraju\! Ažurirajte {0} istu verziju. versionMismatchAll=§4Version ne podudaraju\! Ažurirajte sve Essentials tegle na istu verziju. voiceSilenced=&7Nemozes pricati\! walking=&7hodanje +warpCommandUsage1=/<command> [page] warpDeleteError=&7Problem sa brisanjem warp datoteke. warpingTo=&7Warpas se do &3{0}&7. warpList=&3{0} @@ -410,6 +479,8 @@ whoisMuted=&7 - Mutovan\:&3 {0} whoisNick=&7 - Nick\: &3 {0} whoisOp=&7 - OP\:&3 {0} whoisTop=&7 \=\=\= &3Tko je\: {0} &7 \=\=\= +workbenchCommandUsage=/<command> +worldCommandUsage1=/<command> worth=§aStack {0} vrijednosti §c{1}§a ({2} stavke u {3} svaki) worthSet=§6Vrijednost je stavljena year=&7godina diff --git a/Essentials/src/main/resources/messages_hu.properties b/Essentials/src/main/resources/messages_hu.properties index 963b2ce1684..d936155d45d 100644 --- a/Essentials/src/main/resources/messages_hu.properties +++ b/Essentials/src/main/resources/messages_hu.properties @@ -9,9 +9,9 @@ adventure=kaland afkCommandDescription=Beállítja, hogy távol vagy a géptől. afkCommandUsage=/<command> [játékos/üzenet...] afkCommandUsage1=/<command> [üzenet] -afkCommandUsage1Description=Opcionális okkal kapcsolja be az afk állapotát -afkCommandUsage2=/<command> <player> [message] -afkCommandUsage2Description=Opcionális okkal kapcsolja be a megadott játékos afk állapotát +afkCommandUsage1Description=A nem vagy gépnél állapotod állítása egy opcionális okkal +afkCommandUsage2=/<command> <játékos> [üzenet] +afkCommandUsage2Description=A nem vagy gépnél állapot állítása a meghatározott játékosnak egy opcionális okkal alertBroke=tör\: alertFormat=§3[{0}] §r {1} §6 {2}\: {3} alertPlaced=lerakott\: @@ -51,29 +51,29 @@ balance=§aEgyenleg\:§c {0} balanceCommandDescription=A játékos aktuális egyenlegének állapota. balanceCommandUsage=/<command> [játékos] balanceCommandUsage1=/<command> -balanceCommandUsage1Description=Leírja a jelenlegi egyenlegét +balanceCommandUsage1Description=Leírja a jelenlegi egyenleged balanceCommandUsage2=/<command> <játékos> balanceCommandUsage2Description=Megjeleníti a megadott játékos egyenlegét balanceOther={0}§a egyenlege\:§c {1} balanceTop=§6Legmagasabb egyenlegek ({0}) balanceTopLine={0}. {1}, {2} balancetopCommandDescription=Legmagasabb egyenlegek lekérdezése. -balancetopCommandUsage=/<command> [page] -balancetopCommandUsage1=/<command> [page] -balancetopCommandUsage1Description=Megjeleníti a legnagyobb egyenlegeket() +balancetopCommandUsage=/<command> [oldal] +balancetopCommandUsage1=/<command> [oldal] +balancetopCommandUsage1Description=Megjeleníti a legnagyobb egyenlegek első (vagy meghatározott) oldalát banCommandDescription=Kitilt egy játékost. banCommandUsage=/<command> <játékos> [ok] banCommandUsage1=/<command> <játékos> [ok] -banCommandUsage1Description=Kitiltja a megadott játékost opcionális okból +banCommandUsage1Description=Kitiltja a meghatározott játékost egy opcionális okkal banExempt=§4Nem tilthatod ki ezt a játékost. banExemptOffline=§4Nem tilthatsz ki offline játékosokat. banFormat=§4Ki lettél tiltva\:\n§r{0} banIpJoin=Az IP címed ki lett tiltva. Oka\: {0} banJoin=Ki lettél tiltva a szerverről. Oka\: {0} banipCommandDescription=Kitilt egy IP címet. -banipCommandUsage=/<command> <address> [reason] -banipCommandUsage1=/<command> <address> [reason] -banipCommandUsage1Description=Kitiltja a megadott IP-címet opcionális indokkal +banipCommandUsage=/<command> <cím> [ok] +banipCommandUsage1=/<command> <cím> [ok] +banipCommandUsage1Description=Kitiltja a meghatározott IP-címet egy opcionális okkal bed=§oágy§r bedMissing=§4Az ágyad nincs beállítva vagy eltorlaszolták. bedNull=§mágy§r @@ -93,8 +93,8 @@ bookAuthorSet=§6Mostantól a könyv írója\: {0}. bookCommandDescription=Lehetővé teszi a lezárt könyvek újbóli megnyitását és szerkesztését. bookCommandUsage=/<command> [cím|író [név]] bookCommandUsage1=/<command> -bookCommandUsage1Description=Lezár/kinyit egy Könyvet-és-tollat​​/írott-könyvet -bookCommandUsage2=/<command> author <author> +bookCommandUsage1Description=Lezár/Kinyit egy Könyvet-és-tollat​​/írott-könyvet +bookCommandUsage2=/<command> author <szerző> bookCommandUsage2Description=Beállítja az aláírt könyv szerzőjét bookCommandUsage3=/<command> title <title> bookCommandUsage3Description=Beállítja az aláírt könyv címét @@ -106,15 +106,15 @@ broadcast=§6[§4Közvetítés§6]§a {0} broadcastCommandDescription=Üzenetet közvetít a teljes szerveren. broadcastCommandUsage=/<command> <üzenet> broadcastCommandUsage1=/<command> <üzenet> -broadcastCommandUsage1Description=Az adott üzenetet a teljes szerverre sugározza +broadcastCommandUsage1Description=A megadott üzenetet a teljes szerverre sugározza broadcastworldCommandDescription=Üzenetet közvetít egy világban. broadcastworldCommandUsage=/<command> <világ> <üzenet> broadcastworldCommandUsage1=/<command> <világ> <üzenet> -broadcastworldCommandUsage1Description=Az adott üzenetet közvetíti a megadott világba +broadcastworldCommandUsage1Description=A megadott üzenetet közvetíti a megadott világba burnCommandDescription=Egy játékos meggyújtása. burnCommandUsage=/<command> <játékos> <másodperc> burnCommandUsage1=/<command> <játékos> <másodperc> -burnCommandUsage1Description=A megadott játékost másodpercekig felgyújtja +burnCommandUsage1Description=A meghatározott játékost a megadott másodperces időtartamra felgyújtja burnMsg=§6Beállítottad§c {0}§6-nak/nek a tüzet§c {1} másodpercre§6. cannotSellNamedItem=§6Nem adhatsz el elnevezett tárgyakat. cannotSellTheseNamedItems=§6Ezeket az elnevezett tárgyakat nem adhatod el\: §4{0} @@ -135,11 +135,11 @@ clearInventoryConfirmToggleOn=§6Mostantól újra szükséges megerősítés az clearinventoryCommandDescription=Töröl minden tárgyat az eszköztáradból. clearinventoryCommandUsage=/<command> [játékos|*] [tárgy[\:<adat>]|*|**] [mennyiség] clearinventoryCommandUsage1=/<command> -clearinventoryCommandUsage1Description=Törli az inventory összes elemét +clearinventoryCommandUsage1Description=Törli az eszköztáradból az összes tárgyat clearinventoryCommandUsage2=/<command> <játékos> -clearinventoryCommandUsage2Description=Törli az összes elemet a megadott játékos inventoryjából -clearinventoryCommandUsage3=/<command> <player> <item> [amount] -clearinventoryCommandUsage3Description=Törli az összes elem (vagy a megadott mennyiségű elemet) a megadott játékos inventoryjából +clearinventoryCommandUsage2Description=Törli az összes tárgyat a meghatározott játékos eszköztárából +clearinventoryCommandUsage3=/<command> <játékos> <tárgy> [mennyiség] +clearinventoryCommandUsage3Description=Törli az összes (vagy a meghatározott mennyiségű) megadott tárgyat a meghatározott játékos eszköztárából clearinventoryconfirmtoggleCommandDescription=Megváltoztatja, hogy kérjen-e megerősítést az eszköztár törlésekhez. clearinventoryconfirmtoggleCommandUsage=/<command> commandArgumentOptional=§7 @@ -158,11 +158,11 @@ compassBearing=§6Irány\: {0} ({1} fok). compassCommandDescription=Leírja az aktuális irányod. compassCommandUsage=/<command> condenseCommandDescription=A tárgyakat kompaktabb blokkokká alakítja. -condenseCommandUsage=/<command> [item] +condenseCommandUsage=/<command> [tárgy] condenseCommandUsage1=/<command> -condenseCommandUsage1Description=Sűríti az inventory összes elemét +condenseCommandUsage1Description=Sűríti az eszköztáradban lévő összes tárgyat condenseCommandUsage2=/<command> <tárgy> -condenseCommandUsage2Description=Sűríti az inventoryban a megadott elemet +condenseCommandUsage2Description=Sűríti az eszköztáradban lévő meghatározott tárgyat configFileMoveError=Nem sikerült áthelyezni a config.yml fájlt a mentési helyre. configFileRenameError=Nem sikerült átnevezni az ideiglenes fájlt a config.yml fájlra. confirmClear=§7Meg kell §lERŐSÍTENED§7 az eszköztárad törlését. A megerősítéshez írd be ismét ezt a parancsot\: §6{0} @@ -177,7 +177,7 @@ createdKit=§6Csomag létrehozva §c{0} §c{1} §6bejegyzéssel és késéssel createkitCommandDescription=Készít egy csomagot a játékban\! createkitCommandUsage=/<command> <csomagnév> <késleltetés> createkitCommandUsage1=/<command> <csomagnév> <késleltetés> -createkitCommandUsage1Description=Készít egy csomagot egy megadott névvel és késleltetésel +createkitCommandUsage1Description=Készít egy csomagot egy megadott névvel és késleltetéssel createKitFailed=§4Hiba történt a csomag létrehozásakor {0}. createKitSeparator=§m----------------------- createKitSuccess=§6Csomag létrehozva\: §f{0}\n§6Késleltetés\: §f{1}\n§6Link\: §f{2}\n§6A fenti hivatkozás tartalmának másolása a kits.yml-be. @@ -191,29 +191,33 @@ customtextCommandUsage=/<alias> - Definiálja a bukkit.yml fájlban day=nap days=nap defaultBanReason=Ki lettél tiltva\! +deletedHomes=Minden otthon törölve. +deletedHomesWorld=Minden otthon törölve innen\: {0}. deleteFileError=Nem lehet törölni a fájlt\: {0} deleteHome=§6A(z) {0} §6otthon eltávolítva. deleteJail=§6A(z)§c {0} §6börtön eltávolítva. deleteKit=§6A(z)§c {0} §6csomag eltávolítva. deleteWarp=§6A(z)§c {0} §6warp eltávolítva. +deletingHomes=Minden otthon törlése... +deletingHomesWorld=Minden otthon törlése innen\: {0}... delhomeCommandDescription=Töröl egy otthont. delhomeCommandUsage=/<command> [játékos\:]<név> -delhomeCommandUsage1=/<command> <name> -delhomeCommandUsage1Description=Törli az otthont a megadott névvel -delhomeCommandUsage2=/<command> <player>\:<name> -delhomeCommandUsage2Description=Törli a megadott játékos otthonát a megadott névvel +delhomeCommandUsage1=/<command> <név> +delhomeCommandUsage1Description=Törli a megadott nevű otthonod +delhomeCommandUsage2=/<command> <játékos>\:<név> +delhomeCommandUsage2Description=Törli a meghatározott játékos megadott nevű otthonát deljailCommandDescription=Töröl egy börtönt. deljailCommandUsage=/<command> <börtönnév> deljailCommandUsage1=/<command> <börtönnév> -deljailCommandUsage1Description=Törli a börtönt a megadott névvel +deljailCommandUsage1Description=Törli a megadott nevű börtönt delkitCommandDescription=Töröl egy megadott csomagot. delkitCommandUsage=/<command> <csomag> delkitCommandUsage1=/<command> <csomag> -delkitCommandUsage1Description=Törli a megadott névvel ellátott készletet +delkitCommandUsage1Description=Törli a megadott nevű csomagot delwarpCommandDescription=Töröl egy megadott warpot. delwarpCommandUsage=/<command> <warp> delwarpCommandUsage1=/<command> <warp> -delwarpCommandUsage1Description=Törli a warpot a megadott névvel +delwarpCommandUsage1Description=Törli a megadott nevű warpot deniedAccessCommand=§c{0} §4hozzáférése megtagadva a parancshoz. denyBookEdit=§4Nem tudod feloldani ezt a könyvet. denyChangeAuthor=§4Nem módosíthatod ennek a könyvnek íróját. @@ -227,6 +231,11 @@ destinationNotSet=A cél nem lett beállítva\! disabled=letiltva disabledToSpawnMob=§4Ennek az élőlénynek a lehívása jelenleg le van tiltva a konfig fájlban. disableUnlimited=§6Letiltva korlátlan számú lerakás§c {0} {1}§6. +discordCommandExecuteDescription=Végrehajt egy konzol parancsot a Minecraft szerveren. +discordCommandExecuteArgumentCommand=A parancs végrehajtva +discordCommandExecuteReply=Parancs végrehajtása\: "/{0}" +discordCommandListDescription=Lekér egy listát az online játékosokról. +discordReloadInvalid=Megpróbálta újratölteni az EssentialsX Discord konfigurációt, amíg a plugin érvénytelen állapotban van\! Ha módosította a konfigurációt, indítsa újra a szervert. disposal=Szemetes disposalCommandDescription=Megnyit egy hordozható szemetes menüt. disposalCommandUsage=/<command> @@ -238,13 +247,13 @@ durability=§6Ez az eszköz még §c{0}§6 használatig bírja. east=K ecoCommandDescription=A szervergazdaságot kezeli. ecoCommandUsage=/<command> <give|take|set|reset> <játékos> <mennyiség> -ecoCommandUsage1=/<command> give <player> <amount> -ecoCommandUsage1Description=Megadja a megadott játékosnak a megadott összeget -ecoCommandUsage2=/<command> take <player> <amount> -ecoCommandUsage2Description=Elveszi a megadott összeget a megadott játékostól -ecoCommandUsage3=/<command> set <player> <amount> +ecoCommandUsage1=/<command> give <játékos> <mennyiség> +ecoCommandUsage1Description=Megadja a meghatározott játékosnak a megadott összeget +ecoCommandUsage2=/<command> take <játékos> <mennyiség> +ecoCommandUsage2Description=Elveszi a meghatározott összeget a megadott játékostól +ecoCommandUsage3=/<command> set <játékos> <mennyiség> ecoCommandUsage3Description=Beállítja a megadott játékos egyenlegét a megadott pénzösszegre -ecoCommandUsage4=/<command> reset <player> <amount> +ecoCommandUsage4=/<command> reset <játékos> <mennyiség> ecoCommandUsage4Description=Visszaállítja a megadott játékos egyenlegét a szerver kezdő egyenlegére editBookContents=§6Most már szerkesztheted a könyv tartalmát. enabled=engedélyezve @@ -278,7 +287,7 @@ essentialsReload=§6Essentials újratöltve§c {0}. exp=§c{0}§c {1} §6xp (szint§c {2}§6) és kell§c {3} xp a szintlépéshez. expCommandDescription=Adj hozzá, állítsd be, állítsd vissza, vagy nézd meg a játékosok tapasztalatait. expCommandUsage=/<command> [reset|show|set|give] [játékosnév [mennyiség]] -expCommandUsage1=/<command> give <player> <amount> +expCommandUsage1=/<command> give <játékos> <mennyiség> expCommandUsage1Description=Ad a megadott játékosnak egy megadott mennyiségű xp-t expCommandUsage2Description=Beállítja a megadott játékosnak a megadott mennyiségű xp-t expCommandUsage4Description=Megjeleníti a megadott játékos xp szintjét @@ -338,7 +347,7 @@ getposCommandUsage1=/<command> [játékos] getposCommandUsage1Description=Megmutatja a koordinátádat vagy egy másik játékosét ha megadta giveCommandDescription=Egy tárgyat ad a játékosnak. giveCommandUsage=/<command> <játékos> <tárgy|numerikus> [mennyiség [tárgymeta...]] -giveCommandUsage1=/<command> <player> <item> [amount] +giveCommandUsage1=/<command> <játékos> <tárgy> [mennyiség] geoipCantFind=§c{0}§a ismeretlen országból§6 jött. geoIpErrorOnJoin=Nem sikerült letölteni a(z) {0} GeoIP adatait. Kérjük, ellenőrizd, hogy a licenckulcs és a konfiguráció helyes-e. geoIpLicenseMissing=Nem található licenckulcs\! Kérjük látogass el az https\://essentialsx.net/geoip webhelyre az első telepítési utasításokért. @@ -391,8 +400,8 @@ holdPotion=§4Egy bájitalt kell a kezedben tartanod, hogy effekteket adhass hoz holeInFloor=§4Lyuk a padlóban\! homeCommandDescription=Teleportál az otthonodhoz. homeCommandUsage=/<command> [játékos\:][név] -homeCommandUsage1=/<command> <name> -homeCommandUsage2=/<command> <player>\:<name> +homeCommandUsage1=/<command> <név> +homeCommandUsage2=/<command> <játékos>\:<név> homes=§6Otthonok\:§r {0} homeConfirmation=§6Már van egy ilyen nevű otthonod §c{0}§6\!\nA meglévő otthon felülírásához írd be újra a parancsot. homeSet=§6Beállítva otthonnak ez a hely. @@ -462,7 +471,7 @@ itemnameCommandDescription=Elnevez egy tárgyat. itemnameCommandUsage=/<command> [név] itemnameCommandUsage1=/<command> itemnameCommandUsage1Description=Törli a kezedben tartott tárgy nevét -itemnameCommandUsage2=/<command> <name> +itemnameCommandUsage2=/<command> <név> itemnameCommandUsage2Description=Beállítja a kezedben tartott tárgyat a megadott szövegre itemnameInvalidItem=§cSzükséged van egy tárgyra a kezedbe, hogy át tudd nevezni. itemnameSuccess=§6Átnevezted a kezedben lévő tárgyat "§c{0}§6" névre. @@ -557,8 +566,6 @@ loomCommandUsage=/<command> mailClear=§6Hogy töröld a leveled, írd be§c /mail clear§6. mailCleared=§6Levél törölve\! mailCommandDescription=Kezeli a játékosok közötti, szerveren belüli e-maileket. -mailCommandUsage=//<command> [read|clear|send [neki] [üzenet]|sendall [üzenet]] -mailCommandUsage2Description=Törli az üzenetedet mailCommandUsage3Description=Elküldi a megadott játékosnak az üzenetet mailDelay=Túl sok levél lett elküldve az utolsó percben. Maximum\: {0} mailFormat=§6[§r{0}§6] §r{1} @@ -862,8 +869,8 @@ setBalOthers=§aBeállítottad {0}§a egyenlegét {1}-ra/-re. setSpawner=§6Az élőlényidéző új típusa\:§c {0}. sethomeCommandDescription=Beállítja az otthonod erre a helyre. sethomeCommandUsage=/<command> [[játékos\:]név] -sethomeCommandUsage1=/<command> <name> -sethomeCommandUsage2=/<command> <player>\:<name> +sethomeCommandUsage1=/<command> <név> +sethomeCommandUsage2=/<command> <játékos>\:<név> setjailCommandDescription=Létrehoz egy börtönt a megadott névvel [jailname]. setjailCommandUsage=/<command> <börtönnév> setjailCommandUsage1=/<command> <börtönnév> @@ -1134,7 +1141,7 @@ voiceSilencedReasonTime=§6A hangod elnémult {0}-ra/-re\! Oka\: §c{1} walking=séta warpCommandDescription=Listázza az összes warpot vagy warpol egy megadott helyre. warpCommandUsage=/<command> <oldalszám|warp> [játékos] -warpCommandUsage1=/<command> [page] +warpCommandUsage1=/<command> [oldal] warpDeleteError=§4Probléma a warp fájl törlésével. warpInfo=§6Információ a(z)§c {0}§6 warpról\: warpinfoCommandDescription=Megkeresi a megadott warp hely információit. diff --git a/Essentials/src/main/resources/messages_it.properties b/Essentials/src/main/resources/messages_it.properties index 510b73e35ca..79cc17808f7 100644 --- a/Essentials/src/main/resources/messages_it.properties +++ b/Essentials/src/main/resources/messages_it.properties @@ -79,7 +79,7 @@ bedMissing=§4Il tuo letto non è stato impostato, manca o è bloccato. bedNull=§mletto§r bedOffline=§4Impossibile teletrasportarsi nei letti degli utenti offline. bedSet=§6Spawn letto stabilito\! -beezookaCommandDescription=Lancia un''ape esplodente al tuo avversario. +beezookaCommandDescription=Lancia un''ape che esplode contro il tuo avversario. beezookaCommandUsage=/<command> bigTreeFailure=§4Creazione dell''albero grande fallita. Riprova sull''erba o sulla terra. bigTreeSuccess=§6Albero grande generato. @@ -155,7 +155,7 @@ commandHelpLine4=§6Pseudonimi(s)\: §f{0} commandHelpLineUsage={0} §6- {1} commandNotLoaded=§4Il comando {0} non è stato caricato correttamente. compassBearing=§6Angolo\: {0} ({1} gradi). -compassCommandDescription=Descrive il tuo attuale cuscinetto. +compassCommandDescription=Descrive la tua posizione attuale. compassCommandUsage=/<command> condenseCommandDescription=Condensa gli oggetti in blocchi più compatti. condenseCommandUsage=/<command> [item] @@ -211,7 +211,7 @@ deljailCommandDescription=Rimuove una prigione. deljailCommandUsage=/<command> <jailname> deljailCommandUsage1=/<command> <jailname> deljailCommandUsage1Description=Elimina la prigione con il nome specificato -delkitCommandDescription=Elimina l''oggetto specificato. +delkitCommandDescription=Elimina il kit specificato. delkitCommandUsage=/<command> <kit> delkitCommandUsage1=/<command> <kit> delkitCommandUsage1Description=Elimina il kit con il nome specificato @@ -232,6 +232,28 @@ destinationNotSet=Destinazione non impostata\! disabled=disabilitato disabledToSpawnMob=§4La creazione di questo mob è stata disabilitata nel file configurazione. disableUnlimited=§6Disabilitato il posizionamento illimitato di §c {0} §6per§c {1}§6. +discordCommandExecuteDescription=Esegue un comando console sul server di Minecraft. +discordCommandExecuteArgumentCommand=Il comando da eseguire +discordCommandExecuteReply=Esecuzione comando\: "/{0}" +discordCommandListDescription=Ottiene un elenco di giocatori online. +discordCommandListArgumentGroup=Un gruppo specifico per limitare la ricerca di +discordCommandMessageDescription=Messaggi di un giocatore sul server di Minecraft. +discordCommandMessageArgumentUsername=Il giocatore a cui inviare il messaggio +discordCommandMessageArgumentMessage=Il messaggio da inviare al giocatore +discordErrorCommand=Hai aggiunto il tuo bot al server in modo errato. Segui il tutorial nella configurazione e aggiungi il tuo bot usando https\://essentialsx.net/discord.html\! +discordErrorCommandDisabled=Questo comando è disabilitato\! +discordErrorLogin=Si è verificato un errore durante l''accesso a Discord, che ha causato la disattivazione del plugin\: \n{0} +discordErrorLoggerInvalidChannel=Il log della console Discord è stato disabilitato a causa di una definizione di canale non valida\! Se hai intenzione di disattivarlo, imposta l''ID del canale su "none"; altrimenti controlla che l''ID del tuo canale sia corretto. +discordErrorLoggerNoPerms=Il logger della console Discord è stato disabilitato a causa di autorizzazioni insufficienti\! Assicurati che il tuo bot abbia i permessi "Gestisci Webhooks" sul server. Dopo aver corretto ciò, esegui "/ess reload". +discordErrorNoGuild=ID server non valido o mancante\! Si prega di seguire il tutorial nella configurazione per configurare il plugin. +discordErrorNoGuildSize=Il tuo bot non è presente in nessun server\! Segui il tutorial nella configurazione per configurare il plugin. +discordErrorNoPerms=Il tuo bot non può vedere o parlare in alcun canale\! Assicurati che il tuo bot abbia i permessi di lettura e scrittura in tutti i canali che desideri utilizzare. +discordErrorNoToken=Nessun token fornito\! Si prega di seguire il tutorial nella configurazione per configurare il plugin. +discordErrorWebhook=Si è verificato un errore durante l''invio dei messaggi al canale della console\! Probabilmente è stato causato dall''eliminazione accidentale del webhook della console. Questo di solito può essere risolto assicurando che il tuo bot abbia il permesso "Gestisci Webhooks" ed eseguendo "/ess reload". +discordLoggingIn=Tentativo di accedere a Discord... +discordLoggingInDone=Accesso effettuato con successo come {0} +discordNoSendPermission=Impossibile inviare il messaggio nel canale\: \#{0} Assicurarsi che il bot abbia l''autorizzazione "Invia messaggi" in quel canale\! +discordReloadInvalid=Ha provato a ricaricare la configurazione di EssentialsX Discord mentre il plugin è in uno stato non valido\! Se hai modificato la configurazione, riavvia il server. disposal=Cestino disposalCommandDescription=Apre un menu di smaltimento portatile. disposalCommandUsage=/<command> @@ -502,11 +524,11 @@ itemId=§6ID\:§c {0} itemloreClear=§6Hai cancellato il nome di questo oggetto. itemloreCommandDescription=Modifica il lore di un elemento. itemloreCommandUsage=/<command> <add/set/clear> [testo/riga] [text] -itemloreCommandUsage1=/<command> <add> [text] +itemloreCommandUsage1=/<command> add [text] itemloreCommandUsage1Description=Aggiunge il testo dato alla fine del lore dell''elemento tenuto -itemloreCommandUsage2=/<command> <set> <line number> <text> +itemloreCommandUsage2=/<command> set <line number> <text> itemloreCommandUsage2Description=Imposta la riga specificata del lore dell''elemento tenuto al testo dato -itemloreCommandUsage3=/<command> <clear> +itemloreCommandUsage3=/<command> clear itemloreCommandUsage3Description=Cancella il lore dell''oggetto tenuto itemloreInvalidItem=§cDevi tenere un oggetto per rinominarlo. itemloreNoLine=§4Il tuo oggetto in possesso non ha testo in lore alla riga §c{0}§4. @@ -625,21 +647,29 @@ loomCommandDescription=Apre un telaio. loomCommandUsage=/<command> mailClear=§6Per cancellare le mail lette, digita§c /mail clear§6. mailCleared=§7Mail cancellate\! +mailClearIndex=§4Devi specificare un numero tra 1-{0}. mailCommandDescription=Gestisce la posta interplayer, intra server. -mailCommandUsage=/<command> [read<unk> clear<unk> invia [to] [message]<unk> invia tutti [message]] +mailCommandUsage=/<command> [read<unk> clear<unk> clear [numero]<unk> invia [a] [messaggio]<unk> sendtemp [to] [tempo di scadenza] [message]<unk> invia tutti [messaggio]] mailCommandUsage1=/<command> read [page] mailCommandUsage1Description=Legge la prima pagina (o specificata) della tua mail -mailCommandUsage2=/<command> clear -mailCommandUsage2Description=Cancella la tua posta +mailCommandUsage2=/<command> clear [numero] +mailCommandUsage2Description=Cancella tutte o le email specificate(s) mailCommandUsage3=/<command> send <player> <message> mailCommandUsage3Description=Invia al giocatore specificato il messaggio dato mailCommandUsage4=/<command> invia <message> mailCommandUsage4Description=Invia a tutti i giocatori il messaggio dato +mailCommandUsage5=/<command> sendtemp <player> <expire time> <message> +mailCommandUsage5Description=Invia al giocatore specificato il messaggio dato che scadrà nell''ora specificata mailDelay=Hai mandato troppe mail nell''ultimo minuto. Massimo\: {0} +mailFormatNew=§6[§r{0}§6] §6[§r{1}§6] §r{2} +mailFormatNewTimed=§6[§e\: attenzione\:§6] §6[§r{0}§6] §6[§r{1}§6] §r{2} +mailFormatNewRead=§6[§r{0}§6] §6[§r{1}§6] §7§o{2} +mailFormatNewReadTimed=§6[§e\:attenzione\:§6] §6[§r{0}§6] §6[§r{1}§6] §7§o{2} mailFormat=§6[§r{0}§6] §r{1} mailMessage={0} mailSent=§7Mail inviata\! mailSentTo=§c{0}§6 ha inviato la seguente mail\: +mailSentToExpire=§c{0}§6 è stata inviata la seguente mail che scadrà in §c{1}§6\: mailTooLong=§4Il messaggio è troppo lungo. Riprova senza superare i 1000 caratteri. markMailAsRead=§6Per marcare la tua mail come letta, digita§c /mail clear§6. matchingIPAddress=§6I seguenti giocatori sono entrati con quell''indirizzo IP\: @@ -949,6 +979,7 @@ repairCommandUsage2Description=Ripara tutti gli oggetti nel tuo inventario repairEnchanted=§4Non hai il permesso di riparare oggetti incantati. repairInvalidType=§4Questo oggetto non può essere riparato. repairNone=§4Non ci sono oggetti da riparare. +replyFromDiscord=**Risposta da {0}\:** `{1}` replyLastRecipientDisabled=§6Risposta all''ultimo destinatario dei messaggi §cdisabilitata§6. replyLastRecipientDisabledFor=§6Risposta all''ultimo destinatario dei messaggi §cdisabilitata §6per §c{0}§6. replyLastRecipientEnabled=§6Risposta all''ultimo destinatario dei messaggi §cabilitata§6. @@ -1353,6 +1384,7 @@ versionOutputFine=§6{0} versione\: §a{1} versionOutputWarn=§6{0} versione\: §c{1} versionOutputUnsupported=§d{0} §6versione\: §d{1} versionOutputUnsupportedPlugins=§6Stai utilizzando §dplugin non supportati§6\! +versionOutputEconLayer=§6Livello Economia\: §r{0} versionMismatch=§4Versione incorretta\! Aggiornare {0} alla stessa versione. versionMismatchAll=§4Versione incorretta\! Aggiornare tutti i jar Essentials alla stessa versione. versionReleaseLatest=§6Stai eseguendo l''ultima versione stabile di EssentialsX\! diff --git a/Essentials/src/main/resources/messages_ja.properties b/Essentials/src/main/resources/messages_ja.properties index da636be1326..dae9fa986ba 100644 --- a/Essentials/src/main/resources/messages_ja.properties +++ b/Essentials/src/main/resources/messages_ja.properties @@ -466,7 +466,6 @@ loomCommandDescription=機織り機を開きます。 loomCommandUsage=/<command> mailClear=§6メールをクリアするには、§c/ mailclear§6と入力します。 mailCleared=§6メールが削除されました。 -mailCommandUsage=/<command> [read|clear|send [to] [message]|sendall [message]] mailDelay=直前に送信されたメールが多すぎます。最大:{0} mailFormat=§6[§r{0}§6] §r{1} mailMessage={0} diff --git a/Essentials/src/main/resources/messages_ko.properties b/Essentials/src/main/resources/messages_ko.properties index ec70d4a1849..402091ba93a 100644 --- a/Essentials/src/main/resources/messages_ko.properties +++ b/Essentials/src/main/resources/messages_ko.properties @@ -6,9 +6,12 @@ action=§5* {0} §5{1} addedToAccount=§a{0}가 당신의 계좌에 추가되었습니다. addedToOthersAccount=§a{0}가 {1}§a님의 계정에 추가되었습니다. 새 잔고\: {2} adventure=모험 -afkCommandDescription=잠수 상태로 전환합니다. +afkCommandDescription=자리비움 상태로 전환합니다. afkCommandUsage=/<command> [플레이어/메시지] -afkCommandUsage1=/<command> [message] +afkCommandUsage1=/<command> [메시지] +afkCommandUsage1Description=당신의 자리비움 상태를 추가적 사유와 함께 전환합니다. +afkCommandUsage2=/<command> <플레이어> [메시지] +afkCommandUsage2Description=해당 플레이어의 자리비움 상태를 추가적 사유와 함께 전환합니다. alertBroke=부서짐\: alertFormat=§3[{0}] §r {1} §6 {2} at\: {3} alertPlaced=설치됨\: @@ -20,8 +23,8 @@ antiBuildDrop=§4 당신은 §c {0} §4을(를) 떨어뜨릴 권한이 없습니 antiBuildInteract=§4당신에게는 §c{0}과 상호 작용할 권한이 없습니다. antiBuildPlace=§4당신은 이곳에 §c {0} §4을(를) 놓을 권한이 없습니다. antiBuildUse=§4당신은 §c {0}§4을 사용할 권한이 없습니다. -antiochCommandDescription=관리자들을 위한 작은 서프라이즈 -antiochCommandUsage=/<command> [message] +antiochCommandDescription=관리자들을 위한 작은 서프라이즈. +antiochCommandUsage=/<command> [메시지] anvilCommandDescription=모루를 엽니다. anvilCommandUsage=/<command> autoAfkKickReason={0}분 이상의 유휴상태로 있었기에 추방당하셨습니다. @@ -30,62 +33,70 @@ autoTeleportDisabledFor=§c{0} §6(은)는 더이상 텔레포트 요청을 자 autoTeleportEnabled=§6이제 텔레포트 요청을 자동으로 승인합니다. autoTeleportEnabledFor=§c{0} §6(은)는 이제 텔레포트 요청을 자동으로 승인합니다. backAfterDeath=§c/back§6 명령어를 사용해 사망한 지점으로 돌아갈 수 있습니다. -backCommandDescription=tp/spawn/warp 이전 위치로 텔레포트합니다. -backCommandUsage=/<command> [player] +backCommandDescription=tp/spawn/warp하기 이전 위치로 순간이동합니다. +backCommandUsage=/<command> [플레이어] backCommandUsage1=/<command> -backCommandUsage1Description=이전 위치로 이동합니다 -backCommandUsage2Description=해당 플레이어를 이전 위치로 돌려보냅니다. +backCommandUsage1Description=이전 위치로 순간이동합니다 +backCommandUsage2=/<command> <플레이어> +backCommandUsage2Description=해당 플레이어를 이전 위치로 순간이동시킵니다. backOther=§c{0} §6을(를) 이전 위치로 이동시켰습니다. backupCommandDescription=구성된 설정이 있을 경우 백업을 실행합니다. backupCommandUsage=/<command> backupDisabled=§4외부 백업 스크립트가 설정되지 않았습니다. backupFinished=§6백업이 완료되었습니다. backupStarted=§6백업을 시작합니다. -backupInProgress=§6외부 백업 스크립트가 진행 중입니다\! 완료될 때까지 플러그인을 비활성화하는 중입니다. +backupInProgress=§6외부 백업 스크립트가 진행 중입니다\! 완료될 때까지 플러그인 비활성화를 중단합니다. backUsageMsg=§6이전 장소로 돌아가는중.. balance=§6잔고\:§c {0} balanceCommandDescription=플레이어의 현재 잔고를 보여줍니다. -balanceCommandUsage=/<command> [player] +balanceCommandUsage=/<command> [플레이어] balanceCommandUsage1=/<command> balanceCommandUsage1Description=현재 잔고를 표시합니다 -balanceCommandUsage2Description=해당 플레이어의 잔고를 보여줍니다. +balanceCommandUsage2=/<command> <플레이어> +balanceCommandUsage2Description=해당 플레이어의 잔고를 보여줍니다 balanceOther=§a{0}의 잔고§a\:§c {1} balanceTop=§6잔고 순위 ({0}) balanceTopLine={0}. {1}, {2} balancetopCommandDescription=잔고 순위를 봅니다. -balancetopCommandUsage1Description=첫 페이지 (또는 해당 페이지) 의 잔고 순위를 보여줍니다. +balancetopCommandUsage=/<command> [페이지] +balancetopCommandUsage1=/<command> [페이지] +balancetopCommandUsage1Description=잔고 순위의 첫 페이지(또는 해당 페이지)를 보여줍니다. banCommandDescription=플레이어를 차단합니다. -banCommandUsage=/<command><닉네임>[사유] -banCommandUsage1=/<command><닉네임>[사유] -banCommandUsage1Description=사유와 함께 해당 플레이어를 차단합니다. +banCommandUsage=/<command> <플레이어> [사유] +banCommandUsage1=/<command> <플레이어> [사유] +banCommandUsage1Description=해당 플레이어를 추가적 사유와 함께 차단합니다. banExempt=§4당신은 이 플레이어를 차단할 수 없습니다. banExemptOffline=§4당신은 접속중이지 않은 플레이어를 차단시킬 수 없습니다. banFormat=§4차단됨\:\n§r {0} banIpJoin=당신의 IP 주소가 서버에서 차단되었습니다. 사유\: {0} banJoin=당신은 이 서버에서 차단되어 있습니다. 사유\: {0} banipCommandDescription=IP 주소를 차단합니다. -banipCommandUsage1Description=사유와 함께 해당 IP를 차단합니다. +banipCommandUsage=/<command> <IP 주소> [사유] +banipCommandUsage1=/<command> <IP 주소> [사유] +banipCommandUsage1Description=해당 IP를 추가적 사유와 함께 차단합니다. bed=§obed§r bedMissing=§4당신의 침대가 놓여지지 않았거나 없어졌거나 막혀있습니다. bedNull=§mbed§r -bedOffline=§4접속중이지 않은 플레이어의 침대로 텔레포트할 수 없습니다. +bedOffline=§4접속중이지 않은 플레이어의 침대로 순간이동할 수 없습니다. bedSet=§6침대 스폰지점이 설정되었습니다\! beezookaCommandDescription=상대에게 폭발하는 벌을 떨어뜨립니다. beezookaCommandUsage=/<command> bigTreeFailure=§c큰 나무 생성중 오류가 발생하였습니다. 잔디나 흙에서 다시 시도하세요. bigTreeSuccess=§6큰 나무를 성공적으로 생성하였습니다. bigtreeCommandDescription=바라보고 있는 곳에 큰 나무를 소환합니다. -bigtreeCommandUsage=/<command><tree|redwood|jungle|darkoak> -bigtreeCommandUsage1=/<command><tree|redwood|jungle|darkoak> +bigtreeCommandUsage=/<command> <tree|redwood|jungle|darkoak> +bigtreeCommandUsage1=/<command> <tree|redwood|jungle|darkoak> bigtreeCommandUsage1Description=해당 유형의 큰 나무를 소환합니다. blockList=§6EssentialsX는 다음 명령어들을 다른 플러그인으로 전달하고 있습니다\: blockListEmpty=§6EssentialsX는 다른 플러그인에 명령어를 전달하지 않습니다. bookAuthorSet=§6책의 저자를 §c{0}§6으로 설정합니다. bookCommandDescription=쓰여진 책을 다시 열고 수정하는 것을 허가합니다. -bookCommandUsage=/<command> [제목|[name] 이 씀] +bookCommandUsage=/<command> [title|author [name]] bookCommandUsage1=/<command> bookCommandUsage1Description=책/쓰여진 책의 잠금을 걸거나 풉니다 +bookCommandUsage2=/<command> author <작가 이름> bookCommandUsage2Description=책의 저자를 설정합니다. +bookCommandUsage3=/<command> title <책 제목> bookCommandUsage3Description=책의 제목을 설정합니다. bookLocked=§6이 책은 잠긴상태로 전환되었습니다. bookTitleSet=§6책의 제목을 §c{0}§6으로 설정합니다. @@ -93,16 +104,17 @@ breakCommandDescription=바라보고 있는 블록을 부숩니다. breakCommandUsage=/<command> broadcast=§6[§4공지§6]§a {0} broadcastCommandDescription=서버 전체에 메시지를 공지합니다. -broadcastCommandUsage=/<command><msg> +broadcastCommandUsage=/<command> <메시지> +broadcastCommandUsage1=/<command> <메시지> broadcastCommandUsage1Description=서버 전체에 메시지를 공지합니다 -broadcastworldCommandDescription=월드에 메시지를 공지합니다. -broadcastworldCommandUsage=/<command><world><msg> -broadcastworldCommandUsage1=/<command><world><msg> +broadcastworldCommandDescription=해당 월드에 메시지를 공지합니다. +broadcastworldCommandUsage=/<command> <월드> <메시지> +broadcastworldCommandUsage1=/<command> <월드> <메시지> broadcastworldCommandUsage1Description=해당 월드에 메시지를 공지합니다 burnCommandDescription=플레이어에게 불을 붙입니다. -burnCommandUsage=/<command><닉네임><시간>[사유] -burnCommandUsage1=/<command><닉네임><시간>[사유] -burnCommandUsage1Description=해당 플레이어에게 일정 초 동안 불을 붙입니다 +burnCommandUsage=/<command> <닉네임> <시간> +burnCommandUsage1=/<command> <닉네임> <시간> +burnCommandUsage1Description=해당 플레이어에게 일정 시간(초) 동안 불을 붙입니다 burnMsg=§6당신은 §c{0} §6님에게 §c{1} §6초 만큼 불을 질렀습니다. cannotSellNamedItem=§6이름이 설정된 아이템은 판매할 수 없습니다. cannotSellTheseNamedItems=§6이름이 설정된 아이템은 판매할 수 없습니다\: §4{0} @@ -120,14 +132,19 @@ cleaned=유저 파일이 정리되었습니다. cleaning=유저 파일을 정리합니다. clearInventoryConfirmToggleOff=§6이제 인벤토리를 비울 때 확인을 받지 않습니다. clearInventoryConfirmToggleOn=§6이제 인벤토리를 비울 때 확인을 받습니다. -clearinventoryCommandDescription=인벤토리의 모든 아이템을 비웁니다. -clearinventoryCommandUsage=/<command> [플레이어|*] [아이템[\:<data>]|*|**] [수량] +clearinventoryCommandDescription=인벤토리의 모든 아이템을 제거합니다. +clearinventoryCommandUsage=/<command> [플레이어|*] [아이템[\:<NBT 데이터>]|*|**] [수량] clearinventoryCommandUsage1=/<command> -clearinventoryCommandUsage1Description=인벤토리의 모든 아이템을 비웁니다 -clearinventoryCommandUsage2Description=해당 플레이어의 인벤토리의 모든 아이템을 비웁니다 +clearinventoryCommandUsage1Description=인벤토리의 모든 아이템을 제거합니다 +clearinventoryCommandUsage2=/<command> <플레이어> +clearinventoryCommandUsage2Description=해당 플레이어의 인벤토리의 모든 아이템을 제거합니다 +clearinventoryCommandUsage3=/<command> <플레이어> <아이템> [수량] +clearinventoryCommandUsage3Description=해당 플레이어의 인벤토리에서 해당 아이템을 전부(혹은 지정한 수량만큼) 제거합니다 clearinventoryconfirmtoggleCommandDescription=인벤토리를 비울 때 확인을 받을지 정합니다. clearinventoryconfirmtoggleCommandUsage=/<command> -commandCooldown=§c그 명령어는 사용할 수 없습니다. 사유\: {0}. +commandArgumentOptional=§7 +commandArgumentRequired=§e +commandCooldown=§c해당 명령어를 사용할 수 없습니다. 사유\: {0}. commandDisabled=§c명령어§6 {0}§c (은)는 비활성화되었습니다. commandFailed=명령어 {0} 사용 실패\: commandHelpFailedForPlugin={0} 플러그인의 도움말을 불러올 수 없습니다. @@ -135,13 +152,17 @@ commandHelpLine1=§6명령어 도움말\: §f/{0} commandHelpLine2=§6설명\: §f{0} commandHelpLine3=§6사용법(s); commandHelpLine4=§6별칭\: §f{0} +commandHelpLineUsage={0} §6- {1} commandNotLoaded=§c 명령어 {0}를 잘못 불러왔습니다. compassBearing=§6방위\: {0} ({1} 도). compassCommandDescription=현재 방위를 보여줍니다. compassCommandUsage=/<command> condenseCommandDescription=아이템을 더 작은 블록으로 압축합니다. +condenseCommandUsage=/<command> [아이템] condenseCommandUsage1=/<command> -condenseCommandUsage1Description=인벤토리의 모든 아이템을 비웁니다 +condenseCommandUsage1Description=인벤토리의 모든 아이템을 압축합니다 +condenseCommandUsage2=/<command> <아이템> +condenseCommandUsage2Description=인벤토리의 해당 아이템을 압축합니다 configFileMoveError=config.yml를 백업 위치로 이동하지 못했습니다. configFileRenameError=임시 파일의 이름을 config.yml로 변경하지 못했습니다. confirmClear=§7정말로 인벤토리를 §l비우시겠습니까?§7 다음 명령어를 반복하세요\: §6{0} @@ -152,21 +173,22 @@ consoleName=콘솔 cooldownWithMessage=§c재사용 대기\: {0} coordsKeyword={0}, {1}, {2} couldNotFindTemplate=템플릿 {0}를 찾지 못했습니다. -createdKit=§c{1} §6개의 아이템이 포함된 §c{0} §6키트를 생성했습니다. §c{2} §6마다 사용 가능합니다. +createdKit=§c{1} §6개의 항목이 포함된 §c{0} §6키트를 생성했습니다. §c{2} §6마다 사용 가능합니다. createkitCommandDescription=게임 안에서 키트를 만듭니다\! -createkitCommandUsage=/<command> <kitname> <delay> -createkitCommandUsage1=/<command> <kitname> <delay> -createkitCommandUsage1Description=설정된 이름과 딜레이에 맞춰 키트를 만듭니다. +createkitCommandUsage=/<command> <키트 이름> <지연 시간> +createkitCommandUsage1=/<command> <키트 이름> <지연 시간> +createkitCommandUsage1Description=설정된 이름과 지연 시간에 맞춰 키트를 만듭니다. createKitFailed=§4{0} 키트를 생성하는 도중 오류가 발생했습니다. createKitSeparator=§m----------------------- -createKitSuccess=§6생성된 키트\: §f{0}\n§6쿨타임\: §f{1}\n§6링크\: §f{2}\n§6위의 링크에 있는 내용을 kits.yml에 복사합니다. +createKitSuccess=§6생성된 키트\: §f{0}\n§6지연 시간\: §f{1}\n§6링크\: §f{2}\n§6위의 링크에 있는 내용을 kits.yml에 복사합니다. +createKitUnsupported=§4NBT 아이템 직렬화가 활성화 되었지만 이 서버는 Paper 1.15.2+ 이상을 사용하고 있지 않습니다. 기본 아이템 직렬화로 전환합니다. creatingConfigFromTemplate=템플릿을 설정하여 만듭니다 \: {0} creatingEmptyConfig=빈 설정 파일을 생성중\: {0} creative=크리에이티브 currency={0}{1} currentWorld=§6현재 월드\:§c {0} customtextCommandDescription=사용자 지정 명령어를 만듭니다. -customtextCommandUsage=/<alias> - bukkit.yml 에 정의됨 +customtextCommandUsage=/<alias> - bukkit.yml 에서 정의하세요 day=일 days=일 defaultBanReason=당신은 관리자에 의해 서버에서 차단되었습니다\! @@ -175,26 +197,28 @@ deletedHomesWorld={0} 에 있는 모든 집이 삭제되었습니다. deleteFileError={0} 파일이 삭제되지 않았습니다. deleteHome=§6집§c {0} 이 제거가 되었습니다. deleteJail=§7{0} 감옥이 제거되었습니다. -deleteKit=§6키트 §c{0} §6(이)가 제거되었습니다. +deleteKit=§c{0} §6키트가 삭제되었습니다. deleteWarp=§6워프 {0}는(은) 삭제되었습니다. -deletingHomes=집을 모두 삭제하는 중... -deletingHomesWorld={0} 에 있는 집을 모두 삭제하는 중... -delhomeCommandDescription=집을 제거합니다. -delhomeCommandUsage=/<command> [player\:]<name> -delhomeCommandUsage1Description=주어진 이름을 가진 집을 삭제합니다. -delhomeCommandUsage2Description=해당 플레이어의 주어진 이름을 가진 집을 삭제합니다. -deljailCommandDescription=감옥을 제거합니다. -deljailCommandUsage=/<command> <jailname> -deljailCommandUsage1=/<command> <jailname> -deljailCommandUsage1Description=주어진 이름을 가진 감옥을 삭제합니다. +deletingHomes=모든 집을 삭제하는 중... +deletingHomesWorld={0}에 있는 모든 집을 삭제하는 중... +delhomeCommandDescription=집을 삭제합니다. +delhomeCommandUsage=/<command> [플레이어\:]<이름> +delhomeCommandUsage1=/<command> <이름> +delhomeCommandUsage1Description=해당 이름을 가진 집을 삭제합니다. +delhomeCommandUsage2=/<command> <플레이어>\:<이름> +delhomeCommandUsage2Description=해당 플레이어가 소유한, 해당 이름을 가진 집을 삭제합니다. +deljailCommandDescription=감옥을 삭제합니다. +deljailCommandUsage=/<command> <감옥 이름> +deljailCommandUsage1=/<command> <감옥 이름> +deljailCommandUsage1Description=해당 이름을 가진 감옥을 삭제합니다. delkitCommandDescription=해당 키트를 삭제합니다. delkitCommandUsage=/<command><kit> delkitCommandUsage1=/<command><kit> delkitCommandUsage1Description=주어진 이름을 가진 키트를 삭제합니다. delwarpCommandDescription=해당 워프를 삭제합니다. -delwarpCommandUsage=/<command><warp> -delwarpCommandUsage1=/<command><warp> -delwarpCommandUsage1Description=주어진 이름을 가진 워프를 삭제합니다. +delwarpCommandUsage=/<command> <워프 이름> +delwarpCommandUsage1=/<command> <워프 이름> +delwarpCommandUsage1Description=해당 이름을 가진 워프를 삭제합니다. deniedAccessCommand=§c{0}님은 해당 명령어에 접근할 권한이 없습니다. denyBookEdit=§4당신은 이 책의 잠금을 해제할 수 없습니다. denyChangeAuthor=§4당신은 이 책의 저자를 변경할 수 없습니다. @@ -202,12 +226,34 @@ denyChangeTitle=§4당신은 이 책의 제목을 변경할 수 없습니다. depth=§7당신은 해수면에 있습니다. depthAboveSea=§6당신은 해수면 {0} §6블록 위에 있습니다. depthBelowSea=§6당신은 해수면 {0} §6블록 아래에 있습니다. -depthCommandDescription=해수면에 대한 현재 깊이를 보여줍니다. +depthCommandDescription=해수면을 기준으로 한 현재 깊이를 보여줍니다. depthCommandUsage=/depth destinationNotSet=목적지가 설정되지 않았습니다. disabled=비활성화됨 disabledToSpawnMob=§4이 몬스터의 스폰은 설정 파일에서 해제되었습니다. -disableUnlimited=§c{1} §6의§c {0} §6무한 배치 비활성화됨. +disableUnlimited=§c{1} §6의 §c{0} §6무한 배치 비활성화됨. +discordCommandExecuteDescription=마인크래프트 서버에서 명령어를 실행합니다. +discordCommandExecuteArgumentCommand=실행할 명령어 +discordCommandExecuteReply=명령어를 실행합니다\: "/{0}" +discordCommandListDescription=현재 접속중인 플레이어 목록을 표시합니다. +discordCommandListArgumentGroup=검색을 제한할 그룹 +discordCommandMessageDescription=마인크래프트 서버에 있는 플레이어에게 메시지를 보냅니다. +discordCommandMessageArgumentUsername=메시지를 보낼 플레이어 +discordCommandMessageArgumentMessage=플레이어에게 보내진 메시지 +discordErrorCommand=디스코드 서버에 봇이 올바르게 추가되지 않았습니다. https\://essentialsx.net/discord.html 에 설명된 튜토리얼을 따라 봇을 추가해주세요\! +discordErrorCommandDisabled=해당 명령어는 비활성화 되었습니다\! +discordErrorLogin=디스코드에 로그인 하는 도중 오류가 발생하여 플러그인을 비활성화 합니다\: {0} +discordErrorLoggerInvalidChannel=채널 설정이 올바르게 되지 않아 디스코드 콘솔 로깅이 비활성화 되었습니다. 만약 디스코드 콘솔 로깅을 비활성화 하고 싶다면 채널 ID를 "none"으로 설정하세요. 그렇지 않다면 채널 ID 설정이 올바르게 되었는지 확인하세요. +discordErrorLoggerNoPerms=필요한 권한이 부여되지 않아 디스코드 콘솔 로거가 비활성화 되었습니다\! 봇이 디스코드 서버에서 "웹후크 관리하기" 권한을 갖고 있는지 다시 확인한 후, "/ess reload" 명령어를 실행하세요. +discordErrorNoGuild=서버 ID가 유효하지 않거나 존재하지 않습니다\! 설정 파일에 명시된 튜토리얼대로 플러그인을 올바르게 설치해주세요. +discordErrorNoGuildSize=디스코드 봇이 그 어떠한 서버에도 참여하고 있지 않습니다\! 설정 파일에 명시된 튜토리얼대로 플러그인을 올바르게 설치해주세요. +discordErrorNoPerms=디스코드 봇이 채널을 보거나 채널에서 대화할 수 없습니다\! 디스코드 봇에게 당신이 사용하고자 하는 채널에서 읽거나 쓸 수 있는 권한을 주었는지 확인하세요. +discordErrorNoToken=디스코드 봇 토큰이 설정되지 않았습니다\! 설정 파일에 명시된 튜토리얼대로 플러그인을 올바르게 설치해주세요. +discordErrorWebhook=콘솔 채널에 메세지를 보내는데 실패했습니다. 이러한 오류는 보통 콘솔 채널에서 웹후크를 삭제한 경우 발생합니다. 이러한 경우, 봇이 "웹후크 관리하기" 권한이 있는지 확인한 후, "/ess reload" 명령어를 실행함으로서 오류를 해결할 수 있습니다. +discordLoggingIn=디스코드에 로그인 하는 중... +discordLoggingInDone={0}로 성공적으로 로그인함 +discordNoSendPermission=\#{0} 채널에 메시지를 보내는데에 실패했습니다. 봇이 해당 채널에서 "메시지 보내기" 권한을 갖고 있는지 확인하세요\! +discordReloadInvalid=EssentialsX Discord 플러그인이 잘못 설정된 상태에서 플러그인의 설정을 다시 불러오려 했습니다\! 만약 설정 파일을 수정했다면, 서버를 재시작해주세요. disposal=폐기 disposalCommandDescription=휴대용 폐기 메뉴를 엽니다. disposalCommandUsage=/<command> @@ -219,14 +265,20 @@ durability=§6이 도구는 사용 가능 횟수가 s §c{0}§6번 남았습니 east=E ecoCommandDescription=서버 경제를 관리합니다. ecoCommandUsage=/<command> <give|take|set|reset> <player> <amount> +ecoCommandUsage1=/<command> give <플레이어> <수량> ecoCommandUsage1Description=해당 플레이어에게 주어진 값만큼의 돈을 줍니다. +ecoCommandUsage2=/<command> take <플레이어> <수량> ecoCommandUsage2Description=해당 플레이어에게서 주어진 값만큼의 돈을 뺍니다. +ecoCommandUsage3=/<command> set <플레이어> <수량> ecoCommandUsage3Description=해당 플레이어의 잔고를 주어진 값으로 설정합니다. +ecoCommandUsage4=/<command> reset <플레이어> <수량> ecoCommandUsage4Description=해당 플레이어의 잔고를 서버의 시작 잔고로 초기화합니다. editBookContents=§e이제 이 책의 내용을 수정할 수 있습니다. enabled=활성화 enchantCommandDescription=유저가 들고있는 아이템에 마법을 부여합니다. enchantCommandUsage=/<명령어> <인첸트이름> [레벨] +enchantCommandUsage1=/<command> <마법부여 이름> [레벨] +enchantCommandUsage1Description=들고 있는 아이템에 선택한 마법을 부여하며, 필요한 경우 레벨을 지정합니다 enableUnlimited=§c{1} §6아이템을 §c{0} §6에게 무제한으로 지급했습니다. enchantmentApplied=§6인챈트§c {0} §6가 손에 들고있는 아이템에 적용되었습니다. enchantmentNotFound=§4인챈트가 발견되지 않았습니다\! @@ -234,33 +286,47 @@ enchantmentPerm=§c {0}§4를 위한 권한이 없습니다. enchantmentRemoved=§6인챈트§c {0} §6가 손에 들고있는 아이템에서 제거되었습니다. enchantments=§6인챈트\:§r {0} enderchestCommandDescription=엔더 상자를 열어봅니다. -enderchestCommandUsage=/<command> [player] +enderchestCommandUsage=/<command> [플레이어] enderchestCommandUsage1=/<command> enderchestCommandUsage1Description=엔더 상자를 엽니다 +enderchestCommandUsage2=/<command> <플레이어> enderchestCommandUsage2Description=해당 플레이어의 엔더 상자를 엽니다. errorCallingCommand=/{0} 명령어 사용 중 오류 발생. errorWithMessage=§c오류\:§4 {0} essentialsCommandDescription=에센셜 리로드. essentialsCommandUsage=/<command> +essentialsCommandUsage1=/<command> reload essentialsCommandUsage1Description=에센셜 설정을 리로드합니다. +essentialsCommandUsage2=/<command> version essentialsCommandUsage2Description=에센셜 버전을 불러옵니다. +essentialsCommandUsage3=/<command> commands +essentialsCommandUsage3Description=Essentials에서 전송되는 명령어에 대하여 정보를 제공합니다 +essentialsCommandUsage4=/<command> debug essentialsCommandUsage4Description=에센셜 "디버그 모드"를 켜고 끕니다. +essentialsCommandUsage5=/<command> reset <플레이어> essentialsCommandUsage5Description=해당 플레이어의 userdata를 초기화합니다 +essentialsCommandUsage6=/<command> cleanup essentialsCommandUsage6Description=오래된 userdata를 정리합니다 +essentialsCommandUsage7=/<command> homes essentialsCommandUsage7Description=유저의 집을 관리합니다 essentialsHelp1=파일이 망가져서 Essentials에서 열 수 없습니다. Essentials은 비활성화 되었습니다. 만약 해결하지 어려우시다면, 다음으로 가세요 http\://tiny.cc/EssentialsChat essentialsHelp2=파일이 망가져서 Essentials에서 열 수 없습니다. Essentials은 비활성화 되었습니다. 만약 스스로 해결하지 못하겠다면, /essentialshelp 명령어나 다음으로 가세요. http\://tiny.cc/EssentialsChat essentialsReload=§6에센셜§c {0}§6리로드가 완료되었습니다. exp=§c{0} §6는§c {1} §6경험치 (레벨§c {2}§6) 을 가지고 있고,§c {3} §6의 경험치가 있으면 레벨 업 할 수 있습니다.. expCommandDescription=플레이어의 경험치를 주거나, 설정하고, 초기화하고, 봅니다. +expCommandUsage=/<command> [reset|show|set|give] [닉네임 [수량]] +expCommandUsage1=/<command> give <플레이어> <수량> expCommandUsage1Description=해당 플레이어에게 주어진 값만큼의 경험치를 줍니다. +expCommandUsage2=/<command> set <닉네임> <수량> expCommandUsage2Description=해당 플레이어의 경험치를 주어진 값으로 설정합니다 +expCommandUsage3=/<command> show <닉네임> expCommandUsage4Description=해당 플레이어가 가지고 있는 경험치를 표시합니다 +expCommandUsage5=/<command> reset <닉네임> expCommandUsage5Description=해당 플레이어의 경험치를 0으로 초기화합니다 expSet=§c{0} §6은 이제§c {1} §6경험치 입니다. extCommandDescription=플레이어 불 끄기 -extCommandUsage=/<command> [player] -extCommandUsage1=/<command> [player] +extCommandUsage=/<command> [플레이어] +extCommandUsage1=/<command> [플레이어] extinguish=§7몸에 붙은 불을 껐습니다. extinguishOthers=§7당신은 {0}의 불을 껐습니다. failedToCloseConfig={0} 설정을 닫지 못하였습니다. @@ -269,21 +335,29 @@ failedToWriteConfig={0} 설정 파일에 쓰지 못했습니다. false=§4아니요.§r feed=§6배고픔을 모두 채웠습니다. feedCommandDescription=배고픔을 채웁니다. -feedCommandUsage=/<command> [player] -feedCommandUsage1=/<command> [player] +feedCommandUsage=/<command> [플레이어] +feedCommandUsage1=/<command> [플레이어] feedOther=§6당신은 §c{0} §6에게 배고픔을 모두 채워줬습니다. fileRenameError={0} 파일의 이름 변경을 실패하였습니다. fireballCommandDescription=화염구나 다른 던질 수 있는 것들을 던집니다. +fireballCommandUsage=/<command> [fireball|small|large|arrow|skull|egg|snowball|expbottle|dragon|splashpotion|lingeringpotion|trident] [속도] fireballCommandUsage1=/<command> +fireballCommandUsage2=/<command> <fireball|small|large|arrow|skull|egg|snowball|expbottle|dragon|splashpotion|lingeringpotion|trident> [속도] fireworkColor=§4불꽃놀이 매게수가 알맞지 않습니다. 불꽃놀이 매게 변수 삽입, 색상을 먼저 설정해주세요. fireworkCommandDescription=폭죽의 스택을 수정합니다. +fireworkCommandUsage=/<command> <<meta 변수>|power [수량]|clear|fire [수량]> +fireworkCommandUsage1=/<command> clear +fireworkCommandUsage2=/<command> power <수량> +fireworkCommandUsage3=/<command> fire [수량] +fireworkCommandUsage4=/<command> <meta> fireworkCommandUsage4Description=들고 있는 폭죽에 효과를 추가합니다. fireworkEffectsCleared=§6들고있는 폭죽의 효과를 모두 제거했습니다. fireworkSyntax=§6불꽃놀이 매개변수\:§c 색깔\:<색깔> [페이드\:<색깔>] [모양\:<모양>] [효과\:<효과>]\n§6다중 색깔/효과, 사용하여 값을 쉼표로 구분하세요 \: §우는색,파란색,분홍색\n§6모양\:§c 별, 공, 대형, 크리퍼, 버스트 §6효과\:§c 트레일, 반짝. fixedHomes=잘못된 집이 삭제되었습니다. fixingHomes=잘못된 집을 삭제하는 중... flyCommandDescription=이륙하고, 비상하라\! -flyCommandUsage1=/<command> [player] +flyCommandUsage=/<command> [닉네임] [on|off] +flyCommandUsage1=/<command> [플레이어] flying=비행중 flyMode=§6플레이어 {1}§6의 비행 모드를 §c{0}§6시켰습니다. foreverAlone=§4답장할 상대가 없습니다. @@ -293,6 +367,8 @@ fullStackDefaultOversize=§6스택이 최대 크기로 설정되었습니다. § gameMode=§c{1} §6에게 §c{0} §6 모드를 적용합니다. gameModeInvalid=§4당신은 §c {0}§4을(를) 떨어뜨릴 권한이 없습니다. gamemodeCommandDescription=플레이어의 게임 모드를 바꿉니다. +gamemodeCommandUsage=/<command> <survival|creative|adventure|spectator> [닉네임] +gamemodeCommandUsage1=/<command> <survival|creative|adventure|spectator> [닉네임] gcCommandDescription=메모리,업타임,틱 정보를 봅니다. gcCommandUsage=/<command> gcfree=§6남은 메모리 \: §c{0}MB. @@ -301,9 +377,12 @@ gctotal=§6사용가능 메모리\:§c {0} MB. gcWorld=§6{0} "§c{1}§6"\: §c{2}§6개의 청크, §c{3}§6개의 엔티티, §c{4}§6개의 타일. geoipJoinFormat=플레이어 {0}님은 {1}에서 왔습니다. getposCommandDescription=플레이어의 현재 좌표를 봅니다. -getposCommandUsage=/<command> [player] -getposCommandUsage1=/<command> [player] +getposCommandUsage=/<command> [플레이어] +getposCommandUsage1=/<command> [플레이어] giveCommandDescription=플레이어에게 아이템을 줍니다. +giveCommandUsage=/<command> <닉네임> <item|numeric> [수량 [아이템 meta...]] +giveCommandUsage1=/<command> <플레이어> <아이템> [수량] +giveCommandUsage2=/<command> <닉네임> <아이템> <수량> <meta> geoipCantFind=§6플레이어 §c{0} §6(이)가 §a알 수 없는 국가§6에서 왔습니다. geoIpErrorOnJoin={0} 에 대한 GeoIP 데이터를 가져올 수 없습니다. 라이센스 키와 설정이 올바른지 확인하세요. geoIpLicenseMissing=라이센스 키를 찾을 수 없습니다\! https\://essentialsx.net/geoip 를 방문해 설정 방법을 알아보세요. @@ -311,7 +390,8 @@ geoIpUrlEmpty=GeoIP 다운로드 주소가 비었습니다. geoIpUrlInvalid=GeoIP 다운로드 주소가 잘못되었습니다. givenSkull=§c{0}§6의 머리를 얻었습니다. godCommandDescription=신의 힘을 활성화합니다. -godCommandUsage1=/<command> [player] +godCommandUsage=/<command> [닉네임] [on|off] +godCommandUsage1=/<command> [플레이어] giveSpawn=§c{0} §6개의 §c{1} §6(을)를 §c{2}§6에게 지급했습니다. giveSpawnFailure=§4공간이 부족합니다, §c{0} {1} §4(을)를 잃었습니다. godDisabledFor=§c{0} §6를 §c비활성화 @@ -323,7 +403,9 @@ groupDoesNotExist=§4이 그룹에서 온라인 상태인 사람이 없습니다 groupNumber=§c{0}§f 접속중, 전체 목록\: §c /{1} {2} hatArmor=§4이 아이템을 모자로 사용할 수 없습니다\! hatCommandDescription=멋진 새 모자를 구합니다. +hatCommandUsage=/<command> [remove] hatCommandUsage1=/<command> +hatCommandUsage2=/<command> remove hatCurse=§4귀속 저주가 걸린 모자는 벗을 수 없습니다\! hatEmpty=§4당신은 모자를 쓰고있지 않습니다. hatFail=§4반드시 머리에 쓰기 위해서는 무언가를 들고 있어야 합니다. @@ -332,11 +414,12 @@ hatRemoved=§6당신의 모자는 제거 되었습니다. haveBeenReleased=§6당신은 공개되었습니다. heal=§6당신은 회복되었습니다. healCommandDescription=플레이어를 회복합니다. -healCommandUsage=/<command> [player] -healCommandUsage1=/<command> [player] +healCommandUsage=/<command> [플레이어] +healCommandUsage1=/<command> [플레이어] healDead=죽은 사람을 회복시킬 수는 없습니다\! healOther=§6{0}님이 회복되었습니다. helpCommandDescription=사용 가능한 명령어 목록을 봅니다. +helpCommandUsage=/<command> [검색어] [쪽] helpConsole=콘솔에서 도움말을 보려면, ''?'' 를 입력하세요. helpFrom=§6커멘드에서 온말 {0}\: helpLine=§6/{0}§r\: {1} @@ -344,20 +427,29 @@ helpMatching=§6일치하는 명령어 "§c{0}§6"\: helpOp=§4[건의]§f §6{0}\:§r {1} helpPlugin=§4{0}§r\: 플러그인 도움말\: /help {1} helpopCommandDescription=접속중인 관리자에게 메시지를 보냅니다. +helpopCommandUsage=/<command> <메시지> +helpopCommandUsage1=/<command> <메시지> holdBook=§4쓸 수 있는 책을 가지고 있지 않습니다. holdFirework=§4효과를 추가하기 위해서는 폭죽을 들고있어야 합니다. holdPotion=§4효과를 적용하려면 포션을 손에 들고있어야 합니다. holeInFloor=바닥에 아무 블럭이 없으므로, 이동이 불가합니다. homeCommandDescription=집으로 텔레포트합니다. +homeCommandUsage=/<command> [player\:][닉네임] +homeCommandUsage1=/<command> <이름> +homeCommandUsage2=/<command> <플레이어>\:<이름> homes=§6집들\:§r {0} homeConfirmation=§6집 §c{0} §6(이)가 이미 있습니다\!\n이미 있는 집을 덮어씌우려면, 명령어를 다시 입력하세요. homeSet=§6이곳을 집으로 설정하였습니다. hour=시간 hours=시(시간) -iceCommandUsage=/<command> [player] +iceCommandUsage=/<command> [플레이어] iceCommandUsage1=/<command> +iceCommandUsage2=/<command> <플레이어> +iceCommandUsage3=/<command> * iceOther=§c{0}§6 식히는 중. ignoreCommandDescription=다른 플레이어를 무시하거나 무시하지 않습니다. +ignoreCommandUsage=/<command> <플레이어> +ignoreCommandUsage1=/<command> <플레이어> ignoreCommandUsage1Description=해당 플레이어를 무시하거나 무시하지 않습니다 ignoredList=§6무시됨\:§r {0} ignoreExempt=§4당신은 이 플레이어를 무시할 수 없습니다. @@ -367,6 +459,7 @@ infoAfterDeath=§e{1}, {2}, {3} §6에 §e{0} §6에서 죽었습니다. infoChapter=§6챕터 선택\: infoChapterPages=§e ---- §6{0} §e--§6 페이지 §c{1}§6/§c{2} §e---- infoCommandDescription=서버 주인이 설정한 정보를 봅니다. +infoCommandUsage=/<command> [챕터] [쪽] infoPages=§e ---- §6{2} §e--§6 페이지 §c{0}§6/§c{1} §e---- infoUnknownChapter=§4알 수 없는 챕터. insufficientFunds=§4자금이 부족합니다. @@ -390,17 +483,25 @@ inventoryClearingAllItems=§c{0} §6의 모든 인벤토리 아이템을 비웠 inventoryClearingFromAll=§6모든 유저의 인벤토리가 초기화됩니다. inventoryClearingStack=§c{2}§6에게서 §c {0} §6개의§c {1} §6(을)를 제거했습니다. invseeCommandDescription=다른 플레이어의 인벤토리를 봅니다. +invseeCommandUsage=/<command> <플레이어> +invseeCommandUsage1=/<command> <플레이어> invseeCommandUsage1Description=해당 플레이어의 인벤토리를 엽니다 is=은/는 isIpBanned=§6IP §c{0} §6는 차단 되었습니다. internalError=§c명령어를 수행하던 중 내부 오류가 발생했습니다. itemCannotBeSold=그 아이템은 서버에 팔 수 없습니다. itemCommandDescription=아이템을 소환합니다. +itemCommandUsage=/<command> <item|numeric> [수량 [아이템 meta...]] +itemCommandUsage1=/<command> <아이템> [수량] +itemCommandUsage2=/<command> <아이템> <수량> <meta> itemId=§6ID\:§c {0} itemloreClear=§6아이템의 설명을 지웠습니다. itemloreCommandDescription=아이템의 설명을 수정합니다. +itemloreCommandUsage=/<command> <add/set/clear> [text/line] [텍스트] +itemloreCommandUsage1=/<command> add [텍스트] itemloreCommandUsage1Description=들고 있는 아이템의 설명에 주어진 텍스트를 추가합니다. itemloreCommandUsage2Description=들고 있는 아이템의 설명을 주어진 줄과 설명으로 설정합니다. +itemloreCommandUsage3=/<command> clear itemloreCommandUsage3Description=들고 있는 아이템의 설명을 초기화합니다 itemloreInvalidItem=§4설명을 수정하려면 아이템을 손에 들고있어야 합니다. itemloreNoLine=§4들고있는 아이템의 §c{0}§4번째 줄에 설명이 없습니다. @@ -411,8 +512,10 @@ itemMustBeStacked=아이템을 거래하기 위해서 2개 이상의 같은아 itemNames=§6짧은 아이템 이름\:§r {0} itemnameClear=§6아이템의 이름을 지웠습니다. itemnameCommandDescription=아이템의 이름을 정합니다. +itemnameCommandUsage=/<command> [이름] itemnameCommandUsage1=/<command> itemnameCommandUsage1Description=들고 있는 아이템의 이름을 초기화합니다 +itemnameCommandUsage2=/<command> <이름> itemnameCommandUsage2Description=들고 있는 아이템의 이름을 주어진 이름으로 설정합니다 itemnameInvalidItem=§c이름을 수정하려면 아이템을 손에 들고있어야 합니다. itemnameSuccess=§6들고있는 아이템의 이름을 "§c{0}§6"§6 (으)로 수정했습니다. @@ -428,6 +531,8 @@ itemSoldConsole=§e{0} (이)가 §e {1}§a(을)를 §e{2} §a에 판매함 ({3} itemSpawn=§7아이템 {1}을/를 {0}개 줍니다. itemType=§6아이템\:§c {0} itemdbCommandDescription=아이템을 검색합니다. +itemdbCommandUsage=/<command> <아이템> +itemdbCommandUsage1=/<command> <아이템> itemdbCommandUsage1Description=주어진 아이템의 데이터베이스를 검색합니다 jailAlreadyIncarcerated=§4사람이 이미 감옥에 있음\:§c {0} jailList=§6감옥\:§r {0} @@ -446,19 +551,24 @@ jumpCommandDescription=시야에 보이는 가까운 블록으로 점프합니 jumpCommandUsage=/<command> jumpError=이것은 당신의 컴퓨터에 오류를 일으킬 수 있습니다. kickCommandDescription=해당 플레이어를 사유와 함께 강퇴합니다. -kickCommandUsage=/<command><닉네임>[사유] -kickCommandUsage1=/<command><닉네임>[사유] +kickCommandUsage=/<command> <플레이어> [사유] +kickCommandUsage1=/<command> <플레이어> [사유] kickCommandUsage1Description=사유와 함께 해당 플레이어를 추방합니다 kickDefault=서버에서 추방되셨습니다. kickedAll=§4모든사람을 킥했습니다. kickExempt=§4당신은 킥을 할수 없습니다. kickallCommandDescription=본인을 제외한 모든 플레이어를 강퇴합니다. +kickallCommandUsage=/<command> [사유] +kickallCommandUsage1=/<command> [사유] kickallCommandUsage1Description=사유와 함께 모든 플레이어를 추방합니다 kill=§c{0}§6님이 사망하였습니다. killCommandDescription=해당 플레이어를 죽입니다. +killCommandUsage=/<command> <플레이어> +killCommandUsage1=/<command> <플레이어> killCommandUsage1Description=해당 플레이어를 죽입니다 killExempt=§4당신은 §c{0} §4를 죽일수 없습니다. kitCommandDescription=해당 키트를 얻거나 사용 가능한 키트를 봅니다. +kitCommandUsage=/<command> [도구] [닉네임] kitCommandUsage1=/<command> kitCommandUsage1Description=모든 사용 가능한 키트를 봅니다 kitCommandUsage2=/<command> <kit> [player] @@ -486,13 +596,17 @@ kittycannonCommandUsage=/<command> kitTimed=§c{0}§4이 지나기 전에는 킷을 받을 수 없습니다. leatherSyntax=§6가죽 색깔 구문\:§c color\:<red>,<green>,<blue> 예시\: color\:255,0,0§6 또는§c color\:<rgb int> 예시\: color\:16777011 lightningCommandDescription=토르의 힘. 바라보는 곳 또는 플레이어에게 천둥을 내리치리. -lightningCommandUsage1=/<command> [player] +lightningCommandUsage=/<command> [닉네임] [규모] +lightningCommandUsage1=/<command> [플레이어] +lightningCommandUsage2=/<command> <닉네임> <규모> lightningSmited=§6번개를 맞았습니다. lightningUse=§c{0}§6에게 번개를 내립니다. listAfkTag=§7[잠수]§r listAmount=§6최대 §c{1}§6명이 접속 가능하고, §c{0}§6명의 플레이어가 접속중입니다. listAmountHidden=§6최대 §c{2}§6 명이 접속 가능하고, §c{0}§6/§c{1}§6 명의 플레이어가 접속중입니다. listCommandDescription=접속중인 플레이어를 봅니다. +listCommandUsage=/<command> [그룹] +listCommandUsage1=/<command> [그룹] listGroupTag=§6{0}§r\: listHiddenTag=§7[숨김]§r loadWarpError=§4워프 데이터 {0}를 불러오는데 실패하였습니다. @@ -502,7 +616,6 @@ loomCommandUsage=/<command> mailClear=§6메일을 읽음으로 표시하려면, §c /mail clear§6를 입력하세요. mailCleared=§6메일함을 비웠습니다\! mailCommandDescription=플레이어에게 서버 내 메일을 보냅니다. -mailCommandUsage2Description=메일을 정리합니다 mailCommandUsage3Description=주어진 메시지를 해당 플레이어에게 보냅니다 mailCommandUsage4Description=주어진 메시지를 모든 플레이어에게 보냅니다 mailDelay=너무 많은 양의 이메일을 보냈습니다. 최대\: {0} @@ -538,6 +651,7 @@ months=월(달) moreCommandDescription=들고있는 아이템의 스택을 해당하는 만큼 채우거나,지정되지 않을 경우 최대 크기로 설정합니다. moreThanZero=수량이 0보다 커야합니다. motdCommandDescription=오늘의 메시지를 봅니다. +motdCommandUsage=/<command> [챕터] [쪽] moveSpeed=§c{2} §6의 §c{0}§6 속도를§c {1} §6(으)로 설정했습니다. msgCommandDescription=해당 플레이어에게 귓속말을 보냅니다. msgDisabled=§6메시지 수신이 §c비활성화§6되었습니다. @@ -547,10 +661,12 @@ msgEnabledFor=§c{0} §6의 메시지 수신이 §c활성화§6되었습니다. msgFormat=§6[§c{0}§6 -> §c{1}§6] §r{2} msgIgnore=§c{0} §4(이)가 메시지를 비활성화했습니다. msgtoggleCommandDescription=모든 귓속말을 받지 않습니다. -msgtoggleCommandUsage1=/<command> [player] +msgtoggleCommandUsage=/<command> [닉네임] [on|off] +msgtoggleCommandUsage1=/<command> [플레이어] multipleCharges=§4이 폭죽에는 한개의 효과만 적용할 수 있습니다. multiplePotionEffects=§4한가지 포션에 하나의 효과만 적용할 수 있습니다. muteCommandDescription=플레이어를 채금합니다. +muteCommandUsage1=/<command> <플레이어> mutedPlayer=§6플레이어§c {0}§6님이 벙어리가 되었습니다. mutedPlayerFor=§6플레이어§c {0} §6(이)가§c {1}§6동안 채금되었습니다. mutedPlayerForReason=§6플레이어§c {0} §6(이)가§c {1}§6동안 채금되었습니다. 사유\: §c{2} @@ -564,10 +680,14 @@ muteNotifyForReason=§c{0} §6(이)가 §c{1}§6(을)를§c {2}§6동안 채금 muteNotifyReason=§c{0} §6(이)가 §c{1}§6(을)를 채금했습니다. 사유\: §c{2} nearCommandDescription=주변에 있는 플레이어 목록을 봅니다. nearCommandUsage1=/<command> +nearCommandUsage3=/<command> <플레이어> nearbyPlayers=§6주변 플레이어\:§r {0} negativeBalanceError=§4잔고가 음수가 되면 안됩니다. nickChanged=§6닉네임이 변경되었습니다. nickCommandDescription=본인이나 다른 플레이어의 닉네임을 바꿉니다. +nickCommandUsage2=/<command> off +nickCommandUsage3=/<command> <플레이어> <닉네임> +nickCommandUsage4=/<command> <플레이어> off nickDisplayName=§4Essentials 설정에서 change-displayname 를 활성화 해야합니다. nickInUse=§4이미 사용중인 이름입니다. nickNameBlacklist=§4허용되지 않는 닉네임 입니다. @@ -619,7 +739,8 @@ now=지금 noWarpsDefined=&6설정된 워프가 없습니다. nuke=§5죽음의 비가 내립니다. nukeCommandDescription=그들에게 죽음의 비를 내립니다. -nukeCommandUsage=/<command> [player] +nukeCommandUsage=/<command> [플레이어] +nukeCommandUsage1=/<command> [플레이어...] numberRequired=번호를 입력해 주세요, 멍청아. onlyDayNight=커맨드 /time 은 시간을 낮, 밤으로만 변경할 수 있습니다. onlyPlayers=§4버킷에서는 §c{0}§4 를 사용 할 수 없습니다. 게임에 접속하여 사용해주세요. @@ -631,6 +752,8 @@ oversizedMute=§4이 기간으로는 플레이어를 채금할 수 없습니다. oversizedTempban=§4이 기간으로는 플레이어를 차단할 수 없습니다. passengerTeleportFail=§4동행자가 있을 때는 텔레포트 할 수 없습니다. payCommandDescription=다른 사람에게 돈을 지불합니다. +payCommandUsage=/<command> <플레이어> <수량> +payCommandUsage1=/<command> <플레이어> <수량> payConfirmToggleOff=§6이제 거래를 받을 때 확인 메시지가 표시되지 않습니다. payConfirmToggleOn=§6이제 거래를 받을 때 확인 메시지가 표시됩니다. payDisabledFor=§c{0} §6(은)는 거래를 받지 않습니다. @@ -642,8 +765,8 @@ payToggleOn=§6이제 거래를 받습니다. payconfirmtoggleCommandDescription=결제를 받을 때 확인 메시지를 표시할지 정합니다. payconfirmtoggleCommandUsage=/<command> paytoggleCommandDescription=결제를 받을 지 정합니다. -paytoggleCommandUsage=/<command> [player] -paytoggleCommandUsage1=/<command> [player] +paytoggleCommandUsage=/<command> [플레이어] +paytoggleCommandUsage1=/<command> [플레이어] pendingTeleportCancelled=§4순간이동 요청이 취소되었습니다. pingCommandDescription=Pong\! pingCommandUsage=/<command> @@ -667,6 +790,7 @@ pong=Pong\! posPitch=§6Pitch\: {0} (머리 각도) possibleWorlds=마인팜 서버에 오심? potionCommandDescription=포션에 사용자 지정 포션 효과를 추가합니다. +potionCommandUsage1=/<command> clear posX=§6X\: {0} (+동 <-> -서) posY=§6Y\: {0} (+위 <-> -아래) posYaw=§6Yaw\: {0} (회전) @@ -705,6 +829,8 @@ pWeatherReset=플레이어의 날씨가 {0}으로 초기화 되었습니다. pWeatherSet=§6플레이어 §c{1} §6의 날씨가 §c{0} §6(으)로 설정되었습니다. questionFormat=§2[질문]§r {0} rCommandDescription=마지막에 메시지를 보낸 사람에게 빠른 답장을 보냅니다. +rCommandUsage=/<command> <메시지> +rCommandUsage1=/<command> <메시지> radiusTooBig=§4범위가 너무 큽니다\! 최대 범위는 §c {0}§4입니다. readNextPage=§c/{0} {1} §6를 입력하여 다음 페이지를 읽으세요. realName=§f{0}§r§6 (은)는 §f{1} @@ -726,8 +852,10 @@ removed=§c{0}§6개의 엔티티가 제거되었습니다. repair=§c{0}§6를 성공적으로 수리하였습니다. repairAlreadyFixed=§4이 아이템은 수리가 필요하지 않습니다. repairCommandDescription=한개 또는 모든 아이템의 내구도를 수리합니다. +repairCommandUsage=/<command> [hand|all] repairCommandUsage1=/<command> repairCommandUsage1Description=들고 있는 아이템을 수리합니다 +repairCommandUsage2=/<command> all repairCommandUsage2Description=인벤토리의 모든 아이템을 수리합니다 repairEnchanted=§4당신은 인챈트 된 아이템을 수리할 수 없습니다. repairInvalidType=§4이 아이템은 수리될 수 없습니다. @@ -749,21 +877,29 @@ resetBal=§6모든 온라인 플레이어의 잔고가 §a{0} §6(으)로 리셋 resetBalAll=§6모든 플레이어의 잔고가 §a{0} §6(으)로 리셋되었습니다. rest=§6잘 휴식한 듯한 느낌이 듭니다. restCommandDescription=플레이어를 휴식시킵니다. -restCommandUsage=/<command> [player] -restCommandUsage1=/<command> [player] +restCommandUsage=/<command> [플레이어] +restCommandUsage1=/<command> [플레이어] restOther=§c{0}§6 쉬는중. returnPlayerToJailError=§4플레이어 §c {0} §4을/를 {1} 감옥으로 보내는데 오류가 발생했습니다. rtoggleCommandDescription=마지막 메시지를 보낸 사람에게의 빠른 답장을 설정합니다. +rtoggleCommandUsage=/<command> [닉네임] [on|off] rulesCommandDescription=서버 규칙을 봅니다. +rulesCommandUsage=/<command> [챕터] [쪽] runningPlayerMatch=§6''§c{0}§6''와 일치하는 플레이어를 찾는 중... (조금 시간이 걸릴수 있습니다) second=초 seconds=초 seenAccounts=§6플레이어가 §c{0}&6(으)로도 알려져 있습니다. seenCommandDescription=플레이어의 마지막 접속 종료 시간을 봅니다. +seenCommandUsage=/<command> <플레이어> +seenCommandUsage1=/<command> <플레이어> seenOffline=§6플레이어§c {0} §6이/가 §c{1}§6 전부터 §4오프라인§6상태였습니다. seenOnline=§6플레이어§c {0} §6이/가 §c{1}§6 전부터 §a온라인§6상태였습니다. sellBulkPermission=§6여러개를 한꺼번에 판매할 수 있는 권한이 없습니다. sellCommandDescription=손에 든 아이템을 판매합니다. +sellCommandUsage1=/<command> <아이템> [수량] +sellCommandUsage2=/<command> hand [수량] +sellCommandUsage3=/<command> all +sellCommandUsage4=/<command> blocks [수량] sellHandPermission=§6손에 든 아이템을 팔 수 있는 권한이 없습니다. serverFull=서버가 꽉 찼습니다\! serverReloading=지금 서버를 리로드하고 있을 가능성이 높습니다. 만약 그렇다면, 왜 자신을 미워하는 거죠? /reload 를 사용하는 것은 EssentialsX 팀의 지원이 필요하지 않습니다. @@ -778,17 +914,26 @@ setBal=§a잔고가 {0}으로 설정되었습니다. setBalOthers=§a{0}§a의 잔고를 {1}으로 설정합니다. setSpawner=§6스포너 타입을 §c{0}§6으로 변경합니다. sethomeCommandDescription=현재 위치로 집을 설정합니다. +sethomeCommandUsage=/<command> [[player\:]닉네임] +sethomeCommandUsage1=/<command> <이름> +sethomeCommandUsage2=/<command> <플레이어>\:<이름> setjailCommandDescription=[jailname] (으)로 감옥을 만듭니다. -setjailCommandUsage=/<command> <jailname> -setjailCommandUsage1=/<command> <jailname> +setjailCommandUsage=/<command> <감옥 이름> +setjailCommandUsage1=/<command> <감옥 이름> settprCommandDescription=§6무작위 텔레포트 장소와 매개변수를 정합니다. +settprCommandUsage=/<command> [center|minrange|maxrange] [값] +settprCommandUsage1=/<command> center settprCommandUsage1Description=무작위 텔레포트의 중심을 현재 위치로 설정합니다 +settprCommandUsage2=/<command> minrange <반경> +settprCommandUsage3=/<command> maxrange <반경> settpr=§6무작위 텔레포트의 중심을 정합니다. settprValue=§6무작위 텔레포트 §c{0} §6(을)를 §c{1} §6(으)로 설정합니다. setwarpCommandDescription=새 워프를 만듭니다. -setwarpCommandUsage=/<command><warp> -setwarpCommandUsage1=/<command><warp> +setwarpCommandUsage=/<command> <워프 이름> +setwarpCommandUsage1=/<command> <워프 이름> setworthCommandDescription=아이템의 판매 가격을 설정합니다. +setworthCommandUsage=/<command> [itemname|id] <가격> +setworthCommandUsage1=/<command> <가격> sheepMalformedColor=§4잘못된 색상입니다. shoutDisabled=§6외치기 모드 §c비활성화§6됨. shoutDisabledFor=§c{0} §6의 외치기 모드를 §c비활성화§6했습니다. @@ -818,6 +963,7 @@ southWest=남서 skullChanged=§6머리가 §c{0}§6 (으)로 변경되었습니다. skullCommandDescription=플레이어 머리의 주인을 설정합니다. skullCommandUsage1=/<command> +skullCommandUsage2=/<command> <플레이어> slimeMalformedSize=잘못된 크기. smithingtableCommandDescription=대장장이 작업대를 엽니다. smithingtableCommandUsage=/<command> @@ -825,7 +971,8 @@ socialSpy=§c{0}§6\: §c{1}에 대한 §6SocialSpy socialSpyMsgFormat=§6[§c{0}§7 -> §c{1}§6] §7{2} socialSpyMutedPrefix=§f[§6SS§f] §7(채금) §r socialspyCommandDescription=귓속말/메일 명령어를 보거나 보지 않습니다. -socialspyCommandUsage1=/<command> [player] +socialspyCommandUsage=/<command> [닉네임] [on|off] +socialspyCommandUsage1=/<command> [플레이어] socialSpyPrefix=§f[§6SS§f] §r soloMob=그 몬스터도 좋습니다. spawned=스폰 @@ -834,9 +981,13 @@ spawnmobCommandDescription=몹을 소환합니다. spawnSet=§c{0} §6그룹의 스폰장소가 설정되었습니다. spectator=관전자 speedCommandDescription=속도를 바꿉니다. +speedCommandUsage1=/<command> <속도> +speedCommandUsage2=/<command> <유형> <속도> [플레이어] stonecutterCommandDescription=석제 절단기를 엽니다. stonecutterCommandUsage=/<command> sudoCommandDescription=다른 유저가 명령어를 실행하게 합니다. +sudoCommandUsage=/<command> <플레이어> <명령어 [매개변수]> +sudoCommandUsage1=/<command> <플레이어> <명령어> [매개변수] sudoExempt=§c{0} §4(은)는 다른 유저가 실행하게 할 수 없습니다. sudoRun=§c{0} §6(은)는 §r/{1} §6(을)를 강제로 실행했습니다. suicideCommandDescription=스스로의 목숨을 끊습니다. @@ -875,15 +1026,22 @@ tempbanExemptOffline=§4당신은 접속중이지 않은 플레이어를 임시 tempbanJoin={0} 동안 서버에서 차단되었습니다. 사유\: {1} tempBanned=§r{0} §c동안 임시 차단되었습니다. 사유\:\n§r{2} tempbanCommandDescription=유저를 임시 차단합니다. +tempbanCommandUsage=/<command> <플레이어> <기간> [사유] tempbanipCommandDescription=IP 주소를 임시 차단합니다. +tempbanipCommandUsage=/<command> <플레이어> <기간> [사유] +tempbanipCommandUsage1=/<command> <플레이어|ip 주소> <기간> [사유] thunder=§6당신은 이 월드의 천둥을 {0} 시켰습니다. thunderCommandDescription=천둥을 활성화/비활성화합니다. +thunderCommandUsage=/<command> <true/false> [기간] +thunderCommandUsage1=/<command> <true|false> [기간] thunderDuration=§6당신은 이 월드의 천둥을 {1}초 동안 {0} 시켰습니다. timeBeforeHeal=§4다음 회복까지 필요한 시간\:§c {0}§4. timeBeforeTeleport=§4다음 텔레포트까지 필요한 시간\:§c {0}§4. timeCommandDescription=월드의 시간을 표시/변경합니다. 기본값은 현재 월드입니다. timeCommandUsage1=/<command> timeCommandUsage1Description=모든 월드의 시간을 표시합니다 +timeCommandUsage2=/<command> set <시간> [world|all] +timeCommandUsage3=/<command> add <시간> [world|all] timeFormat=§c{0}§6 또는 §c{1}§6 또는 §c{2}§6 timeSetPermission=시간을 설정할 권한이 없습니다. timeSetWorldPermission=§4''{0}'' §4월드의 시간을 설정할 권한이 없습니다. @@ -892,8 +1050,10 @@ timeWorldCurrent=§6§c{0}§6의 현재 시간은§c {1} §6입니다. timeWorldCurrentSign=§6현재 시간은 §c{0} §6입니다. timeWorldSet=§6월드\: §c{1} §6의 시간이 §c{0} §6(으)로 설정되었습니다. togglejailCommandDescription=감옥에 플레이어를 가두거나 석방합니다. +togglejailCommandUsage=/<command> <플레이어> <감옥> [기간] toggleshoutCommandDescription=외치기 모드를 활성화하거나 비활성화합니다. -toggleshoutCommandUsage1=/<command> [player] +toggleshoutCommandUsage=/<command> [닉네임] [on|off] +toggleshoutCommandUsage1=/<command> [플레이어] topCommandDescription=현재 위치에서 가장 높은 블록으로 텔레포트합니다. topCommandUsage=/<command> totalSellableAll=§a판매할 수 있는 아이템과 블록의 총 가치는 §c{1} §a입니다. @@ -901,33 +1061,55 @@ totalSellableBlocks=§a판매할 수 있는 블록의 총 가치는 §c{1} §a totalWorthAll=§a모든 아이템과 블럭들을 판매한 총합은 §c{1}§a 입니다. totalWorthBlocks=§a모든 블럭을 판매한 총합은 §c{1}§a 입니다. tpCommandDescription=플레이어에게 텔레포트합니다. +tpCommandUsage=/<command> <플레이어> [다른 플레이어] +tpCommandUsage1=/<command> <플레이어> tpCommandUsage1Description=자신을 해당 플레이어에게 텔레포트시킵니다. +tpCommandUsage2=/<command> <플레이어> <다른 플레이어> tpCommandUsage2Description=첫번째 플레이어를 두번째 플레이어에게 텔레포트시킵니다. tpaCommandDescription=해당 플레이어에게 텔레포트를 요청합니다. +tpaCommandUsage=/<command> <플레이어> +tpaCommandUsage1=/<command> <플레이어> tpaCommandUsage1Description=해당 플레이어에게 텔레포트를 요청합니다 tpaallCommandDescription=모든 접속중인 플레이어를 나에게 텔레포트하도록 요청합니다. +tpaallCommandUsage=/<command> <플레이어> +tpaallCommandUsage1=/<command> <플레이어> tpaallCommandUsage1Description=모든 플레이어를 나에게 텔레포트하도록 요청합니다 tpacancelCommandDescription=모든 미결정된 텔레포트 요청을 취소합니다. [player] 를 지정해 취소할 수도 있습니다. -tpacancelCommandUsage=/<command> [player] +tpacancelCommandUsage=/<command> [플레이어] tpacancelCommandUsage1=/<command> tpacancelCommandUsage1Description=모든 대기중인 텔레포트 요청을 취소합니다. +tpacancelCommandUsage2=/<command> <플레이어> tpacceptCommandDescription=텔레포트 요청을 수락합니다. +tpacceptCommandUsage=/<command> [다른 플레이어] tpacceptCommandUsage1=/<command> tpahereCommandDescription=해당 플레이어를 나에게 텔레포트하도록 요청합니다. +tpahereCommandUsage=/<command> <플레이어> +tpahereCommandUsage1=/<command> <플레이어> tpallCommandDescription=모든 플레이어를 다른 플레이어에게로 텔레포트시킵니다. -tpallCommandUsage=/<command> [player] -tpallCommandUsage1=/<command> [player] +tpallCommandUsage=/<command> [플레이어] +tpallCommandUsage1=/<command> [플레이어] tpautoCommandDescription=텔레포트 요청을 자동으로 수락합니다. -tpautoCommandUsage=/<command> [player] -tpautoCommandUsage1=/<command> [player] +tpautoCommandUsage=/<command> [플레이어] +tpautoCommandUsage1=/<command> [플레이어] tpdenyCommandDescription=텔레포트 요청을 거절합니다. tpdenyCommandUsage=/<command> tpdenyCommandUsage1=/<command> tphereCommandDescription=플레이어를 나에게 텔레포트시킵니다. +tphereCommandUsage=/<command> <플레이어> +tphereCommandUsage1=/<command> <플레이어> tpoCommandDescription=tptoggle을 무시하고 강제로 텔레포트합니다. +tpoCommandUsage=/<command> <플레이어> [다른 플레이어] +tpoCommandUsage1=/<command> <플레이어> +tpoCommandUsage2=/<command> <플레이어> <다른 플레이어> tpofflineCommandDescription=플레이어의 마지막 접속 종료 장소로 텔레포트합니다. +tpofflineCommandUsage=/<command> <플레이어> +tpofflineCommandUsage1=/<command> <플레이어> tpohereCommandDescription=tptoggle을 무시하고 강제로 이곳으로 텔레포트합니다. +tpohereCommandUsage=/<command> <플레이어> +tpohereCommandUsage1=/<command> <플레이어> tpposCommandDescription=좌표로 텔레포트합니다. +tpposCommandUsage=/<command> <x> <y> <z> [x시점] [y시점] [세계] +tpposCommandUsage1=/<command> <x> <y> <z> [x시점] [y시점] [세계] tprCommandDescription=무작위로 텔레포트합니다. tprCommandUsage=/<command> tprCommandUsage1=/<command> @@ -935,10 +1117,13 @@ tprCommandUsage1Description=무작위 위치로 텔레포트합니다 tprSuccess=§6무작위 위치로 텔레포트중... tps=§6현재 TPS \= {0} tptoggleCommandDescription=모든 형태의 텔레포트를 차단합니다. -tptoggleCommandUsage1=/<command> [player] +tptoggleCommandUsage=/<command> [닉네임] [on|off] +tptoggleCommandUsage1=/<command> [플레이어] tradeSignEmpty=해당된 표지판은 충분한 공급을 하지 못합니다. tradeSignEmptyOwner=§4거래 표지로부터 아무것도 획득할 수 없었습니다. treeCommandDescription=바라보고 있는 곳에 나무를 소환합니다. +treeCommandUsage=/<command> <tree|birch|redwood|redmushroom|brownmushroom|jungle|junglebush|swamp> +treeCommandUsage1=/<command> <tree|birch|redwood|redmushroom|brownmushroom|jungle|junglebush|swamp> treeFailure=§4나무 생성이 실패하였습니다. 잔디나 흙 위에서 다시 시도해주세요. treeSpawned=§6나무 소환됨. true=§a참§r @@ -949,6 +1134,8 @@ typeWorldName=§6당신은 특정한 세계의 종류를 지명할 수도 있습 unableToSpawnItem=§c{0} §4을(를) 생성하지 못했습니다; 이 아이템은 생성 가능한 아이템이 아닙니다. unableToSpawnMob=§4몬스터 소환을 할 수 없습니다. unbanCommandDescription=해당 플레이어의 차단을 풉니다. +unbanCommandUsage=/<command> <플레이어> +unbanCommandUsage1=/<command> <플레이어> unbanipCommandDescription=IP 주소의 임시 차단을 풉니다. unbanipCommandUsage=/<command><address> unbanipCommandUsage1=/<command><address> @@ -957,6 +1144,10 @@ unknownItemId=§4알 수 없는 아이템 고유번호\:§r {0}§4. unknownItemInList=알 수 없는 아이템 {0} 가 {1} 번째 리스트에 존재합니다. unknownItemName=§4알 수 없는 아이템 이름\: {0} unlimitedCommandDescription=아이템 무제한 설치를 허용합니다. +unlimitedCommandUsage=/<command> <list|item|clear> [플레이어] +unlimitedCommandUsage1=/<command> list [플레이어] +unlimitedCommandUsage2=/<command> <아이템> [플레이어] +unlimitedCommandUsage3=/<command> clear [플레이어] unlimitedItemPermission=§4무제한 아이템 §c{0}§4 에 대한 권한이 없습니다. unlimitedItems=무제한 아이템 목록\: unmutedPlayer=플레이어 §c{0}§6는 이제 말할 수 있습니다. @@ -983,7 +1174,8 @@ userUnknown=§4경고 \: ''§c{0}§4'' 는 서버에 한번도 접속해보지 usingTempFolderForTesting=테스트를 위해 temp 폴더를 사용합니다\: vanish=§6{0}§6님의 사라지기가 {1}. vanishCommandDescription=자신을 다른 플레이어에게서 숨깁니다. -vanishCommandUsage1=/<command> [player] +vanishCommandUsage=/<command> [닉네임] [on|off] +vanishCommandUsage1=/<command> [플레이어] vanished=§6당신은 이제 일반 플레이어에게 보이지 않습니다, 그리고 게임 내 명령어로부터 숨겨집니다. versionCheckDisabled=§6업데이트 확인이 설정에서 비활성화되어 있습니다. versionCustom=§6버전을 확인할 수 없습니다\! 직접 빌드했나요? 빌드 정보\: §c{0}§6. @@ -1011,12 +1203,15 @@ voiceSilencedReason=§6목소리가 침묵되었습니다\! 사유\: §c{0} voiceSilencedReasonTime=§6목소리가 {0} 동안 침묵되었습니다\! 사유\: §c{1} walking=걷기 warpCommandDescription=워프 목록을 보거나 해당 장소로 워프합니다. +warpCommandUsage=/<command> <쪽수|warp> [플레이어] +warpCommandUsage1=/<command> [페이지] +warpCommandUsage2=/<command> <warp> [플레이어] warpCommandUsage2Description=자신 또는 해당 플레이어를 주어진 워프로 텔레포트시킵니다. warpDeleteError=§4워프 파일 삭제중 문제가 발생했습니다. warpInfo=§6워프§c {0} §6의 정보\: warpinfoCommandDescription=해당 워프의 위치 정보를 찾아봅니다. -warpinfoCommandUsage=/<command><warp> -warpinfoCommandUsage1=/<command><warp> +warpinfoCommandUsage=/<command> <워프 이름> +warpinfoCommandUsage1=/<command> <워프 이름> warpinfoCommandUsage1Description=해당 워프의 정보를 보여줍니다. warpingTo=§c{0}§6으로 워프합니다. warpList={0} @@ -1026,6 +1221,8 @@ warpOverwrite=§4당신은 워프를 덮어 씌울 수 없습니다. warps=§6워프 리스트\:§r {0} warpsCount=§6현재§c {0} §6개의 워프가 있습니다. 페이지 §c{1}§6/§c{2}§6. weatherCommandDescription=날씨를 설정합니다. +weatherCommandUsage=/<command> <storm/sun> [기간] +weatherCommandUsage1=/<command> <storm|sun> [기간] weatherCommandUsage1Description=일정 기간동안 주어진 날씨로 설정합니다. warpSet=§6워프 {0}이 추가되었습니다. warpUsePermission=§c당신은 그 워프를 사용할 권한이 없습니다. @@ -1041,6 +1238,7 @@ whoisAFK=§6 - 잠수\:§r {0} whoisAFKSince=§6 - 잠수\:§r {0} ({1} 부터) whoisBanned=§6 - 차단\:§r {0} whoisCommandDescription=닉네임 뒤에 가려진 진짜 닉네임을 확인합니다. +whoisCommandUsage1=/<command> <플레이어> whoisCommandUsage1Description=해당 플레이어의 기본적인 정보를 보여줍니다. whoisExp=§6 - 경험치\:§r {0} (레벨 {1}) whoisFly=§6 - 비행 모드\:§r {0} ({1}) @@ -1065,10 +1263,17 @@ whoisUuid=§6 - UUID\:§r {0} workbenchCommandDescription=작업대를 엽니다. workbenchCommandUsage=/<command> worldCommandDescription=월드를 이동합니다. +worldCommandUsage=/<command> [세계] worldCommandUsage1=/<command> +worldCommandUsage2=/<command> <세계> worldCommandUsage2Description=주어진 월드의 위치로 이동합니다. worth=§a{0} {2}개의 가격은 §c{1}§a 입니다. (아이템 1개의 가격은 {3} 입니다.) worthCommandDescription=들고있는 아이템 또는 해당 아이템의 가치를 계산합니다. +worthCommandUsage=/<command> <<아이템>|<id>|hand|inventory|blocks> [-][수량] +worthCommandUsage1=/<command> <아이템> [수량] +worthCommandUsage2=/<command> hand [수량] +worthCommandUsage3=/<command> all +worthCommandUsage4=/<command> blocks [수량] worthMeta=§7겹쳐진 {0}\:{1} 는 §c{2}의 가치가 있씁니다.§7 (아이템 {3}는 각 {4} 만큼의 가치) worthSet=가치 및 값 설정 year=년(년도) diff --git a/Essentials/src/main/resources/messages_lv_LV.properties b/Essentials/src/main/resources/messages_lv_LV.properties index 904998251c3..593ecf88134 100644 --- a/Essentials/src/main/resources/messages_lv_LV.properties +++ b/Essentials/src/main/resources/messages_lv_LV.properties @@ -3,178 +3,229 @@ # Single quotes have to be doubled: '' # by: action=§5* {0} §5{1} -addedToAccount=§a{0} tika pievienots tavam kontam. -addedToOthersAccount=§a{0} pievienoja {1}§a kontam. Jauns atlikums\: {2} -adventure=piedzīvojuma -afkCommandDescription=Atzīmē tevi prom no tastatūras. +addedToAccount=§a{0} tika pievienots jūsu kontam. +addedToOthersAccount=§a{0} tika pievienots {1}§a kontam. Jauna bilance\: {2} +adventure=piedzīvojumu +afkCommandDescription=Atzīmē jūs kā atgājušu no tastatūras. afkCommandUsage=/<command> [spēlētājs/ziņojums..] afkCommandUsage1=/<command> [message] -alertBroke=salūza\: +afkCommandUsage1Description=Ieslēdz jūsu AFK statusu ar neobligātu iemesla norādīšanu +afkCommandUsage2=/<command> <player> [message] +afkCommandUsage2Description=Ieslēdz AFK statusu norādītajam spēlētājam ar neobligātu iemesla norādīšanu +alertBroke=salauza\: alertFormat=§3[{0}] §r {1} §6 {2} pie\: {3} -alertPlaced=novietots\: -alertUsed=lietots\: +alertPlaced=nolika\: +alertUsed=izmantoja\: alphaNames=§4Spēlētaju vārdi var sastāvēt tikai no burtiem, cipariem un pasvītrojumiem. -antiBuildBreak=§4Tev nav tiesību lauzt§c {0} §4blokus šeit. -antiBuildCraft=§4Tev nav tiesību veidot§c {0}§4. -antiBuildDrop=§4Tev nav tiesību mest§c {0}§4. -antiBuildInteract=§4Tev nav tiesību iedarboties ar§c {0}§4. -antiBuildPlace=§4Tev nav tiesību novietot§c {0} §4šeit. -antiBuildUse=§4Tev nav tiesību izmantot§c {0}§4. +antiBuildBreak=§4Jums nav tiesību šeit lauzt§c {0} §4blokus. +antiBuildCraft=§4Jums nav tiesību veidot§c {0}§4. +antiBuildDrop=§4Jums nav tiesību izmest§c {0}§4. +antiBuildInteract=§4Jums nav tiesību iedarboties ar§c {0}§4. +antiBuildPlace=§4Jums nav tiesību šeit novietot§c {0} §4. +antiBuildUse=§4Jums nav tiesību izmantot§c {0}§4. antiochCommandDescription=Mazs pārsteigums operātoriem. antiochCommandUsage=/<command> [message] anvilCommandDescription=Atver laktu. anvilCommandUsage=/<command> -autoAfkKickReason=Tevi izmeta par bezdarbību vairāk par {0} minūtēm. -autoTeleportDisabled=§6Tu vairs automātiski neapstiprini teleportācijas pieprasījumus. +autoAfkKickReason=Jūs izmeta bezdarbības dēļ vairāk par {0} minūtēm. +autoTeleportDisabled=§6Jūs vairs automātiski neapstipriniet teleportācijas pieprasījumus. autoTeleportDisabledFor=§c{0}§6 vairs automātiski neapstiprina teleportācijas pieprasījumus. -autoTeleportEnabled=§6Tu tagad automātiski apstiprini teleportācijas pieprasījumus. +autoTeleportEnabled=§6Jūs tagad automātiski apstipriniet teleportācijas pieprasījumus. autoTeleportEnabledFor=§c{0}§6 tagad automātiski apstiprina teleportācijas pieprasījumus. backAfterDeath=§6Izmanto§c /back§6 komandu, lai atgriezties uz nāves vietu. -backCommandDescription=Teleportē jūs uz savu atrašanās vietu pirms tp/spawn/warp. +backCommandDescription=Teleportē jūs uz pēdējo atrašanās vietu pirms tp/spawn/warp. backCommandUsage=/<command> [player] backCommandUsage1=/<command> +backCommandUsage1Description=Teleportē jūs uz iepriekšējo atrašanās vietu backCommandUsage2=/<command> <player> +backCommandUsage2Description=Teleportē norādīto spēlētāju uz viņu pagājušo atrašanās vietu backOther=§6Atgriezās§c {0}§6 uz pagājušo atrašanās vietu. -backupCommandDescription=Izpilda dublējumu, ja tas ir konfigurēts. +backupCommandDescription=Izpilda rezerves kopiju, ja tā ir konfigurēta. backupCommandUsage=/<command> backupDisabled=§4Ārējais rezerves skripts nav konfigurēts. -backupFinished=§6Dublējums ir pabeigts. -backupStarted=§6Dublējums ir sācies. -backupInProgress=§6Pašlaik notiek ārējs rezerves skripts\! Spraudņa apturēšana ir atspējota līdz beigām. +backupFinished=§6Rezerves kopija ir pabeigta. +backupStarted=§6Rezerves kopēšana ir sākusies. +backupInProgress=§6Pašlaik ir progresā ārējais rezerves skripts\! Spraudņa apturēšana ir atspējota līdz process ir pabeigts. backUsageMsg=§6Atgriešanās iepriekšējā vietā. balance=§aBilance\:§c {0} -balanceCommandDescription=Norāda pašreizējo spēlētāja bilanci. +balanceCommandDescription=Parāda pašreizējo spēlētāja bilanci. balanceCommandUsage=/<command> [player] balanceCommandUsage1=/<command> +balanceCommandUsage1Description=Parāda jūsu pašreizējo bilanci balanceCommandUsage2=/<command> <player> +balanceCommandUsage2Description=Parāda norādīta spēlētāja bilanci balanceOther=§a{0} bilance§a\:§c {1} -balanceTop=§6Top bilances ({0}) +balanceTop=§6Bagātākie spēlētāji ({0}) balanceTopLine={0}, {1}, {2} -balancetopCommandDescription=Iegūst augšējās bilances vērtības. +balancetopCommandDescription=Parāda bagātākos spēlētājus. +balancetopCommandUsage=/<command> [page] +balancetopCommandUsage1=/<command> [page] +balancetopCommandUsage1Description=Parāda pirmo (vai norādīto) lapu bagātāko spēlētāju sarakstā banCommandDescription=Nobano spēlētāju. banCommandUsage=/<command> <player> [reason] banCommandUsage1=/<command> <player> [reason] -banExempt=§4Tu nevari izraidīt to spēlētāju. -banExemptOffline=§4Tu nevari izraidīt spēlētājus, kuri ir bezsaistē. -banFormat=§cTu esi izraidīts\:\n§r{0} -banIpJoin=Tava IP adrese ir izraidīta no šī servera. Iemesls\: {0} -banJoin=Tu esi izraidīts no šī servera. Iemesls\: {0} +banCommandUsage1Description=Nobano norādīto spēlētāju ar neobligātu iemesla norādīšanu +banExempt=§4Jūs nevarat nobanot to spēlētāju. +banExemptOffline=§4Jūs nevarat nobanot spēlētājus, kuri ir bezsaistē. +banFormat=§cJūs esat nobanots\:\n§r{0} +banIpJoin=Jūsu IP adrese ir nobanota no šī servera. Iemesls\: {0} +banJoin=Jūs esat nobanoti no šī servera. Iemesls\: {0} banipCommandDescription=Nobano IP adresi. +banipCommandUsage=/<command> <address> [reason] +banipCommandUsage1=/<command> <address> [reason] +banipCommandUsage1Description=Nobano norādīto IP adresi ar neobligātu iemesla norādīšanu bed=§ogulta§r -bedMissing=§4Tava gulta nav iestatīta vai ir pazudusi, vai ir bloķēta. +bedMissing=§4Jūsu gulta nav iestatīta vai ir pazudusi, vai ir bloķēta. bedNull=§mgulta§r -bedOffline=§4Nevar teleportēties pie bezsaistetes lietotāju gultas. -bedSet=§6Gultas atdzimšana iestatīta\! -beezookaCommandDescription=Met eksplodējošu biti savam pretiniekam. +bedOffline=§4Nevar teleportēties pie bezsaistē esošo spēlētāju gultas. +bedSet=§6Atdzimšana pie gultas iestatīta\! +beezookaCommandDescription=Metiet sprāgstošu biti uz jūsu pretinieku. beezookaCommandUsage=/<command> -bigTreeFailure=§4Lielā koka ģenerācija nav izdevusies. Mēģini vēlreiz uz zāles vai zemes. -bigTreeSuccess=§6Lielais koks izauga. -bigtreeCommandDescription=Spawno lielu koku tur, kur tu skaties. +bigTreeFailure=§4Lielā koka ģenerācija nav izdevusies. Mēģiniet vēlreiz uz zāles vai zemes. +bigTreeSuccess=§6Liels koks izveidots. +bigtreeCommandDescription=Izveidojiet lielu koku, kur skatāties. bigtreeCommandUsage=/<command> <tree|redwood|jungle|darkoak> bigtreeCommandUsage1=/<command> <tree|redwood|jungle|darkoak> +bigtreeCommandUsage1Description=Izveido lielu koku ar norādīto koka tipu blockList=§6EssentialsX pārraida sekojošās komandas citiem spraudņiem\: blockListEmpty=§6EssentialsX nepārraida nekādas komandas citiem spraudņiem. bookAuthorSet=§6Grāmatas autors iestatīts kā {0}. -bookCommandDescription=Atļauj atvērt un labot aizvērtas grāmatas. -bookCommandUsage=/<command> [titls|autors [name]] +bookCommandDescription=Atļauj atvērt un labot parakstītas grāmatas. +bookCommandUsage=/<command> [nosaukums|autors [name]] bookCommandUsage1=/<command> +bookCommandUsage1Description=Aizslēdz/Atslēdz grāmatu-ar-spalvu/parakstītu grāmatu +bookCommandUsage2=/<command> autors <author> +bookCommandUsage2Description=Nomaina parakstītas grāmatas autoru +bookCommandUsage3=/<command> nosaukums <title> +bookCommandUsage3Description=Nomaina parakstītas grāmatas nosaukumu bookLocked=§6Šī gramata tagad ir slēgta. bookTitleSet=§6Grāmatas nosaukums iestatīts kā {0}. -breakCommandDescription=Izjauc bloku uz kuru tu skaties. +breakCommandDescription=Salauž bloku, uz kuru jūs skataties. breakCommandUsage=/<command> broadcast=§6[§4Paziņojums§6]§a {0} -broadcastCommandDescription=Pārraida ziņojumu pa visu serveri. +broadcastCommandDescription=Paziņo ziņojumu visam serverim. broadcastCommandUsage=/<command> <msg> broadcastCommandUsage1=/<command> <message> -broadcastworldCommandDescription=Pārraida ziņu pasaulei. +broadcastCommandUsage1Description=Paziņo norādīto ziņojumu visam serverim +broadcastworldCommandDescription=Paziņo ziņojumu pasaulei. broadcastworldCommandUsage=/<command> <world> <msg> broadcastworldCommandUsage1=/<command> <world> <msg> -burnCommandDescription=Aizdedzini spēlētāju. +broadcastworldCommandUsage1Description=Paziņo norādīto ziņojumu norādītajai pasaulei +burnCommandDescription=Aizdedzina spēlētāju. burnCommandUsage=/<command> <player> <seconds> burnCommandUsage1=/<command> <player> <seconds> -burnMsg=§6Tu aizdedzināji§c {0} §6uz§c {1} sekundēm§6. +burnCommandUsage1Description=Aizdedzina norādīto spēlētāju uz norādīto sekunžu daudzumu +burnMsg=§6Jūs aizdedzinājāt§c {0} §6uz§c {1} sekundēm§6. cannotSellNamedItem=§6Jums nav atļauts pārdot nosauktas lietas. -cannotSellTheseNamedItems=§6Jums nav atļauts pārdot nosauktas lietas\: §4{0} -cannotStackMob=§4Tev nav tiesību kraut kaudzē vairākus mobus. -canTalkAgain=§6Tu atkal vari runāt. +cannotSellTheseNamedItems=§6Jums nav atļauts pārdot šīs nosauktās lietas\: §4{0} +cannotStackMob=§4Jums nav tiesību piesaukt vairākus mobus vienu uz otra. +canTalkAgain=§6Jūs atkal varat runāt. cantFindGeoIpDB=Nevar atrast GeoIP datubāzi\! -cantGamemode=§4Tev nav tiesību mainīt spēles režīmu uz {0} +cantGamemode=§4Jums nav tiesību mainīt spēles režīmu uz {0} cantReadGeoIpDB=Neizdevās nolasīt GeoIP datubāzi\! -cantSpawnItem=§4Tu nedrīksi radīt priekšmetus§c {0}§4. -cartographytableCommandDescription=Atver kartogrāfijas tabulu. +cantSpawnItem=§4Jums nav tiesību iegūt§c {0}§4. +cartographytableCommandDescription=Atver kartogrāfijas galdu. cartographytableCommandUsage=/<command> chatTypeLocal=[L] chatTypeSpy=[Spy] cleaned=Lietotāju faili ir notīrīti. cleaning=Tīra lietotāju failus. -clearInventoryConfirmToggleOff=§6Tev vairs netiks piedāvāts apstiprināt somas tīrīšanu. -clearInventoryConfirmToggleOn=§6Tagad tev tiks piedāvāts apstiprināt somas tīrīšanu. -clearinventoryCommandDescription=Notīriet visus krājumā esošos vienumus. +clearInventoryConfirmToggleOff=§6Jums vairs netiks piedāvāts apstiprināt inventāra tīrīšanu. +clearInventoryConfirmToggleOn=§6Jums tiks piedāvāts apstiprināt inventāra tīrīšanu. +clearinventoryCommandDescription=Izdzēš visus inventārā esošos priekšmetus. clearinventoryCommandUsage=/<command> [spēlētājs|*] [priekšmets[\:<data>]|*|**] [amount] clearinventoryCommandUsage1=/<command> +clearinventoryCommandUsage1Description=Izdzēš visus priekšmetus no jūsu inventāra clearinventoryCommandUsage2=/<command> <player> -clearinventoryconfirmtoggleCommandDescription=Pārslēdz, vai tiek piedāvāts apstiprināt krājumu notīrīšanu. +clearinventoryCommandUsage2Description=Izdzēš visus priekšmetus no norādītā spēlētāja inventāra +clearinventoryCommandUsage3=/<command> <player> <item> [amount] +clearinventoryCommandUsage3Description=Izdzēš visu (vai konkrētu daudzumu) norādīto priekšmetu no spēlētāja inventāra +clearinventoryconfirmtoggleCommandDescription=Pārslēdz, vai tiek piedāvāts apstiprināt inventāra tīrīšanu. clearinventoryconfirmtoggleCommandUsage=/<command> -commandCooldown=§cTu nevari rakstīt to komandu uz {0}. +commandArgumentOptional=§7 +commandArgumentRequired=§e +commandCooldown=§cJūs nevarat izmantot to komandu vēl {0}. commandDisabled=§cKomanda§6 {0}§c ir atspējota. -commandFailed=Komanda {0} neizdevās\: -commandHelpFailedForPlugin=Kļūda, saņemot palīdzību spraudnim\: {0} +commandFailed=Komanda {0} nav pareiza\: +commandHelpFailedForPlugin=Kļūda saņemot palīdzību spraudnim\: {0} +commandHelpLine1=§6Komandas palīdzība\: §f/{0} +commandHelpLine2=§6Apraksts\: §f{0} +commandHelpLine3=§6Lietojums(i); +commandHelpLine4=§6Alternatīva(s)\: §f{0} +commandHelpLineUsage={0} §6- {1} commandNotLoaded=§4Komanda {0} nav pareizi ielādēta. -compassBearing=§6Virziens\: {0} ({1} grādi). -compassCommandDescription=Apraksta jūsu pašreizējo stāju. +compassBearing=§6Azimuts\: {0} ({1} grādi). +compassCommandDescription=Apraksta jūsu pašreizējo atrašanās vietu. compassCommandUsage=/<command> -condenseCommandDescription=Kondensē priekšmetus kompaktākos blokos. +condenseCommandDescription=Saspiež priekšmetus kompaktos blokos. +condenseCommandUsage=/<command> [item] condenseCommandUsage1=/<command> +condenseCommandUsage1Description=Saspiež visus priekšmetus jūsu inventārī condenseCommandUsage2=/<command> <item> +condenseCommandUsage2Description=Saspiež norādīto priekšmetu jūsu inventārī configFileMoveError=Neizdevās pārvietot config.yml uz rezerves vietu. -configFileRenameError=Neizdevās pārdēvēt temp failu uz config.yml. -confirmClear=§7Lai §lAPSTIPRINĀT§7 somas tīrīšanu, lūdzu atkārtojiet komandu\: §6{0} +configFileRenameError=Neizdevās pārdēvēt pagaidu failu config.yml. +confirmClear=§7Lai §lAPSTIPRINĀT§7 inventāra tīrīšanu, lūdzu atkārtojiet komandu\: §6{0} confirmPayment=§7Lai §lAPSTIPRINĀT§7 maksājumu §6{0}§7, lūdzu atkārtojiet komandu\: §6{1} -connectedPlayers=§6Saistītie spēlētāji§r +connectedPlayers=§6Spēlētāji tiešsaistē§r connectionFailed=Neizdevās atvērt savienojumu. -cooldownWithMessage=§4Cooldown\: {0} +consoleName=Konsole +cooldownWithMessage=§4Pārlādējas\: {0} coordsKeyword={0}, {1}, {2} -couldNotFindTemplate=§4Neizdevās atrast veidni {0} -createdKit=§6Izveidoja komplektu §c{0} §6ar §c{1} §6ierakstiem un starpību §c{2} +couldNotFindTemplate=§4Neizdevās atrast šablonu {0} +createdKit=§6Izveidoja komplektu §c{0} §6ar §c{1} §6priekšmetiem un aizkavi §c{2} createkitCommandDescription=Izveidojiet komplektu spēlē\! createkitCommandUsage=/<command> <kitname> <delay> createkitCommandUsage1=/<command> <kitname> <delay> +createkitCommandUsage1Description=Izveido komplektu ar norādīto nosaukumu un aizkavi createKitFailed=§4Radās kļūda, veidojot komplektu {0}. createKitSeparator=§m----------------------- -createKitSuccess=§6Izveidoja komplektu\: §f{0}\n§6Starpība\: §f{1}\n§6Saite\: §f{2}\n§6Kopējiet saturu no iepriekš norādītās saites savā kits.yml. -creatingConfigFromTemplate=Veido konfigurāciju no veidnes\: {0} -creatingEmptyConfig=Veido tukšo konfigurāciju\: {0} +createKitSuccess=§6Izveidoja komplektu\: §f{0}\n§6Aizkave\: §f{1}\n§6Saite\: §f{2}\n§6Kopējiet saturu no iepriekš norādītās saites jūsu kits.yml. +createKitUnsupported=§4NBT priekšmetu serializācija ir iespējota, bet šis serveris neizmanto Paper 1.15.2+. Izmantojam standartu priekšmetu serializāciju. +creatingConfigFromTemplate=Veido konfigurāciju no šablona\: {0} +creatingEmptyConfig=Veido tukšu konfigurācijas failu\: {0} creative=radošais currency={0}{1} currentWorld=§6Pašreizējā pasaule\:§c {0} -customtextCommandDescription=Ļauj izveidot pielāgotas teksta komandas. -customtextCommandUsage=/<alias> - Definējiet bukkit.yml +customtextCommandDescription=Ļauj jums izveidot savas teksta komandas. +customtextCommandUsage=/<alias> - Definējiet iekš bukkit.yml day=diena days=dienas -defaultBanReason=Izraidīšanas Āmurs ir izteicis savu vārdu\! +defaultBanReason=Jums ir liegta pieeja šim serverim\! +deletedHomes=Visas mājas tika dzēstas. +deletedHomesWorld=Visas mājas {0} pasaulē tika dzēstas. deleteFileError=Neizdevās izdzēst failu\: {0} -deleteHome=§6Maja§c {0} §6tika noņemta. -deleteJail=§6Cietums§c {0} §6tika noņemta. -deleteKit=§6Komplekts§c {0} §6tika noņemts. -deleteWarp=§6Warps§c {0} §6tika noņemts. -delhomeCommandDescription=Noņem mājas punktu. +deleteHome=§6Māja§c {0} §6ir noņemta. +deleteJail=§6Cietums§c {0} §6ir noņemts. +deleteKit=§6Komplekts§c {0} §6ir noņemts. +deleteWarp=§6Teleportācijas punkts§c {0} §6ir noņemts. +deletingHomes=Dzēš visas mājas... +deletingHomesWorld=Dzēš visas mājas pēc {0}... +delhomeCommandDescription=Noņem māju. delhomeCommandUsage=/<command> [spēlētājs\:]<name> +delhomeCommandUsage1=/<command> <name> +delhomeCommandUsage1Description=Izdzēš māju ar norādīto nosaukumu +delhomeCommandUsage2=/<command> <player>\:<name> +delhomeCommandUsage2Description=Izdzēš spēlētāja māju ar norādīto nosaukumu deljailCommandDescription=Noņem cietumu. deljailCommandUsage=/<command> <jailname> deljailCommandUsage1=/<command> <jailname> +deljailCommandUsage1Description=Izdzēš cietumu ar norādīto nosaukumu delkitCommandDescription=Izdzēš norādīto komplektu. delkitCommandUsage=/<command> <kit> delkitCommandUsage1=/<command> <kit> -delwarpCommandDescription=Izdzēš norādīto lokāciju. +delkitCommandUsage1Description=Izdzēš komplektu ar norādīto nosaukumu +delwarpCommandDescription=Izdzēš norādīto teleportācijas punktu. delwarpCommandUsage=/<command> <warp> delwarpCommandUsage1=/<command> <warp> -deniedAccessCommand=§c{0} §4tika liegta pieeja komandai. -denyBookEdit=§4Tu nevari atbloķēt šo grāmatu. -denyChangeAuthor=§4Tu nevari mainīt šīs grāmatas autoru. -denyChangeTitle=§4Tu nevari mainīt šīs grāmatas nosaukumu. -depth=§6Tu atrodies jūras līmenī. -depthAboveSea=§6Tu esi§c {0} §6bloku(s) virs jūras līmeņa. -depthBelowSea=§6Tu esi§c {0} §6bloku(s) zem jūras līmeņa. +delwarpCommandUsage1Description=Izdzēš teleportācijas punktu ar norādīto nosaukumu +deniedAccessCommand=§c{0} §4ir liegta pieeja komandai. +denyBookEdit=§4Jūs nevarat pārrakstīt šo grāmatu. +denyChangeAuthor=§4Jūs nevarat mainīt šīs grāmatas autoru. +denyChangeTitle=§4Jūs nevarat mainīt šīs grāmatas nosaukumu. +depth=§6Jūs atrodaties jūras līmenī. +depthAboveSea=§6Jūs esat§c {0} §6bloku(s) virs jūras līmeņa. +depthBelowSea=§6Jūs esat§c {0} §6bloku(s) zem jūras līmeņa. depthCommandDescription=Norāda pašreizējo dziļumu attiecībā pret jūras līmeni. depthCommandUsage=/depth destinationNotSet=Galamērķis nav noteikts\! @@ -266,6 +317,7 @@ getposCommandUsage=/<command> [player] getposCommandUsage1=/<command> [player] giveCommandDescription=Iedod spēlētājam priekšmetu. giveCommandUsage=/<command> <player> <item|numeric> [daudzums [itemmeta...]] +giveCommandUsage1=/<command> <player> <item> [amount] geoipCantFind=§6Spēlētājs §c{0} §6nāk no §anezināmas valsts§6. geoIpErrorOnJoin=Nevar ielādēt GeoIP datus priekš {0}. Lūdzu, pārliecinieties, vai jūsu licences atslēga un konfigurācija ir pareiza. geoIpLicenseMissing=Licences atslēga nav atrasta\! lūdzu apmeklējiet https\://essentialsx.net/geoip priekš pirmās uzstādīšanas instrukcijām. @@ -317,6 +369,8 @@ holdPotion=§4Tev ir jātur dziru, lai pielietot efektus uz to. holeInFloor=§4Caurums zemē\! homeCommandDescription=Teleportējieties uz savām mājām. homeCommandUsage=/<command> [player\:][name] +homeCommandUsage1=/<command> <name> +homeCommandUsage2=/<command> <player>\:<name> homes=§6Mājas\:§r {0} homeConfirmation=§6YJums jau ir māja ar nosaukumu §c{0}§6\!\nLai pārrakstītu esošo māju, vēlreiz ierakstiet komandu. homeSet=§6Māja iestatīta uz pašreizējo atrašanās vietu. @@ -383,6 +437,7 @@ itemnameClear=§6Tu notīriji šī priekšmeta nosaukumu. itemnameCommandDescription=Nosauc priekšmetu. itemnameCommandUsage=/<command> [name] itemnameCommandUsage1=/<command> +itemnameCommandUsage2=/<command> <name> itemnameInvalidItem=§cTev ir jātur priekšmets, lai nomainīt tā nosaukumu. itemnameSuccess=§6Tu nomainīji priekšmeta nosaukumu uz "§c{0}§6". itemNotEnough1=§4Tev nav pietiekami daudz priekšmeta, lai to pārdod. @@ -468,7 +523,6 @@ loomCommandUsage=/<command> mailClear=§6Lai attīrīt savu pastu, raksti§c /mail clear§6. mailCleared=§6Pasts attīrīts\! mailCommandDescription=Pārvalda starpspēlētāju un servera iekšējo pastu. -mailCommandUsage=/<command> [read|clear|send [to] [message]|sendall [message]] mailDelay=Pārāk daudz vēstuļu ir nosūtītas pēdējā minūtē. Maksimum\: {0} mailFormat=§6[§r{0}§6] §r{1} mailMessage={0} @@ -766,6 +820,8 @@ setBalOthers=§aTu iestatīji {0}§a''a bilanci uz {1}. setSpawner=§6Nomainīja radītāja tipu uz§c {0}§6. sethomeCommandDescription=Iestatiet savu māju pašreizējā atrašanās vietā. sethomeCommandUsage=/<command> [player\:][name] +sethomeCommandUsage1=/<command> <name> +sethomeCommandUsage2=/<command> <player>\:<name> setjailCommandDescription=Izveido cietumu, kurā norādījāt nosaukumu [jailname]. setjailCommandUsage=/<command> <jailname> setjailCommandUsage1=/<command> <jailname> @@ -1012,6 +1068,7 @@ voiceSilencedReasonTime=§6Tava balss tika apklusināta par{0}\! Iemesls\: §c{1 walking=staigā warpCommandDescription=Uzskaitiet visus warpus vai izmantojiet warpu, lai nokļūtu uz norādīto vietu. warpCommandUsage=/<command> <pagenumber|warp> [player] +warpCommandUsage1=/<command> [page] warpDeleteError=§4Problēma, dzēšot warp failu. warpinfoCommandUsage=/<command> <warp> warpinfoCommandUsage1=/<command> <warp> diff --git a/Essentials/src/main/resources/messages_nl.properties b/Essentials/src/main/resources/messages_nl.properties index 7da3a472b5c..4a9079c0d0d 100644 --- a/Essentials/src/main/resources/messages_nl.properties +++ b/Essentials/src/main/resources/messages_nl.properties @@ -9,6 +9,9 @@ adventure=avontuur afkCommandDescription=Markeert je als weg-van-toetsenbord. afkCommandUsage=/<command> [speler/bericht...] afkCommandUsage1=/<command> [bericht] +afkCommandUsage1Description=Schakel je afk status met een andere reden +afkCommandUsage2=/<command> <player> [message] +afkCommandUsage2Description=Schakel de afk status van een specifieke speler met een andere reden alertBroke=gebroken\: alertFormat=§3[{0}] §f {1} §6 {2} bij\: {3} alertPlaced=geplaatst\: @@ -33,7 +36,9 @@ backAfterDeath=§6Gebruik de§c /back§6 opdracht om terug te keren naar je ster backCommandDescription=Teleporteert je naar je locatie voordat je tp/spawn/warp hebt gedaan. backCommandUsage=/<command> [speler] backCommandUsage1=/<command> +backCommandUsage1Description=Teleporteerd jou naar je hoofd locatie backCommandUsage2=/<command> <player> +backCommandUsage2Description=Teleporteerd de specifieke speler naar zijn hoofd locatie backOther=§6Teruggegaan§c {0}§6 naar vorige locatie. backupCommandDescription=Voert de backup uit als deze is geconfigureerd. backupCommandUsage=/<command> @@ -46,20 +51,29 @@ balance=§7Saldo\: {0} balanceCommandDescription=Laat het huidige saldo van een speler zien. balanceCommandUsage=/<command> [speler] balanceCommandUsage1=/<command> +balanceCommandUsage1Description=Toont je huidige saldo balanceCommandUsage2=/<command> <player> +balanceCommandUsage2Description=Toont het saldo van een specifieke speler balanceOther=§aSaldo van {0}§a\:§c {1} balanceTop=§7 Top saldo ({0}) balanceTopLine={0}. {1}, {2} balancetopCommandDescription=Haalt de beste saldowaarden op. +balancetopCommandUsage=/<commando> [pagina] +balancetopCommandUsage1=/<commando> [pagina] +balancetopCommandUsage1Description=De eerste (of gespecificeerde) pagina van de waarden van de bovenste balans banCommandDescription=Verbant een speler. banCommandUsage=/<command> <speler> [reden] banCommandUsage1=/<command> <speler> [reden] +banCommandUsage1Description=Verban de speler met een optionele reden banExempt=§7Je kunt deze speler niet verbannen. banExemptOffline=§4Je kunt geen spelers verbannen die offline zijn. banFormat=Verbannen\: {0} banIpJoin=Jouw IP adress is verbannen van deze server, met als reden\: {0} banJoin=Je bent van de server verbannen, met als reden\: {0} banipCommandDescription=Verbant een IP-adres. +banipCommandUsage=<commando> <address> [reden] +banipCommandUsage1=<commando> <address> [reden] +banipCommandUsage1Description=Bant het opgegeven IP-adres met een optionele reden bed=§obed§r bedMissing=§4Uw bed is niet ingesteld, ontbreekt of is geblokkeerd. bedNull=§mbed§r @@ -72,12 +86,14 @@ bigTreeSuccess=§7Grote boom gemaakt. bigtreeCommandDescription=Creëer een grote boom waar je kijkt. bigtreeCommandUsage=/<command> <tree|redwood|jungle|darkoak> bigtreeCommandUsage1=/<command> <tree|redwood|jungle|darkoak> +bigtreeCommandUsage1Description=Plaatst een grote boom van het opgegeven type blockList=§6EssentialsX heeft de volgende opdrachten doorgegeven naar andere plugins\: blockListEmpty=§6EssentialsX geeft geen opdrachten door naar andere plugins. bookAuthorSet=§6Auteur van het boek is veranderd naar\: {0} bookCommandDescription=Staat heropenen en bewerken van gesloten boeken toe. bookCommandUsage=/<command> [titel|auteur [naam]] bookCommandUsage1=/<command> +bookCommandUsage1Description=Vergrendelt/Ontgrendelt een boek en veer/getekend boek bookLocked=§cDit boek is nu vergrendeld. bookTitleSet=§6Titel van het boek is veranderd naar\: {0} breakCommandDescription=Breekt het blok waar je naar kijkt. @@ -379,6 +395,7 @@ itemId=§6ID\:§c {0} itemloreClear=§6Je hebt het verhaal van dit item gewist. itemloreCommandDescription=Bewerk het verhaal van een item. itemloreCommandUsage=/<command> <add/set/clear> [text|line] [tekst] +itemloreCommandUsage3=/<command> clear itemloreInvalidItem=§4Je moet een item vast hebben om het verhaal te veranderen. itemloreNoLine=§4Je vastgehouden voorwerp heeft geen verhaal op regel{0}§4. itemloreNoLore=§4Je vastgehouden voorwerp heeft geen verhaal. @@ -481,8 +498,6 @@ loomCommandUsage=/<command> mailClear=§6Om je mail te markeren als gelezen, typ§c /mail clear§6.\n mailCleared=§6Mails verwijderd\! mailCommandDescription=Beheert interplayer, intra-server mail. -mailCommandUsage=/<command> [read|clear|send [speler] [bericht]|sendall [bericht]] -mailCommandUsage2=/<command> clear mailDelay=Er zijn teveel mails verzonden in een minuut. Het maximale aantal mails\: {0} mailFormat=§6[§r{0}§6] §r{1} mailMessage={0} @@ -933,13 +948,17 @@ tpaCommandUsage1=/<command> <player> tpaallCommandDescription=Verzoekt alle online spelers om naar jou te teleporteren. tpaallCommandUsage=/<command> <player> tpaallCommandUsage1=/<command> <player> +tpaallCommandUsage1Description=Verzoeken aan alle spelers om naar je te teleporteren tpacancelCommandDescription=Annuleer alle openstaande teleportatieverzoeken. Geef [speler] op om verzoeken bij diegene te annuleren. tpacancelCommandUsage=/<command> [speler] tpacancelCommandUsage1=/<command> +tpacancelCommandUsage1Description=Annuleert al je openstaande teleport verzoeken tpacancelCommandUsage2=/<command> <player> +tpacancelCommandUsage2Description=Annuleert al je openstaande teleport verzoek met de opgegeven speler tpacceptCommandDescription=Accepteert een teleportatieverzoek. tpacceptCommandUsage=/<command> [anderespeler] tpacceptCommandUsage1=/<command> +tpacceptCommandUsage1Description=Accepteert een inkomende teleport aanvraag tpahereCommandDescription=Verzoek dat de opgegeven speler naar je teleporteert. tpahereCommandUsage=/<command> <player> tpahereCommandUsage1=/<command> <player> @@ -1057,6 +1076,7 @@ voiceSilencedReasonTime=§6Je bent het zwijgen opgelegd voor {0}\! §6Reden\: § walking=Lopende warpCommandDescription=Toon alle warps of warp naar de opgegeven locatie. warpCommandUsage=/<command> <regelnummer|warp> [speler] +warpCommandUsage1=/<commando> [pagina] warpDeleteError=Fout bij het verwijderen van het warp bestand. warpInfo=§6Informatie over warp§c {0}§7\: warpinfoCommandDescription=Vindt locatieinformatie voor een specifieke warp. diff --git a/Essentials/src/main/resources/messages_no.properties b/Essentials/src/main/resources/messages_no.properties index 9f070a4466f..7bd8fa9f140 100644 --- a/Essentials/src/main/resources/messages_no.properties +++ b/Essentials/src/main/resources/messages_no.properties @@ -11,6 +11,7 @@ afkCommandUsage=/<command> [spiller/melding...] afkCommandUsage1=/<command> [melding] afkCommandUsage1Description=Endrer afk-statusen din med en valgfri årsak afkCommandUsage2=/<command> <player> [message] +afkCommandUsage2Description=Veksler imellom afk-statusen til den angitte spilleren med valgfri grunn alertBroke=ødelagt\: alertFormat=§3[{0}] §r {1} §6 {2} på\: {3} alertPlaced=plassert\: @@ -158,7 +159,9 @@ compassCommandDescription=Beskriver din gjeldende retningssans. compassCommandUsage=/<command> condenseCommandDescription=Kondenserer gjenstander til mer kompakte blokker. condenseCommandUsage1=/<command> +condenseCommandUsage1Description=Kondenserer alle gjenstander i inventaret ditt condenseCommandUsage2=/<command> <gjenstand> +condenseCommandUsage2Description=Kondenserer det angitte elementet i inventaret ditt configFileMoveError=Kunne ikke flytte config.yml til sikkerhetskopiplassering. configFileRenameError=Kunne ikke endre navnet på midlertidig fil config.yml. confirmClear=§7For å §lBEKREFTE§7 at inventaret tømmes, vennligst gjenta kommandoen\: §6{0} @@ -173,6 +176,7 @@ createdKit=§6Opprettet sett §c{0} §6med §c{1} §6oppføringer og forsinkelse createkitCommandDescription=Opprett et sett i spillet\! createkitCommandUsage=/<command> <settnavn> <forsinkelse> createkitCommandUsage1=/<command> <settnavn> <forsinkelse> +createkitCommandUsage1Description=Oppretter et sett med det angitte navnet og forsinkelsen createKitFailed=§4Feil oppstod under opprettelse av sett {0}. createKitSeparator=§m----------------------- createKitSuccess=§6Opprettet Sett\: §f{0}\n§6Forsinkelse\: §f{1}\n§6Kobling\: §f{2}\n§6Kopier innholdet i koblingen over til din kits.yml. @@ -186,22 +190,33 @@ customtextCommandUsage=/<alias> - Definer i bukkit.yml day=dag days=dager defaultBanReason=Utestengelsens Hammer har talt\! +deletedHomes=Alle hjem slettet. +deletedHomesWorld=Alle hjem i {0} slettet. deleteFileError=Kunne ikke slette fil\: {0} deleteHome=§6Hjem§c {0} §6har blitt fjernet. deleteJail=§6Fengsel§c {0} §6har blitt fjernet. deleteKit=§6Sett§c {0} §6har blitt fjernet. deleteWarp=§6Warp§c {0} §6har blitt fjernet. +deletingHomes=Sletter alle hjem... +deletingHomesWorld=Sletter alle hjem i {0}... delhomeCommandDescription=Fjerner et hjem. delhomeCommandUsage=/<command> [spiller\:]<navn> +delhomeCommandUsage1=/<kommando><navn> +delhomeCommandUsage1Description=Sletter hjemmet ditt med det angitte navnet +delhomeCommandUsage2=/<kommando><spiller>\:<navn> +delhomeCommandUsage2Description=Sletter den angitte spillerens hjem med det angitte navnet deljailCommandDescription=Fjerner et fengsel. deljailCommandUsage=/<command> <fengselsnavn> deljailCommandUsage1=/<command> <fengselsnavn> +deljailCommandUsage1Description=Sletter fengselet med det angitte navnet delkitCommandDescription=Sletter det spesifiserte settet. delkitCommandUsage=/<command> <sett> delkitCommandUsage1=/<command> <sett> +delkitCommandUsage1Description=Sletter settet med det angitte navnet delwarpCommandDescription=Sletter den spesifiserte warpen. delwarpCommandUsage=/<command> <warp> delwarpCommandUsage1=/<command> <warp> +delwarpCommandUsage1Description=Sletter warp med det angitte navnet deniedAccessCommand=§c{0} §4ble nektet tilgang til kommando. denyBookEdit=§4Du kan ikke låse opp denne boken. denyChangeAuthor=§4Du kan ikke endre forfatteren av denne boken. @@ -215,6 +230,28 @@ destinationNotSet=Destinasjon ikke satt\! disabled=deaktivert disabledToSpawnMob=§4Fremkalling av denne skapningen er deaktivert i konfigurasjonsfilen. disableUnlimited=§6Deaktiverte ubegrenset plassering av§c {0} §6for§c {1}§6. +discordCommandExecuteDescription=Utfører en konsollkommando på Minecraft-serveren. +discordCommandExecuteArgumentCommand=Kommandoen som skal utføres +discordCommandExecuteReply=Utfører kommando\: "/{0}" +discordCommandListDescription=Får en liste over påloggede spillere. +discordCommandListArgumentGroup=En bestemt gruppe å begrense søket etter +discordCommandMessageDescription=Send melding til en spiller på serveren. +discordCommandMessageArgumentUsername=Spilleren du vil sende meldingen til +discordCommandMessageArgumentMessage=Meldingen som skal sendes til spilleren +discordErrorCommand=Du la feil bot til serveren din. Følg opplæringen i konfigurasjonen og legg til boten din ved hjelp av https\://essentialsx.net/discord.html\! +discordErrorCommandDisabled=Denne kommandoen er skrudd av\! +discordErrorLogin=Det oppstod en feil under påloggingen til Discord, som forårsaket at programtillegget har deaktivert seg selv\: {0} +discordErrorLoggerInvalidChannel=Loggingen av Discord-konsollen er deaktivert på grunn av en ugyldig kanaldefinisjon. +discordErrorLoggerNoPerms=Diskordkonsollloggeren er deaktivert på grunn av utilstrekkelige tillatelser\! Sørg for at boten din har "Manage Webhooks" -tillatelser på serveren. Etter å ha fikset det, kjør "/ess reload". +discordErrorNoGuild=Ugyldig eller manglende server -ID\! Følg opplæringen i konfigurasjonen for å sette opp pluginen. +discordErrorNoGuildSize=Ugyldig eller manglende server -Id\! Følg opplæringen i konfigurasjonen for å sette opp pluginen. +discordErrorNoPerms=Boten din kan ikke se eller snakke i noen kanal\! Sørg for at boten din har lese- og skrivetillatelser i alle kanaler du ønsker å bruke. +discordErrorNoToken=Ingen token gitt\! Følg opplæringen i konfigurasjonen for å sette opp pluginen. +discordErrorWebhook=En feil oppstod under sending av meldinger til konsollen din\! Dette var sannsynligvis forårsaket ved et uhell ved sletting av konsollens webhook. Dette kan vanligvis fikses ved å sikre at boten din har tillatelsen "Administrer Webhooks" og kjøre "/ess reload". +discordLoggingIn=Prøver å logge inn på Discord... +discordLoggingInDone=Logget på som {0} +discordNoSendPermission=Kan ikke sende melding i kanal\: \#{0} Sørg for at boten har tillatelsen "Send meldinger" i den kanalen\! +discordReloadInvalid=Prøvde å laste inn EssentialsX Discord -konfigurasjonen på nytt mens pluginen er i ugyldig tilstand\! Hvis du har endret konfigurasjonen, starter du serveren på nytt. disposal=Deponering disposalCommandDescription=Åpner en bærbar søppelbøtte. disposalCommandUsage=/<command> @@ -226,10 +263,19 @@ durability=§6Dette verktøyet har §c{0}§6 bruk igjen. east=Ø ecoCommandDescription=Administrerer serverøkonomien. ecoCommandUsage=/<command> <give|take|set|reset> <spiller> <beløp> +ecoCommandUsage1=/<command> gi <player> <sum> +ecoCommandUsage1Description=Gir den valgte spilleren det valgte beløpet +ecoCommandUsage2=/<command> ta <player> <amount> +ecoCommandUsage2Description=Tar det angitte beløpet fra den angitte spilleren +ecoCommandUsage3=/<command> sett inn <player> <amount> +ecoCommandUsage3Description=Angir den angitte spillers saldo til det angitte beløpet +ecoCommandUsage4=/<command> reset <player> <amount> +ecoCommandUsage4Description=Tilbakestiller den angitte spillers balanse til serverens startbalanse editBookContents=§eDu kan nå redigere innholdet i denne boken. enabled=aktivert enchantCommandDescription=Fortryller gjenstanden brukeren holder. enchantCommandUsage=/<command> <fortryllelsesnavn> [nivå] +enchantCommandUsage1Description=Fortryller den holdt gjenstanden med fortryllelsen din til et valgfritt nivå enableUnlimited=§6Gir ubegrenset mengde av§c {0} §6til §c{1}§6. enchantmentApplied=§6Fortryllelsen§c {0} §6har blitt påført tingen du har i hånden. enchantmentNotFound=§4Fortryllelse ikke funnet\! @@ -239,21 +285,34 @@ enchantments=§6Fortryllelser\:§r {0} enderchestCommandDescription=Lar deg se inni en enderkiste. enderchestCommandUsage=/<command> [spiller] enderchestCommandUsage1=/<command> +enderchestCommandUsage1Description=Åpner Enderchesten din enderchestCommandUsage2=/<command> <spiller> +enderchestCommandUsage2Description=Åpner ender kisten til den valgte spilleren errorCallingCommand=Feil ved kalling av kommandoen /{0} errorWithMessage=§cFeil\:§4 {0} essentialsCommandDescription=Laster inn essentials på nytt. essentialsCommandUsage=/<command> +essentialsCommandUsage1Description=Laster inn Essentials'' konfigurasjon på nytt +essentialsCommandUsage2Description=Gir informasjon om Essentials versjonen +essentialsCommandUsage3Description=Gir informasjon om hvilke kommandoer Essentials blir videresendt +essentialsCommandUsage5Description=Nullstiller gitt spillers brukerdata +essentialsCommandUsage6Description=Rydder opp gamle brukerdata +essentialsCommandUsage7Description=Administrerer brukeres hjem essentialsHelp1=Filen er ødelagt og Essentials kan ikke åpne den. Essentials er nå deaktivert. Hvis du ikke kan fikse filen selv, kan du gå til http\://tiny.cc/EssentialsChat essentialsHelp2=Filen er ødelagt og Essentials kan ikke åpne den. Essentials er nå deaktivert. Hvis du ikke kan fikse filen selv, kan du enten skrive /essentialshelp i spillet eller gå til http\://tiny.cc/EssentialsChat essentialsReload=§6Essentials lastet§c {0}§6 inn på ny. exp=§c{0} §6har§c {1} §6exp (level§c {2}§6) og trenger§c {3} §6mer exp for neste nivå. expCommandDescription=Gi, sett, tilbakestill, eller se på en spillers ferdighetspoeng. expCommandUsage=/<command> [reset|show|set|give] [spillernavn [mengde]] +expCommandUsage1=/<command> gi <player> <sum> +expCommandUsage2Description=Setter målspillerens xp det angitte beløpet +expCommandUsage4Description=Viser hvor mye xp spilleren har +expCommandUsage5Description=Nullstiller spillerens xp til 0 expSet=§c{0} §6har nå§c {1} §6exp. extCommandDescription=Slokk spillere. extCommandUsage=/<command> [spiller] extCommandUsage1=/<command> [spiller] +extCommandUsage1Description=Slukk deg selv eller en annen spiller hvis angitt extinguish=§6Du slukket deg selv. extinguishOthers=§6Du slukket {0}§6. failedToCloseConfig=Kunne ikke lukke konfigurasjonen {0}. @@ -264,19 +323,29 @@ feed=§6Appetitten din ble mettet. feedCommandDescription=Tilfredsstille sulten. feedCommandUsage=/<command> [spiller] feedCommandUsage1=/<command> [spiller] +feedCommandUsage1Description=Gjenoppliver deg eller en annen spiller feedOther=§6Du mettet appetitten til §c{0}§6. fileRenameError=Kunne ikke gi nytt navn til filen {0}\! fireballCommandDescription=Kast en ildkule eller andre assorterte prosjektiler. fireballCommandUsage=/<command> [fireball|small|large|arrow|skull|egg|snowball|expbottle|dragon|splashpotion|lingeringpotion|trident] [hastighet] fireballCommandUsage1=/<command> +fireballCommandUsage1Description=Kaster en vanlig ildkule fra din posisjon +fireballCommandUsage2Description=Kaster det angitte prosjektil fra din plassering, med en valgfri hastighet fireworkColor=§4Ugyldige fyrverkeri-parametere satt inn, du må angi en farge først. fireworkCommandDescription=Lar deg endre en bunke med fyrverkeri. fireworkCommandUsage=/<command> <<meta param>|power [beløp]|clear|fire [beløp]> +fireworkCommandUsage1Description=Fjerner alle effekter fra ditt holdte fyrverkeri +fireworkCommandUsage2Description=Setter kraften av det nedholdte fyrverkeriet +fireworkCommandUsage3Description=Går enten ett, eller hvor mye som er angitt, kopier av det holdte fyrverkeri +fireworkCommandUsage4Description=Legger til den gitte effekten i det innebygde fyrverkeriet fireworkEffectsCleared=§6Fjernet alle effekter fra stacken du holder. fireworkSyntax=§6Fyrverkeri-parametere\:§c farge\:<color> [falming\:<color>] [form\:<shape>] [effekt\:<effect>]\n§6For å bruke flere farger/effekter, skiller du verdiene med komma\: §cred,blue,pink\n§6Former\:§c star, ball, large, creeper, burst §6Effekter\:§c trail, twinkle. +fixedHomes=Alle hjem slettet. +fixingHomes=Sletter alle hjem... flyCommandDescription=Ta av, og svev\! flyCommandUsage=/<command> [spiller] [on|off] flyCommandUsage1=/<command> [spiller] +flyCommandUsage1Description=Veksler fly for deg selv eller en annen spiller hvis angitt flying=flyr flyMode=§6Satt flymodus§c {0} §6for {1}§6. foreverAlone=§4Du har ingen som du kan svare på. @@ -288,6 +357,7 @@ gameModeInvalid=§4Du må spesifisere en gyldig spiller/modus. gamemodeCommandDescription=Endre spillmodus. gamemodeCommandUsage=/<command> <survival|creative|adventure|spectator> [spiller] gamemodeCommandUsage1=/<command> <survival|creative|adventure|spectator> [spiller] +gamemodeCommandUsage1Description=Setter spillmodusen til enten deg eller en annen spiller hvis spesifisert gcCommandDescription=Rapporterer minne, oppetid og tick-info. gcCommandUsage=/<command> gcfree=§6Ledig minne\:§c {0} MB. @@ -298,9 +368,12 @@ geoipJoinFormat=§6Spiller §c{0} §6kommer fra §c{1}§6. getposCommandDescription=Hent dine gjeldende koordinater eller en spillers. getposCommandUsage=/<command> [spiller] getposCommandUsage1=/<command> [spiller] +getposCommandUsage1Description=Henter koordinatene til enten deg eller en annen spiller hvis angitt giveCommandDescription=Gi en spiller en gjenstand. giveCommandUsage=/<command> <spiller> <gjenstand|numerisk> [antall [gjenstandsmeta...]] giveCommandUsage1=/<command> <player> <item> [amount] +giveCommandUsage1Description=Gir målspilleren 64 (eller den angitte mengden) av det angitte elementet +giveCommandUsage2Description=Gir målspilleren det angitte beløpet for det angitte elementet med de gitte metadataene geoipCantFind=§6Spiller §c{0} §6kommer fra §aet ukjent land§6. geoIpErrorOnJoin=Kan ikke hente GeoIP-data for {0}. Kontroller at lisensnøkkelen din og konfigurasjonen er korrekt. geoIpLicenseMissing=Ingen lisensnøkkel funnet\! Besøk https\://essentialsx.net/geoip for førstegangs oppsettinstruksjoner. @@ -310,6 +383,7 @@ givenSkull=§6Du har fått hodeskallen til §c{0}§6. godCommandDescription=Aktiverer dine gudsfryktige krefter. godCommandUsage=/<command> [spiller] [on|off] godCommandUsage1=/<command> [spiller] +godCommandUsage1Description=Aktiverer gud for deg eller en annen spiller hvis spesifisert giveSpawn=§6Gir§c {0} §6av§c {1} §6til§c {2}§6. giveSpawnFailure=§4Ikke nok plass, §c{0} {1} §4ble tapt. godDisabledFor=§cdeaktivert§6 for§c {0} @@ -323,6 +397,7 @@ hatArmor=§4Du kan ikke bruke denne gjenstanden som en hatt\! hatCommandDescription=Skaff deg noen kule nye hodeplagg. hatCommandUsage=/<command> [remove] hatCommandUsage1=/<command> +hatCommandUsage2Description=Fjerner din nåværende hatt hatCurse=§4Du kan ikke fjerne en hatt med bindelsesforbannelse\! hatEmpty=§4Du har ikke på deg noen hatt. hatFail=§4Du må ha noe å ta på deg i hånden din. @@ -333,6 +408,7 @@ heal=§6Du har blitt helbredet. healCommandDescription=Helbreder deg eller den angitte spilleren. healCommandUsage=/<command> [spiller] healCommandUsage1=/<command> [spiller] +healCommandUsage1Description=Gjenoppliver deg eller en annen spiller healDead=§4Du kan ikke helbrede noen som er død\! healOther=§6Helbredet§c {0}§6. helpCommandDescription=Viser en liste over tilgjengelige kommandoer. @@ -346,23 +422,33 @@ helpPlugin=§4{0}§r\: Plugin-hjelp\: /help {1} helpopCommandDescription=Send melding til påloggede administratorer. helpopCommandUsage=/<command> <melding> helpopCommandUsage1=/<command> <melding> +helpopCommandUsage1Description=Sender den oppgitte meldingen til alle online administratorer holdBook=§4Du holder ikke en skrivbar bok. holdFirework=§4Du må holde et fyrverkeri for å legge til effekter. holdPotion=§4Du må å holde en eliksir for å legge til effekter på den. holeInFloor=§4Hull i gulvet\! homeCommandDescription=Teleporter til hjemmet ditt. homeCommandUsage=/<command> [spiller\:][navn] +homeCommandUsage1=/<kommando><navn> +homeCommandUsage1Description=Sletter hjemmet ditt med det angitte navnet +homeCommandUsage2=/<kommando><spiller>\:<navn> +homeCommandUsage2Description=Sletter den angitte spillerens hjem med det angitte navnet homes=§6Hjem\:§r {0} homeConfirmation=§6Du har allerede et hjem som heter §c{0}§6\!\nFor å overskrive det eksisterende hjemmet ditt, skriv inn kommandoen igjen. homeSet=§6Hjem satt til nåværende posisjon. hour=time hours=timer +ice=§8(§eSurvival§8) §7Du føler deg mye kaldere... iceCommandUsage=/<command> [spiller] iceCommandUsage1=/<command> +iceCommandUsage1Description=Kjøler ned deg selv iceCommandUsage2=/<command> <spiller> +iceCommandUsage2Description=Kjøler ned den gitte spilleren +iceCommandUsage3Description=Kjøler ned alle påloggede spillere ignoreCommandDescription=Ignorer eller slutt å ignorere andre spillere. ignoreCommandUsage=/<command> <spiller> ignoreCommandUsage1=/<command> <spiller> +ignoreCommandUsage1Description=Ignorer eller slutt å ignorere andre spillere ignoredList=§6Ignorerte\:§r {0} ignoreExempt=§4Du kan ikke ignorere den spilleren. ignorePlayer=§6Du ignorerer spiller§c {0} §6fra nå av. @@ -397,16 +483,22 @@ inventoryClearingStack=§6Fjernet§c {0} §6av§c {1} §6fra§c {2}§6. invseeCommandDescription=Se inventaret til andre spillere. invseeCommandUsage=/<command> <spiller> invseeCommandUsage1=/<command> <spiller> +invseeCommandUsage1Description=Åpner inventaret til den gitte spilleren is=er isIpBanned=§6IP §c{0} §6er utestengt. internalError=§cEn intern feil oppstod under et forsøk på å utføre denne kommandoen. itemCannotBeSold=§4Denne tingen kan ikke selges til serveren. itemCommandDescription=Fremkall en gjenstand. itemCommandUsage=/<command> <gjenstand|numerisk> [antall [gjenstandsmeta...]] +itemCommandUsage1Description=Gir deg en full bunke (eller det angitte beløpet) av det angitte elementet +itemCommandUsage2Description=Gir deg det angitte antallet av det angitte elementet med de gitte metadata itemId=§6ID\:§c {0} itemloreClear=§6Du har fjernet beskrivelsen til denne gjenstanden. itemloreCommandDescription=Rediger beskrivelsen til en gjenstand. itemloreCommandUsage=/<command> <add/set/clear> [tekst/linje] [tekst] +itemloreCommandUsage1Description=Legger til den oppgitte teksten på slutten av holdt elementet +itemloreCommandUsage2Description=Setter den angitte linjen til den angitte teksten for elementet som ble holdt +itemloreCommandUsage3Description=Fjerner merket som allerede var lagt itemloreInvalidItem=§4Du må holde en gjenstand for å redigere dens beskrivelse. itemloreNoLine=§4Gjenstanden du holder, har ikke beskrivelse på linje §c{0}§4. itemloreNoLore=§4Gjenstanden du holder har ikke noe beskrivelse. @@ -418,6 +510,7 @@ itemnameClear=§6Du har tilbakestilt navnet på denne gjenstanden. itemnameCommandDescription=Navngir en gjenstand. itemnameCommandUsage=/<command> [navn] itemnameCommandUsage1=/<command> +itemnameCommandUsage2=/<kommando><navn> itemnameInvalidItem=§cDu må holde noe for å gi det et nytt navn. itemnameSuccess=§6Du har endret navnet på det du holder til "§c{0}§6". itemNotEnough1=§4Du har ikke nok av gjenstanden for å selge. @@ -434,6 +527,7 @@ itemType=§6Gjenstand\:§c {0} itemdbCommandDescription=Søker etter en gjenstand. itemdbCommandUsage=/<command> <gjenstand> itemdbCommandUsage1=/<command> <gjenstand> +itemdbCommandUsage1Description=Søker i produktdatabasen for det gitte elementet jailAlreadyIncarcerated=§4Personen er allerede i fengsel\:§c {0} jailList=§6Fengsler\:§r {0} jailMessage=§4Gjør du kriminalitet, får du det du fortjener. @@ -452,6 +546,7 @@ jumpError=§4Det vil skade hjernen til datamaskinen din. kickCommandDescription=Sparker en spesifisert spiller med en grunn. kickCommandUsage=/<command> <spiller> [grunn] kickCommandUsage1=/<command> <spiller> [grunn] +kickCommandUsage1Description=Utestenger den angitte spilleren med en valgfri årsak kickDefault=Sparket ut fra serveren. kickedAll=§4Sparket ut alle spillere fra server. kickExempt=§4Du kan ikke sparke ut den personen. @@ -462,16 +557,20 @@ kill=§6Drepte§c {0}§6. killCommandDescription=Dreper spesifisert spiller. killCommandUsage=/<command> <spiller> killCommandUsage1=/<command> <spiller> +killCommandUsage1Description=Dreper spesifisert spiller killExempt=§4Du kan ikke drepe §c{0}§4. kitCommandDescription=Innhenter det spesifiserte settet eller viser alle tilgjengelige sett. kitCommandUsage=/<command> [sett] [spiller] kitCommandUsage1=/<command> +kitCommandUsage1Description=Viser alle tilgjengelige sett kitCommandUsage2=/<command> <sett> [spiller] +kitCommandUsage2Description=Gir det angitte settet til deg eller en annen spiller hvis angitt kitContains=§6Sett §c{0} §6inneholder\: kitCost=\ §7§o({0})§r kitDelay=§m{0}§r kitError=§4Det er ingen gyldige sett. kitError2=§4Det settet er feil definert. Kontakt en administrator. +kitError3=Kan ikke gi kit item i kit "{0}" til bruker {1} fordi kit item krever Paper 1.15.2+ for deserialize. kitGiveTo=§6Gir sett§c {0}§6 til §c{1}§6. kitInvFull=§4Inventaret ditt var fullt, plasserte settet på gulvet. kitInvFullNoDrop=§4Det er ikke nok plass i inventaret ditt for det settet. @@ -483,6 +582,7 @@ kitReset=§6Tilbakestill nedkjøling for sett §c{0}§6. kitresetCommandDescription=Tilbakestiller nedkjølingen på det angitte settet. kitresetCommandUsage=/<command> <sett> [spiller] kitresetCommandUsage1=/<command> <sett> [spiller] +kitresetCommandUsage1Description=Gir det angitte settet til deg eller en annen spiller hvis angitt kitResetOther=§6Tilbakestiller nedkjøling av settet §c{0} §6for §c{1}§6. kits=§6Sett\:§r {0} kittycannonCommandDescription=Kast en eksploderende kattunge på motstanderen din. @@ -492,6 +592,8 @@ leatherSyntax=§6Lærfarge-syntaks\:§c color\:<red>,<green>,<blue> feks\: color lightningCommandDescription=Kraften til Tor. Slå ned lyn på markøren eller en spiller. lightningCommandUsage=/<command> [spiller] [kraft] lightningCommandUsage1=/<command> [spiller] +lightningCommandUsage1Description=Slår på belysning enten der du ser eller på en annen spiller hvis spesifisert +lightningCommandUsage2Description=Tar belysning på målspilleren med den gitte kraften lightningSmited=§6Du er slått av lynet\! lightningUse=§6Slår ned på§c {0} listAfkTag=§7[AFK]§r @@ -500,6 +602,7 @@ listAmountHidden=§6Det er §c{0}§6/§c{1}§6 av maks §c{2}§6 spillere pålog listCommandDescription=Liste alle påloggede spillere. listCommandUsage=/<command> [gruppe] listCommandUsage1=/<command> [gruppe] +listCommandUsage1Description=Viser alle spillere på serveren, eller en gitt gruppe hvis angitt listGroupTag=§6{0}§r\: listHiddenTag=§7[SKJULT]§r loadWarpError=§4Kunne ikke laste inn warp {0}. @@ -508,8 +611,12 @@ loomCommandDescription=Åpner opp en vevstol. loomCommandUsage=/<command> mailClear=§6For å slette meldingene dine, skriv§c /mail clear§6. mailCleared=§6Meldinger slettet\! +mailClearIndex=§4Du må spesifisere et nummer mellom 1-{0}. mailCommandDescription=Behandler inter-player, intra-server mail. -mailCommandUsage=/<command> [read|clear|send [til] [melding]|sendall [melding]] +mailCommandUsage=/<command> [lese clear″clear [number]″send [to] [message] εsendtemp [to] [utløpsti] [message]¤ sende [message] +mailCommandUsage1Description=Leser den første (eller angitt) siden i e-posten din +mailCommandUsage2Description=Fjerner enten alle eller angitte e-post(er) +mailCommandUsage3Description=Sender den angitte spilleren meldingen mailDelay=For mange meldinger har blitt sendt i løpet av det siste minuttet. Maksimalt\: {0} mailFormat=§6[§r{0}§6] §r{1} mailMessage={0} @@ -560,11 +667,13 @@ msgIgnore=§c{0} §4har meldinger deaktivert. msgtoggleCommandDescription=Blokkerer mottak av alle private meldinger. msgtoggleCommandUsage=/<command> [spiller] [on|off] msgtoggleCommandUsage1=/<command> [spiller] +msgtoggleCommandUsage1Description=Veksler fly for deg selv eller en annen spiller hvis angitt multipleCharges=§4Du kan ikke legge til mer enn en ladning på dette fyrverkeriet. multiplePotionEffects=§4Du kan ikke legge til mer enn en effekt på denne eliksiren. muteCommandDescription=Demper eller slutter å dempe en spiller. muteCommandUsage=/<command> <spiller> [datoforskjell] [grunn] muteCommandUsage1=/<command> <spiller> +muteCommandUsage2Description=Muter den spesifikke spilleren for tiden som er gitt med valgfri årsak mutedPlayer=§6Spiller§c {0} §6dempet. mutedPlayerFor=§6Spiller§c {0} §6dempet for§c {1}§6. mutedPlayerForReason=§6Spiller§c {0} §6dempet for§c {1}§6. Årsak\: §c{2} @@ -579,13 +688,21 @@ muteNotifyReason=§c{0} §6har dempet spiller §c{1}§6. Årsak\: §c{2} nearCommandDescription=Lister spillerne i nærheten av eller rundt en spiller. nearCommandUsage=/<command> [spillernavn] [radius] nearCommandUsage1=/<command> +nearCommandUsage1Description=Viser alle spillere innenfor standard radius i nærheten av deg +nearCommandUsage2Description=Viser alle spillere innenfor den angitte radiusen til deg nearCommandUsage3=/<command> <spiller> +nearCommandUsage3Description=Viser alle spillere innenfor standard radius i nærheten av den angitte spilleren +nearCommandUsage4Description=Viser alle spillere innenfor den angitte radiusen til den angitte spilleren nearbyPlayers=§6Spillere i nærheten\:§r {0} negativeBalanceError=§4Bruker er ikke tillatt å ha en negativ saldo. nickChanged=§6Kallenavnet endret. nickCommandDescription=Endre kallenavnet ditt eller til en annen spiller. nickCommandUsage=/<command> [spiller] <kallenavn|off> nickCommandUsage1=/<command> <kallenavn> +nickCommandUsage1Description=Endrer kallenavnet ditt til den angitte teksten +nickCommandUsage2Description=Fjerner kallenavnet ditt +nickCommandUsage3Description=Endrer angitt spillers kallenavn på den angitte teksten +nickCommandUsage4Description=Fjerner gitt spillers kallenavn nickDisplayName=§4Du må aktivere "change-displayname" i Essentials-konfigurasjonen. nickInUse=§4Det navnet er allerede i bruk. nickNameBlacklist=§4Det kallenavnet er ikke tillatt. @@ -638,6 +755,7 @@ noWarpsDefined=§6Ingen warp definert. nuke=§5Må døden regne over dem. nukeCommandDescription=Må døden regne over dem. nukeCommandUsage=/<command> [spiller] +nukeCommandUsage1Description=Sender en pil over alle spillere eller en annen spiller(e), hvis angitt, numberRequired=Der skal det være et tall, tullete deg. onlyDayNight=/time støtter bare day/night. onlyPlayers=§4Bare påloggede spillere kan bruke §c{0}§4. @@ -651,6 +769,7 @@ passengerTeleportFail=§4Du kan ikke teleporteres mens du bærer passasjerer. payCommandDescription=Betaler en annen spiller fra saldoen din. payCommandUsage=/<command> <spiller> <beløp> payCommandUsage1=/<command> <spiller> <beløp> +payCommandUsage1Description=Sender den angitte spilleren den angitte mengden penger payConfirmToggleOff=§6Du vil ikke lenger bli bedt om å bekrefte betalinger. payConfirmToggleOn=§6Du vil nå bli bedt om å bekrefte utbetalinger. payDisabledFor=§6Deaktiverte aksepterer betaling for §c{0}§6. @@ -664,6 +783,7 @@ payconfirmtoggleCommandUsage=/<command> paytoggleCommandDescription=Veksler om du godtar betalinger. paytoggleCommandUsage=/<command> [spiller] paytoggleCommandUsage1=/<command> [spiller] +paytoggleCommandUsage1Description=Aktiverer eller deaktiverer hvis du, eller en annen spiller hvis angitt, godtar betalinger pendingTeleportCancelled=§4Ventende teleporteringsforespørsel kansellert. pingCommandDescription=Pong\! pingCommandUsage=/<command> @@ -688,6 +808,8 @@ posPitch=§6Helning\: {0} (Hodevinkel) possibleWorlds=§6Mulige verdener er tallene §c0§6 til §c{0}§6. potionCommandDescription=Legger til egendefinerte effekter i en fortryllelsesdrikk. potionCommandUsage=/<command> <clear|apply|effect\:<effekt> power\:<kraft> duration\:<varighet>> +potionCommandUsage1Description=Fjerner alle effekter på den holdte drikken +potionCommandUsage2Description=Godkjenner alle effekter på den holdt eliksiren på deg uten å spise posX=§6X\: {0} (+Øst <-> -Vest) posY=§6Y\: {0} (+Opp <-> -Ned) posYaw=§6Vending\: {0} (Rotasjon) @@ -706,12 +828,23 @@ powerToolsDisabled=§6Alle styrkeverktøyene dine har blitt deaktivert. powerToolsEnabled=§6Alle styrkeverktøyene dine har blitt aktivert. powertoolCommandDescription=Tildeler en kommando til gjenstanden i hånden. powertoolCommandUsage=/<command> [l\:|a\:|r\:|c\:|d\:][kommando] [argumenter] - {player} kan erstattes av navnet på en klikket spiller. +powertoolCommandUsage1Description=Viser alle powertools på den holdte gjenstanden +powertoolCommandUsage2Description=Sletter alle powertools på den holdte gjenstanden +powertoolCommandUsage3Description=Fjerner den gitte kommandoen fra det holdte elementet +powertoolCommandUsage4Description=Angir kommandoen for det innebygde elementet til den angitte kommandoen +powertoolCommandUsage5Description=Legger til en gitt kommandoen "powertool " i det innebygde elementet powertooltoggleCommandDescription=Aktiverer eller deaktiverer alle gjeldende kraftverktøy. powertooltoggleCommandUsage=/<command> ptimeCommandDescription=Juster spillerens klienttid. Legg til @ prefiks for å fikse. ptimeCommandUsage=/<command> [list|reset|day|night|dawn|17\:30|4pm|4000ticks] [spiller|*] +ptimeCommandUsage1Description=Viser en liste over spillerens tid for enten deg eller andre spiller(e) hvis angitt +ptimeCommandUsage2Description=Setter tiden for deg eller andre spiller(e) hvis angitt til det angitte klokkeslettet +ptimeCommandUsage3Description=Nullstiller tiden for deg eller andre spiller(e) hvis angitt pweatherCommandDescription=Juster spillerens vær pweatherCommandUsage=/<command> [list|reset|storm|sun|clear] [spiller|*] +pweatherCommandUsage1Description=Viser deg eller andre spilleres vær for deg eller spiller(e) hvis angitt +pweatherCommandUsage2Description=Setter været for deg eller andre spiller(e) hvis det er angitt til det gitte været +pweatherCommandUsage3Description=Nullstiller været for deg eller andre spiller(e) hvis angitt pTimeCurrent=§6Tiden til §c{0}§6 er§c {1}§6. pTimeCurrentFixed=§6Tiden til §c{0}§6 er fastsatt til§c {1}§6. pTimeNormal=§6Tiden til §c{0}§6 er normal og samsvarer med serveren. @@ -731,17 +864,20 @@ questionFormat=§2[Spørsmål]§r {0} rCommandDescription=Svar raskt til den siste spilleren som sendte deg en melding. rCommandUsage=/<command> <melding> rCommandUsage1=/<command> <melding> +rCommandUsage1Description=Svar på den siste spilleren for å sende meldinger til den angitte teksten radiusTooBig=§4Radius er for stor\! Maksimal radius er§c {0}§4. readNextPage=§6Skriv§c /{0} {1} §6for å lese neste side. realName=§f{0}§r§6 er §f{1} realnameCommandDescription=Viser brukernavnet til en bruker basert på kallenavnet. realnameCommandUsage=/<command> <kallenavn> realnameCommandUsage1=/<command> <kallenavn> +realnameCommandUsage1Description=Viser brukernavnet til en bruker basert på det angitte kallenavnet recentlyForeverAlone=§4{0} logget nylig ut. recipe=§6Oppskrift på §c{0}§6 (§c{1}§6 av §c{2}§6) recipeBadIndex=Det er ingen oppskrift på det tallet. recipeCommandDescription=Viser hvordan du lager gjenstander. recipeCommandUsage=/<command> <gjenstand> [nummer] +recipeCommandUsage1Description=Viser hvordan man lager den angitte gjenstanden recipeFurnace=§6Smelting\: §c{0}§6. recipeGrid=§c{0}X §6| §{1}X §6| §{2}X recipeGridItem=§c{0}X §6er §c{1} @@ -752,12 +888,15 @@ recipeShapeless=§6Kombiner §c{0} recipeWhere=§6Hvor\: {0} removeCommandDescription=Fjerner enheter i verdenen din. removeCommandUsage=/<command> <all|tamed|named|drops|arrows|boats|minecarts|xp|paintings|itemframes|endercrystals|monsters|animals|ambient|mobs|[mobType]> [radius|verden] +removeCommandUsage1Description=Fjerner alt av den gitte moben i den aktuelle verdenen, eller en annen hvis angitt +removeCommandUsage2Description=Fjerner den angitte moben innenfor den angitte radiusen i den nåværende verdenen eller en annen hvis angitt removed=§6Fjernet§c {0} §6enheter. repair=§6Du har vellykket reparert din\: §c{0}§6. repairAlreadyFixed=§4Denne gjenstanden trenger ikke reparasjon. repairCommandDescription=Reparerer holdbarheten til ett eller alle gjenstandene. repairCommandUsage=/<command> [hand|all] repairCommandUsage1=/<command> +repairCommandUsage1Description=Reparerer det holdte objektet repairEnchanted=§4Du har ikke lov til å reparere fortryllede gjenstander. repairInvalidType=§4Denne gjenstanden kan ikke repareres. repairNone=§4Det var ingen gjenstander som måtte repareres. @@ -812,6 +951,8 @@ setBalOthers=§aDu satte {0}§a sin saldo til {1}. setSpawner=§6Endret fremkaller-type til§c {0}§6. sethomeCommandDescription=Sett hjemmet ditt til din nåværende posisjon. sethomeCommandUsage=/<command> [[spiller\:]navn] +sethomeCommandUsage1=/<kommando><navn> +sethomeCommandUsage2=/<kommando><spiller>\:<navn> setjailCommandDescription=Oppretter et fengsel der du spesifiserte kalt [jailname]. setjailCommandUsage=/<command> <fengselsnavn> setjailCommandUsage1=/<command> <fengselsnavn> diff --git a/Essentials/src/main/resources/messages_pl.properties b/Essentials/src/main/resources/messages_pl.properties index 62d2691151c..9ef27611279 100644 --- a/Essentials/src/main/resources/messages_pl.properties +++ b/Essentials/src/main/resources/messages_pl.properties @@ -10,7 +10,7 @@ afkCommandDescription=Oznacza cię jako poza komputerem. afkCommandUsage=/<command> [gracz/wiadomość...] afkCommandUsage1=/<command> [wiadomość] afkCommandUsage1Description=Przełącza twój status AFK z opcjonalnym powodem -afkCommandUsage2=/<command> <player> [message] +afkCommandUsage2=/<command> <gracz> [wiadomość] afkCommandUsage2Description=Przełącza status AFK podanego gracza z opcjonalnym powodem alertBroke=zniszczył\: alertFormat=§3[{0}] §f {1} §7 {2} at\: {3} @@ -58,8 +58,8 @@ balanceOther=§aStan konta gracza §7{0} §awynosi\:§c {1} balanceTop=§7Najbogatsi gracze ({0}) balanceTopLine={0}. {1}, {2} balancetopCommandDescription=Wyświetla listę najwyższych sald. -balancetopCommandUsage=/<command> [page] -balancetopCommandUsage1=/<command> [page] +balancetopCommandUsage=/<command> [strona] +balancetopCommandUsage1=/<command> [strona] balancetopCommandUsage1Description=Wyświetla pierwszą (lub określoną) stronę wartości górnego salda banCommandDescription=Zbanuje gracza. banCommandUsage=/<command> <gracz> [powód] @@ -71,8 +71,8 @@ banFormat=§4Zostałeś zbanowany\: {0} banIpJoin=Twój adres IP został zbanowany na tym serwerze. Powód\: {0} banJoin=Zostałeś zbanowany na tym serwerze. Powód\: {0} banipCommandDescription=Zbanuje adres IP. -banipCommandUsage=/<command> <adres_ip> [powód] -banipCommandUsage1=/<command> <adres_ip> [powód] +banipCommandUsage=/<command> <adres> [powód] +banipCommandUsage1=/<command> <adres> [powód] banipCommandUsage1Description=Blokuje określony adres IP z opcjonalnym powodem bed=§ołóżko§r bedMissing=§4Twoje łóżko nie zostało ustawione, lub jest zablokowane. @@ -94,9 +94,9 @@ bookCommandDescription=Umożliwia ponowne otwarcie i edycję podpisanych książ bookCommandUsage=/<command> [title|author [nazwa]] bookCommandUsage1=/<command> bookCommandUsage1Description=Zablokowuj/Odblokowuje książkę i podpisaną książkę -bookCommandUsage2=/<command> autor <author> +bookCommandUsage2=/<command> author <autor> bookCommandUsage2Description=Ustawia autora podpisanej książki -bookCommandUsage3=/<command> tytuł <title> +bookCommandUsage3=/<command> title <tytuł> bookCommandUsage3Description=Ustawia tytuł podpisanej książki bookLocked=§cKsiążka jest teraz zablokowana. bookTitleSet=§7Ustawiono tytuł książki na {0} . @@ -138,6 +138,7 @@ clearinventoryCommandUsage1=/<command> clearinventoryCommandUsage1Description=Usuwa wszystkie przedmioty z twojego ekwipunku clearinventoryCommandUsage2=/<command> <gracz> clearinventoryCommandUsage2Description=Usuwa wszystkie przedmioty z ekwipunku podanego gracza +clearinventoryCommandUsage3=/<command> <gracz> <item> [liczba] clearinventoryCommandUsage3Description=Usuwa wszystkie (lub podaną ilość) danego przedmiotu z ekwipunku określonego gracza clearinventoryconfirmtoggleCommandDescription=Przełącza, czy trzeba potwierdzić wyczyszczenie ekwipunku. clearinventoryconfirmtoggleCommandUsage=/<command> @@ -202,9 +203,9 @@ deletingHomes=Usuwanie wszystkich domów... deletingHomesWorld=Usuwanie wszystkich domów w świecie {0}... delhomeCommandDescription=Usuwa dom. delhomeCommandUsage=/<command> [gracz\:]<name> -delhomeCommandUsage1=/<command> <name> +delhomeCommandUsage1=/<command> <nazwa> delhomeCommandUsage1Description=Usuwa twój dom o podanej nazwie -delhomeCommandUsage2=/<command> <player>\:<name> +delhomeCommandUsage2=/<command> <gracz>\:<nazwa> delhomeCommandUsage2Description=Usuwa dom określonego gracza o podanej nazwie deljailCommandDescription=Usuwa więzienie. deljailCommandUsage=/<command> <nazwa_więzienia> @@ -231,6 +232,28 @@ destinationNotSet=Cel nieokreślony. disabled=wyłączone disabledToSpawnMob=§4Tworzenie tego moba zostało wyłączone w pliku konfiguracyjnym. disableUnlimited=§6Wyłączono nielimitowane stawianie §c {0} §6dla§c {1}§6. +discordCommandExecuteDescription=Wykonuje polecenie konsoli na serwerze Minecraft. +discordCommandExecuteArgumentCommand=Polecenie do wykonania +discordCommandExecuteReply=Wykonywanie polecenia\: "/{0}" +discordCommandListDescription=Bierze listę graczy online. +discordCommandListArgumentGroup=Określona grupa do ograniczenia wyszukiwania przez +discordCommandMessageDescription=Wiadomości gracza na serwerze Minecraft. +discordCommandMessageArgumentUsername=Gracz, do którego ma zostać wysłana wiadomość +discordCommandMessageArgumentMessage=Wiadomość do wysłania do gracza +discordErrorCommand=Twój bot został dodany niepoprawnie do serwera. Postępuj zgodnie z samouczkiem w konfiguracji i dodaj bota za pomocą https\://essentialsx.net/discord.html\! +discordErrorCommandDisabled=To polecenie jest wyłączone\! +discordErrorLogin=Wystąpił błąd podczas logowania do Discorda, co spowodowało wyłączenie pluginu samodzielnie\: \n{0} +discordErrorLoggerInvalidChannel=Rejestrator konsoli Discorda został wyłączony z powodu nieprawidłowej definicji kanału\! Jeśli zamierzasz to wyłączyć, ustaw ID kanału na "brak"; w przeciwnym razie sprawdź, czy identyfikator kanału jest poprawny. +discordErrorLoggerNoPerms=Rejestrator konsoli Discorda został wyłączony z powodu niewystarczających uprawnień\! Upewnij się, że Twój bot ma uprawnienia "Zarządzaj Webhookami" na serwerze. Po naprawieniu tej sytuacji uruchom "/ess reload". +discordErrorNoGuild=Nieprawidłowy lub brakujący identyfikator serwera\! Postępuj zgodnie z poradnikiem w konfiguracji, aby skonfigurować plugin. +discordErrorNoGuildSize=Twój bot nie jest na żadnym serwerze\! Proszę postępować zgodnie z samouczkiem w konfiguracji, aby skonfigurować plugin. +discordErrorNoPerms=Twój bot nie może widzieć ani rozmawiać na żadnym kanale\! Upewnij się, że Twój bot ma uprawnienia do odczytu i zapisu we wszystkich kanałach, których chcesz użyć. +discordErrorNoToken=Nie podano tokenu\! Postępuj zgodnie z poradnikiem w konfiguracji, aby skonfigurować plugin. +discordErrorWebhook=Wystąpił błąd podczas wysyłania wiadomości do kanału konsoli\! Było to prawdopodobnie spowodowane przypadkowym usunięciem twojego webhooka konsoli. Zazwyczaj można to naprawić, upewniając się, że Twój bot ma uprawnienia "Zarządzaj Webhookami" i uruchamiając "/ess reload". +discordLoggingIn=Próba logowania do Discorda... +discordLoggingInDone=Pomyślnie zalogowano jako {0} +discordNoSendPermission=Nie można wysłać wiadomości na kanale\: \#{0} Upewnij się, że bot ma uprawnienia "Wyślij wiadomości" w tym kanale\! +discordReloadInvalid=Próbowano przeładować konfigurację EssentialsX Discord, gdy plugin jest w nieprawidłowym stanie\! Jeśli zmodyfikowałeś konfigurację, uruchom ponownie serwer. disposal=Kosz na śmieci disposalCommandDescription=Otwiera przenośne menu usuwania. disposalCommandUsage=/<command> @@ -241,17 +264,20 @@ duplicatedUserdata=Kopiowanie danych uzytkownika\: {0} i {1} durability=§6Temu narzędziu pozostało §c{0}§6 użyć east=E ecoCommandDescription=Zarządza ekonomią serwera. -ecoCommandUsage=/<command> <give|take|set|reset> <player> <amount> +ecoCommandUsage=/<command> <give|take|set|reset> <gracz> <kwota> +ecoCommandUsage1=/<command> give <gracz> <liczba> ecoCommandUsage1Description=Daje określonemu graczowi określoną ilość pieniędzy +ecoCommandUsage2=/<command> take <gracz> <kwota> ecoCommandUsage2Description=Zabiera określoną ilość pieniędzy od określonego gracza -ecoCommandUsage3=/<command> set <player> <amount> +ecoCommandUsage3=/<command> set <gracz> <kwota> ecoCommandUsage3Description=Ustawia saldo określonego gracza na określoną ilość pieniędzy -ecoCommandUsage4=/<command> reset <player> <amount> +ecoCommandUsage4=/<command> reset <gracz> <kwota> ecoCommandUsage4Description=Resetuje saldo określonego gracza do początkowego salda serwera editBookContents=§eNie możesz teraz edytować tej książki. enabled=włączone enchantCommandDescription=Zaklina przedmiot, który trzyma gracz. -enchantCommandUsage=/<command> <enchantmentname> [level] +enchantCommandUsage=/<command> <nazwa enchantu> [level] +enchantCommandUsage1=/<command> <nazwa enchantu> [level] enchantCommandUsage1Description=Zaklina przedmiot, który trzymasz podanym zaklęciem opcjonalnego poziomu enableUnlimited=§6Przyznano nielimitowaną ilość§c {0} §6dla {1}. enchantmentApplied=§7Ulepszenie§c {0} §7zostało przyznane przedmiotowi w twoim ręku. @@ -273,10 +299,11 @@ essentialsCommandUsage1=/<command> reload essentialsCommandUsage1Description=Przeładowuje konfigurację Essentials essentialsCommandUsage2=/<command> version essentialsCommandUsage2Description=Daje informacje o wersji Essentials -essentialsCommandUsage3=/<command> polecenia +essentialsCommandUsage3=/<command> commands essentialsCommandUsage3Description=Daje informacje o tym, jakie polecenia Essentials przekazuje do innych pluginów essentialsCommandUsage4=/<command> debug essentialsCommandUsage4Description=Przełącza "tryb debugowania" +essentialsCommandUsage5=/<command> reset <gracz> essentialsCommandUsage5Description=Resetuje dane danego gracza essentialsCommandUsage6=/<command> cleanup essentialsCommandUsage6Description=Czyści stare dane użytkownika @@ -287,10 +314,14 @@ essentialsHelp2=Plik jest uszkodzony i Essentials nie może go otworzyc. Essent essentialsReload=§6Essentials przeładował§c {0}. exp=§c{0} §7ma§c {1} §7doświadczenia (poziom§c {2}§7), potrzebuje§c {3} §7więcej doświadczenia do następnego poziomu. expCommandDescription=Dodaje, ustawia, odnawia lub wyświetla doświadczenie graczy. -expCommandUsage=/<command> [reset|show|set|give] [gracz [amount]] +expCommandUsage=/<command> [reset|show|set|give] [gracz [liczba]] +expCommandUsage1=/<command> give <gracz> <liczba> expCommandUsage1Description=Daje docelowemu graczowi określoną ilość doświadczenia +expCommandUsage2=/<command> set <nazwa gracza> <ilość> expCommandUsage2Description=Ustawia doświadczenie docelowego gracza na określoną ilość +expCommandUsage3=/<command> show <nick gracza> expCommandUsage4Description=Wyświetla ilość doświadczenia jaką ma docelowy gracz +expCommandUsage5=/<command> reset <playername> expCommandUsage5Description=Resetuje doświadczenie docelowego gracza do 0 expSet=§c{0} §7teraz ma§c {1} §7doświadczenia. extCommandDescription=Ugasi graczy. @@ -311,22 +342,30 @@ feedCommandUsage1Description=Zaspakaja głód twój lub innego gracza feedOther=§6Zaspokoiłeś apetyt {0}§6. fileRenameError=Błąd podczas zmiany nazwy pliku “{0}”. fireballCommandDescription=Rzucaj kulą ognia lub innymi pociskami. -fireballCommandUsage=/<command> [fireball|small|large|arrow|skull|egg|snowball|expbottle|dragon|splashpotion|lingeringpotion|trident] [speed] +fireballCommandUsage=/<command> [fireball|small|large|arrow|skull|egg|snowball|expbottle|dragon|splashpotion|lingeringpotion|trident] [prędkość] fireballCommandUsage1=/<command> fireballCommandUsage1Description=Rzuca zwykłą kulę ognia z twojej lokalizacji +fireballCommandUsage2=/<command> <fireball|small|large|arrow|skull|egg|snowball|expbottle|dragon|splashpotion|lingeringpotion|trident> [prędkość] fireballCommandUsage2Description=Rzuca określony pocisk z twojej lokalizacji, z opcjonalną prędkością fireworkColor=§4Musisz dodać kolor fajerwerki, by dodać do niej efekt. fireworkCommandDescription=Pozwala modyfikować stack fajerwerków. -fireworkCommandUsage=/<command> <<meta param>|power [amount]|clear|fire [amount]> +fireworkCommandUsage=/<command> <<meta param>|power [liczba]|clear|fire [liczba]> +fireworkCommandUsage1=/<command> clear fireworkCommandUsage1Description=Czyści wszystkie efekty z trzymanych fajerwerków +fireworkCommandUsage2=/<command> power <liczba> fireworkCommandUsage2Description=Ustawia moc trzymanych fajerwerków +fireworkCommandUsage3=/<command> fire [liczba] +fireworkCommandUsage3Description=Wystrzeliwuje jedną lub określoną liczbę kopii fajerwerków +fireworkCommandUsage4=/<command> <meta> +fireworkCommandUsage4Description=Dodaje podany efekt do trzymanych fajerwerków fireworkEffectsCleared=§7Usunięto wszystkie efekty trzymanych w ręku fajerwerek. fireworkSyntax=§7Parametry fajerwerki\:§4 color\:<kolor> [fade\:<kolor>] [shape\:<ksztalt>] [effect\:<efekt>]\n§7By użyć wielu kolorow/efektow, oddziel wartości przecinkami\: §4red,blue,pink\n§7Ksztalty\:§4 star, ball, large, creeper, burst §7Efekty\:§4 trail, twinkle. fixedHomes=Usunięto nieprawidłowe domy. fixingHomes=Usuwanie nieprawidłowych domów... flyCommandDescription=Startuj i szybuj\! -flyCommandUsage=/<command> [player] [on|off] +flyCommandUsage=/<command> [gracz] [on|off] flyCommandUsage1=/<command> [gracz] +flyCommandUsage1Description=Włącza latanie dla siebie albo innego gracza flying=latanie flyMode=§7Ustawiono latanie§c {0} §7dla {1}§7. foreverAlone=§4Nie masz komu odpisać. @@ -336,8 +375,9 @@ fullStackDefaultOversize=§6Twój stak został ustawiony do jego maksymalnego ro gameMode=§6Zmieniłeś tryb gry {1}§6 na§c {0}§6. gameModeInvalid=§4Musisz podać prawidłowego gracza/tryb. gamemodeCommandDescription=Zmienia tryb gry. -gamemodeCommandUsage=/<command> <survival|creative|adventure|spectator> [player] -gamemodeCommandUsage1=/<command> <survival|creative|adventure|spectator> [player] +gamemodeCommandUsage=/<command> <survival|creative|adventure|spectator> [gracz] +gamemodeCommandUsage1=/<command> <survival|creative|adventure|spectator> [gracz] +gamemodeCommandUsage1Description=Ustawia tryb gry dla Ciebie lub innego gracza gcCommandDescription=Wyświetla zużycie pamięci, czas pracy serwera oraz informację o aktualnych TPS. gcCommandUsage=/<command> gcfree=§7Wolna pamięć\:§c {0} MB @@ -348,8 +388,13 @@ geoipJoinFormat=§6Gracz §c{0} §6przybył z §c{1}§6. getposCommandDescription=Wyświetli twoje aktualne współrzędne lub współrzędne gracza. getposCommandUsage=/<command> [gracz] getposCommandUsage1=/<command> [gracz] +getposCommandUsage1Description=Pobiera współrzędne Twoje lub innego gracza giveCommandDescription=Daje graczowi przedmiot. giveCommandUsage=/<command> <gracz> <przedmiot|numerycznie> [ilość [meta_przedmiotu...]] +giveCommandUsage1=/<command> <gracz> <item> [liczba] +giveCommandUsage1Description=Daje docelowemu graczowi 64 (lub określoną liczbę) określonego itemu +giveCommandUsage2=/<command> <gracz> <item> <liczba> <meta> +giveCommandUsage2Description=Daje docelowemu graczowi określoną liczbę określonego itemu z podanymi metadanymi geoipCantFind=§6Gracz §c{0} §6przychodzi z §anieznanego kraju§6. geoIpErrorOnJoin=Nie można pobrać danych GeoIP dla {0}. Upewnij się, że twój klucz licencyjny i konfiguracja są poprawne. geoIpLicenseMissing=Nie znaleziono klucza licencyjnego\! Na stronie https\://essentialsx.net/geoip znajdziesz instrukcje, jak przeprowadzić pierwsze ustawienia. @@ -357,8 +402,9 @@ geoIpUrlEmpty=Url pobierania GeoIP jest pusty. geoIpUrlInvalid=Url pobierania GeoIP jest nieprawidłowy. givenSkull=§6Otrzymałeś czaszkę §c{0}§6. godCommandDescription=Włącza Twoje boskie moce. -godCommandUsage=/<command> [player] [on|off] +godCommandUsage=/<command> [gracz] [on|off] godCommandUsage1=/<command> [gracz] +godCommandUsage1Description=Przełącza tryb boga dla ciebie lub innego gracza giveSpawn=§6Przekazałeś§c {0} §6sztuk§c {1} §6dla gracza§c {2}§6. giveSpawnFailure=§4Za mało miejsca w ekwipunku, §4straciłeś §c{0}§4 קc {1}§4. godDisabledFor=§4wył§6 dla§c {0} @@ -372,6 +418,9 @@ hatArmor=§4Błąd, nie możesz użyć tego jako kapelusz. hatCommandDescription=Ubierz coś fajnego na głowę. hatCommandUsage=/<command> [remove] hatCommandUsage1=/<command> +hatCommandUsage1Description=Ustawia twój kapelusz na aktualnie trzymany przedmiot +hatCommandUsage2=/<command> remove +hatCommandUsage2Description=Usuwa twój obecny kapelusz hatCurse=§4Nie możesz zdjąć czapki z klątwą uwiązania\! hatEmpty=§4Nie nosisz aktualnie kapelusza. hatFail=§4Musisz coś trzymać w dłoni. @@ -382,10 +431,11 @@ heal=§7Zostałeś uleczony. healCommandDescription=Leczy ciebie lub podanego gracza. healCommandUsage=/<command> [gracz] healCommandUsage1=/<command> [gracz] +healCommandUsage1Description=Leczy ciebie albo innego gracza healDead=§4Nie możesz uleczyć kogoś kto nie żyje\! healOther=§7Uleczono gracza {0}. helpCommandDescription=Wyświetla listę dostępnych poleceń. -helpCommandUsage=/<command> [szukany termin] [page] +helpCommandUsage=/<command> [szukany termin] [strona] helpConsole=Aby uzyskać pomoc w konsoli, wpisz "?". helpFrom=§6Polecenia od {0}\: helpLine=§6/{0}§r\: {1} @@ -395,14 +445,17 @@ helpPlugin=§4{0}§r\: Pomoc pluginu\: /help {1} helpopCommandDescription=Wysyła wiadomość do aktualnie dostępnych administratorów. helpopCommandUsage=/<command> <wiadomość> helpopCommandUsage1=/<command> <wiadomość> +helpopCommandUsage1Description=Wysyła daną wiadomość do wszystkich adminów online holdBook=§4Nie trzymasz napisanej książki. holdFirework=§4Musisz trzymać fajerwerke by dodać efekt. holdPotion=§4Musisz trzymać miksture, by dodać do niej efekt. holeInFloor=§4Kosmos homeCommandDescription=Teleportuje do Twojego domu. -homeCommandUsage=/<command> [gracz\:][name] -homeCommandUsage1=/<command> <name> -homeCommandUsage2=/<command> <player>\:<name> +homeCommandUsage=/<command> [gracz\:][nazwa] +homeCommandUsage1=/<command> <nazwa> +homeCommandUsage1Description=Teleportuje cię do domu o podanej nazwie +homeCommandUsage2=/<command> <gracz>\:<nazwa> +homeCommandUsage2Description=Teleportuje cię do domu określonego gracza o podanej nazwie homes=§7Domy\:§r {0} homeConfirmation=§6Masz już dom o nazwie §c{0}§6\! Aby go nadpisać, wpisz polecenie ponownie. homeSet=§7Dom został ustawiony. @@ -421,6 +474,7 @@ iceOther=§6Schładzanie gracza§c {0}§6. ignoreCommandDescription=Ignoruj lub odignoruj innych graczy. ignoreCommandUsage=/<command> <gracz> ignoreCommandUsage1=/<command> <gracz> +ignoreCommandUsage1Description=Ignoruje lub przestaje ignorować danego gracza ignoredList=§6Ignorowani\:§r {0} ignoreExempt=§4Nie możesz ignorować tego gracza. ignorePlayer=§7Od tej chwili ignorujesz gracza §c{0}§7. @@ -455,16 +509,27 @@ inventoryClearingStack=§6Usunięto §c{0}§6 קc {1} §6z ekwipunku gracza § invseeCommandDescription=Zobacz ekwipunek innych graczy. invseeCommandUsage=/<command> <gracz> invseeCommandUsage1=/<command> <gracz> +invseeCommandUsage1Description=Otwiera ekwipunek określonego gracza is=jest isIpBanned=§7IP §c{0} §7jest zbanowany. internalError=§cAn internal error occurred while attempting to perform this command. itemCannotBeSold=§rNie możesz sprzedać tego przedmiotu serwerowi. itemCommandDescription=Zespawnuj przedmiot. itemCommandUsage=/<command> <item|id> [ilość [itemmeta...]] +itemCommandUsage1=/<command> <item> [liczba] +itemCommandUsage1Description=Daje Ci pełny stack (lub określoną liczbę) określonego przedmiotu +itemCommandUsage2=/<command> <item> <liczba> <meta> +itemCommandUsage2Description=Daje podaną liczbę określonego itemu z podanymi metadanymi itemId=§6ID\:§c {0} itemloreClear=§6Usunąłeś opis tego przedmiotu. itemloreCommandDescription=Edytuj opis przedmiotu. -itemloreCommandUsage=/<command> <add/set/clear> [tekst/linia] [text] +itemloreCommandUsage=/<command> <add/set/clear> [tekst/linia] [tekst] +itemloreCommandUsage1=/<command> add [tekst] +itemloreCommandUsage1Description=Dodaje dany tekst na końcu lore''u przedmiotu +itemloreCommandUsage2=/<command> set <numer linii> <tekst> +itemloreCommandUsage2Description=Ustawia określoną linię lore''u trzymanego przedmiotu na podany tekst +itemloreCommandUsage3=/<command> clear +itemloreCommandUsage3Description=Czyści lore trzymanego przedmiotu itemloreInvalidItem=§4Musisz trzymać przedmiot, aby edytować jego opis. itemloreNoLine=§4Twój trzymany przedmiot nie zawiera opisu w linii §c{0}§4. itemloreNoLore=§4Twój przedmiot nie ma żadnego opisu. @@ -474,9 +539,11 @@ itemMustBeStacked=§4Przedmiotem handluje się w stackach. Wielkość 2s to dwa itemNames=§7Krótka nazwa\:§r {0} itemnameClear=§6Usunąłeś nazwę tego przedmiotu. itemnameCommandDescription=Nazywa przedmiot. -itemnameCommandUsage=/<command> [name] +itemnameCommandUsage=/<command> [nazwa] itemnameCommandUsage1=/<command> -itemnameCommandUsage2=/<command> <name> +itemnameCommandUsage1Description=Usuwa nazwę trzymanego przedmiotu +itemnameCommandUsage2=/<command> <nazwa> +itemnameCommandUsage2Description=Ustawia nazwę trzymanego przedmiotu na podany tekst itemnameInvalidItem=§cMusisz trzymać jakiś przedmiot, aby zmienić jego nazwę. itemnameSuccess=§6Zmieniłeś nazwę przedmiotu który trzymałeś, na "§c{0}§6". itemNotEnough1=§4Masz za mało tego przedmiotu, aby go sprzedać. @@ -493,6 +560,7 @@ itemType=§7Przedmiot\:§c {0} itemdbCommandDescription=Wyszukuje przedmiot. itemdbCommandUsage=/<command> <item> itemdbCommandUsage1=/<command> <item> +itemdbCommandUsage1Description=Wyszukuje bazę danych przedmiotów dla podanego itemu jailAlreadyIncarcerated=§4Ten gracz jest już w więzieniu §c{0} §4. jailList=§6Więzienia\:§r {0} jailMessage=§4Za każde przewinienie czeka cię kara. @@ -501,6 +569,7 @@ jailReleased=§7Gracz §c{0}§7 został wypuszczony z więzienia. jailReleasedPlayerNotify=§7Zostałeś zwolniony\! jailSentenceExtended=§7Czas pobytu w więzieniu zwiększono do\: {0} jailSet=§7Stworzyłeś więzienie §c{0}§7. +jailWorldNotExist=§4Świat tego więzienia nie istnieje. jumpEasterDisable=§7Tryb latającego czarodzieja wyłączony. jumpEasterEnable=§7Tryb latającego czarodzieja włączony. jailsCommandDescription=Lista wszystkich Jailów. @@ -511,21 +580,26 @@ jumpError=§4To mogło by ci coś zrobić. kickCommandDescription=Wyrzuca wybranego gracza z podaniem powodu. kickCommandUsage=/<command> <gracz> [powód] kickCommandUsage1=/<command> <gracz> [powód] +kickCommandUsage1Description=Wyrzuca określonego gracza z opcjonalnym powodem kickDefault=Zostałeś wyrzucony z serwera. kickedAll=§4Wyrzucono wszystkich graczy z serwera kickExempt=§4Nie możesz wyrzucić tej osoby. kickallCommandDescription=Wyrzuca wszystkich graczy z serwera z wyjątkiem osoby wykonującej to polecenie. -kickallCommandUsage=/<command> [reason] -kickallCommandUsage1=/<command> [reason] +kickallCommandUsage=/<command> [powód] +kickallCommandUsage1=/<command> [powód] +kickallCommandUsage1Description=Wyrzuca wszystkich graczy z opcjonalnym powodem kill=§7Gracz §c{0} §7został zabity. killCommandDescription=Zabija wybranego gracza. killCommandUsage=/<command> <gracz> killCommandUsage1=/<command> <gracz> +killCommandUsage1Description=Zabija określonego gracza killExempt=§4Nie możesz zabić {0} kitCommandDescription=Uzyskuje określony zestaw lub wyświetla wszystkie dostępne zestawy. kitCommandUsage=/<command> [zestaw] [gracz] kitCommandUsage1=/<command> +kitCommandUsage1Description=Lista wszystkich dostępnych zestawów kitCommandUsage2=/<command> <zestaw> [gracz] +kitCommandUsage2Description=Daje określony zestaw Tobie lub innemu graczowi kitContains=§6Zestaw §c{0} §6zawiera\: kitCost=\ §7§o({0})§r kitDelay=§m{0}§r @@ -543,6 +617,7 @@ kitReset=§7Zerować czas odnowienia dla zestawu §c{0}§7. kitresetCommandDescription=Zeruje czas odnowienia podanego zestawu. kitresetCommandUsage=/<command> <zestaw> [gracz] kitresetCommandUsage1=/<command> <zestaw> [gracz] +kitresetCommandUsage1Description=Resetuje czas odnowienia określonego zestawu dla ciebie lub innego gracza kitResetOther=§6Zerowanie czasu odnowienia zestawu §c{0} §6dla gracza §c{1}§6. kits=§7Zestawy\:§r {0} kittycannonCommandDescription=Rzuć eksplodującym kotkiem w przeciwnika. @@ -550,9 +625,10 @@ kittycannonCommandUsage=/<command> kitTimed=§4Nie możesz wziąć tego zestawu przez kolejne§c {0}§4. leatherSyntax=§6Wzór wyznaczania koloru skóry\:§c color\:<red>,<green>,<blue>; na przykład\: color\:255,0,0§6 LUB§c color\:<rgb int>; na przykład\: color\:16777011 lightningCommandDescription=Moc Thor''a. Uderz w kursor lub gracza. -lightningCommandUsage=/<command> [player] [power] +lightningCommandUsage=/<command> [gracz] [moc] lightningCommandUsage1=/<command> [gracz] lightningCommandUsage1Description=Przywołuje piorun w miejscu, w którym patrzysz lub na innego gracza +lightningCommandUsage2=/<command> <gracz> <moc> lightningCommandUsage2Description=Przywołuje piorun o podanej mocy na wybranego gracza lightningSmited=§7Zostałeś uderzony piorunem. lightningUse=§7Uderzono piorunem§c {0}§7. @@ -560,8 +636,8 @@ listAfkTag=§7[AFK]§f listAmount=§7Na serwerze jest §c{0}§7 graczy z maksimum §c{1}§7 online. listAmountHidden=§6Obecnie na serwerze jest §c{0}§6/§c{1}§6 na maksymalnie §c{2}§6 graczy online. listCommandDescription=Lista wszystkich graczy online. -listCommandUsage=/<command> [group] -listCommandUsage1=/<command> [group] +listCommandUsage=/<command> [grupa] +listCommandUsage1=/<command> [grupa] listCommandUsage1Description=Wyświetla listę wszystkich graczy na serwerze lub w podanej grupie listGroupTag=§6{0}§r\: listHiddenTag=§7[UKRYTY]§r @@ -571,17 +647,29 @@ loomCommandDescription=Otwiera krosno. loomCommandUsage=/<command> mailClear=§6Aby oznaczyć swoją pocztę jako przeczytaną, wpisz§c /mail clear§6. mailCleared=§7Skrzynka opróżniona\!\! +mailClearIndex=§4Musisz podać liczbę pomiędzy 1-{0}. mailCommandDescription=Zarządza pocztą między graczami i na serwerze. -mailCommandUsage=/<command> [read|clear|send [to] [message]|sendall [message]] +mailCommandUsage=/<command> [read|clear|clear [numer]|send [do] [wiadomość]|sendtemp [do] [expire time] [wiadomość]|sendall [wiadomość]] +mailCommandUsage1=/<command> read [strona] mailCommandUsage1Description=Odczytuje pierwszą (lub określoną) stronę twojej poczty -mailCommandUsage2Description=Czyści twoją pocztę +mailCommandUsage2=/<command> clear [numer] +mailCommandUsage2Description=Czyści wszystkie lub określone wiadomości +mailCommandUsage3=/<command> send <gracz> <wiadomość> mailCommandUsage3Description=Wysyła określonemu graczowi podaną wiadomość +mailCommandUsage4=/<command> sendall <wiadomość> mailCommandUsage4Description=Wysyła wszystkim graczom podaną wiadomość +mailCommandUsage5=/<command> sendtemp <gracz> <czas ważności> <wiadomość> +mailCommandUsage5Description=Wysyła określonemu graczowi wiadomość, która wygaśnie w określonym czasie mailDelay=Zbyt dużo maili zostało wysłane w czasie ostaniej minuty. Maksymalna ilość\: {0} +mailFormatNew=§6[§r{0}§6] §6[§r{1}§6] §r{2} +mailFormatNewTimed=§6[§e⚠§6] §6[§r{0}§6] §6[§r{1}§6] §r{2} +mailFormatNewRead=§6[§r{0}§6] §6[§r{1}§6] §7§o{2} +mailFormatNewReadTimed=§6[§e⚠§6] §6[§r{0}§6] §6[§r{1}§6] §7§o{2} mailFormat=§6[§r{0}§6] §r{1} mailMessage={0} mailSent=§7Wiadomosc wysłana\! mailSentTo=§c{0}§6 wysłał maila\: +mailSentToExpire=Do §c{0}§6 wysłano następującego maila, który wygaśnie w §c{1}§6\: mailTooLong=§4Wiadomość mail jest zbyt długa. Postaraj się utrzymać ją poniżej 1000 znaków. markMailAsRead=§6Aby oznaczyć swoją pocztę jako przeczytaną, wpisz§c /mail clear§6. matchingIPAddress=§7Gracz wcześniej był zalogowany z tego adresu IP\: @@ -610,8 +698,8 @@ moneySentTo=§a{0} zostało wysłane do {1} month=miesiac months=miesięcy moreCommandDescription=Wypełnia stack przedmiotów w dłoni do określonej ilości lub do maksymalnego rozmiaru, jeśli nie jest określony. -moreCommandUsage=/<command> [amount] -moreCommandUsage1=/<command> [amount] +moreCommandUsage=/<command> [liczba] +moreCommandUsage1=/<command> [liczba] moreCommandUsage1Description=Wypełnia stack przedmiotów w dłoni do określonej ilości lub do maksymalnego rozmiaru, jeśli nie podano moreThanZero=§4Ilość musi być większa niż 0. motdCommandDescription=Wyświetla MOTD. @@ -628,14 +716,16 @@ msgEnabledFor=§6Odbieranie wiadomości §cwłączone §6dla §c{0}§6. msgFormat=§6[§c{0}§6 -> §c{1}§6] §r{2} msgIgnore=§c{0} §4ma wyłączone wiadomości prywatne. msgtoggleCommandDescription=Blokuje otrzymywanie wszystkich wiadomości prywatnych. -msgtoggleCommandUsage=/<command> [player] [on|off] +msgtoggleCommandUsage=/<command> [gracz] [on|off] msgtoggleCommandUsage1=/<command> [gracz] +msgtoggleCommandUsage1Description=Włącza latanie dla siebie albo innego gracza multipleCharges=§4Nie możesz ustawic więcej niż jeden ładunek dla tej fajerwerki. multiplePotionEffects=§4Nie możesz ustawic więcej niż jeden efekt dla tej mikstury. muteCommandDescription=Wycisza lub cofa wyciszenie gracza. -muteCommandUsage=/<command> <gracz> [datediff] [reason] +muteCommandUsage=/<command> <gracz> [długość] [powód] muteCommandUsage1=/<command> <gracz> muteCommandUsage1Description=Trwale wycisza określonego gracza lub anuluje jego wyciszenie +muteCommandUsage2=/<command> <gracz> <długość> [powód] muteCommandUsage2Description=Wycisza określonego gracza na określony okres czasu z opcjonalnym powodem mutedPlayer=§6Gracz§c {0} §6został wyciszony. mutedPlayerFor=§6Gracz§c {0} §6został wyciszony za§c {1}§6. @@ -649,22 +739,27 @@ muteNotifyFor=§c{0} §6wyciszył gracza §c{1}§6 na§c {2}§6. muteNotifyForReason=Gracz §c{0} §6wyciszył gracza §c{1}§6 na§c {2}§6. Powód\: §c{3} muteNotifyReason=Gracz §c{0} §6wyciszył gracza §c{1}§6. Powód\: §c{2} nearCommandDescription=Wyświetla listę graczy w pobliżu lub wokół gracza. -nearCommandUsage=/<command> [playername] [radius] +nearCommandUsage=/<command> [nick gracza] [promień] nearCommandUsage1=/<command> nearCommandUsage1Description=Wyświetla listę wszystkich graczy w domyślnie ustawionym promieniu od ciebie +nearCommandUsage2=/<command> <promień> nearCommandUsage2Description=Wyświetla listę wszystkich graczy w danym promieniu od ciebie nearCommandUsage3=/<command> <gracz> nearCommandUsage3Description=Wyświetla listę wszystkich graczy w domyślnie ustawionym promieniu od określonego gracza +nearCommandUsage4=/<command> <gracz> <promień> nearCommandUsage4Description=Wyświetla listę wszystkich graczy w danym promieniu od określonego gracza nearbyPlayers=§7Gracze w pobliżu\:§r {0} negativeBalanceError=§4Gracz nie może mieć ujemnego stanu konta. nickChanged=§7Nick gracza został zmieniony. nickCommandDescription=Zmień swój pseudonim lub pseudonim innego gracza. -nickCommandUsage=/<command> [player] <nazwa|off> -nickCommandUsage1=/<command> <nickname> +nickCommandUsage=/<command> [gracz] <nazwa|off> +nickCommandUsage1=/<command> <nazwa> nickCommandUsage1Description=Zmienia twój nick na podany tekst +nickCommandUsage2=/<command> off nickCommandUsage2Description=Usuwa twój nick +nickCommandUsage3=/<command> <gracz> <nazwa> nickCommandUsage3Description=Zmienia nick określonego gracza na podany tekst +nickCommandUsage4=/<command> <gracz> off nickCommandUsage4Description=Usuwa nick podanego gracza nickDisplayName=§4Musisz włączyć change-displayname w konfiguracji EssentialsX. nickInUse=§4Ten pseudonim jest już w użyciu. @@ -718,6 +813,7 @@ noWarpsDefined=§7Nie ma żadnych warpów. nuke=§5Niech smierć pochłonie cały świat\! nukeCommandDescription=Niech spadnie na nich deszcz śmierci. nukeCommandUsage=/<command> [gracz] +nukeCommandUsage1=/<command> [players...] nukeCommandUsage1Description=Wysyła bombę nuklearną na wszystkich graczy lub podanych graczy numberRequired=Tutaj powinna być liczba, gluptasie. onlyDayNight=/time obsługuje tylko day/night. @@ -771,9 +867,12 @@ posPitch=§7Pitch\: {0} (Kierunek głowy) possibleWorlds=§6Możliwe światy to numery od 0 do {0}. potionCommandDescription=Dodaje niestandardowe efekty mikstur do mikstury. potionCommandUsage=/<command> <clear|apply|effect\:<efekt> power\:<moc> duration\:<czas_trwania>> +potionCommandUsage1=/<command> clear potionCommandUsage1Description=Czyści wszystkie efekty na trzymanej mikstury +potionCommandUsage2=/<command> apply potionCommandUsage2Description=Nakłada na ciebie wszystkie efekty mikstury jej zużycia potionCommandUsage3=/<command> efekt\:<effect> moc\:<power> czas trwania\:<duration> +potionCommandUsage3Description=Dodaje metadane mikstury do utrzymanej mikstury posX=§7X\: {0} (+Wschód <-> -Zachód) posY=§7Y\: {0} (+Góra <-> -Dół) posYaw=§7Wysokość\: {0} (Rotacja) @@ -792,17 +891,34 @@ powerToolsDisabled=§7Wszystkie twoje podpięcia zostały zdezaktywowane. powerToolsEnabled=§7Wszystkie twoje podpięcia zostały aktywowane. powertoolCommandDescription=Przypisze polecenie do przedmiotu w ręce. powertoolCommandUsage=/<command> [l\:|a\:|r\:|c\:|d\:][polecenie] [parametry] - {gracz} można zastąpić nazwą klikniętego gracza. +powertoolCommandUsage1=/<command> l\: powertoolCommandUsage1Description=Wyświetla wszystkie przypisania poleceń na trzymanym przedmiocie +powertoolCommandUsage2=/<command> d\: powertoolCommandUsage2Description=Usuwa wszystkie przypisania poleceń z trzymanego przedmiotu +powertoolCommandUsage3=/<command> r\:<cmd> powertoolCommandUsage3Description=Usuwa przypisanie podanego polecenia z trzymanego przedmiotu +powertoolCommandUsage4=/<command> <cmd> powertoolCommandUsage4Description=Ustawia przypisane polecenie do trzymanego przedmiotu na podaną komendę +powertoolCommandUsage5=/<command> a\:<cmd> powertoolCommandUsage5Description=Przypisuje podane polecenie do trzymanego przedmiotu powertooltoggleCommandDescription=Włącza lub wyłącza wszystkie bieżące powertools''y. powertooltoggleCommandUsage=/<command> ptimeCommandDescription=Dostosuj czas klienta gracza. Dodaj prefiks @, aby naprawić. ptimeCommandUsage=/<command> [list|reset|day|night|dawn|17\:30|4pm|4000ticks] [gracz|*] +ptimeCommandUsage1=/<command> list [gracz|*] +ptimeCommandUsage1Description=Wyświetla czas gracza dla Ciebie lub dla innych/ego gracza/graczy +ptimeCommandUsage2=/<command> <czas> [gracz|*] +ptimeCommandUsage2Description=Ustawia czas dla Ciebie lub innego/innych gracza/graczy na określony czas +ptimeCommandUsage3=/<command> reset [gracz|*] +ptimeCommandUsage3Description=Resetuje czas dla ciebie lub innego/innych gracz(y) pweatherCommandDescription=Dostosuj pogodę gracza pweatherCommandUsage=/<command> [list|reset|storm|sun|clear] [gracz|*] +pweatherCommandUsage1=/<command> list [gracz|*] +pweatherCommandUsage1Description=Wyświetla pogodę gracza dla ciebie lub innych graczy +pweatherCommandUsage2=/<command> <storm|sun> [gracz|*] +pweatherCommandUsage2Description=Ustawia pogodę dla ciebie lub innych graczy +pweatherCommandUsage3=/<command> reset [gracz|*] +pweatherCommandUsage3Description=Resetuje pogodę dla ciebie lub innych graczy pTimeCurrent=Czas §e{0} u00a7f to {1}. pTimeCurrentFixed=§7Czas §c{0}§7 przywrócony do§c {1}§7. pTimeNormal=§7Czas gracza §c{0}§7 jest normalny i odpowiada serwerowemu. @@ -822,17 +938,21 @@ questionFormat=§2[Pytanie]§r {0} rCommandDescription=Szybko odpowiedz ostatniemu graczowi, który wysłał Ci wiadomość. rCommandUsage=/<command> <wiadomość> rCommandUsage1=/<command> <wiadomość> +rCommandUsage1Description=Odpowiada na wiadomość od ostatniego gracza z podanym tekstem radiusTooBig=§4Wyznaczony promień jest zbyt duży\! Maksymalny promień to§c {0}§4. readNextPage=§7Wpisz§c /{0} {1} §7aby przeczytać następną strone. realName=§f{0}§r§6 is §f{1} realnameCommandDescription=Wyświetla nazwę użytkownika w oparciu o nick. -realnameCommandUsage=/<command> <nickname> -realnameCommandUsage1=/<command> <nickname> +realnameCommandUsage=/<command> <nazwa> +realnameCommandUsage1=/<command> <nazwa> +realnameCommandUsage1Description=Wyświetla nazwę użytkownika na podstawie podanego nicku recentlyForeverAlone=§4{0} niedawno wszedł w tryb offline. recipe=§6Receptura dla §c{0}§6 ({1} z {2}) recipeBadIndex=Nie ma receptury dla tego numeru. recipeCommandDescription=Wyświetla jak wytwarzać przedmioty. -recipeCommandUsage=/<command> <item> [number] +recipeCommandUsage=/<command> <item> [numer] +recipeCommandUsage1=/<command> <item> [strona] +recipeCommandUsage1Description=Wyświetla jak wytwarzać dany item recipeFurnace=§6Przepal §c{0} recipeGrid=§c{0}X §6| §{1}X §6| §{2}X recipeGridItem=§{0}X §6to §c{1} @@ -842,16 +962,24 @@ recipeNothing=nic recipeShapeless=§7Kombinacja §c{0} recipeWhere=§7Gdzie\: {0} removeCommandDescription=Usuwa obiekty w twoim świecie. -removeCommandUsage=/<command> <all|tamed|named|drops|arrows|boats|minecarts|xp|paintings|itemframes|endercrystals|monsters|animals|ambient|mobs|[mobType]> [promień|świat] +removeCommandUsage=/<command> <all|tamed|named|drops|arrows|boats|minecarts|xp|paintings|itemframes|endercrystals|monsters|animals|ambient|mobs|[typ moba]> [promień|świat] +removeCommandUsage1=/<command> <typ moba> [świat] +removeCommandUsage1Description=Usuwa wszystkie potwory o podanym typie w bieżącym świecie lub innym +removeCommandUsage2=/<command> <typ moba> <promień> [świat] +removeCommandUsage2Description=Usuwa dany typ potwora w danym promieniu w bieżącym świecie lub innym removed=§7Usunięto§c {0} §7podmiotów. repair=§6Naprawiłeś pomyślnie swoje\: §c{0}. repairAlreadyFixed=§4Ten przedmiot nie potrzebuje naprawy. repairCommandDescription=Naprawia wytrzymałość jednego lub wszystkich przedmiotów. repairCommandUsage=/<command> [hand|all] repairCommandUsage1=/<command> +repairCommandUsage1Description=Naprawia trzymany przedmiot +repairCommandUsage2=/<command> all +repairCommandUsage2Description=Naprawia wszystkie przedmioty w twoim ekwipunku repairEnchanted=§4Nie masz uprawnień na naprawiania ulepszonych przedmiotów. repairInvalidType=§4Ten przedmiot nie może byc naprawiony. repairNone=§4Żadne twoje przedmioty nie potrzebują naprawy. +replyFromDiscord=**Odpowiedz od {0}\:** `{1}` replyLastRecipientDisabled=§6Odpowiadanie na wiadomość ostatniego odbiorcy wiadomości zostało §cwyłączone§6. replyLastRecipientDisabledFor=§6Odpowiadanie na wiadomość ostatniego odbiorcy wiadomości zostało §cwyłączone §6na §c{0}§6. replyLastRecipientEnabled=§6Odpowiadanie na wiadomość ostatniego odbiorcy wiadomości zostało §cwłączone§6. @@ -871,10 +999,11 @@ rest=&7Czujesz się dobrze wypoczęty. restCommandDescription=Zrelaksuj siebie lub danego gracza. restCommandUsage=/<command> [gracz] restCommandUsage1=/<command> [gracz] +restCommandUsage1Description=Resetuje twój lub innego gracza czas od odpoczynku restOther=§7Zrelaksowano§c {0}§6. returnPlayerToJailError=§4Wystąpił błąd podczas powracania gracza§c {0} §4do więzienia\: {1}\! rtoggleCommandDescription=Zmień, czy odbiorca odpowiedzi jest ostatnim odbiorcą czy ostatnim nadawcą -rtoggleCommandUsage=/<command> [player] [on|off] +rtoggleCommandUsage=/<command> [gracz] [on|off] rulesCommandDescription=Wyświetla regulamin serwera. rulesCommandUsage=/<command> [chapter] [page] runningPlayerMatch=§7Wyszukiwanie pasujących graczy §c{0}§7 (to może chwilę potrwać) @@ -882,12 +1011,22 @@ second=sekunda seconds=sekund seenAccounts=§6Gracz jest także znany jako\:§c {0} seenCommandDescription=Pokazuje czas ostatniego wylogowania gracza. -seenCommandUsage=/<command> <playername> -seenCommandUsage1=/<command> <playername> +seenCommandUsage=/<command> <nazwa gracza> +seenCommandUsage1=/<command> <nazwa gracza> +seenCommandUsage1Description=Pokazuje czas wylogowania, bana, wyciszenia i informacje UUID określonego gracza seenOffline=§6Gracz§c {0} §6jest §4offline§6 od {1}. seenOnline=§6Gracz§c {0} §6jest §aonline§6 od {1}. sellBulkPermission=§6Nie posiadasz uprawnień na sprzedaż wszystkich przedmiotów. sellCommandDescription=Sprzedaje przedmiot w Twojej ręce. +sellCommandUsage=/<command> <<nazwa itemu>|<id>|hand|inventory|blocks> [liczba] +sellCommandUsage1=/<command> <nazwa itemu> [liczba] +sellCommandUsage1Description=Sprzedaje całość (lub podaną liczbę) danych itemów w twoim ekwipunku +sellCommandUsage2=/<command> hand [liczba] +sellCommandUsage2Description=Sprzedaje całość (lub podaną liczbę) trzymanych itemów +sellCommandUsage3=/<command> all +sellCommandUsage3Description=Sprzedaje wszystkie możliwe przedmioty w twoim ekwipunku +sellCommandUsage4=/<command> blocks [liczba] +sellCommandUsage4Description=Sprzedaje wszystkie (lub podaną liczbę) bloków w twoim ekwipunku sellHandPermission=§6Nie posiadasz uprawnień na sprzedaż przedmiotów trzymanych w ręku. serverFull=Serwer jest pełen graczy, spróbuj pozniej. serverReloading=Istnieje duża szansa, że właśnie teraz przeładowujesz serwer. Jeśli tak jest, dlaczego siebie nienawidzisz? Nie oczekuj wsparcia ze strony zespołu EssentialsX podczas korzystania z komendy /reload. @@ -903,17 +1042,21 @@ setBalOthers=§aUstawiłeś saldo {0}§a na {1}. setSpawner=§6Zmieniono typ spawnera na§c {0} sethomeCommandDescription=Ustaw swój dom na bieżącą lokalizację. sethomeCommandUsage=/<command> [[gracz\:]nazwa] -sethomeCommandUsage1=/<command> <name> -sethomeCommandUsage2=/<command> <player>\:<name> +sethomeCommandUsage1=/<command> <nazwa> +sethomeCommandUsage1Description=Ustawia twój dom o podanej nazwie w Twojej lokalizacji +sethomeCommandUsage2=/<command> <gracz>\:<nazwa> sethomeCommandUsage2Description=Ustawia dom określonego gracza o podanej nazwie w twojej lokalizacji setjailCommandDescription=Tworzy więzienie, w którym podałeś nazwę [jailname]. setjailCommandUsage=/<command> <nazwa_więzienia> setjailCommandUsage1=/<command> <nazwa_więzienia> setjailCommandUsage1Description=Ustawia położenie więzienia o określonej nazwie na twoją lokalizację settprCommandDescription=Ustaw losową lokalizację i parametry teleportu. -settprCommandUsage=/<command> [center|minrange|maxrange] [value] +settprCommandUsage=/<command> [center|minrange|maxrange] [wartość] +settprCommandUsage1=/<command> center settprCommandUsage1Description=Ustawia środek obszaru losowej teleportacji na twoją lokalizację +settprCommandUsage2=/<command> minrange <promień> settprCommandUsage2Description=Ustawia minimalny promień losowej teleportacji na podaną wartość +settprCommandUsage3=/<command> maxrange <promień> settprCommandUsage3Description=Ustawia maksymalny promień losowej teleportacji na podaną wartość settpr=§6Ustawi środek losowej teleportacji. settprValue=§7Ustaw losowy teleport §c{0}§7 na §c{1}§7. @@ -922,8 +1065,10 @@ setwarpCommandUsage=/<command> <warp> setwarpCommandUsage1=/<command> <warp> setwarpCommandUsage1Description=Ustawia warp o określonej nazwie na twoją lokalizację setworthCommandDescription=Ustaw wartość sprzedaży produktu. -setworthCommandUsage=/<command> [itemname|id] <price> +setworthCommandUsage=/<command> [nazwa itemu|id] <cena> +setworthCommandUsage1=/<command> <kwota> setworthCommandUsage1Description=Ustawia wartość trzymanego przedmiotu na podaną cenę +setworthCommandUsage2=/<command> <nazwa itemu> <kwota> setworthCommandUsage2Description=Ustawia wartość określonego przedmiotu na podaną cenę sheepMalformedColor=§4Niewłaściwa barwa. shoutDisabled=§6Tryb gromki §cwyłączony§6. @@ -934,8 +1079,8 @@ shoutFormat=§7[Gromko]§r {0} editsignCommandClear=§7Znak wyczyszczony. editsignCommandClearLine=§7Usunięto linię§c {0}§7. showkitCommandDescription=Pokaże zawartość zestawu. -showkitCommandUsage=/<command> <nazwa_zestawu> -showkitCommandUsage1=/<command> <nazwa_zestawu> +showkitCommandUsage=/<command> <nazwa zestawu> +showkitCommandUsage1=/<command> <nazwa zestawu> showkitCommandUsage1Description=Wyświetla podsumowanie przedmiotów w określonym zestawie editsignCommandDescription=Edytuje tabliczkę na świecie. editsignCommandLimit=§4Podany tekst jest zbyt duży, aby zmieścić się na tabliczce docelowej. @@ -947,9 +1092,13 @@ editsignCopyLine=§7Skopiowano wiersz §c{0} §6tabliczki\! Wklej go, używając editsignPaste=§6Tabliczka została wklejona\! editsignPasteLine=§6Wklejono wiersz §c{0} §6tabliczki\! editsignCommandUsage=/<command> <set/clear/copy/paste> [numer wiersza] [text] +editsignCommandUsage1=/<command> set <numer linii> <tekst> editsignCommandUsage1Description=Ustawia określony wiersz znaku docelowego na dany tekst +editsignCommandUsage2=/<command> clear <numer linii> editsignCommandUsage2Description=Czyści określony wiersz znaku docelowego +editsignCommandUsage3=/<command> copy [numer linii] editsignCommandUsage3Description=Kopiuje wszystkie (lub określony wiersz) znaku docelowego do schowka +editsignCommandUsage4=/<command> paste [numer linii] editsignCommandUsage4Description=Wkleja twój schowek do całości (lub określonego wiersza) znaku docelowego signFormatFail=§4[{0}] signFormatSuccess=§1[{0}] @@ -961,9 +1110,11 @@ south=S southWest=SW skullChanged=§6Czaszka została zmieniona na §c{0}§6. skullCommandDescription=Ustaw właściciela czaszki gracza -skullCommandUsage=/<command> [owner] +skullCommandUsage=/<command> [właściciel] skullCommandUsage1=/<command> +skullCommandUsage1Description=Daje ci twoją własną czaszkę skullCommandUsage2=/<command> <gracz> +skullCommandUsage2Description=Daje czaszkę określonego gracza slimeMalformedSize=§4Niewłaściwy rozmiar. smithingtableCommandDescription=Otwiera stół kowalski. smithingtableCommandUsage=/<command> @@ -971,24 +1122,36 @@ socialSpy=§6SocialSpy dla {0}§6\: {1} socialSpyMsgFormat=§6[§c{0}§7 -> §c{1}§6] §7{2} socialSpyMutedPrefix=§f[§6SS§f] §7(wyciszony) §r socialspyCommandDescription=Przełącza, jeśli możesz zobaczyć komendy msg/mail na czacie. -socialspyCommandUsage=/<command> [player] [on|off] +socialspyCommandUsage=/<command> [gracz] [on|off] socialspyCommandUsage1=/<command> [gracz] +socialspyCommandUsage1Description=Przełącza szpiegowanie dla siebie lub innego gracza socialSpyPrefix=§f[§6SS§f] §r soloMob=§4Ten mob lubi być sam. spawned=stworzono spawnerCommandDescription=Zmień typ potwora spawnera. -spawnerCommandUsage=/<command> <mob> [delay] -spawnerCommandUsage1=/<command> <mob> [delay] +spawnerCommandUsage=/<command> <mob> [odstęp] +spawnerCommandUsage1=/<command> <mob> [odstęp] +spawnerCommandUsage1Description=Zmienia typ potwora (i opcjonalnie opóźnienie) spawnera, na który patrzysz spawnmobCommandDescription=Przywołuje potwora. -spawnmobCommandUsage=/<command> <mob>[\:data][,<mount>[\:data]] [amount] [player] +spawnmobCommandUsage=/<command> <mob>[\:data][,<mount>[\:data]] [liczba] [gracz] +spawnmobCommandUsage1=/<command> <mob>[\:data] [liczba] [gracz] +spawnmobCommandUsage1Description=Tworzy jeden (lub określoną ilość) danego moba w Twojej lokalizacji (lub innego gracza) +spawnmobCommandUsage2=/<command> <mob>[\:data],<mount>[\:data] [liczba] [gracz] +spawnmobCommandUsage2Description=Tworzy jeden (lub określoną ilość) danego potwora jeżdżącego w Twojej lokalizacji (lub innego gracza) spawnSet=§7Ustawiono punkt spawnu dla grupy§c {0}§7. spectator=obserwator speedCommandDescription=Zmień ograniczenia prędkości. -speedCommandUsage=/<command> [type] <speed> [player] +speedCommandUsage=/<command> [typ] <prędkość> [gracz] +speedCommandUsage1=/<command> <prędkość> +speedCommandUsage1Description=Ustawia prędkość lotu lub chodzenia na podaną prędkość +speedCommandUsage2=/<command> <typ> <prędkość> [gracz] +speedCommandUsage2Description=Ustawia określony typ prędkości na podaną prędkość dla Ciebie lub dla innego gracza stonecutterCommandDescription=Otwiera przecinarkę. stonecutterCommandUsage=/<command> sudoCommandDescription=Spraw aby inny użytkownik wykonał polecenie. -sudoCommandUsage=/<command> <player> <command [args]> +sudoCommandUsage=/<command> <gracz> <komenda [argumenty]> +sudoCommandUsage1=/<command> <gracz> <komenda> [argumenty] +sudoCommandUsage1Description=Sprawia, że określony gracz uruchamia daną komendę sudoExempt=§4Nie możesz podnieść uprawnień tego użytkownika. sudoRun=§6Forcing§c {0} §6to run\:§r /{1} suicideCommandDescription=Powoduje, że zginiesz. @@ -1027,16 +1190,29 @@ tempbanExemptOffline=§4Nie możesz tymczasowo zablokować graczy offline. tempbanJoin=Jesteś zbanowany na tym serwerze na {0}. Powód\: {1} tempBanned=§cZostałeś czasowo zbanowany na§r {0}\:\n§r{2} tempbanCommandDescription=Tymczasowo zbanuje użytkownika. +tempbanCommandUsage=/<command> <nick> <czas> [powód] +tempbanCommandUsage1=/<command> <gracz> <długość> [powód] +tempbanCommandUsage1Description=Banuje danego gracza na określony czas z opcjonalnym powodem tempbanipCommandDescription=Tymczasowo zbanuje adres IP. +tempbanipCommandUsage=/<command> <nick> <czas> [powód] +tempbanipCommandUsage1=/<command> <player|ip-address> <czas> [powód] +tempbanipCommandUsage1Description=Blokuje podany adres IP na określoną ilość czasu z opcjonalnym powodem thunder=§c{0} §7przywołał burzę. thunderCommandDescription=Włącz/wyłącz burzę. thunderCommandUsage=/<command> <true/false> [czas_trwania] +thunderCommandUsage1=/<command> <true|false> [długość] +thunderCommandUsage1Description=Włącza/wyłącza burzę na opcjonalny czas trwania thunderDuration=§7Gracz §c{0} §7przywołał burzę na§c {1} §7sekund. timeBeforeHeal=§7Czas przed następnym uzdrowieniem\:§c {0}§7. timeBeforeTeleport=§7Czas przed następnym teleportem\:§c {0}§7. timeCommandDescription=Wyświetlanie/zmiana czasu świata. Domyślnie dla bieżącego świata. -timeCommandUsage=/<command> [set|add] [day|night|dawn|17\:30|4pm|4000ticks] [worldname|all] +timeCommandUsage=/<command> [set|add] [day|night|dawn|17\:30|4pm|4000ticks] [nazwa świata|all] timeCommandUsage1=/<command> +timeCommandUsage1Description=Wyświetla czas we wszystkich światach +timeCommandUsage2=/<command> set <czas> [świat|all] +timeCommandUsage2Description=Ustawia czas w bieżącym (lub określonym) świecie na określony czas +timeCommandUsage3=/<command> add <czas> [świat|all] +timeCommandUsage3Description=Dodaje określony czas do bieżącego (lub określonego) czasu świata timeFormat=§c{0}§6 lub §c{1}§6 lub §c{2}§6 timeSetPermission=§4Nie masz uprawnień do ustawiania czasu. timeSetWorldPermission=§4Nie masz uprawnień do zmiany czasu w świecie {0}. @@ -1045,10 +1221,11 @@ timeWorldCurrent=§7Obecny czas§c {0} §7to §c{1}§7. timeWorldCurrentSign=§6Aktualny czas gry\: §c{0}§6. timeWorldSet=§7Ustawiono czas§c {0} §7w\: §c{1}§7. togglejailCommandDescription=Wtrąci gracza do więzienia lub go z niego zwolni, teleportacja do podanego więzienia. -togglejailCommandUsage=/<command> <player> <jailname> [datediff] +togglejailCommandUsage=/<command> <gracz> <nazwa więzienia> [czas] toggleshoutCommandDescription=Przełącza, czy mówisz w trybie gromkim -toggleshoutCommandUsage=/<command> [player] [on|off] +toggleshoutCommandUsage=/<command> [gracz] [on|off] toggleshoutCommandUsage1=/<command> [gracz] +toggleshoutCommandUsage1Description=Przełącza możliwość pisania prywatnych wiadomości dla Ciebie lub innego gracza topCommandDescription=Teleportuj się do najwyższego bloku w Twojej obecnej pozycji. topCommandUsage=/<command> totalSellableAll=§aCałkowita wartość wszystkich sprzedawalnych przedmiotów i bloków wynosi §c{1}§a. @@ -1056,61 +1233,83 @@ totalSellableBlocks=§aCałkowita wartość wszystkich sprzedawalnych bloków wy totalWorthAll=§aSprzedano wszystkie twoje bloki i przedmioty za kwotę {1}. totalWorthBlocks=§aSprzedano wszystkie twoje bloki za kwotę {1}. tpCommandDescription=Przeteleportuj do gracza. -tpCommandUsage=/<command> <player> [otherplayer] +tpCommandUsage=/<command> <gracz> [inny gracz] tpCommandUsage1=/<command> <gracz> +tpCommandUsage1Description=Teleportuje cię do określonego gracza +tpCommandUsage2=/<command> <gracz> <inny gracz> +tpCommandUsage2Description=Teleportuje pierwszego gracza do drugiego tpaCommandDescription=Poproś o teleportację do określonego gracza. tpaCommandUsage=/<command> <gracz> tpaCommandUsage1=/<command> <gracz> +tpaCommandUsage1Description=Prosi o teleportację do określonego gracza tpaallCommandDescription=Prosi wszystkich graczy online, aby przeteleportowali się do ciebie. tpaallCommandUsage=/<command> <gracz> tpaallCommandUsage1=/<command> <gracz> +tpaallCommandUsage1Description=Prośba dla wszystkich graczy o teleportację do Ciebie tpacancelCommandDescription=Anuluj wszystkie pozostałe prośby o teleportację. Określ [player], aby anulować zapytania z nimi. tpacancelCommandUsage=/<command> [gracz] tpacancelCommandUsage1=/<command> +tpacancelCommandUsage1Description=Anuluje wszystkie Twoje oczekujące żądania teleportacji tpacancelCommandUsage2=/<command> <gracz> +tpacancelCommandUsage2Description=Anuluje wszystkie twoje prośby o teleportację do określonego gracza tpacceptCommandDescription=Akceptuje prośbę o teleportację. -tpacceptCommandUsage=/<command> [otherplayer] +tpacceptCommandUsage=/<command> [inny gracz] tpacceptCommandUsage1=/<command> +tpacceptCommandUsage1Description=Akceptuje przychodzące żądanie teleportu tpahereCommandDescription=Poproś, aby określony gracz teleportował się do ciebie. tpahereCommandUsage=/<command> <gracz> tpahereCommandUsage1=/<command> <gracz> +tpahereCommandUsage1Description=Prośba o teleportację do Ciebie przez określonego gracza tpallCommandDescription=Teleportuj wszystkich graczy online do innego gracza. tpallCommandUsage=/<command> [gracz] tpallCommandUsage1=/<command> [gracz] +tpallCommandUsage1Description=Teleportuje wszystkich graczy do ciebie lub innego gracza tpautoCommandDescription=Automatycznie akceptuj prośby o teleportację. tpautoCommandUsage=/<command> [gracz] tpautoCommandUsage1=/<command> [gracz] +tpautoCommandUsage1Description=Przełącza automatyczne akceptowanie próśb o teleport dla Ciebie lub innego gracza tpdenyCommandDescription=Odrzuć prośbę o teleportację. tpdenyCommandUsage=/<command> tpdenyCommandUsage1=/<command> +tpdenyCommandUsage1Description=Odrzuca prośbę o teleport przychodzący tphereCommandDescription=Teleportuje gracza do ciebie. tphereCommandUsage=/<command> <gracz> tphereCommandUsage1=/<command> <gracz> +tphereCommandUsage1Description=Teleportuje do Ciebie określonego gracza tpoCommandDescription=Zastąp teleportację dla tptoggle. -tpoCommandUsage=/<command> <player> [otherplayer] +tpoCommandUsage=/<command> <gracz> [inny gracz] tpoCommandUsage1=/<command> <gracz> +tpoCommandUsage1Description=Teleportuje określonego gracza do ciebie podczas nadpisywania ich preferencji +tpoCommandUsage2=/<command> <gracz> <inny gracz> +tpoCommandUsage2Description=Teleportuje pierwszego określonego gracza do drugiego tpofflineCommandDescription=Teleportuj się do ostatniej znanej lokalizacji wylogowania gracza tpofflineCommandUsage=/<command> <gracz> tpofflineCommandUsage1=/<command> <gracz> +tpofflineCommandUsage1Description=Teleportuje cię do lokalizacji wylogowania określonego gracza tpohereCommandDescription=Teleportuj się tutaj do tptoggle. tpohereCommandUsage=/<command> <gracz> tpohereCommandUsage1=/<command> <gracz> +tpohereCommandUsage1Description=Teleportuje określonego gracza do ciebie podczas nadpisywania ich preferencji tpposCommandDescription=Teleportuj do współrzędnych. -tpposCommandUsage=/<command> <x> <y> <z> [yaw] [pitch] [world] -tpposCommandUsage1=/<command> <x> <y> <z> [yaw] [pitch] [world] +tpposCommandUsage=/<command> <x> <y> <z> [yaw] [pitch] [świat] +tpposCommandUsage1=/<command> <x> <y> <z> [yaw] [pitch] [świat] +tpposCommandUsage1Description=Teleportuje cię do określonej lokalizacji w opcjonalnym rotacji, nachyleniu i/lub świecie tprCommandDescription=Teleportuje losowo. tprCommandUsage=/<command> tprCommandUsage1=/<command> +tprCommandUsage1Description=Teleportuje cię do losowej lokalizacji tprSuccess=§7Teleportowanie do losowej lokalizacji... tps=§7Aktualne TPS \= {0} tptoggleCommandDescription=Blokuje wszystkie formy teleportacji. -tptoggleCommandUsage=/<command> [player] [on|off] +tptoggleCommandUsage=/<command> [gracz] [on|off] tptoggleCommandUsage1=/<command> [gracz] +tptoggleCommandUsageDescription=Przełącza możliwość teleportacji dla Ciebie lub innego gracza tradeSignEmpty=§4Tabliczka handlowa nie jest dla Ciebie dostępna. tradeSignEmptyOwner=§4Nie ma nic do pobrania z tej tabliczki. treeCommandDescription=Posadzi drzewo w miejscu, gdzie patrzysz. treeCommandUsage=/<command> <tree|birch|redwood|redmushroom|brownmushroom|jungle|junglebush|swamp> treeCommandUsage1=/<command> <tree|birch|redwood|redmushroom|brownmushroom|jungle|junglebush|swamp> +treeCommandUsage1Description=Tworzy drzewo określonego typu tam gdzie patrzysz treeFailure=§4Utworzenie drzewa nie powiodło sie, spróbuj na trawie lub ziemi. treeSpawned=§7Stworzono drzewo. true=§2tak§r @@ -1123,15 +1322,23 @@ unableToSpawnMob=§4Nie udało sie stworzyc potwora. unbanCommandDescription=Odbanowuje określonego gracza. unbanCommandUsage=/<command> <gracz> unbanCommandUsage1=/<command> <gracz> +unbanCommandUsage1Description=Odbanowuje określonego gracza unbanipCommandDescription=Odbanowuje podany adres IP. unbanipCommandUsage=/<command> <adres> unbanipCommandUsage1=/<command> <adres> +unbanipCommandUsage1Description=Odblokowuje określony adres IP unignorePlayer=§7Nie ignorujesz już gracza §c{0}§7. unknownItemId=§4Nieznane id przedmiotu\:§r {0}§4. unknownItemInList=§4Nieznany przedmiot {0} w liscie {1} . unknownItemName=§4Nieznana nazwa przedmiotu\: {0}. unlimitedCommandDescription=Pozwala na nieograniczone umieszczanie przedmiotów. -unlimitedCommandUsage=/<command> <list|item|clear> [player] +unlimitedCommandUsage=/<command> <list|item|clear> [gracz] +unlimitedCommandUsage1=/<command> list [gracz] +unlimitedCommandUsage1Description=Wyświetla listę nielimitowanych przedmiotów dla siebie lub innego gracza +unlimitedCommandUsage2=/<command> <item> [gracz] +unlimitedCommandUsage2Description=Przełącza czy dany przedmiot jest nielimitowany dla Ciebie lub innego gracza +unlimitedCommandUsage3=/<command> clear [gracz] +unlimitedCommandUsage3Description=Czyści wszystkie nielimitowane przedmioty dla Ciebie lub innego gracza unlimitedItemPermission=§4Brak uprawnień na nielimitowane użycie {0}. unlimitedItems=§7Nielimitowane przedmioty\:§r unmutedPlayer=§7Gracz§c {0} §7może znowu mówić. @@ -1158,8 +1365,9 @@ userUnknown=§4Ostrzeżenie\: Gracz §c{0}§4 nigdy nie był na tym serwerze. usingTempFolderForTesting=Używam tymczasowego folderu dla testu\: vanish=§6Vanish dla {0}§6\: {1} vanishCommandDescription=Ukryj się przed innymi graczami. -vanishCommandUsage=/<command> [player] [on|off] +vanishCommandUsage=/<command> [gracz] [on|off] vanishCommandUsage1=/<command> [gracz] +vanishCommandUsage1Description=Przełącza niewidzialność dla siebie lub innego gracza vanished=§7Już jesteś niewidoczny. versionCheckDisabled=§6Sprawdzanie aktualizacji jest wyłączone w pliku kofiguracyjnym. versionCustom=§6Sprawdzenie wersji nie jest możliwe\! Własna kompilacja? Informacje o kompilacji\: §c{0}§6. @@ -1176,6 +1384,7 @@ versionOutputFine=§6{0} wersja\: §a{1} versionOutputWarn=§6{0} wersja\: §c{1} versionOutputUnsupported=§d{0} §6wersja\: §d{1} versionOutputUnsupportedPlugins=§6Używasz §dniewspieranych wtyczek§6\! +versionOutputEconLayer=§7Warstwa ekonomiczna\: §r{0} versionMismatch=§4Niepoprawna wersja\! Proszę zaktualizować {0} do tej samej wersji co inne pliki. versionMismatchAll=§4Niepoprawna wersja\! Proszę zaktualizować wszystkie pliki Essentials do tej samej wersji. versionReleaseLatest=§6Używasz najnowszej stabilnej wersji EssentialsX\! @@ -1187,13 +1396,17 @@ voiceSilencedReason=§6Twój głos został wyciszony\! Powód\: §c{0} voiceSilencedReasonTime=§6Twój głos został wyciszony do {0}\! Powód\: §c{1} walking=chodzi warpCommandDescription=Lista wszystkich warpów lub warpów do określonej lokalizacji. -warpCommandUsage=/<command> <pagenumber|warp> [player] -warpCommandUsage1=/<command> [page] +warpCommandUsage=/<command> <numer strony|warp> [gracz] +warpCommandUsage1=/<command> [strona] +warpCommandUsage1Description=Pokazuje listę wszystkich warpów na pierwszej lub określonej stronie +warpCommandUsage2=/<command> <warp> [gracz] +warpCommandUsage2Description=Teleportuje Ciebie lub określonego gracza do danego warpu warpDeleteError=§4Wystąpił problem podczas usuwania pliku z warpami. warpInfo=§7Informacje o warpie§c {0}§6\: warpinfoCommandDescription=Znajdzie informacje o położeniu podanego warpu. warpinfoCommandUsage=/<command> <warp> warpinfoCommandUsage1=/<command> <warp> +warpinfoCommandUsage1Description=Pokazuje informacje o danym warpie warpingTo=§7Teleportuje do§c {0}§7. warpList={0} warpListPermission=§4Nie masz pozwolenia na sprawdzenie listy warpów.. @@ -1203,6 +1416,8 @@ warps=Warpy\: {0} warpsCount=§6Jest§c {0} §6warpów. Wyświetlanie strony {1} z {2}. weatherCommandDescription=Ustawia pogodę. weatherCommandUsage=/<command> <storm/sun> [czas_trwania] +weatherCommandUsage1=/<command> <storm|sun> [czas] +weatherCommandUsage1Description=Ustawia pogodę na dany typ na opcjonalny czas trwania warpSet=§7Warp§c {0} §7stworzony. warpUsePermission=§4Nie masz pozwolenia na korzystanie z tego warpu. weatherInvalidWorld=Świat o nazwie {0} nie został odnaleziony\! @@ -1217,8 +1432,9 @@ whoisAFK=§7 - AFK\:§r {0} whoisAFKSince=§6 - AFK\:§r {0} (Since {1}) whoisBanned=§7 - Zbanowany\:§r {0}. whoisCommandDescription=Określ nazwę użytkownika za nickiem. -whoisCommandUsage=/<command> <nickname> +whoisCommandUsage=/<command> <nazwa> whoisCommandUsage1=/<command> <gracz> +whoisCommandUsage1Description=Daje podstawowe informacje o określonym graczu whoisExp=§7 - Punkty doświadczenia\:§r {0} (Poziom {1}). whoisFly=§7 - Latanie\:§r {0} ({1}) whoisSpeed=§6 - Prędkość\:§r {0} @@ -1242,11 +1458,22 @@ whoisUuid=§6 - UUID\:§r {0} workbenchCommandDescription=Otwiera stół rzemieślniczy. workbenchCommandUsage=/<command> worldCommandDescription=Przełącz się między światami. -worldCommandUsage=/<command> [world] +worldCommandUsage=/<command> [świat] worldCommandUsage1=/<command> +worldCommandUsage1Description=Teleportuje się do Twojej odpowiedniej lokalizacji w netherze lub zwykłym świecie +worldCommandUsage2=/<command> <świat> +worldCommandUsage2Description=Teleportuje się do Twojej lokalizacji w danym świecie worth=§aStack {0} jest warty §c{1}§a ({2}rzedmiot(y) po {3} każdy) worthCommandDescription=Oblicza wartość elementów znajdujących się w rękach lub w sposób określony. -worthCommandUsage=/<command> <<itemname>|<id>|hand|inventory|blocks> [-][amount] +worthCommandUsage=/<command> <<nazwa itemu>|<id>|hand|inventory|blocks> [-][liczba] +worthCommandUsage1=/<command> <nazwa itemu> [liczba] +worthCommandUsage1Description=Sprawdza wartość wszystkich (lub podanej liczby) danego itemu w twoim ekwipunku +worthCommandUsage2=/<command> hand [liczba] +worthCommandUsage2Description=Sprawdza wartość wszystkich (lub danej liczby, jeśli określona) trzymanych itemów +worthCommandUsage3=/<command> all +worthCommandUsage3Description=Sprawdza wartość wszystkich możliwych itemów w twoim ekwipunku +worthCommandUsage4=/<command> blocks [liczba] +worthCommandUsage4Description=Sprawdza wartość wszystkich (lub podaną liczbę, jeśli określona) bloków w twoim ekwipunku worthMeta=§aStack {0} z metadata {1} jest warty §c{2}§a ({3} przedmiot(y) po {4} każdy) worthSet=§7Cena przedmiotu została ustawiona. year=rok diff --git a/Essentials/src/main/resources/messages_pt.properties b/Essentials/src/main/resources/messages_pt.properties index ecc56d9183a..4592613f1b7 100644 --- a/Essentials/src/main/resources/messages_pt.properties +++ b/Essentials/src/main/resources/messages_pt.properties @@ -10,6 +10,7 @@ afkCommandDescription=Marca-te como AFK. afkCommandUsage=/<command> [jogador/mensagem...] afkCommandUsage1=/<command> [mensagem] afkCommandUsage1Description=Alterna o estado afk com uma razão opcional +afkCommandUsage2=/<command> <jogador> [mensagem] afkCommandUsage2Description=Alterna o estado afk de um jogador com uma razão opcional alertBroke=destruído\: alertFormat=§3[{0}] §r {1} §6 {2} em\: {3} @@ -57,6 +58,8 @@ balanceOther=§aDinheiro de {0}§a\:§c {1} balanceTop=§6Mais ricos ({0}) balanceTopLine={0}. {1}, {2} balancetopCommandDescription=Mostra uma lista dos jogadores mais ricos do servidor. +balancetopCommandUsage=/<command> [página] +balancetopCommandUsage1=/<command> [página] balancetopCommandUsage1Description=Indica uma página da lista dos jogadores mais ricos banCommandDescription=Bane um jogador. banCommandUsage=/<command> <jogador> [motivo] @@ -68,6 +71,8 @@ banFormat=§4Foste banido\: n§r{0} banIpJoin=O teu endereço IP foi banido deste servidor. Razão\: {0} banJoin=Foste banido deste servidor. Razão\: {0} banipCommandDescription=Bane um endereço IP. +banipCommandUsage=/<command> <endereço> [motivo] +banipCommandUsage1=/<command> <endereço> [motivo] banipCommandUsage1Description=Bane um endereço IP com um motivo opcional bed=§ocama§r bedMissing=§4A tua cama não foi definida, está corrompida ou está bloqueada. @@ -89,7 +94,9 @@ bookCommandDescription=Permite reabrir e editar livros que estejam assinados. bookCommandUsage=/<command> [título|autor [nome]] bookCommandUsage1=/<command> bookCommandUsage1Description=Bloqueia ou desbloqueia um livro assinado +bookCommandUsage2=/<command> author <autor> bookCommandUsage2Description=Define o autor de um livro assinado +bookCommandUsage3=/<command> title <título> bookCommandUsage3Description=Define o título de um livro assinado bookLocked=§6O livro está agora trancado. bookTitleSet=§6O título do livro foi definido para {0}. @@ -131,6 +138,7 @@ clearinventoryCommandUsage1=/<command> clearinventoryCommandUsage1Description=Elimina todos os itens do teu inventário clearinventoryCommandUsage2=/<command> <jogador> clearinventoryCommandUsage2Description=Elimina todos os itens do inventário de um jogador +clearinventoryCommandUsage3=/<command> <jogador> <item> [quantidade] clearinventoryCommandUsage3Description=Elimina todos (ou um número específico) de itens do inventário de um jogador clearinventoryconfirmtoggleCommandDescription=Alterna o aviso de destruição de itens do inventário. clearinventoryconfirmtoggleCommandUsage=/<command> @@ -150,6 +158,7 @@ compassBearing=§6A apontar para\: {0} ({1} graus). compassCommandDescription=Indica a direção cardeal para qual estás a olhar. compassCommandUsage=/<command> condenseCommandDescription=Condensa os itens em blocos compactos. +condenseCommandUsage=/<command> [item] condenseCommandUsage1=/<command> condenseCommandUsage1Description=Junta todos os itens no teu inventário condenseCommandUsage2=/<command> <item> @@ -172,6 +181,7 @@ createkitCommandUsage1Description=Cria um kit com nome e atraso createKitFailed=§4Ocorreu um erro ao criar o kit {0}. createKitSeparator=§m----------------------- createKitSuccess=§6Kit criado\: §f{0}\n§Atraso\: §f{1}\n§6Ligação\: §f{2}\n§6Copia o conteúdo da ligação acima para o ficheiro kits.yml. +createKitUnsupported=§4A serialização NBT foi ativada, mas como o servidor não está a executar o Paper 1.15.2+, irá retomar à serialização padrão de itens. creatingConfigFromTemplate=A criar uma configuração baseada no modelo\: {0} creatingEmptyConfig=A criar uma configuração vazia\: {0} creative=criativo @@ -193,7 +203,9 @@ deletingHomes=A eliminar todas as casas... deletingHomesWorld=A eliminar todas as casas em {0}... delhomeCommandDescription=Remove uma casa. delhomeCommandUsage=/<command> [jogador\:]<nome> +delhomeCommandUsage1=/<command> <nome> delhomeCommandUsage1Description=Elimina uma das tuas casas +delhomeCommandUsage2=/<command> <jogador>\:<nome> delhomeCommandUsage2Description=Elimina uma das casas de um jogador deljailCommandDescription=Remove uma jaula. deljailCommandUsage=/<command> <nome da jaula> @@ -220,6 +232,20 @@ destinationNotSet=Não foi definido nenhum destino\! disabled=desativou disabledToSpawnMob=§4A geração desta criatura foi desativada no ficheiro de configurações. disableUnlimited=§6A permissão de construção ilimitada de §c{0} §6foi desativada por §c{1}§6. +discordCommandExecuteDescription=Executa um comando da consola no servidor de Minecraft. +discordCommandExecuteArgumentCommand=O comando a ser executado +discordCommandExecuteReply=Comando a ser executado\: "/{0}" +discordCommandListDescription=Dispõe uma lista dos jogadores online. +discordCommandListArgumentGroup=Um grupo específico para limitares a pesquisa +discordCommandMessageDescription=Envia uma mensagem a um jogador no servidor de Minecraft. +discordCommandMessageArgumentUsername=O jogador a quem enviar a mensagem +discordCommandMessageArgumentMessage=A mensagem a enviar ao jogador +discordErrorCommand=Não adicionaste corretamente o bot ao teu servidor. Segue as instruções no ficheiro de configurações e adiciona o bot com https\://essentialsx.net/discord.html\! +discordErrorCommandDisabled=Este comando está desativado\! +discordErrorNoGuild=O ID do servidor é inválido\! Segue as instruções no ficheiro de configurações para definires corretamente o plugin. +discordLoggingIn=A iniciar sessão no Discord... +discordLoggingInDone=Sessão iniciada como {0} +discordNoSendPermission=Não foi possível enviar a mensagem no canal \#{0} Certifica-te que o bot tem permissões para enviar mensagens nesse canal\! disposal=Reciclagem disposalCommandDescription=Abre uma reciclagem portátil. disposalCommandUsage=/<command> @@ -231,9 +257,13 @@ durability=§6Esta ferramenta ainda pode ser usada mais §c{0}§6 vezes east=E ecoCommandDescription=Gere a economia do servidor. ecoCommandUsage=/<command> <give|take|set|reset> <jogador> <quantidade> +ecoCommandUsage1=/<command> give <jogador> <quantidade> ecoCommandUsage1Description=Dá uma quantidade especificada de dinheiro a um jogador +ecoCommandUsage2=/<command> take <jogador> <quantidade> ecoCommandUsage2Description=Remove uma quantidade especificada de dinheiro de um jogador +ecoCommandUsage3=/<command> set <jogador> <quantidade> ecoCommandUsage3Description=Define o saldo de um jogador para uma quantidade especificada +ecoCommandUsage4=/<command> reset <jogador> <quantidade> ecoCommandUsage4Description=Repõe o saldo de um jogador para o saldo inicial editBookContents=§eAgora podes editar o conteúdo deste livro. enabled=ativado @@ -257,12 +287,19 @@ errorCallingCommand=Ocorreu um erro ao usar o comando /{0} errorWithMessage=§cErro\:§4 {0} essentialsCommandDescription=Recarrega o EssentialsX. essentialsCommandUsage=/<command> +essentialsCommandUsage1=/<command> reload essentialsCommandUsage1Description=Recarrega as configurações do EssentialsX +essentialsCommandUsage2=/<command> version essentialsCommandUsage2Description=Dispõe informação sobre a versão do Essentials +essentialsCommandUsage3=/<command> commands essentialsCommandUsage3Description=Dispõe informação sobre os comandos que o Essentials está a reencaminhar +essentialsCommandUsage4=/<command> debug essentialsCommandUsage4Description=Alterna o modo depuração do Essentials +essentialsCommandUsage5=/<command> reset <jogador> essentialsCommandUsage5Description=Repõe os dados de um jogador +essentialsCommandUsage6=/<command> cleanup essentialsCommandUsage6Description=Elimina os dados antigos de um jogador +essentialsCommandUsage7=/<command> homes essentialsCommandUsage7Description=Gere as casas de um jogador essentialsHelp1=O ficheiro está corrompido e o Essentials não o consegue abrir. O Essentials está agora desativado. Se não conseguires corrigir o ficheiro por ti mesmo, acede a http\://tiny.cc/EssentialsChat essentialsHelp2=O ficheiro está corrompido e o Essentials não o consegue abrir. O Essentials está agora desativado. Se não conseguires corrigir o ficheiro por ti mesmo, usa o comando /essentialshelp ou acede http\://tiny.cc/EssentialsChat @@ -270,9 +307,13 @@ essentialsReload=§6O Essentials foi recarregado§c {0}. exp=§c{0} §6tem§c {1} §6de experiência (nível§c {2}§6) e precisa de mais§c {3} §6para subir de nível. expCommandDescription=Dá, define, repôe ou vê a quantidade de experiência de um jogador. expCommandUsage=/<command> [reset|show|set|give] [nome do jogador [quantidade]] +expCommandUsage1=/<command> give <jogador> <quantidade> expCommandUsage1Description=Dá uma quantidade especificada de experiência a um jogador +expCommandUsage2=/<command> set <jogador> <quantidade> expCommandUsage2Description=Define a quantidade especificada de experiência a um jogador +expCommandUsage3=/<command> show <jogador> expCommandUsage4Description=Dispõe a quantidade de experiência que um jogador tem +expCommandUsage5=/<command> reset <jogador> expCommandUsage5Description=Remove a experiência de um jogador expSet=§c{0} §6tem agora§c {1} §6de experiência. extCommandDescription=Apaga o fogo dos jogadores que estejam a arder. @@ -298,7 +339,10 @@ fireballCommandUsage1=/<command> fireworkColor=§4Os parâmetros inseridos para criar um fogo-de artifício são inválidos. Define primeiro uma cor. fireworkCommandDescription=Permite modificar vários fogos-de-artifício. fireworkCommandUsage=/<command> <<meta param>|power [quantidade]|clear|fire [quantidade]> +fireworkCommandUsage1=/<command> clear fireworkCommandUsage1Description=Elimina todos os efeitos do fogo-de-artifício em mão +fireworkCommandUsage2=/<command> power <quantidade> +fireworkCommandUsage3=/<command> fire [quantidade] fireworkEffectsCleared=§6Foram removidos todos os efeitos destes itens. fireworkSyntax=§6Parâmetros do fogo-de-artifício\:§c color\:<cor> [fade\:<cor>] [shape\:<formato>] [effect\:<efeito>]\n§6Para usar várias cores ou efeitos, separa-os por vírgulas\: §cred,blue,pink\n§6Formatos\:§c star, ball, large, creeper, burst §6Efeitos\:§c trail, twinkle. fixedHomes=Todas as casas inválidas foram eliminadas. @@ -332,6 +376,7 @@ getposCommandUsage1=/<command> [jogador] getposCommandUsage1Description=Obtém as coordenadas de um jogador giveCommandDescription=Dá um item a um jogador. giveCommandUsage=/<command> <jogador> <item|numeric> [quantidade [itemmeta...]] +giveCommandUsage1=/<command> <jogador> <item> [quantidade] giveCommandUsage1Description=Dá 64 itens (ou uma quantidade especificada) a um jogador geoipCantFind=§6O jogador §c{0} §6vem de §aum país desconhecido§6. geoIpErrorOnJoin=Não foi possível obter os dados do GeoIP de {0}. Certifica-te que o número da licença e da configuração estão corretos. @@ -357,6 +402,7 @@ hatCommandDescription=Obtém um chapéu todo janota. hatCommandUsage=/<command> [remove] hatCommandUsage1=/<command> hatCommandUsage1Description=Define o item que tens em mão como chapéu +hatCommandUsage2=/<command> remove hatCommandUsage2Description=Remove o teu chapéu hatCurse=§4Não podes remover um chapéu com a maldição da união\! hatEmpty=§4Não estás a usar um chapéu. @@ -389,7 +435,9 @@ holdPotion=§4Segura numa poção para lhe adicionares efeitos. holeInFloor=§4Buraco no chão\! homeCommandDescription=Teletransporta-te para casa. homeCommandUsage=/<command> [jogador\:][nome] +homeCommandUsage1=/<command> <nome> homeCommandUsage1Description=Teletransporta-te para uma das tuas casas +homeCommandUsage2=/<command> <jogador>\:<nome> homeCommandUsage2Description=Teletransporta-te para uma das casas de um jogador homes=§6Casas\:§r {0} homeConfirmation=§6Já tens uma casa nomeada §c{0}§6\!\nUsa novamente o comando para a substituíres. @@ -451,11 +499,14 @@ internalError=§cOcorreu um erro durante a execução deste comando. itemCannotBeSold=§4Esse item não pode ser vendido no servidor. itemCommandDescription=Gera um item. itemCommandUsage=/<command> <item|numeric> [quantidade [itemmeta...]] +itemCommandUsage1=/<command> <item> [quantidade] itemId=§6ID\:§c {0} itemloreClear=§6A descrição deste item foi removida. itemloreCommandDescription=Edita a descrição de um item. itemloreCommandUsage=/<command> <add/set/clear> [texto/linha] [texto] +itemloreCommandUsage1=/<command> add [texto] itemloreCommandUsage1Description=Adiciona texto ao final da descrição do item em mão +itemloreCommandUsage3=/<command> clear itemloreCommandUsage3Description=Elimina a descrição do item em mão itemloreInvalidItem=§4Tens de segurar no item para editar a descrição. itemloreNoLine=§4O item em mão não tem uma descrição na linha §c{0}§4. @@ -469,6 +520,7 @@ itemnameCommandDescription=Dá um nome a um item. itemnameCommandUsage=/<command> [nome] itemnameCommandUsage1=/<command> itemnameCommandUsage1Description=Elimina o nome do item em mão +itemnameCommandUsage2=/<command> <nome> itemnameCommandUsage2Description=Define o nome do item em mão itemnameInvalidItem=§cPrecisas de segurar num item para o renomear. itemnameSuccess=§6O nome do item em mão foi renomeado para "§c{0}§6". @@ -571,13 +623,22 @@ loomCommandDescription=Abre o interface de um tear. loomCommandUsage=/<command> mailClear=§6Para eliminares os teus e-mails, usa§c /mail clear§6. mailCleared=§6Todos os e-mails foram eliminados\! +mailClearIndex=§4Tens de inserir um número entre 1-{0}. mailCommandDescription=Gere o e-mail entre os jogadores pelo servidor. -mailCommandUsage=/<command> [read|clear|send [para] [mensagem]|sendall [mensagem]] +mailCommandUsage1=/<command> read [página] mailCommandUsage1Description=Lê a primeira (ou especificada) página do teu e-mail -mailCommandUsage2Description=Elimina todos os teus e-mails +mailCommandUsage2=/<command> clear [número] +mailCommandUsage2Description=Elimina todos ou o(s) e-mail(s) especificado(s) +mailCommandUsage3=/<command> send <jogador> <mensagem> mailCommandUsage3Description=Envia uma mensagem a um jogador +mailCommandUsage4=/<command> sendall <mensagem> mailCommandUsage4Description=Envia uma mensagem a todos os jogadores +mailCommandUsage5=/<command> sendtemp <jogador> <tempo> <mensagem> mailDelay=Foram enviados demasiados e-mails há menos de um minuto. Máximo\: {0} +mailFormatNew=§6[§r{0}§6] §6[§r{1}§6] §r{2} +mailFormatNewTimed=§6[§e⚠§6] §6[§r{0}§6] §6[§r{1}§6] §r{2} +mailFormatNewRead=§6[§r{0}§6] §6[§r{1}§6] §7§o{2} +mailFormatNewReadTimed=§6[§e⚠§6] §6[§r{0}§6] §6[§r{1}§6] §7§o{2} mailFormat=§6[§r{0}§6] §r{1} mailMessage={0} mailSent=§6O e-mail foi enviado\! @@ -773,6 +834,7 @@ posPitch=§6Rotação em X\: {0} possibleWorlds=§6Os mundos possíveis são dos números §c0§6 a §c {0} §6. potionCommandDescription=Adiciona um efeito personalizado a uma poção. potionCommandUsage=/<command> <clear|apply|effect\:<efeito> power\:<intensidade> duration\:<duração>> +potionCommandUsage1=/<command> clear potionCommandUsage1Description=Elimina todos os efeitos da poção em mão posX=§6X\: {0} (+Este <-> -Oeste) posY=§6Y\: {0} (+Cima <-> -Baixo) @@ -830,6 +892,8 @@ recipe=§6Receita para §c {0} §6 (§6 §c {1} de §c {2} §6) recipeBadIndex=Não existe nenhuma receita com esse número. recipeCommandDescription=Mostra como criar itens. recipeCommandUsage=/<command> <item> [número] +recipeCommandUsage1=/<command> <item> [página] +recipeCommandUsage1Description=Mostra como criar o item especificado recipeFurnace=§6Fundir\:§c {0}. recipeGrid=§c{0}X §6| §{1}X §6| §{2}X recipeGridItem=§c{0}X §6é §c{1} @@ -840,6 +904,8 @@ recipeShapeless=§6Combinar §c{0} recipeWhere=§6Onde\: {0} removeCommandDescription=Remove a entidade do mundo. removeCommandUsage=/<command> <all|tamed|named|drops|arrows|boats|minecarts|xp|paintings|itemframes|endercrystals|monsters|animals|ambient|mobs|[criatura]> [raio|mundo] +removeCommandUsage1=/<command> <criatura> [mundo] +removeCommandUsage2=/<command> <criatura> <raio> [mundo] removed=§c{0} §6entidades removidas. repair=§6§c{0}§6 reparado. repairAlreadyFixed=§4Este item não precisa de ser reparado. @@ -847,9 +913,12 @@ repairCommandDescription=Repara a durabilidade de um ou de todos os itens. repairCommandUsage=/<command> [hand|all] repairCommandUsage1=/<command> repairCommandUsage1Description=Repara o item em mão +repairCommandUsage2=/<command> all +repairCommandUsage2Description=Repara todos os itens no teu inventário repairEnchanted=§4Não tens permissões para reparar itens encantados. repairInvalidType=§4Este item não pode ser reparado. repairNone=§4Não havia itens para serem reparados. +replyFromDiscord=**Resposta de {0}\:** `{1}` replyLastRecipientDisabled=§6As respostas ao destinatário da última mensagem foram §cdesativadas§6. replyLastRecipientDisabledFor=§6As respostas ao destinatário da última mensagem foram §cdesativadas §6para §c{0}§6. replyLastRecipientEnabled=§6As respostas ao destinatário da última mensagem foram §cativadas§6. @@ -886,6 +955,7 @@ seenOffline=§6§c {0} §6está §4offline§6 desde §c{1}§6. seenOnline=§6§c {0} §6está §aonline§6 desde §c{1}§6. sellBulkPermission=§6Não tens permissões para vender desta maneira. sellCommandDescription=Vende o item que tens em mão. +sellCommandUsage3=/<command> all sellHandPermission=§6Não tens permissões para vender à mão. serverFull=O servidor está cheio\! serverReloading=Atenção\: Há uma possibilidade do servidor estar agora a recarregar. Não haverá suporte por parte da equipa do EssentialsX quando o comando /reload é executado. @@ -901,13 +971,17 @@ setBalOthers=§aO dinheiro atual de {0} foi alterado para {1}. setSpawner=§6O gerador foi alterado para§c {0}. sethomeCommandDescription=Define a localização da casa para a posição atual. sethomeCommandUsage=/<command> [[jogador\:]nome] +sethomeCommandUsage1=/<command> <nome> sethomeCommandUsage1Description=Define uma casa com um nome específico no local em que te encontras +sethomeCommandUsage2=/<command> <jogador>\:<nome> sethomeCommandUsage2Description=Define a casa de um jogador com um nome específico no local em que te encontras setjailCommandDescription=Cria uma jaula com o nome [nome da jaula]. setjailCommandUsage=/<command> <nome da jaula> setjailCommandUsage1=/<command> <nome da jaula> settprCommandDescription=Define os parâmetros e a localização de teletransporte aleatória. settprCommandUsage=/<command> [center|minrange|maxrange] [valor] +settprCommandUsage1=/<command> center +settprCommandUsage2=/<command> minrange <raio> settpr=§6Define um centro de teletransporte aleatório. settprValue=§6Teletransporte aleatório de §c{0}§6 definido para §c{1}§6. setwarpCommandDescription=Cria um novo wrap. @@ -915,6 +989,7 @@ setwarpCommandUsage=/<command> <warp> setwarpCommandUsage1=/<command> <warp> setworthCommandDescription=Define o valor de venda de um item. setworthCommandUsage=/<command> [item|id] <preço> +setworthCommandUsage1=/<command> <preço> sheepMalformedColor=§4A cor não está especificada corretamente. shoutDisabled=§6O chat geral foi §cdesativado§6. shoutDisabledFor=§6O chat geral foi §cdesativado §6para §c{0}§6. @@ -1090,6 +1165,7 @@ tpposCommandUsage1=/<command> <x> <y> <z> [rotação em y] [rotação em x] [mun tprCommandDescription=Teletransporta-te para um local aleatório. tprCommandUsage=/<command> tprCommandUsage1=/<command> +tprCommandUsage1Description=Teletransporta-te para uma localização aleatória tprSuccess=§6A teletransportar-te para um local aleatório... tps=§6TPS atual \= {0} tptoggleCommandDescription=Bloqueia todos os métodos de teletransporte. @@ -1166,6 +1242,7 @@ versionOutputFine=§6{0} versão\: §a{1} versionOutputWarn=§6{0} versão\: §c{1} versionOutputUnsupported=§d{0} §6versão\: §d{1} versionOutputUnsupportedPlugins=§6Estás a executar §dplugins incompatíveis§6\! +versionOutputEconLayer=§6Nível de economia\: §r{0} versionMismatch=§4A versão não é compatível\! Atualiza o {0} para a mesma versão. versionMismatchAll=§4A versão não é compatível\! Atualiza todos os ficheiros .jar do Essentials para a mesma versão. versionReleaseLatest=§6Estás a executar a versão mais recente do EssentialsX\! @@ -1178,6 +1255,8 @@ voiceSilencedReasonTime=§6{0} silenciou-te\! Motivo\: §c{1} walking=a andar warpCommandDescription=Mostra uma lista de warps ou warp para um local. warpCommandUsage=/<command> <pagenumber|warp> [jogador] +warpCommandUsage1=/<command> [página] +warpCommandUsage2=/<command> <warp> [jogador] warpDeleteError=§4Ocorreu um erro ao eliminar o ficheiro do warp. warpInfo=§6Informações do warp§c {0}§6\: warpinfoCommandDescription=Encontra a informação de uma localização para um warp. @@ -1233,11 +1312,12 @@ workbenchCommandUsage=/<command> worldCommandDescription=Troca entre mundos. worldCommandUsage=/<command> [mundo] worldCommandUsage1=/<command> -worldCommandUsage2=/<comando> <mundo> +worldCommandUsage2=/<command> <mundo> worldCommandUsage2Description=Teletransporta-te para a tua localização num mundo especificado worth=§aConjunto de {0} que vale §c{1}§a ({2} item(s) a {3} cada) worthCommandDescription=Calcula o valor do item que tens em mão ou um especificado. worthCommandUsage=/<command> <<nome do item>|<id>|hand|inventory|blocks> [-][quantidade] +worthCommandUsage3=/<command> all worthCommandUsage3Description=Determina o valor dos itens que tens no inventário worthMeta=§aConjunto de {0} com os metadados de {1} que vale §c{2}§a ({3} item(s) a {4} cada) worthSet=§6Valor definido diff --git a/Essentials/src/main/resources/messages_pt_BR.properties b/Essentials/src/main/resources/messages_pt_BR.properties index f9d91c0e626..f96aaba5188 100644 --- a/Essentials/src/main/resources/messages_pt_BR.properties +++ b/Essentials/src/main/resources/messages_pt_BR.properties @@ -181,6 +181,7 @@ createkitCommandUsage1Description=Cria um kit com o nome e com atraso createKitFailed=§4Um erro ocorreu ao criar o kit {0}. createKitSeparator=§m----------------------- createKitSuccess=§6Kit criado\: §f{0}\n§6Tempo\: §f{1}\n§6Link\: §f{2}\n§6Copie o conteúdo do link acima para o seu arquivo kits.yml. +createKitUnsupported=§4A serialização de itens NBT foi habilitada, mas este servidor não está executando Paper 1.15.2+. Voltando à serialização de itens padrão. creatingConfigFromTemplate=Criando configuração baseada no modelo\: {0} creatingEmptyConfig=Criando configuração vazia\: {0} creative=criativo @@ -231,6 +232,28 @@ destinationNotSet=Destino não definido\! disabled=desativado disabledToSpawnMob=§4A invocação deste mob foi desativada nas configurações. disableUnlimited=§6A colocação ilimitada de §c{0} §6foi desativada por §c{1}§6. +discordCommandExecuteDescription=Executa um comando de console no servidor Minecraft. +discordCommandExecuteArgumentCommand=O comando a ser executado +discordCommandExecuteReply=Executando comando\: "/{0}" +discordCommandListDescription=Obtém uma lista de jogadores online. +discordCommandListArgumentGroup=Um grupo específico para limitar a sua pesquisa por +discordCommandMessageDescription=Manda mensagens para um jogador no servidor Minecraft. +discordCommandMessageArgumentUsername=O jogador que vai receber a mensagem +discordCommandMessageArgumentMessage=A mensagem para enviar ao jogador +discordErrorCommand=Você adicionou seu bot ao seu servidor de forma incorreta. Por favor, siga o tutorial na configuração e adicione seu bot usando https\://essentialsx.net/discord.html\! +discordErrorCommandDisabled=Este comando está desabilitado\! +discordErrorLogin=Ocorreu um erro ao entrar no Discord, o que fez com que o plugin se desabilitasse\: \n{0} +discordErrorLoggerInvalidChannel=O registro do console do Discord foi desativado devido a uma definição de canal inválido\! Se você pretende desativá-lo, defina o ID do canal para "nenhum"; caso contrário, verifique se seu ID de canal está correto. +discordErrorLoggerNoPerms=O logger do console do Discord foi desativado devido a permissões insuficientes\! Por favor, certifique-se de que o seu bot tem as permissões "Gerenciar Webhooks" no servidor. Após corrigir isso, execute "/ess recload". +discordErrorNoGuild=ID do servidor inválido ou faltando\! Siga o tutorial nas configurações para configurar o plugin. +discordErrorNoGuildSize=Seu bot não está em nenhum servidor\! Siga o tutorial nas configurações para configurar o plugin. +discordErrorNoPerms=Seu bot não pode ver ou conversar em nenhum canal\! Por favor, verifique se o bot tem permissões de leitura e escrita em todos os canais que deseja usar. +discordErrorNoToken=Nenhum token fornecido\! Por favor, siga o tutorial nas configurações para configurar o plugin. +discordErrorWebhook=Ocorreu um erro ao enviar mensagens para o canal do console\! Isso provavelmente foi causado por excluir acidentalmente o webhook do console. Isso geralmente pode ser corrigido, garantindo que o seu bot tenha a permissão "Gerenciar Webhooks" e executando "/ess reload". +discordLoggingIn=Tentando acessar o Discord... +discordLoggingInDone=Sessão iniciada com sucesso como {0} +discordNoSendPermission=Não é possível enviar mensagens no canal\: \#{0} Por favor, verifique se o bot tem permissão a permissão "Enviar mensagens" nesse canal\! +discordReloadInvalid=Tentativa de recarregar as configurações do EssentialsX Discord enquanto o plugin está em um estado inválido\! Se você modificou suas configurações, reinicie seu servidor. disposal=Lixeira disposalCommandDescription=Abre uma lixeira portátil. disposalCommandUsage=/<command> @@ -282,6 +305,7 @@ essentialsCommandUsage4=/<command> debug essentialsCommandUsage4Description=Alterna o "modo depuração" do Essentials essentialsCommandUsage5=/<command> reset <jogador> essentialsCommandUsage5Description=Redefine os dados de usuário do jogador +essentialsCommandUsage7Description=Gerencia as casas do usuário essentialsHelp1=O arquivo está corrompido e o Essentials não consegue abri-lo. O Essentials foi desativado. Se você não conseguir arrumar o arquivo sozinho, acesse http\://tiny.cc/EssentialsChat essentialsHelp2=O arquivo está corrompido e o Essentials não consegue abri-lo. O Essentials foi desativado. Se você não conseguir arrumar o arquivo sozinho, digite /essentialshelp no jogo ou acesse http\://tiny.cc/EssentialsChat essentialsReload=§6Essentials recarregado§c {0}. @@ -325,11 +349,16 @@ fireworkCommandUsage=/<command> <<meta param>|power [amount]|clear|fire [amount] fireworkCommandUsage1=/<command> clear fireworkCommandUsage1Description=Limpa todos os efeitos de seus fogos de artifício guardados fireworkCommandUsage2Description=Define o poder do fogo de artifício segurado +fireworkCommandUsage4=/<command> <meta> +fireworkCommandUsage4Description=Adiciona o efeito aos fogos de artifício na mão fireworkEffectsCleared=§6Todos os efeitos desse pack foram removidos. fireworkSyntax=§6Parâmetros do fogo de artifício\:§c color\:<cor> [fade\:<cor>] [shape\:<formato>] [effect\:<efeito>]\n§6Para usar multiplas cores ou efeitos, separe-os entre vírgulas\: §cred,blue,pink\n§6Formatos\:§c star, ball, large, creeper, burst §6Efeitos\:§c trail, twinkle. +fixedHomes=Casas inválidas excluídas. +fixingHomes=Excluindo casas inválidas... flyCommandDescription=Altera o modo voar. flyCommandUsage=/<command> [jogador] [on|off] flyCommandUsage1=/<command> [jogador] +flyCommandUsage1Description=Alterna o voo para você ou para outro jogador, se especificado flying=voando flyMode=§6Modo voar foi§c {0} §6para {1}§6. foreverAlone=§4Você não tem a quem responder. @@ -341,6 +370,7 @@ gameModeInvalid=§4Você precisa especificar um modo de jogador válido. gamemodeCommandDescription=Altera o modo de jogo do jogador. gamemodeCommandUsage=/<command> <survival|creative|adventure|spectator> [jogador] gamemodeCommandUsage1=/<command> <survival|creative|adventure|spectator> [jogador] +gamemodeCommandUsage1Description=Define seu modo de jogo ou de outro jogador, se especificado gcCommandDescription=Relata memória, tempo ligado e informações de tick. gcCommandUsage=/<command> gcfree=§6Memória livre\:§c {0} MB. @@ -351,9 +381,13 @@ geoipJoinFormat=§6O jogador §c{0} §6é de §c{1}§6. getposCommandDescription=Obtém suas coordenadas ou as de um jogador. getposCommandUsage=/<command> [jogador] getposCommandUsage1=/<command> [jogador] +getposCommandUsage1Description=Obtém as suas coordenadas ou de outro jogador, se especificado giveCommandDescription=Dê um item a um jogador. giveCommandUsage=/<command> <jogador> <item|número> [quantidade [dadosdoitem...]] giveCommandUsage1=/<command> <player> <item> [amount] +giveCommandUsage1Description=Dá ao jogador alvo 64 (ou a quantidade especificada) do item especificado +giveCommandUsage2=/<command> <player> <item> <amount> <meta> +giveCommandUsage2Description=Dá ao jogador alvo a quantidade especificada do item especificado com os metadados inseridos geoipCantFind=§6O jogador §c{0} §6vem de §aum país desconhecido§6. geoIpErrorOnJoin=Não foi possível resgatar dados GeoIP para {0}. Certifique-se de que sua chave de licença e configuração estão corretas. geoIpLicenseMissing=Nenhuma chave de licença foi encontrada\! Visite https\://essentialsx.net/geoip para obter ajuda com a configuração. @@ -363,6 +397,7 @@ givenSkull=§6Você recebeu a cabeça de §c{0}§6. godCommandDescription=Te deixa invulnerável. godCommandUsage=/<command> [jogador] [on|off] godCommandUsage1=/<command> [jogador] +godCommandUsage1Description=Alterna o modo deus para você ou para outro jogador, se especificado giveSpawn=§6Dando§c {0} §6de§c {1} §6para§c {2}§6. giveSpawnFailure=§4Espaço insuficiente, §c{0} {1} §4foi perdido. godDisabledFor=§cdesativado§6 para§c {0} @@ -376,6 +411,7 @@ hatArmor=§4Você não pode usar este item como chapéu\! hatCommandDescription=Equipa o item segurado como um chapéu. hatCommandUsage=/<command> [remove] hatCommandUsage1=/<command> +hatCommandUsage1Description=Define o item na mão como chapéu hatCommandUsage2=/<command> remove hatCommandUsage2Description=Remove o seu chapéu hatCurse=§4Você não pode remover um chapéu que tem a maldição do ligamento\! @@ -388,6 +424,7 @@ heal=§6Você foi curado. healCommandDescription=Cura você ou o jogador indicado. healCommandUsage=/<command> [jogador] healCommandUsage1=/<command> [jogador] +healCommandUsage1Description=Cura você ou outro jogador, se especificado healDead=§4Você não pode curar alguém que está morto\! healOther=§c{0}§6 foi curado. helpCommandDescription=Mostra uma lista com os comandos disponíveis. @@ -401,6 +438,7 @@ helpPlugin=§4{0}§r\: Ajuda do plugin\: /help {1} helpopCommandDescription=Envia uma mensagem para os administradores online. helpopCommandUsage=/<command> <mensagem> helpopCommandUsage1=/<command> <mensagem> +helpopCommandUsage1Description=Envia a mensagem dada a todos os administradores online holdBook=§4Você não está segurando um livro que possa escrever. holdFirework=§4Segure um fogo de artifício para adicionar efeitos. holdPotion=§4Segure uma poção para aplicar efeitos a ela. @@ -416,9 +454,15 @@ homeConfirmation=§6Você já possui uma casa chamada §c{0}§6\!\nPara substitu homeSet=§6Casa definida na posição atual. hour=hora hours=horas +ice=§6Você se sente muito mais frio... +iceCommandDescription=Resfria um jogador. iceCommandUsage=/<command> [jogador] iceCommandUsage1=/<command> +iceCommandUsage1Description=Resfria você iceCommandUsage2=/<command> <jogador> +iceCommandUsage2Description=Resfria o jogador selecionado +iceCommandUsage3=/<command> * +iceCommandUsage3Description=Resfria todos os jogadores online ignoreCommandDescription=Alterna se você está ignorando um jogador. ignoreCommandUsage=/<command> <jogador> ignoreCommandUsage1=/<command> <jogador> @@ -474,7 +518,6 @@ itemloreCommandDescription=Edita a descrição de um item. itemloreCommandUsage=/<command> <add/set/clear> [text/line] [text] itemloreCommandUsage1=/<command> add [text] itemloreCommandUsage1Description=Adiciona o texto no final da história do item segurado -itemloreCommandUsage2=/<command> set <line number> <text> itemloreCommandUsage2Description=Define a linha especificada da descrição do item segurado para o texto dado itemloreCommandUsage3=/<command> clear itemloreCommandUsage3Description=Limpa a história do item segurado @@ -491,6 +534,7 @@ itemnameCommandUsage=/<command> [nome] itemnameCommandUsage1=/<command> itemnameCommandUsage1Description=Limpa o nome do item segurado itemnameCommandUsage2=/<command> <name> +itemnameCommandUsage2Description=Define o nome dado ao item na mão itemnameInvalidItem=§cVocê precisa segurar um item para renomeá-lo. itemnameSuccess=§6Você renomeou o item em sua mão para "§c{0}§6". itemNotEnough1=§4Você não tem itens suficientes para vender. @@ -507,6 +551,7 @@ itemType=§6Item\:§c {0} itemdbCommandDescription=Procura por um item. itemdbCommandUsage=/<command> <item> itemdbCommandUsage1=/<command> <item> +itemdbCommandUsage1Description=Procura o item dado no banco de dados de itens jailAlreadyIncarcerated=§4Esta pessoa já está na prisão\:§c {0} jailList=§6Prisões\:§r {0} jailMessage=§4Você foi preso. @@ -515,6 +560,7 @@ jailReleased=§6O jogador §c{0}§6 foi liberado da prisão. jailReleasedPlayerNotify=§6Você foi liberado\! jailSentenceExtended=§6Tempo na prisão extendido para\: {0}. jailSet=§6A prisão§c {0} §6foi definida. +jailWorldNotExist=§4O mundo dessa cadeia não existe. jumpEasterDisable=§6Modo de assistente de vôo desativado. jumpEasterEnable=§6Modo de assistente de vôo ativado. jailsCommandDescription=Lista todas as cadeias. @@ -525,26 +571,32 @@ jumpError=§4Isso machucaria o cérebro do seu computador. kickCommandDescription=Expulsa um jogador especificado com um motivo. kickCommandUsage=/<command> <jogador> [motivo] kickCommandUsage1=/<command> <jogador> [motivo] +kickCommandUsage1Description=Expulsa o jogador especificado com um motivo opcional kickDefault=Expulso do servidor. kickedAll=§4Todos os jogadores foram expulsos do servidor. kickExempt=§4Você não pode expulsar essa pessoa. kickallCommandDescription=Expulsa todos os jogadores do servidor, exceto quem executou o comando. kickallCommandUsage=/<command> [motivo] kickallCommandUsage1=/<command> [motivo] +kickallCommandUsage1Description=Expulsa todos os jogadores com um motivo opcional kill=§c{0}§6 foi morto. killCommandDescription=Mata o jogador especificado. killCommandUsage=/<command> <jogador> killCommandUsage1=/<command> <jogador> +killCommandUsage1Description=Mata o jogador especificado killExempt=§4Você não pode matar §c{0}§4. kitCommandDescription=Obtém o kit especificado ou visualiza todos os kits disponíveis. kitCommandUsage=/<command> [kit] [jogador] kitCommandUsage1=/<command> +kitCommandUsage1Description=Lista todos os kits disponíveis kitCommandUsage2=/<command> <kit> [player] +kitCommandUsage2Description=Da o determinado kit para você ou outro jogador, se especificado kitContains=§6Kit §c{0} §6contém\: kitCost=\ §7§o({0})§r kitDelay=§m{0}§r kitError=§4Não ha kits válidos. kitError2=§4Esse kit não existe ou foi definido impropriamente. Contate um administrador. +kitError3=Não foi possível dar o item do kit "{0}" para o usuário {1} pois o item do kit requer Paper 1.15.2+ para deserializar. kitGiveTo=§6Dando o kit§c {0}§6 para §c{1}§6. kitInvFull=§4Seu inventário está cheio, colocando o kit no chão. kitInvFullNoDrop=§4Não há espaço suficiente em seu inventário para esse kit. @@ -556,6 +608,7 @@ kitReset=§6Redefinir o tempo de espera para o kit §c{0}§6. kitresetCommandDescription=Redefine o tempo de espera no kit especificado. kitresetCommandUsage=/<command> <kit> [player] kitresetCommandUsage1=/<command> <kit> [player] +kitresetCommandUsage1Description=Redefine o tempo de espera do kit especificado para você ou outro jogador, se especificado kitResetOther=§6Redefinindo tempo de espera do kit §c{0} para §c{1}§6. kits=§6Kits\:§r {0} kittycannonCommandDescription=Joga um gato explosivo no seu oponente. @@ -565,6 +618,9 @@ leatherSyntax=§6Sintaxe das cores de couro\:§c cor\:<red>,<green>,<blue> ex\: lightningCommandDescription=O poder de Thor. Ataque no cursor ou um jogador. lightningCommandUsage=/<command> [jogador] [intensidade] lightningCommandUsage1=/<command> [jogador] +lightningCommandUsage1Description=Acerta um raio onde você está olhando ou em outro jogador, se especificado +lightningCommandUsage2=/<command> <player> <power> +lightningCommandUsage2Description=Atira um raio em um jogador alvo com a potência dada lightningSmited=§6Você foi ferido\! lightningUse=§6Castigando§c {0} listAfkTag=§7[Ausente]§r @@ -573,6 +629,7 @@ listAmountHidden=§6Há §c{0}§6/§c{1}§6 de um máximo de §c{2}§6 jogadores listCommandDescription=Lista todos os jogadores online. listCommandUsage=/<command> [grupo] listCommandUsage1=/<command> [grupo] +listCommandUsage1Description=Lista todos os jogadores no servidor, ou no grupo especificado listGroupTag=§6{0}§r\: listHiddenTag=§7[ESCONDIDO]§r loadWarpError=§4Falha ao carregar o warp {0}. @@ -581,9 +638,8 @@ loomCommandDescription=Abre um tear. loomCommandUsage=/<command> mailClear=§6Para marcar seus e-mails como lidos, digite§c /mail clear§6. mailCleared=§6E-mails removidos\! +mailClearIndex=§4Você deve especificar um número entre 1-{0}. mailCommandDescription=Gerencia o email entre jogadores, entre servers. -mailCommandUsage=/<command> [read|clear|send [to] [message]|sendall [message]] -mailCommandUsage2=/<command> clear mailDelay=Muitos e-mails foram enviados no último minuto. Máximo\: {0} mailFormat=§6[§r{0}§6] §r{1} mailMessage={0} @@ -634,6 +690,7 @@ msgIgnore=§c{0} §4está com mensagens desativadas. msgtoggleCommandDescription=Bloqueia o recebimento de mensagens privadas. msgtoggleCommandUsage=/<command> [jogador] [on|off] msgtoggleCommandUsage1=/<command> [jogador] +msgtoggleCommandUsage1Description=Alterna o voo para você ou para outro jogador, se especificado multipleCharges=§4Você não pode aplicar mais de um comando para esse fogo de artifício. multiplePotionEffects=§4Você não pode aplicar mais de um efeito para essa poção. muteCommandDescription=Silencia ou não um jogador. diff --git a/Essentials/src/main/resources/messages_ro.properties b/Essentials/src/main/resources/messages_ro.properties index 0d45c9cd1f2..4d708688626 100644 --- a/Essentials/src/main/resources/messages_ro.properties +++ b/Essentials/src/main/resources/messages_ro.properties @@ -368,7 +368,6 @@ loomCommandUsage=/<command> mailClear=§6To mark your mail as read, type§c /mail clear§6. mailCleared=§6Posta curatata\! mailCommandDescription=Gestionează intra-player, intra-server mail. -mailCommandUsage=/<command> [read|clear|send [to] [message]|sendall [message]] mailDelay=Prea multe mail-uri au fost trimise in ultimul minute.Maxim \: {0} mailFormat=§6[§r{0}§6] §r{1} mailMessage={0} diff --git a/Essentials/src/main/resources/messages_ru.properties b/Essentials/src/main/resources/messages_ru.properties index 3166ed74457..18e1fe2fcaa 100644 --- a/Essentials/src/main/resources/messages_ru.properties +++ b/Essentials/src/main/resources/messages_ru.properties @@ -58,7 +58,7 @@ balanceOther=§aБаланс {0}§a\:§c {1} balanceTop=§6Топ богачей ({0}) balanceTopLine={0}. {1}, {2} balancetopCommandDescription=Выводит топ богачей. -balancetopCommandUsage=/<command> <страница> +balancetopCommandUsage=/<command> [страница] balancetopCommandUsage1=/<command> <страница> balancetopCommandUsage1Description=Отображает первую (или указанную) страницу топа богачей banCommandDescription=Банит игрока. @@ -97,7 +97,7 @@ bookCommandUsage1Description=Блокирует/разблокирует кни bookCommandUsage2=/<command> author <автор> bookCommandUsage2Description=Изменяет автора подписанной книги bookCommandUsage3=/<command> title <название> -bookCommandUsage3Description=И0меняет название подписанной книги +bookCommandUsage3Description=Изменяет название подписанной книги bookLocked=§6Теперь эта книга заблокирована. bookTitleSet=§6Название книги изменено на {0}. breakCommandDescription=Разрушает блок, на который Вы смотрите. @@ -139,7 +139,7 @@ clearinventoryCommandUsage1Description=Удаляет все предметы в clearinventoryCommandUsage2=/<command> <игрок> clearinventoryCommandUsage2Description=Удаляет все предметы в инвентаре указанного игрока clearinventoryCommandUsage3=/<command> <игрок> <предмет> [кол-во] -clearinventoryCommandUsage3Description=Удаляет весь (или указанное количество) указанный предмет из инвентаря указанного игрока +clearinventoryCommandUsage3Description=Удаляет весь (или указанное количество) указанного предмета из инвентаря указанного игрока clearinventoryconfirmtoggleCommandDescription=Переключает подтверждение очистки инвентаря. clearinventoryconfirmtoggleCommandUsage=/<command> commandArgumentOptional=§7 @@ -181,6 +181,7 @@ createkitCommandUsage1Description=Создаёт набор с указанны createKitFailed=§4Произошла ошибка при создании набора {0}. createKitSeparator=§m----------------------- createKitSuccess=§6Создан набор\: §f{0}\n§6Задержка\: §f{1}\n§6Ссылка\: §f{2}\n§6Скопируйте содержимое по ссылке выше в kits.yml. +createKitUnsupported=§4Сериализация NBT предметов была включена, но этот сервер не использует Paper 1.15.2+. Используем стандартную сериализацию предметов. creatingConfigFromTemplate=Создаю файл конфигурации из шаблона\: {0} creatingEmptyConfig=Создаю пустой конфигурационный файл\: {0} creative=творческий @@ -209,7 +210,7 @@ delhomeCommandUsage2Description=Удаляет дом указанного иг deljailCommandDescription=Удаляет тюрьму. deljailCommandUsage=/<command> <тюрьма> deljailCommandUsage1=/<command> <тюрьма> -deljailCommandUsage1Description=Удаляет тюрьму с заданным именем +deljailCommandUsage1Description=Удаляет тюрьму с указанным именем delkitCommandDescription=Удаляет указанный набор. delkitCommandUsage=/<command> <набор> delkitCommandUsage1=/<command> <набор> @@ -231,6 +232,28 @@ destinationNotSet=Место назначения не назначено\! disabled=выключено disabledToSpawnMob=§4Призыв данного моба отключен в настройках. disableUnlimited=§6Отключено неограниченное размещение§c {0} §6для§c {1}§6. +discordCommandExecuteDescription=Выполняет консольную команду на сервере Minecraft. +discordCommandExecuteArgumentCommand=Команда, которую нужно выполнить +discordCommandExecuteReply=Выполнение команды\: "/{0}" +discordCommandListDescription=Показывает список игроков онлайн. +discordCommandListArgumentGroup=Группа, по которой следует ограничить поиск +discordCommandMessageDescription=Отправляет сообщение игроку на сервере Minecraft. +discordCommandMessageArgumentUsername=Игрок, которому отправится сообщение +discordCommandMessageArgumentMessage=Сообщение, отправляемое игроку +discordErrorCommand=Вы добавили бота на свой сервер некорректно. Пожалуйста, следуйте руководству в конфигурации и добавьте своего бота с помощью https\://essentialsx.net/discord.html\! +discordErrorCommandDisabled=Эта команда отключена\! +discordErrorLogin=Произошла ошибка при входе в Discord, что привело к отключению плагина\: \n{0} +discordErrorLoggerInvalidChannel=Логирование консоли в Discord было отключено из-за неверного канала\! Если Вы хотите отключить его, установите ID канала на "none"; иначе проверьте правильность ID канала. +discordErrorLoggerNoPerms=Логирование консоли в Discord было отключено из-за недостатка прав\! Пожалуйста, убедитесь, что у Вашего бота есть право на "Управление вебхуками". После этого введите "/ess reload". +discordErrorNoGuild=ID сервера неверен или отсутствует\! Пожалуйста, следуйте руководству в конфигурации для верной настройки плагина. +discordErrorNoGuildSize=Вашего бота нет на серверах\! Пожалуйста, следуйте руководству в конфигурации для верной настройки плагина. +discordErrorNoPerms=Ваш бот не может видеть или писать ни на одном канале\! Пожалуйста, убедитесь, что Ваш бот имеет права на чтение и запись во всех каналах, которые Вы хотите использовать. +discordErrorNoToken=Токен не предоставлен\! Пожалуйста, следуйте руководству в конфигурации для верной настройки плагина. +discordErrorWebhook=Произошла ошибка при отправке сообщений на канал консоли\! Скорее всего, это было вызвано случайным удалением вебхука консоли. Обычно это можно исправить выдачей боту права "Управления вебхуками" и вводом "/ess reload". +discordLoggingIn=Попытка входа в Discord... +discordLoggingInDone=Успешный вход как {0} +discordNoSendPermission=Не удается отправить сообщение в канале\: \#{0} Пожалуйста, убедитесь, что бот имеет право "Отправлять сообщения" на этом канале\! +discordReloadInvalid=Попытка перезагрузить конфигурацию EssentialsX Discord, пока плагин находится в неверном состоянии\! Если Вы изменили конфигурацию, перезапустите сервер. disposal=Утилизация disposalCommandDescription=Открывает портативное меню утилизации. disposalCommandUsage=/<command> @@ -243,19 +266,19 @@ east=В ecoCommandDescription=Управляет экономикой сервера. ecoCommandUsage=/<command> <give|take|set|reset> <игрок> [сумма] ecoCommandUsage1=/<command> give <игрок> <сумма> -ecoCommandUsage1Description=Даёт игроку заданную сумму денег +ecoCommandUsage1Description=Даёт указанному игроку указанную сумму денег ecoCommandUsage2=/<command> take <игрок> <сумма> -ecoCommandUsage2Description=Забирает указанную сумму денег у игрока +ecoCommandUsage2Description=Забирает указанную сумму денег у указанного игрока ecoCommandUsage3=/<command> set <игрок> <сумма> -ecoCommandUsage3Description=Устанавливает баланс игрока на указанную сумму +ecoCommandUsage3Description=Устанавливает баланс указанного игрока на указанную сумму ecoCommandUsage4=/<command> reset <игрок> <сумма> -ecoCommandUsage4Description=Сбрасывает баланс игрока на начальный баланс сервера +ecoCommandUsage4Description=Сбрасывает баланс указанного игрока на начальный баланс сервера editBookContents=§eТеперь Вы можете редактировать содержание этой книги. enabled=включен enchantCommandDescription=Зачаровывает предмет в руке. enchantCommandUsage=/<command> <зачарование> [уровень] enchantCommandUsage1=/<command> <имя зачарования> [уровень] -enchantCommandUsage1Description=Добавляет указанное зачарование к удерживаемому предмету, можно указать уровень +enchantCommandUsage1Description=Зачаровывает удерживаемый предмет на заданные чары, с необязательным указанием уровня enableUnlimited=§6Выдано неограниченное количество§c {0} §6игроку §c{1}§6. enchantmentApplied=§6Зачарование§c {0} §6было применено к предмету в Вашей руке. enchantmentNotFound=§4Зачарование не найдено\! @@ -276,15 +299,15 @@ essentialsCommandUsage1=/<command> reload essentialsCommandUsage1Description=Перезагружает файл конфигурации Essentials essentialsCommandUsage2=/<command> version essentialsCommandUsage2Description=Даёт информацию о версии Essentials -essentialsCommandUsage3=`/<command> commands -essentialsCommandUsage3Description=Даёт информацию о переданных Essentials командах другим плагинам +essentialsCommandUsage3=/<command> commands +essentialsCommandUsage3Description=Даёт информацию о переданных другим плагинам командах Essentials essentialsCommandUsage4=/<command> debug essentialsCommandUsage4Description=Переключает "режим отладки" Essentials essentialsCommandUsage5=/<command> reset <игрок> -essentialsCommandUsage5Description=Сбрасывает данные данного игрока +essentialsCommandUsage5Description=Сбрасывает пользовательские данные указанного игрока essentialsCommandUsage6=/<command> cleanup essentialsCommandUsage6Description=Очищает старые пользовательские данные -essentialsCommandUsage7=/<command> дома +essentialsCommandUsage7=/<command> homes essentialsCommandUsage7Description=Управляет домами игроков essentialsHelp1=Файл поврежден, поэтому Essentials не может его открыть. Плагин будет отключен. Если Вы не можете исправить проблему самостоятельно, перейдите по ссылке https\://essentialsx.cf/community.html essentialsHelp2=Файл поврежден, поэтому Essentials не может его открыть. Плагин будет отключен. Если Вы не можете исправить проблему самостоятельно, введите /essentialshelp или перейдите по ссылке https\://essentialsx.cf/community.html @@ -293,18 +316,18 @@ exp={0} §6имеет§c {1} §6опыта (уровень§c {2}§6), до сл expCommandDescription=Выдает, устанавливает, сбрасывает или показывает опыт игрока. expCommandUsage=/<command> [reset|show|set|give] [<игрок> [кол-во]] expCommandUsage1=/<command> give <игрок> <сумма> -expCommandUsage1Description=Даёт указанному игроку заданную сумму опыта -expCommandUsage2=/<command> set <игрок> <сумма> +expCommandUsage1Description=Даёт указанному игроку указанную сумму опыта +expCommandUsage2=/<command> set <игрок> <значение> expCommandUsage2Description=Устанавливает опыт игрока на указанную сумму expCommandUsage3=/<command> show <игрок> expCommandUsage4Description=Отображает количество опыта игрока expCommandUsage5=/<command> reset <игрок> -expCommandUsage5Description=Сбрасывает опыт игрока до 0 +expCommandUsage5Description=Сбрасывает опыт определённого игрока до 0 expSet=§c{0} §6теперь имеет§c {1} §6опыта. extCommandDescription=Тушит игроков. extCommandUsage=/<command> [игрок] extCommandUsage1=/<command> [игрок] -extCommandUsage1Description=Погасить себя или другого игрока, если он указан +extCommandUsage1Description=Потушить себя или другого игрока, если он указан extinguish=§6Вы потушили себя. extinguishOthers=§6Вы потушили {0}§6. failedToCloseConfig=Ошибка при закрытии файла {0}. @@ -321,19 +344,19 @@ fileRenameError=Переименование файла {0} не удалось\ fireballCommandDescription=Бросает файербол или иные снаряды. fireballCommandUsage=/<command> [fireball|small|large|arrow|skull|egg|snowball|expbottle|dragon|splashpotion|lingeringpotion|trident] [скорость] fireballCommandUsage1=/<command> -fireballCommandUsage1Description=Бросает обычный огненный шар с вашего местоположения +fireballCommandUsage1Description=Запускает обычный огненный шар с вашего местоположения fireballCommandUsage2=/<command> <fireball|small|large|arrow|skull|egg|snowball|expbottle|dragon|splashpotion|lingeringpotion|trident> [скорость] -fireballCommandUsage2Description=Бросает указанный снаряд с вашего местоположения, можно указать скорость +fireballCommandUsage2Description=Запускает указанный снаряд с вашего местоположения, можно указать скорость fireworkColor=§4Параметры фейерверка заданы неверно - сначала должен идти цвет. fireworkCommandDescription=Позволяет изменить стак фейерверков. fireworkCommandUsage=/<command> <<метаданные>|power <мощность>|clear|fire [кол-во]> fireworkCommandUsage1=/<command> clear -fireworkCommandUsage1Description=Очищает все эффекты из удерживаемого феерверка -fireworkCommandUsage2=/<command> power <сумма> -fireworkCommandUsage2Description=Устанавливает силу удерживаемого феерверка +fireworkCommandUsage1Description=Очищает все эффекты из удерживаемого фейерверка +fireworkCommandUsage2=/<command> power <сила> +fireworkCommandUsage2Description=Устанавливает силу удерживаемого фейерверка fireworkCommandUsage3=/<command> fire [сумма] -fireworkCommandUsage3Description=Запускает одну либо несколько копий фейрверка, который находится в руке -fireworkCommandUsage4=/<command> <meta> +fireworkCommandUsage3Description=Запускает одну, или указанное количество копий удерживаемого фейерверка +fireworkCommandUsage4=/<command> <метаданные> fireworkCommandUsage4Description=Добавляет указанный эффект в удерживаемый феерверк fireworkEffectsCleared=§6Убраны все эффекты с удерживаемого стака. fireworkSyntax=§6Параметры фейерверка\:§c color\:<цвет> [fade\:<цвет>] [shape\:<форма>] [effect\:<эффект>]\n§6Чтобы использовать несколько цветов/эффектов, разделяйте значения запятыми\: §cred,blue,pink\n§6Формы\:§c star, ball, large, creeper, burst§6. Эффекты\:§c trail, twinkle§6. @@ -342,7 +365,7 @@ fixingHomes=Удаление недействительных домов... flyCommandDescription=Лети, как птица\! flyCommandUsage=/<command> [игрок] [on|off] flyCommandUsage1=/<command> [игрок] -flyCommandUsage1Description=Переключает полёт для себя или для другого игрока, если он указан +flyCommandUsage1Description=Переключает полёт для вас, или для другого игрока, если он указан flying=летает flyMode=§6Режим полета§c {0} §6для {1}§6. foreverAlone=§4Нет никого, кому бы Вы могли ответить. @@ -369,9 +392,9 @@ getposCommandUsage1Description=Получает координаты либо в giveCommandDescription=Выдаёт игроку предмет. giveCommandUsage=/<command> <игрок> <предмет|id> [кол-во [метаданные...]] giveCommandUsage1=/<command> <игрок> <предмет> [кол-во] -giveCommandUsage1Description=Даёт указанному игроку 64 (или указанное количество) указанного предмета +giveCommandUsage1Description=Даёт указанному игроку 64 (или указанное количество) определённого предмета giveCommandUsage2=/<command> <игрок> <предмет> <кол-во> <метаданные> -giveCommandUsage2Description=Даёт указанному игроку указанное количество указанного предмета с указанными метаданными +giveCommandUsage2Description=Даёт указанному игроку указанное количество указанного предмета с заданными метаданными geoipCantFind=§6Игрок §c{0} §6зашел из §aнеизвестной страны§6. geoIpErrorOnJoin=Не удается получить данные GeoIP для {0}. Пожалуйста, убедитесь, что Ваш лицензионный ключ и настройки верны. geoIpLicenseMissing=Лицензионный ключ не найден\! Инструкцию по настройке Вы можете найти на сайте https\://essentialsx.net/geoip. @@ -422,7 +445,7 @@ helpPlugin=§fПомощь по плагину §4{0}§r\: /help {1} helpopCommandDescription=Отсылает сообщение онлайн администраторам. helpopCommandUsage=/<command> <сообщение> helpopCommandUsage1=/<command> <сообщение> -helpopCommandUsage1Description=Отправляет указанное сообщение всем администраторам находящимися в данный момент в игре +helpopCommandUsage1Description=Отправляет указанное сообщение всем администраторам находящимися в данный момент в сети holdBook=§4Вы не держите редактируемую книгу. holdFirework=§4Вы должны держать фейерверк для добавления эффектов. holdPotion=§4Вы должны держать зелье для применения эффектов. @@ -438,9 +461,16 @@ homeConfirmation=§6У Вас уже есть дом с названием §c{0 homeSet=§6Точка дома установлена. hour=час hours=часов +ice=§6Вы чувствуете себя намного холоднее... +iceCommandDescription=Охлаждает игрока iceCommandUsage=/<command> [игрок] iceCommandUsage1=/<command> +iceCommandUsage1Description=Охлаждает Вас iceCommandUsage2=/<command> <игрок> +iceCommandUsage2Description=Охлаждает указанного игрока +iceCommandUsage3=/<command> * +iceCommandUsage3Description=Охлаждает всех игроков +iceOther=§6Охлаждаем§c {0}§6. ignoreCommandDescription=Включает или отключает игнорирование игроков. ignoreCommandUsage=/<command> <игрок> ignoreCommandUsage1=/<command> <игрок> @@ -499,7 +529,7 @@ itemloreCommandUsage1Description=Добавляет заданный текст itemloreCommandUsage2=/<command> set <строка> <текст> itemloreCommandUsage2Description=Устанавливает указанную строку описания удерживаемого предмета на заданный текст itemloreCommandUsage3=/<command> clear -itemloreCommandUsage3Description=Очищает описание удерживаемого предмета +itemloreCommandUsage3Description=Удаляет описание у удерживаемого предмета itemloreInvalidItem=§cВам нужно держать предмет, чтобы редактировать его описание. itemloreNoLine=§4В описании предмета из Вашей руки на строке §c{0}§4 отсутствует текст. itemloreNoLore=§4В описании предмета из Вашей руки отсутствует текст. @@ -511,7 +541,7 @@ itemnameClear=§6Вы убрали название этого предмета. itemnameCommandDescription=Переименовывает предмет. itemnameCommandUsage=/<command> [название] itemnameCommandUsage1=/<command> -itemnameCommandUsage1Description=Очищает имя удерживаемого предмета +itemnameCommandUsage1Description=Очищает имя у удерживаемого предмета itemnameCommandUsage2=/<command> <название> itemnameCommandUsage2Description=Устанавливает имя удерживаемого предмета на заданный текст itemnameInvalidItem=§cВам нужно держать предмет, чтобы переименовать его. @@ -575,6 +605,7 @@ kitCost=\ §7§o({0})§r kitDelay=§m{0}§r kitError=§4Нет наборов, которые могут быть выданы. kitError2=§4Этот набор неправильно настроен. Свяжитесь с администрацией. +kitError3=Невозможно дать предмет из набора "{0}" игроку {1} потому что предмет требует Paper 1.15.2+ для десериализации. kitGiveTo=§6Выдан набор§c {0}§6 игроку §c{1}§6. kitInvFull=§4Ваш инвентарь заполнен, оставшиеся предметы лежат на полу. kitInvFullNoDrop=§4В Вашем инвентаре недостаточно места для этого набора. @@ -616,21 +647,29 @@ loomCommandDescription=Открывает ткацкий станок. loomCommandUsage=/<command> mailClear=§6Чтобы очистить почту, введите§c /mail clear§6. mailCleared=§6Почта очищена\! +mailClearIndex=§4Вы должны указать число между 1-{0}. mailCommandDescription=Управляет Вашей серверной почтой. -mailCommandUsage=/<command> [read|clear|send <кому> <сообщение>|sendall <сообщение>] +mailCommandUsage=/<command> [read|clear|clear [число]|send [кому] [сообщение]|sendtemp [кому] [expire time] [сообщение]|sendall [сообщение]] mailCommandUsage1=/<command> read [страница] mailCommandUsage1Description=Читает первую (или указанную) страницу вашей почты -mailCommandUsage2=/<command> clear -mailCommandUsage2Description=Очищает вашу почту +mailCommandUsage2=/<command> clear [число] +mailCommandUsage2Description=Очищает или все, или только указанные письма mailCommandUsage3=/<command> send <игрок> <сообщение> -mailCommandUsage3Description=Отправляет указанному игроку указанное сообщение +mailCommandUsage3Description=Отправляет определённому игроку указанное сообщение mailCommandUsage4=/<command> sendall <сообщение> mailCommandUsage4Description=Отправляет всем игрокам указанное сообщение +mailCommandUsage5=/<command> sendtemp <игрок> <время истечения> <сообщение> +mailCommandUsage5Description=Отправляет указанному игроку указанное сообщение, срок действия которого истекает в указанное время mailDelay=Слишком много писем было отправлено за последнюю минуту. Максимум\: {0} +mailFormatNew=§6[§r{0}§6] §6[§r{1}§6] §r{2} +mailFormatNewTimed=§6[§e⚠§6] §6[§r{0}§6] §6[§r{1}§6] §r{2} +mailFormatNewRead=§6[§r{0}§6] §6[§r{1}§6] §7§o{2} +mailFormatNewReadTimed=§6[§e⚠§6] §6[§r{0}§6] §6[§r{1}§6] §7§o{2} mailFormat=§6[§r{0}§6] §r{1} mailMessage={0} mailSent=§6Письмо отправлено\! mailSentTo=§c{0}§6 было отправлено следующее письмо\: +mailSentToExpire=§c{0}§6 отправлено следующее письмо, которое истекает через §c{1}§6\: mailTooLong=§4Письмо слишком длинное. Попробуйте уместить его в 1000 символов. markMailAsRead=§6Чтобы отметить почту прочитанной, введите§c /mail clear§6. matchingIPAddress=§6Игроки, которые были замечены с этим IP-адресом\: @@ -679,14 +718,14 @@ msgIgnore=§c{0} §4отключил сообщения. msgtoggleCommandDescription=Блокирует получение приватных сообщений. msgtoggleCommandUsage=/<command> [игрок] [on|off] msgtoggleCommandUsage1=/<command> [игрок] -msgtoggleCommandUsage1Description=Переключает полёт для себя или для другого игрока, если он указан +msgtoggleCommandUsage1Description=Переключает полёт для вас, или для другого игрока, если он указан multipleCharges=§4Вы не можете применить больше одного заряда для фейерверка. multiplePotionEffects=§4Вы не можете применить более одного эффекта для зелья. muteCommandDescription=Заглушает или снимает заглушку с игрока. muteCommandUsage=/<command> <игрок> [время] [причина] muteCommandUsage1=/<command> <игрок> muteCommandUsage1Description=Навсегда устанавливает мут на указанного игрока или снимает мут если у них уже установлен мут -muteCommandUsage2=/<command> <игрок> <время> [причина] +muteCommandUsage2=/<command> <игрок> <продолжительность> [причина] muteCommandUsage2Description=Заглушает указанного игрока на указанное время с необязательным указанием причины mutedPlayer=§6Игрок {0} §6был заглушен. mutedPlayerFor=§6Игрок {0} §6был заглушен на§c {1}§6. @@ -708,16 +747,16 @@ nearCommandUsage2Description=Перечисляет всех игроков в nearCommandUsage3=/<command> <игрок> nearCommandUsage3Description=Перечисляет всех игроков в пределах радиуса по умолчанию от указанного игрока nearCommandUsage4=/<command> <игрок> <радиус> -nearCommandUsage4Description=Перечисляет всех игроков в пределах указанного радиуса от указанного игрока +nearCommandUsage4Description=Перечисляет всех игроков в пределах заданного радиуса от указанного игрока nearbyPlayers=§6Окружающие игроки\:§r {0} negativeBalanceError=§4Игрок не имеет прав на отрицательный баланс. nickChanged=§6Никнейм изменен. nickCommandDescription=Изменяет Ваш никнейм или никнейм другого игрока. nickCommandUsage=/<command> [игрок] <никнейм|off> nickCommandUsage1=/<command> <никнейм> -nickCommandUsage1Description=Изменяет ваше имя персонажа на заданный текст +nickCommandUsage1Description=Изменяет ваш ник на заданный текст nickCommandUsage2=/<command> off -nickCommandUsage2Description=Удаляет ваш ник +nickCommandUsage2Description=Удаляет ваш псевдоним nickCommandUsage3=/<command> <игрок> <ник> nickCommandUsage3Description=Изменяет никнейм указанного игрока на указанный текст nickCommandUsage4=/<command> <игрок> off @@ -789,7 +828,7 @@ passengerTeleportFail=§4Вы не можете телепортироватьс payCommandDescription=Передает сумму с Вашего баланса другому игроку. payCommandUsage=/<command> <игрок> <сумма> payCommandUsage1=/<command> <игрок> <сумма> -payCommandUsage1Description=Даёт заданному игроку заданную сумму денег +payCommandUsage1Description=Платит указанному игроку заданную сумму денег payConfirmToggleOff=§6Вы больше не будете получать запросы на подтверждение платежей. payConfirmToggleOn=§6Теперь Вам будет предлагать подтвердить платежи. payDisabledFor=§c{0}§6 больше не может принимать платежи. @@ -803,7 +842,7 @@ payconfirmtoggleCommandUsage=/<command> paytoggleCommandDescription=Переключает приём или отклонение платежей. paytoggleCommandUsage=/<command> [игрок] paytoggleCommandUsage1=/<command> [игрок] -paytoggleCommandUsage1Description=Включает/выключает если вы, или другой игрок указан, принятие платежей +paytoggleCommandUsage1Description=Переключает, принимаете ли вы платежи, или другой игрок если указан pendingTeleportCancelled=§4Запрос на телепортацию отменён. pingCommandDescription=Понг\! pingCommandUsage=/<command> @@ -831,9 +870,9 @@ potionCommandUsage=/<command> <clear|apply|effect\:<эффект> power\:<мощ potionCommandUsage1=/<command> clear potionCommandUsage1Description=Удаляет все эффекты на удерживаемом зелье potionCommandUsage2=/<command> apply -potionCommandUsage2Description=Применяет все эффекты удерживаемого зелья на вас, не расходуя зелье +potionCommandUsage2Description=Накладывает все эффекты удерживаемого зелья на вас, не расходуя зелье potionCommandUsage3=/<command> effect\:<эффект> power\:<сила> duration\:<продолжительность> -potionCommandUsage3Description=Применяет метаданные зелья на удерживаемое зелье +potionCommandUsage3Description=Применяет указанные метаданные зелья на удерживаемое зелье posX=§6X\: {0} (+Восток <-> -Запад) posY=§6Y\: {0} (+Верх <-> -Низ) posYaw=§6Поворот\: {0} (Вращение) @@ -899,7 +938,7 @@ questionFormat=§2[Вопрос]§r {0} rCommandDescription=Быстрый ответ игроку, отправившему Вам сообщение. rCommandUsage=/<command> <сообщение> rCommandUsage1=/<command> <сообщение> -rCommandUsage1Description=Отвечает на последнее сообщение игрока переданным текстом +rCommandUsage1Description=Отвечает на последнее сообщение игрока указанным текстом radiusTooBig=§4Радиус слишком большой\! Максимальный радиус -§c {0}§4. readNextPage=§6Введите§c /{0} {1} §6для просмотра следующей страницы. realName=§f{0}§r§6 is §f{1} @@ -925,18 +964,22 @@ recipeWhere=§6Где\: {0} removeCommandDescription=Удаляет сущности из Вашего текущего мира. removeCommandUsage=/<command> <all|tamed|named|drops|arrows|boats|minecarts|xp|paintings|itemframes|endercrystals|monsters|animals|ambient|mobs|<моб>> [радиус|мир] removeCommandUsage1=/<command> <тип моба> [мир] +removeCommandUsage1Description=Удаляет всех мобов указанного типа в текущем мире или из другого мира, если он указан removeCommandUsage2=/<command> <тип моба> <радиус> [мир] +removeCommandUsage2Description=Удаляет всех мобов указанного типа в данном радиусе в текущем мире или в другом мире, если он указан removed=§6Убрано§c {0} §6сущностей. repair=§6Вы успешно починили §c{0}§6. repairAlreadyFixed=§4Этот предмет не нуждается в починке. repairCommandDescription=Восстанавливает прочность одного или всех предметов. repairCommandUsage=/<command> [hand|all] repairCommandUsage1=/<command> -repairCommandUsage1Description=Ремонт предмета в руке +repairCommandUsage1Description=Ремонтирует предмет в руке +repairCommandUsage2=/<command> all repairCommandUsage2Description=Чинит все предметы в вашем инвентаре repairEnchanted=§4У Вас недостаточно прав для ремонта зачарованных вещей. repairInvalidType=§4Этот предмет не может быть отремонтирован. repairNone=§4Нуждающиеся в починке предметы не найдены. +replyFromDiscord=**Ответ от {0}\:** `{1}` replyLastRecipientDisabled=§6Ответ последнему получателю сообщения §cотключен§6. replyLastRecipientDisabledFor=§6Ответ последнему получателю сообщения §cотключен §6для §c{0}§6. replyLastRecipientEnabled=§6Ответ последнему получателю сообщения §cвключен§6. @@ -956,6 +999,7 @@ rest=§6Вы чувствуете себя отдохнувшим. restCommandDescription=Оправляет Вас или указанного игрока. restCommandUsage=/<command> [игрок] restCommandUsage1=/<command> [игрок] +restCommandUsage1Description=Сбрасывает время с последнего сна для вас или другого игрока, если указано restOther=§6Оправление§c {0}§6. returnPlayerToJailError=§4Произошла ошибка при возвращении игрока§c {0} §4в тюрьму\: §c{1}§4\! rtoggleCommandDescription=Изменяет, будет ли получатель ответа последним получателем или последним отправителем. @@ -969,10 +1013,20 @@ seenAccounts=§6Игрок также известен как\:§c {0} seenCommandDescription=Показывает время последнего выхода игрока. seenCommandUsage=/<command> <игрок> seenCommandUsage1=/<command> <игрок> +seenCommandUsage1Description=Отображает время выхода, бан, мут и UUID указанного игрока seenOffline=§6Игрок§c {0} §4офлайн§6 в течение §c{1}§6. seenOnline=§6Игрок§c {0} §aонлайн§6 в течение §c{1}§6. sellBulkPermission=§6У Вас нет прав продавать несколько предметов сразу. sellCommandDescription=Продаёт предмет из Вашей руки. +sellCommandUsage=/<command> <<имя предмета>|<id>|hand|inventory|blocks> [кол-во] +sellCommandUsage1=/<command> <имя предмета> [кол-во] +sellCommandUsage1Description=Продаёт все (или указанное количество) предметы указанного типа из Вашего инвентаря +sellCommandUsage2=/<command> hand [кол-во] +sellCommandUsage2Description=Продаёт все (или указанное количество) удерживаемые в руке предметы +sellCommandUsage3=/<command> all +sellCommandUsage3Description=Продаёт все возможные предметы в вашем инвентаре +sellCommandUsage4=/<command> blocks [кол-во] +sellCommandUsage4Description=Продаёт все (или указанное количество) блоки в Вашем инвентаре sellHandPermission=§6У Вас нет прав на продажу предмета из руки. serverFull=Сервер заполнен\! serverReloading=Похоже, что Вы решили перезагрузить свой сервер используя /reload. Неужели Вы настолько ненавидите себя? Не ожидайте поддержки от команды EssentialsX при использовании /reload. @@ -989,19 +1043,33 @@ setSpawner=§6Tип рассадника мобов изменён на§c {0}§ sethomeCommandDescription=Устанавливает точку дома на Вашем текущем местоположении. sethomeCommandUsage=/<command> [игрок\:][название] sethomeCommandUsage1=/<command> <название> +sethomeCommandUsage1Description=Устанавливает дом с заданным именем в вашем местоположении sethomeCommandUsage2=/<command> <игрок>\:<название> +sethomeCommandUsage2Description=Устанавливает дом указанного игрока с заданным именем в вашем местоположении setjailCommandDescription=Создает тюрьму с названием, указанным в аргументе [тюрьма]. setjailCommandUsage=/<command> <тюрьма> setjailCommandUsage1=/<command> <тюрьма> +setjailCommandUsage1Description=Устанавливает тюрьму с указанным именем в вашем местоположении settprCommandDescription=Задаёт центр и параметры для случайной телепортации. settprCommandUsage=/<command> [center|minrange|maxrange] [значение] +settprCommandUsage1=/<command> center +settprCommandUsage1Description=Устанавливает центр для случайного телепорта в вашем местоположении +settprCommandUsage2=/<command> minrange <радиус> +settprCommandUsage2Description=Устанавливает минимальный радиус случайного телепорта на заданное значение +settprCommandUsage3=/<command> maxrange <радиус> +settprCommandUsage3Description=Устанавливает максимальный радиус случайного телепорта на заданное значение settpr=§6Задан центр случайного телепорта. settprValue=§6Параметер §c{0}§6 случайного телепорта установлен на §c{1}§6. setwarpCommandDescription=Создаёт новый варп. setwarpCommandUsage=/<command> <варп> setwarpCommandUsage1=/<command> <варп> +setwarpCommandUsage1Description=Устанавливает варп с указанным именем в вашем местоположении setworthCommandDescription=Устанавливает стоимость продажи предмета. setworthCommandUsage=/<command> [предмет/id] <цена> +setworthCommandUsage1=/<command> <цена> +setworthCommandUsage1Description=Устанавливает стоимость предмета в руке на заданную +setworthCommandUsage2=/<command> <имя предмета> <цена> +setworthCommandUsage2Description=Устанавливает стоимость указанного предмета на заданную sheepMalformedColor=§4Неверный цвет. shoutDisabled=§6Режим крика §cотключен§6. shoutDisabledFor=§6Режим крика §cотключен §6для §c{0}§6. @@ -1013,6 +1081,7 @@ editsignCommandClearLine=§6Очищена строка§c {0}§6. showkitCommandDescription=Показывает содержимое набора. showkitCommandUsage=/<command> <набор> showkitCommandUsage1=/<command> <набор> +showkitCommandUsage1Description=Отображает краткое описание предметов в указанном наборе editsignCommandDescription=Редактирует табличку в мире. editsignCommandLimit=§4Предоставленный Вами текст слишком длинный, чтобы уместить его на табличке. editsignCommandNoLine=§4Вы должны ввести номер строки между §c1-4§4. @@ -1023,7 +1092,14 @@ editsignCopyLine=§6Скопирована строка таблички §c{0} editsignPaste=§6Надпись таблички вставлена\! editsignPasteLine=§6Вставлена строка таблички §c{0}§6\! editsignCommandUsage=/<command> <set/clear/copy/paste> [строка] [текст] +editsignCommandUsage1=/<command> set <строка> <текст> +editsignCommandUsage1Description=Устанавливает указанную строку таблички на заданный текст +editsignCommandUsage2=/<command> clear <строка> editsignCommandUsage2Description=Очищает выбранную строку текста на определенной табличке +editsignCommandUsage3=/<command> copy [строка] +editsignCommandUsage3Description=Копирует весь (или с указанной строки) текст таблички в Ваш буфер обмена +editsignCommandUsage4=/<command> paste [номер строки] +editsignCommandUsage4Description=Вставляет текст буфер обмена на всю (или на указанную строку) табличку signFormatFail=§4[{0}] signFormatSuccess=§1[{0}] signFormatTemplate=[{0}] @@ -1036,7 +1112,9 @@ skullChanged=§6Голова изменена на §c{0}§6. skullCommandDescription=Устанавливает владельца головы. skullCommandUsage=/<command> [владелец] skullCommandUsage1=/<command> +skullCommandUsage1Description=Выдаёт Вашу голову skullCommandUsage2=/<command> <игрок> +skullCommandUsage2Description=Выдаёт голову указанного игрока slimeMalformedSize=§4Неверный размер. smithingtableCommandDescription=Открывает стол кузнеца. smithingtableCommandUsage=/<command> @@ -1046,24 +1124,34 @@ socialSpyMutedPrefix=§f[§6СШ§f] §7(заглушен) §r socialspyCommandDescription=Переключает возможность просмотра msg/mail в чате. socialspyCommandUsage=/<command> [игрок] [on|off] socialspyCommandUsage1=/<command> [игрок] +socialspyCommandUsage1Description=Переключает режим СоцШпиона Вам или указанному игроку socialSpyPrefix=§f[§6СШ§f] §r soloMob=§4Этот моб любит быть в одиночестве. spawned=призван spawnerCommandDescription=Изменяет тип мобов в рассаднике. spawnerCommandUsage=/<command> <моб> [задержка] spawnerCommandUsage1=/<command> <моб> [задержка] +spawnerCommandUsage1Description=Изменяет тип моба (если указано, то и задержку) спавнера, на который Вы смотрите spawnmobCommandDescription=Призывает моба. spawnmobCommandUsage=/<command> <моб>[\:данные][,<наездник>[\:данные]] [кол-во] [игрок] +spawnmobCommandUsage1=/<command> <моб>[\:данные] [кол-во] [игрок] +spawnmobCommandUsage1Description=Призывает одного (или заданное количество) определённого моба на Вашем месте (или месте указанного игрока) +spawnmobCommandUsage2=/<command> <моб>[\:данные],<наездник>[\:данные] [кол-во] [игрок] +spawnmobCommandUsage2Description=Призывает одного (или заданное количество) указанного моба на другом указанном мобе на Вашем месте (или месте указанного игрока) spawnSet=§6Точка спавна для группы§c {0}§6 была установлена. spectator=наблюдатель speedCommandDescription=Изменяет Вашу скорость. speedCommandUsage=/<command> [fly/walk] <скорость> [игрок] +speedCommandUsage1=/<command> <скорость> speedCommandUsage1Description=Устанавливает вашу скорость полёта или ходьбы до заданного значения speedCommandUsage2=/<command> [fly/walk] <скорость> [игрок] +speedCommandUsage2Description=Устанавливает скорость для заданного типа для Вас или указанного игрока stonecutterCommandDescription=Открывает камнерез. stonecutterCommandUsage=/<command> sudoCommandDescription=Выполняет команду от лица другого игрока. sudoCommandUsage=/<command> <игрок> <команда [аргументы]> +sudoCommandUsage1=/<command> <игрок> <команда> [аргументы] +sudoCommandUsage1Description=Выполняет указанную команду за определённого игрока sudoExempt=§4Вы не можете принуждать §c{0}§6. sudoRun=§6Вы принудили§c {0} §6выполнить команду\:§r /{1} suicideCommandDescription=Причиняет Вам увечья, несовместимые с жизнью. @@ -1076,7 +1164,7 @@ takenFromOthersAccount=§e{0}§a снято с аккаунта §e {1}§a. Те teleportAAll=§6Запрос на телепортацию отправлен всем игрокам... teleportAll=§6Телепортирую всех игроков... teleportationCommencing=§6Телепортирование начинается... -teleportationDisabled=§6Телепортиции §cвыключены§6. +teleportationDisabled=§6Телепортации §cвыключены§6. teleportationDisabledFor=§6Телепортации §cвыключены §6для §c{0}§6. teleportationDisabledWarning=§6Вы должны включить телепортации, прежде чем другие игроки смогут телепортировать Вас. teleportationEnabled=§6Телепортации §cвключены§6. @@ -1102,22 +1190,29 @@ tempbanExemptOffline=§4Вы не можете временно банить о tempbanJoin=Вы забанены на этом сервере на {0}. Причина\: {1} tempBanned=§cВы были временно забанены на§r {0}\:\n§r{2} tempbanCommandDescription=Временно банит игрока. -tempbanCommandUsage=/<command> <игрок> <время> [причина] +tempbanCommandUsage=/<command> <игрок> <продолжительность> [причина] tempbanCommandUsage1=/<command> <игрок> <время> [причина] tempbanCommandUsage1Description=Банит указанного игрока на указанный срок с необязательным указанием причины tempbanipCommandDescription=Временно банит IP-адрес. -tempbanipCommandUsage=/<command> <игрок> <время> [причина] -tempbanipCommandUsage1=/<command> <игрок|ip-адрес> <время> [причина] +tempbanipCommandUsage=/<command> <игрок> <продолжительность> [причина] +tempbanipCommandUsage1=/<command> <игрок|ip-адрес> <продолжительность> [причина] tempbanipCommandUsage1Description=Банит указанный IP-адрес на указанный срок с необязательным указанием причины thunder=§6Вы§c {0} §6грозу в своём мире. thunderCommandDescription=Включает/выключает грозу. thunderCommandUsage=/<command> <true/false> [длительность] +thunderCommandUsage1=/<command> <true|false> [продолжительность] +thunderCommandUsage1Description=Включает/Выключает гром на необязательную длительность thunderDuration=§6Вы§c {0} §6грозу в своём мире на§c {1} §6секунд. timeBeforeHeal=§4Времени до следующего лечения\:§c {0}§4. timeBeforeTeleport=§4Времени до следующей телепортации\:§c {0}§4. timeCommandDescription=Отображает/изменяет время в мире. По умолчанию - в текущем мире. timeCommandUsage=/<command> [set|add] [day|night|dawn|17\:30|4pm|4000ticks] [мир|all] timeCommandUsage1=/<command> +timeCommandUsage1Description=Показывает время во всех мирах +timeCommandUsage2=/<command> set <время> [мир|all] +timeCommandUsage2Description=Устанавливает время в текущем (или указанном) мире на заданное время +timeCommandUsage3=/<command> add <время> [мир|all] +timeCommandUsage3Description=Добавляет заданное время к времени текущего (или указанного) мира timeFormat=§c{0}§6 или §c{1}§6 или §c{2}§6 timeSetPermission=§4У Вас нет прав для установки времени. timeSetWorldPermission=§4У Вас нет прав для установки времени в мире ''{0}''. @@ -1130,6 +1225,7 @@ togglejailCommandUsage=/<command> <игрок> <тюрьма> [время] toggleshoutCommandDescription=Переключает режим крика Вашего чата. toggleshoutCommandUsage=/<command> [игрок] [on|off] toggleshoutCommandUsage1=/<command> [игрок] +toggleshoutCommandUsage1Description=Переключает режим крика Вам или другому игроку, если указано topCommandDescription=Телепортует на самый высокий блок в этом месте. topCommandUsage=/<command> totalSellableAll=§aОбщая стоимость всех продаваемых блоков и предметов равна §c{1}§a. @@ -1139,59 +1235,81 @@ totalWorthBlocks=§aПроданы все блоки за сумму §c{1}§a. tpCommandDescription=Телепортирует к игроку. tpCommandUsage=/<command> <игрок> [игрок2] tpCommandUsage1=/<command> <игрок> +tpCommandUsage1Description=Телепортирует вас к указанному игроку +tpCommandUsage2=/<command> <игрок> <другой игрок> +tpCommandUsage2Description=Телепортирует указанного игрока ко второму tpaCommandDescription=Запрашивает телепорт к указанному игроку. tpaCommandUsage=/<command> <игрок> tpaCommandUsage1=/<command> <игрок> +tpaCommandUsage1Description=Отправляет указанному игроку запрос на телепортацию tpaallCommandDescription=Запрашивает всех игроков телепортироваться к Вам. tpaallCommandUsage=/<command> <игрок> tpaallCommandUsage1=/<command> <игрок> +tpaallCommandUsage1Description=Отправляет всем игрокам запрос на телепортацию к Вам tpacancelCommandDescription=Отменяет все исходящие запросы на телепорт. Укажите [игрок] для отмены запросов к конкретному игроку. tpacancelCommandUsage=/<command> [игрок] tpacancelCommandUsage1=/<command> +tpacancelCommandUsage1Description=Отменяет все ваши ожидающие подтверждения запросы на телепортацию tpacancelCommandUsage2=/<command> <игрок> +tpacancelCommandUsage2Description=Отменяет все ваши ожидающие подтверждения запросы на телепортацию к указанному игроку tpacceptCommandDescription=Принимает запрос на телепортацию. tpacceptCommandUsage=/<command> [игрок] tpacceptCommandUsage1=/<command> +tpacceptCommandUsage1Description=Принимает входящий запрос на телепортацию tpahereCommandDescription=Запрашивает указанного игрока телепортироваться к Вам. tpahereCommandUsage=/<command> <игрок> tpahereCommandUsage1=/<command> <игрок> +tpahereCommandUsage1Description=Отправляет указанному игроку запрос на телепортацию к Вам tpallCommandDescription=Телепортирует всех онлайн игроков к другому игроку. tpallCommandUsage=/<command> [игрок] tpallCommandUsage1=/<command> [игрок] +tpallCommandUsage1Description=Телепортирует всех игроков к вам, или другому игроку, если указано tpautoCommandDescription=Включает автоматический приём запросов на телепортацию. tpautoCommandUsage=/<command> [игрок] tpautoCommandUsage1=/<command> [игрок] +tpautoCommandUsage1Description=Вкл\\Выкл автоматический прием запросов на телепортацию у Вас, или у другого игрока, если указано tpdenyCommandDescription=Отклоняет запрос на телепортацию. tpdenyCommandUsage=/<command> tpdenyCommandUsage1=/<command> +tpdenyCommandUsage1Description=Отклоняет запрос на входящий телепорт tphereCommandDescription=Телепортирует игрока к Вам. tphereCommandUsage=/<command> <игрок> tphereCommandUsage1=/<command> <игрок> +tphereCommandUsage1Description=Телепортирует указанного игрока к вам tpoCommandDescription=Принуждает к телепортации, игнорируя /tptpggle. tpoCommandUsage=/<command> <игрок> [игрок2] tpoCommandUsage1=/<command> <игрок> +tpoCommandUsage1Description=Телепортирует указанного игрока к вам, игнорируя их предпочтения +tpoCommandUsage2=/<command> <игрок> <другой игрок> +tpoCommandUsage2Description=Телепортирует первого указанного игрока ко второму, игнорируя их предпочтения tpofflineCommandDescription=Телепортирует к месту последнего выхода игрока. tpofflineCommandUsage=/<command> <игрок> tpofflineCommandUsage1=/<command> <игрок> +tpofflineCommandUsage1Description=Телепортирует вас на координаты выхода указанного игрока tpohereCommandDescription=Принуждает к телепортации сюда, игнорируя /tptpggle. tpohereCommandUsage=/<command> <игрок> tpohereCommandUsage1=/<command> <игрок> +tpohereCommandUsage1Description=Телепортирует указанного игрока к вам, игнорируя их предпочтения tpposCommandDescription=Телепортирует по указанным координатам. tpposCommandUsage=/<command> <x> <y> <z> [поворот] [наклон] [мир] tpposCommandUsage1=/<command> <x> <y> <z> [поворот] [наклон] [мир] +tpposCommandUsage1Description=Телепортирует вас на указанные координаты, с возможностью указать поворот, наклон, и/или мир tprCommandDescription=Телепортирует в случайное место. tprCommandUsage=/<command> tprCommandUsage1=/<command> +tprCommandUsage1Description=Телепортирует вас в случайное место tprSuccess=§6Телепортация в случайное место... tps=§6Tекущий TPS \= {0} tptoggleCommandDescription=Блокирует все виды телепортации. tptoggleCommandUsage=/<command> [игрок] [on|off] tptoggleCommandUsage1=/<command> [игрок] +tptoggleCommandUsageDescription=Включает\\Выключает телепорты у вас, или другого игрока, если указано tradeSignEmpty=§4В торговой табличке нет ничего доступного Вам. tradeSignEmptyOwner=§4В торговой табличке нет ничего для сбора. treeCommandDescription=Создаёт дерево на месте Вашего взора. treeCommandUsage=/<command> <tree|birch|redwood|redmushroom|brownmushroom|jungle|junglebush|swamp> treeCommandUsage1=/<command> <tree|birch|redwood|redmushroom|brownmushroom|jungle|junglebush|swamp> +treeCommandUsage1Description=Создаёт дерево указанного типа на месте Вашего взгляда treeFailure=§4Не удалось сгенерировать дерево. Попробуйте на дёрне или земле. treeSpawned=§6Дерево создано. true=§aистина§r @@ -1215,6 +1333,12 @@ unknownItemInList=§4Неизвестный предмет {0} в списке { unknownItemName=§4Неизвестное название предмета\: {0}. unlimitedCommandDescription=Позволяет неограниченно ставить предметы. unlimitedCommandUsage=/<command> <list|item|clear> [игрок] +unlimitedCommandUsage1=/<command> list [игрок] +unlimitedCommandUsage1Description=Отображает список ваших неограниченных предметов, или другого игрока, если он указан +unlimitedCommandUsage2=/<command> <предмет> [игрок] +unlimitedCommandUsage2Description=Переключает неограничен ли указанный предмет у вас, или у другого игрока, если он указан +unlimitedCommandUsage3=/<command> clear [игрок] +unlimitedCommandUsage3Description=Убирает все неограниченные предметы у вас, или у другого игрока, если он указан unlimitedItemPermission=§4Нет прав для неограниченного предмета §c{0}§4. unlimitedItems=§6Неограниченные предметы\:§r unmutedPlayer=§6Игрок§c {0} §6снова может писать в чат. @@ -1243,6 +1367,7 @@ vanish=§6Невидимость для {0}§6\: {1} vanishCommandDescription=Скрывает Вас от других игроков. vanishCommandUsage=/<command> [игрок] [on|off] vanishCommandUsage1=/<command> [игрок] +vanishCommandUsage1Description=Вкл.\\Выкл. невидимость для Вас или другого игрока, если указано vanished=§6Вы полностью невидимы для обычных игроков и скрыты от внутриигровых команд. versionCheckDisabled=§6Проверка обновлений отключена в настройках. versionCustom=§6Не удалось проверить Вашу версию\! Собрано вручную? Информация о сборке\: §c{0}§6. @@ -1259,6 +1384,7 @@ versionOutputFine=§6{0} версия\: §a{1} versionOutputWarn=§6{0} версия\: §c{1} versionOutputUnsupported=§d{0} §6версия\: §d{1} versionOutputUnsupportedPlugins=§6У Вас работают §dнеподдерживаемые плагины§6\! +versionOutputEconLayer=§6Слой экономики\: §r{0} versionMismatch=§4Версии не совпадают\! Обновите {0} до актуальной версии. versionMismatchAll=§4Версии не совпадают\! Обновите все компоненты Essentials до актуальной версии. versionReleaseLatest=§6Вы используете последнюю стабильную версию EssentialsX\! @@ -1271,12 +1397,16 @@ voiceSilencedReasonTime=§6Ваш голос был заглушен на {0}\! walking=ходьбы warpCommandDescription=Выводит список всех варпов, или перемещает на указанный варп. warpCommandUsage=/<command> <страница|варп [игрок]> -warpCommandUsage1=/<command> <страница> +warpCommandUsage1=/<command> [страница] +warpCommandUsage1Description=Показывает список всех варпов на первой или указанной странице +warpCommandUsage2=/<command> <варп> [игрок] +warpCommandUsage2Description=Телепортирует вас или указанного игрока в заданный варп warpDeleteError=§4Ошибка при удалении варпа. warpInfo=§6Информация о варпе\:§c {0}§6\: warpinfoCommandDescription=Отображает местоположение указанного варпа. warpinfoCommandUsage=/<command> <варп> warpinfoCommandUsage1=/<command> <варп> +warpinfoCommandUsage1Description=Предоставляет информацию об указанном варпе warpingTo=§6Перемещение на§c {0}§6. warpList={0} warpListPermission=§4У Вас нет прав для просмотра списка варпов. @@ -1286,6 +1416,8 @@ warps=§6Варпы\:§r {0} warpsCount=§6Всего§c {0} §6варпов. Показана страница §c{1} §6из §c{2}§6. weatherCommandDescription=Устанавливает погоду. weatherCommandUsage=/<command> <storm|sun> [длительность] +weatherCommandUsage1=/<command> <storm|sun> [длительность] +weatherCommandUsage1Description=Устанавливает заданный тип погоды с возможным указанием продолжительности warpSet=§6Варп§c {0} §6установлен. warpUsePermission=§4У Вас нет прав для телепортации на этот варп. weatherInvalidWorld=Мир с именем {0} не найден\! @@ -1302,6 +1434,7 @@ whoisBanned=§6 - Забанен\:§r {0} whoisCommandDescription=Показывает имя игрока за никнеймом. whoisCommandUsage=/<command> <никнейм> whoisCommandUsage1=/<command> <игрок> +whoisCommandUsage1Description=Даёт базовую информацию об указанном игроке whoisExp=§6 - Опыт\:§r {0} (Уровень {1}) whoisFly=§6 - Режим полета\:§r {0} ({1}) whoisSpeed=§6 - Скорость\:§r {0} @@ -1327,9 +1460,20 @@ workbenchCommandUsage=/<command> worldCommandDescription=Перемещает между мирами. worldCommandUsage=/<command> [мир] worldCommandUsage1=/<command> +worldCommandUsage1Description=Телепортирует вас к вашему текущему местоположению в Незере, или Верхнем мире +worldCommandUsage2=/<command> <мир> +worldCommandUsage2Description=Телепортирует на ваши координаты в указанном мире worth=§aСтоимость стака {0} составляет §c{1}§a ({2} предметов по {3} каждый) worthCommandDescription=Вычисляет стоимость указанного предмета или предмета в руке. worthCommandUsage=/<command> <<предмет|id>|hand|inventory|blocks> [-][кол-во] +worthCommandUsage1=/<command> <имя предмета> [кол-во] +worthCommandUsage1Description=Проверяет стоимость всего (или заданного количества) определённого предмета из вашего инвентаря +worthCommandUsage2=/<command> hand [кол-во] +worthCommandUsage2Description=Проверяет стоимость всех (или заданного количества) предметов в вашей руке +worthCommandUsage3=/<command> all +worthCommandUsage3Description=Проверяет стоимость всех возможных предметов в вашем инвентаре +worthCommandUsage4=/<command> blocks [кол-во] +worthCommandUsage4Description=Проверяет стоимость всех (или заданного количества) блоков из вашего инвентаря worthMeta=§aСтоимость стака {0} с метаданными {1} составляет §c{2}§a ({3} предметов по {4} каждый) worthSet=§6Цена установлена year=год diff --git a/Essentials/src/main/resources/messages_sk.properties b/Essentials/src/main/resources/messages_sk.properties index 4aecd7f2162..1afb931dcd7 100644 --- a/Essentials/src/main/resources/messages_sk.properties +++ b/Essentials/src/main/resources/messages_sk.properties @@ -199,6 +199,7 @@ destinationNotSet=Cieľ nebol nastavený\! disabled=vypnuté disabledToSpawnMob=§4Vyvolávanie tohto tvora bolo vypnuté v konfiguračnom súbore. disableUnlimited=§6Neobmedzené ukladanie§c {0} §6bolo vypnuté pre hráča§c {1}§6. +discordReloadInvalid=Opätovné načítanie konfigurácie EssentialsX Discord nie je možné, keď je plugin v neplatnom stave\! Ak sa konfigurácia zmenila, reštartuj server. disposal=Odpadkový kôš disposalCommandDescription=Otvorí prenosný odpadkový kôš. disposalCommandUsage=/<command> @@ -411,6 +412,7 @@ itemId=§6ID\:§c {0} itemloreClear=§6Odstránil si povesť tohto predmetu. itemloreCommandDescription=Upraviť povesť predmetu. itemloreCommandUsage=/<command> <add/set/clear> [text/riadok] [text] +itemloreCommandUsage1=/<command> add [text] itemloreInvalidItem=§4Predmet, ktorého povesť chceš upraviť, musíš držať v ruke. itemloreNoLine=§4Držaný predmet nemá povesť na riadku §c{0}§4. itemloreNoLore=§4Držaný predmet nemá žiadnu povesť. @@ -514,13 +516,29 @@ loomCommandDescription=Otvorí krosná. loomCommandUsage=/<command> mailClear=§6Pre vymazanie správ použi§c /mail clear§6. mailCleared=§6Správy vymazané\! +mailClearIndex=§4Musíš zadať číslo medzi 1 a {0}. mailCommandDescription=Spravuje vnútroserverovú poštu medzi hráčmi. -mailCommandUsage=/<command> [read|clear|send [komu] [správa]|sendall [správa]] +mailCommandUsage=/<command> [read|clear|clear [počet]|send [adresát] [správa]|sendtemp [adresát] [čas do vypršania] [správa]|sendall [správa]] +mailCommandUsage1=/<command> read [strana] +mailCommandUsage1Description=Zobrazí prvú (alebo zadanú) stranu tvojej pošty +mailCommandUsage2=/<command> clear [počet] +mailCommandUsage2Description=Vymaže buď všetky, alebo len zadaný mail +mailCommandUsage3=/<command> send <hráč> <správa> +mailCommandUsage3Description=Odošle danému hráčovi zadanú správu +mailCommandUsage4=/<command> sendall <správa> +mailCommandUsage4Description=Odošle všetkým hráčom zadanú správu +mailCommandUsage5=/<command> sendtemp <hráč> <čas do vypršania> <správa> +mailCommandUsage5Description=Odošle hráčovi správu, ktorá vyprší po zadanom čase mailDelay=Za poslednú minútu bolo odoslaných príliš veľa správ. Maximum\: {0} +mailFormatNew=§6[§r{0}§6] §6[§r{1}§6] §r{2} +mailFormatNewTimed=§6[§e⚠§6] §6[§r{0}§6] §6[§r{1}§6] §r{2} +mailFormatNewRead=§6[§r{0}§6] §6[§r{1}§6] §7§o{2} +mailFormatNewReadTimed=§6[§e⚠§6] §6[§r{0}§6] §6[§r{1}§6] §7§o{2} mailFormat=§6[§r{0}§6] §r{1} mailMessage={0} mailSent=§6Správa odoslaná\! mailSentTo=§6Hráčovi §c{0}§6 bola odoslaná táto správa\: +mailSentToExpire=§6Hráčovi §c{0}§6 bola odoslaná nasledovná správa, ktorá vyprší o §c{1}§6\: mailTooLong=§4Tvoja správa je príliš dlhá, môže mať najviac 1000 znakov. markMailAsRead=§6Pre vymazanie správ použi§c /mail clear§6. matchingIPAddress=§6Z tejto IP adresy sa v minulosti pripojili nasledujúci hráči\: diff --git a/Essentials/src/main/resources/messages_tr.properties b/Essentials/src/main/resources/messages_tr.properties index ce97ca61153..40f893e5755 100644 --- a/Essentials/src/main/resources/messages_tr.properties +++ b/Essentials/src/main/resources/messages_tr.properties @@ -9,6 +9,7 @@ adventure=macera afkCommandDescription=Sizi afk (klavyeden uzakta) olarak işaretler. afkCommandUsage=/<komut> [oyuncu/mesaj...] afkCommandUsage1=/<komut> [mesaj] +afkCommandUsage1Description=İsteğe bağlı bir nedenle afk durumunuzu değiştirir alertBroke=kırıldı\: alertFormat=§3[{0}] §cisimli oyuncu §6{3} §cnoktasında §6{2} §r{1} alertPlaced=yerleştirildi\: @@ -54,12 +55,14 @@ balancetopCommandDescription=En yüksek bakiye değerini gösterir. banCommandDescription=Bir oyuncuyu banlar. banCommandUsage=/<komut> <oyuncu> [neden] banCommandUsage1=/<komut> <oyuncu> [neden] +banCommandUsage1Description=Belirtilen oyuncuyu isteğe bağlı bir gerekçeyle yasaklar banExempt=§4Bu oyuncuyu uzaklaştıramazsınız. banExemptOffline=§4Çevrimdışı oyuncuları uzaklaştıramazsın. banFormat=§4Uzaklaştırıldın\:\n§r{0} banIpJoin=IP adresiniz bu sunucudan yasaklandı. Sebep\: {0} banJoin=Bu sunucudan uzaklaştırıldınız. Sebep\: {0} banipCommandDescription=Bir IP adresini banlar. +banipCommandUsage1Description=Belirtilen IP adresini isteğe bağlı bir gerekçeyle yasaklar bed=§oyatak§r bedMissing=§4Yatağın belirlenmedi, kayıp ve engellenmiş. bedNull=§myatak§r @@ -78,6 +81,8 @@ bookAuthorSet=§6Kitabın yazarı şuna ayarlandı {0}. bookCommandDescription=İmzalanmış kitapları açmayı ve düzenlemeyi sağlar. bookCommandUsage=/<komut> [title(başlık)|author(yazar) [isim]] bookCommandUsage1=/<komut> +bookCommandUsage2Description=İmzalı bir kitabın yazarını belirler +bookCommandUsage3Description=İmzalı bir kitabın başlığını belirler bookLocked=§6Bu kitap artık kilitli. bookTitleSet=§6Kitabin adı şuna ayarlandı {0}. breakCommandDescription=Baktığınız yerdeki bloğu kırar. @@ -86,12 +91,15 @@ broadcast=§r§6[§4Duyuru§6]§a {0} broadcastCommandDescription=Tüm sunucuya bir mesaj yayınlar. broadcastCommandUsage=/<komut> <mesaj> broadcastCommandUsage1=/<komut> <mesaj> +broadcastCommandUsage1Description=Verilen mesajı tüm sunucuya yayınlar broadcastworldCommandDescription=Bir dünyaya mesaj yayınlar. broadcastworldCommandUsage=/<komut> <dünya> <mesaj> broadcastworldCommandUsage1=/<komut> <dünya> <mesaj> +broadcastworldCommandUsage1Description=Verilen mesajı belirtilen dünyada yayınlar burnCommandDescription=Bir oyuncuyu ateşe ver. burnCommandUsage=/<komut> <oyuncu> <saniye> burnCommandUsage1=/<komut> <oyuncu> <saniye> +burnCommandUsage1Description=Belirtilen oyuncuyu belirtilen süre boyunca yakar burnMsg=§c{0} §cisimli oyuncuyu §c{1} saniye §6boyunca ateşe verdin. cannotSellNamedItem=§6İsimli öğeleri satmaya iznin yok. cannotSellTheseNamedItems=§6Şu isimli öğeleri satmaya izniniz yok\: §4{0} @@ -112,7 +120,9 @@ clearInventoryConfirmToggleOn=§6Artık envanter temizlemelerini onaylamanız is clearinventoryCommandDescription=Envanterinizdeki tüm öğeleri temizleyin. clearinventoryCommandUsage=/<komut> [oyuncu|*] [item[\:<veri>]|*|**] [miktar] clearinventoryCommandUsage1=/<komut> +clearinventoryCommandUsage1Description=Envanterindeki tüm eşyaları siler clearinventoryCommandUsage2=/<komut> <oyuncu> +clearinventoryCommandUsage2Description=Belirtilen oyuncunun envanterinden tüm eşyaları siler clearinventoryconfirmtoggleCommandDescription=Envanter temizlemelerini onaylamanız istenip istenmeyeceğini değiştirir. clearinventoryconfirmtoggleCommandUsage=/<komut> commandCooldown=§c{0} için bu komutu yazamazsınız. @@ -140,6 +150,7 @@ createdKit=§6Kit §c{0}§6, {1} §6girdileri ve §c{2} gecikmesi ile oluşturul createkitCommandDescription=Oyun içinde bir kit oluştur\! createkitCommandUsage=/<komut> <kitadı> <gecikme> createkitCommandUsage1=/<komut> <kitadı> <gecikme> +createkitCommandUsage1Description=Verilen ad ve süre ile bir kit oluşturur createKitFailed=§4{0} kiti oluşturulurken hata oluştu. createKitSeparator=§m----------------------- createKitSuccess=§6Oluşturulmuş Kit\: §f{0}\n§6Gecikme\: §f{1}\n§6Bağlantı\: §f{2}\n§6Yukarıdaki bağlantıdaki içerikleri kits.yml dosyanıza kopyalayın. @@ -153,22 +164,29 @@ customtextCommandUsage=/<ad> - bukkit.yml içinde tanımla day=gün days=günler defaultBanReason=Sürgün Çekici konuştu\! +deletedHomes=Tüm evler silindi. +deletedHomesWorld={0} içerisindeki tüm evler silindi. deleteFileError=Dosya silinemedi\: {0} deleteHome=§6Ev§c {0} §6silindi. deleteJail=§6Hapishane§c {0} §6silindi. deleteKit=§6Kit§c {0} §6silindi. deleteWarp=§6Işınlanma noktası§c {0} §6silindi. +deletingHomes=Tüm evler siliniyor... +deletingHomesWorld={0} içerisindeki tüm evler siliniyor... delhomeCommandDescription=Bir evi kaldırır. delhomeCommandUsage=/<komut> [oyuncu\:]<isim> deljailCommandDescription=Bir hapsi kaldırır. deljailCommandUsage=/<komut> <hapisadı> deljailCommandUsage1=/<komut> <hapisadı> +deljailCommandUsage1Description=Belirtilen isimdeki hapishaneyi siler delkitCommandDescription=Belirtilen bir kiti kaldırır. delkitCommandUsage=/<komut> <kit> delkitCommandUsage1=/<komut> <kit> +delkitCommandUsage1Description=Belirtilen isimdeki kiti siler delwarpCommandDescription=Belirtilen warp noktasını kaldırır. delwarpCommandUsage=/<komut> <warp> delwarpCommandUsage1=/<komut> <warp> +delwarpCommandUsage1Description=Belirtilen isimdeki ışınlanma noktasını siler deniedAccessCommand=§c{0} §4isimli oyuncunun bir komuta erişimi engellendi. denyBookEdit=§4Bu kitabın kilidini açamazsınız. denyChangeAuthor=§4Bu kitabın yazarını değiştiremezsiniz. @@ -193,6 +211,7 @@ durability=§6Bu aracın §c{0}§6 kullanım ömürü kaldı. east=D ecoCommandDescription=Sunucu ekonomisini yönetir. ecoCommandUsage=/<komut> <give(ver)|take(al)|set(ayarla)|reset(sıfırla)> <oyuncu> <miktar> +ecoCommandUsage2Description=Belirtilen miktarda parayı belirtilen oyuncudan alır editBookContents=§eArtık bu kitabın içeriğini düzenleyebilirsin. enabled=aktif enchantCommandDescription=Oyuncunun tuttuğu öğeyi büyüler. @@ -473,7 +492,6 @@ loomCommandUsage=/<komut> mailClear=§6Postanızı temizlemek için §c / mail clear§6 yazın. mailCleared=§6Postan temizlendi\! mailCommandDescription=Oyuncular arası, sunucu içi postaları yönetir. -mailCommandUsage=/<komut> [read(oku)|clear(temizle)|send(gönder) [oyuncu] [mesaj]|sendall(hepsine gönder) [mesaj]] mailDelay=Bir dakika içerisinde çok fazla posta gönderdiniz. Maksimum\: {0} mailFormat=§6[§r{0}§6] §r{1} mailMessage={0} diff --git a/Essentials/src/main/resources/messages_uk.properties b/Essentials/src/main/resources/messages_uk.properties index 3b7edd83138..4f656470c4d 100644 --- a/Essentials/src/main/resources/messages_uk.properties +++ b/Essentials/src/main/resources/messages_uk.properties @@ -9,6 +9,9 @@ adventure=пригодницький afkCommandDescription=Додає вас як афк. afkCommandUsage=/<command> [гравець/повідомлення...] afkCommandUsage1=/<command> [message] +afkCommandUsage1Description=Вмикає ваш afk з необов''язковою причиною +afkCommandUsage2=/<command> <player> [message] +afkCommandUsage2Description=Вмикає afk статус зазначеного гравця з необов''язковою причиною alertBroke=зламав\: alertFormat=§3[{0}] §r {1} §6 {2} на\: {3} alertPlaced=розміщено\: @@ -33,7 +36,9 @@ backAfterDeath=§6Використовуй§c /back§6, щоб повернут backCommandDescription=Телепортує вас до місцезнаходження до tp/spawn/warp. backCommandUsage=/<command> [player] backCommandUsage1=/<command> +backCommandUsage1Description=Телепортує вас до попереднього місцезнаходження backCommandUsage2=/<command> <player> +backCommandUsage2Description=Телепортує зазначеного гравця до свого попереднього розташування backOther=§6Повернуто§c {0}§6 до попереднього розташування. backupCommandDescription=Запускає резервне копіювання, якщо налаштовано. backupCommandUsage=/<command> @@ -46,20 +51,29 @@ balance=§aБаланс\:§c {0} balanceCommandDescription=Вказує на поточний баланс гравця. balanceCommandUsage=/<command> [player] balanceCommandUsage1=/<command> +balanceCommandUsage1Description=Відображає ваш поточний баланс balanceCommandUsage2=/<command> <player> +balanceCommandUsage2Description=Відображає баланс зазначеного гравця balanceOther=§aБаланс {0}§a\:§c {1} balanceTop=§6Топ багачів ({0}) balanceTopLine={0}. {1}, {2} balancetopCommandDescription=Отримує верхні значення балансу. +balancetopCommandUsage=/<command> [page] +balancetopCommandUsage1=/<command> [page] +balancetopCommandUsage1Description=Відображає першу (або вказую) сторінку верхнього значення балансу banCommandDescription=Блокує гравця. banCommandUsage=/<command> <player> [reason] banCommandUsage1=/<command> <player> [reason] +banCommandUsage1Description=Забороняє зазначеному гравцю з необов''язковою причиною banExempt=§4Ви не можете забанити цього гравця. banExemptOffline=§4Ви не можете забанити гравця в офлайні. banFormat=§cВи забанені\:\n§r{0} banIpJoin=Ваша IP-адреса заблокована на цьому сервері. Причина\: {0} banJoin=Вас заблоковано на цьому сервері. Причина\: {0} banipCommandDescription=Блокує адресу IP. +banipCommandUsage=/<command> <address> [причина] +banipCommandUsage1=/<command> <address> [причина] +banipCommandUsage1Description=Забороняє зазначену IP-адресу з необов''язковою причиною bed=§oліжко§r bedMissing=§4Твоє ліжко не встановлене, відсутнє або заблоковане. bedNull=§mліжко§r @@ -72,12 +86,15 @@ bigTreeSuccess=§6Велике дерево встановлено. bigtreeCommandDescription=Створює велике дерево там, куди ви дивитеся. bigtreeCommandUsage=/<command> <tree|redwood|jungle|darkoak> bigtreeCommandUsage1=/<command> <tree|redwood|jungle|darkoak> +bigtreeCommandUsage1Description=Створює велике дерево зазначеного типу blockList=§6EssentialsX передає наступні команди іншим плагинам\: blockListEmpty=§6EssentialsX не передає ніякі команди іншим плагінам. bookAuthorSet=§6Автор книги встановлений на {0}. bookCommandDescription=Дозволяє повторно відкривати та редагувати запечатані книжки. bookCommandUsage=/<command> [Заголовок|автор [name]] bookCommandUsage1=/<command> +bookCommandUsage2Description=Встановлює автора підписаної книги +bookCommandUsage3Description=Встановлює заголовок підписаної книги bookLocked=§6Ця книга тепер зачинена. bookTitleSet=§6Назва книги встановлена до {0}. breakCommandDescription=Знищує блок, на який ви дивитеся. @@ -86,9 +103,11 @@ broadcast=§6[§4Оголошення§6]§a {0} broadcastCommandDescription=Передає повідомлення всьому серверу. broadcastCommandUsage=/<command> <msg> broadcastCommandUsage1=/<command> <message> +broadcastCommandUsage1Description=Передає дане повідомлення на весь сервер broadcastworldCommandDescription=Передає повідомлення світові. broadcastworldCommandUsage=/<command> <world> <msg> broadcastworldCommandUsage1=/<command> <world> <msg> +broadcastworldCommandUsage1Description=Оголошує подане повідомлення у вказаний світ burnCommandDescription=Запалює гравця. burnCommandUsage=/<command> <player> <seconds> burnCommandUsage1=/<command> <player> <seconds> @@ -112,13 +131,18 @@ clearInventoryConfirmToggleOn=§6Тепер вас запитуватимуть clearinventoryCommandDescription=Знищує всі предмети у вашому інвентарі. clearinventoryCommandUsage=/<command> [player|*] [item[\:<data>]|*|**] [amount] clearinventoryCommandUsage1=/<command> +clearinventoryCommandUsage1Description=Очищує всі елементи в інвентарі clearinventoryCommandUsage2=/<command> <player> +clearinventoryCommandUsage2Description=Очищує всі елементи з інвентарю зазначеного гравця clearinventoryconfirmtoggleCommandDescription=Вмикає підтвердження очищення інвертарів. clearinventoryconfirmtoggleCommandUsage=/<command> commandCooldown=§cВи ще не можете використовувати цю команду протягом {0}. commandDisabled=§cКоманда§6 {0}§c вимкнена. commandFailed=Не вдалося виконати команду {0}\: commandHelpFailedForPlugin=Помилка отримання довідки для плагіна\: {0} +commandHelpLine1=§6Справка по команде\: §f/{0} +commandHelpLine2=§6Опис\: §f{0} +commandHelpLine4=§6Аліас(и)\: §f{0} commandNotLoaded=§4Команда {0} неправильно завантажена. compassBearing=§6Азимут\: {0} ({1} градусів). compassCommandDescription=Описує ваш поточний напрямок. @@ -139,6 +163,7 @@ createdKit=§6Створено комплект §c{0} §6з §c{1} §6вміс createkitCommandDescription=Створити комплект у грі\! createkitCommandUsage=/<command> <kitname> <delay> createkitCommandUsage1=/<command> <kitname> <delay> +createkitCommandUsage1Description=Створює комплект із заданим іменем і затримкою createKitFailed=§4При створенні набору сталася помилка {0}. createKitSeparator=§m----------------------- createKitSuccess=§6Створено комплект\: §f{0}\n§6Затримка\: §f{1}\n§6Посилання\: §f{2}\n§6Скопіюйте вміст у вищевказаному посиланні в kits.yml. @@ -152,22 +177,29 @@ customtextCommandUsage=/<alias> - Визначте в bukkit.yml day=день days=дні defaultBanReason=Тебе послали у бан\! +deletedHomes=Усі домівки видалено. +deletedHomesWorld=Усі домівки в {0} видалено. deleteFileError=Не вдалося видалити файл\: {0} deleteHome=§6Домівка§c {0} §6була видалена. deleteJail=§6Тюрьма§c {0} §6 була видалена. deleteKit=§6Набiр§c {0} §6видалено. deleteWarp=§6Точка телепортації§c {0} §6була видалена. +deletingHomes=Видалення всіх домів... +deletingHomesWorld=Видалення всіх домівок у {0}... delhomeCommandDescription=Видаляє дім. delhomeCommandUsage=/<command> [гравець\:]<name> deljailCommandDescription=Видаляє в''язницю. deljailCommandUsage=/<command> <jailname> deljailCommandUsage1=/<command> <jailname> +deljailCommandUsage1Description=Видаляє в''язницю із заданим іменем delkitCommandDescription=Видаляє вказаний комплект. delkitCommandUsage=/<command> <kit> delkitCommandUsage1=/<command> <kit> +delkitCommandUsage1Description=Видаляє комплект з заданим ім''ям delwarpCommandDescription=Видаляє вказаний варп. delwarpCommandUsage=/<command> <warp> delwarpCommandUsage1=/<command> <warp> +delwarpCommandUsage1Description=Видаляє варп з заданим ім''ям deniedAccessCommand=§c{0} §4був позбавлений доступу до команд. denyBookEdit=§4Ви не можете відкрити цю книгу. denyChangeAuthor=§4Ви не можете змінити автора цієї книги. @@ -181,6 +213,9 @@ destinationNotSet=Призначення не встановлено\! disabled=вимкнено disabledToSpawnMob=§4Поява цього мобу відімкнена у файлі конфігурації. disableUnlimited=§6Вимкнення необмеженого розміщення §c {0} §6для§c {1}§6. +discordCommandExecuteDescription=Виконує команду консолі на сервері Minecraft. +discordCommandExecuteArgumentCommand=Команду, яку слід виконати +discordCommandListDescription=Отримує список гравців онлайн. disposal=Утилізація disposalCommandDescription=Відкриває портативне меню керування. disposalCommandUsage=/<command> @@ -855,6 +890,7 @@ versionMismatchAll=§4Версії невідповідають\! Будь ла voiceSilenced=§6Ви не можете писати в чат\! voiceSilencedReason=§6Ваш голос заглушено\! Причина\: §c{0} walking=ходьби +warpCommandUsage1=/<command> [page] warpDeleteError=§4Помилка при видалені точки телепортації. warpinfoCommandUsage=/<command> <warp> warpinfoCommandUsage1=/<command> <warp> diff --git a/Essentials/src/main/resources/messages_vi.properties b/Essentials/src/main/resources/messages_vi.properties index 46bbdc67196..cff5f5653a7 100644 --- a/Essentials/src/main/resources/messages_vi.properties +++ b/Essentials/src/main/resources/messages_vi.properties @@ -11,6 +11,7 @@ afkCommandUsage=/<command> [player/message...] afkCommandUsage1=/<command> [message] afkCommandUsage1Description=Điều chỉnh trạng thái AFK của bạn với một tuỳ chọn afkCommandUsage2=/<command> <player> [message] +afkCommandUsage2Description=Điều chỉnh trạng thái afk của người chơi với một lý do bổ sung alertBroke=phá vỡ\: alertFormat=§3[{0}] §r {1} §6 {2} tại\: {3} alertPlaced=đặt\: @@ -132,6 +133,7 @@ compassBearing=§6Hướng\: {0} ({1} độ). compassCommandUsage=/<command> condenseCommandUsage=/<command> [item] condenseCommandUsage1=/<command> +condenseCommandUsage2=/<command> <item> configFileMoveError=Thất bại khi di chuyển config.yml tới vị trí sao lưu. configFileRenameError=Thất bại khi đổi tên tệp tin tạm thời thành config.yml. confirmClear=§7Để §lXÁC NHẬN§7 làm sạch túi đồ, vui lòng lặp lại lệnh\: §6{0} @@ -193,6 +195,11 @@ destinationNotSet=Đích đến chưa được đặt\! disabled=vô hiệu hoá disabledToSpawnMob=§4Tạo ra thực thể này đã bị vô hiệu hoá trong tệp cấu hình. disableUnlimited=§6Vô hiệu hóa đặt không giới hạn của§c {0} §6cho {1}§6. +discordCommandExecuteDescription=Truy xuất một lệnh điều khiển trên máy chủ Minecraft. +discordCommandExecuteArgumentCommand=Lệnh được truy xuất +discordCommandExecuteReply=Lệnh đang truy xuất\: "/{0}" +discordCommandListDescription=Xem danh sách người chơi trực tuyến. +discordLoggingInDone=Đăng nhập thành công với tên đăng nhập {0} disposal=Xếp đặt disposalCommandUsage=/<command> distance=§6Khoảng cách\: {0} @@ -370,6 +377,7 @@ itemCommandDescription=Tạo ra vật phẩm. itemId=§6ID\:§c {0} itemloreClear=§6Đã xoá bỏ truyền thuyết của vật phẩm. itemloreCommandDescription=Thay đổi truyền thuyết vật phẩm. +itemloreCommandUsage3=/<command> clear itemMustBeStacked=§4Vật phẩm đổi được phải đầy. Một số lượng đầy hơn nó sẽ thành hai, v.v.... itemNames=§6Tên thu gọn\:§r {0} itemnameClear=§6Bạn đã xóa tên vật phẩm này. @@ -388,6 +396,8 @@ itemSold=§aĐã bán được §c{0} §a({1} {2} với {3} mỗi cái). itemSoldConsole=§e{0} §ađã bán§e {1}§a cho §e{2} §a({3} vật phẩm với {4} mỗi cái). itemSpawn=§6Cho§c {0} §6cái§c {1} itemType=§6Vật phẩm\:§c {0} +itemdbCommandUsage=/<command> <item> +itemdbCommandUsage1=/<command> <item> jailAlreadyIncarcerated=§4Người này đã bị giam\:§c {0} jailList=§6Jails\:§r {0} jailMessage=§4Bạn phạm tội, bạn bị phạt tù. @@ -436,7 +446,6 @@ localFormat=[L]<{0}> {1} loomCommandUsage=/<command> mailClear=§6Để xóa thư, gõ§c /mail clear§6. mailCleared=§6Đã dọn thư\! -mailCommandUsage2=/<command> clear mailDelay=Quá nhiều thư đã được gửi trong cùng một phút. Nhiều nhất là\: {0} mailFormat=§6[§r{0}§6] §r{1} mailMessage={0} diff --git a/Essentials/src/main/resources/messages_zh.properties b/Essentials/src/main/resources/messages_zh.properties index 9c3ebed0f9f..e96116fbf40 100644 --- a/Essentials/src/main/resources/messages_zh.properties +++ b/Essentials/src/main/resources/messages_zh.properties @@ -56,7 +56,7 @@ balanceCommandUsage2=/<command> <玩家> balanceCommandUsage2Description=展示指定玩家当前的余额 balanceOther=§a{0}的余额§a:§c {1} balanceTop=§6金钱排行:({0}) -balanceTopLine={0}。{1},{2} +balanceTopLine={0}. {1}, {2} balancetopCommandDescription=获取金钱排行榜。 balancetopCommandUsage=/<command> [页码] balancetopCommandUsage1=/<command> [页码] @@ -232,6 +232,28 @@ destinationNotSet=目的地未设置! disabled=关闭 disabledToSpawnMob=§4配置文件中已禁止此生物的生成。 disableUnlimited=§6已取消§c{1}§6无限放置§c{0}的能力。 +discordCommandExecuteDescription=在Minecraft服务器上执行控制台命令。 +discordCommandExecuteArgumentCommand=要执行的命令 +discordCommandExecuteReply=执行命令:"/{0}" +discordCommandListDescription=显示在线玩家列表。 +discordCommandListArgumentGroup=指定一个特定的组来缩小搜索范围 +discordCommandMessageDescription=在Minecraft服务器上向一个玩家发送消息。 +discordCommandMessageArgumentUsername=将收到消息的玩家 +discordCommandMessageArgumentMessage=将给玩家发送的消息 +discordErrorCommand=你尚未正确地将机器人添加进服务器。请先按照配置里的教程做,然后通过https\://essentialsx.net/discord.html添加你的机器人! +discordErrorCommandDisabled=此命令已禁用! +discordErrorLogin=登录Discord时发生错误,插件已自行停用:\n{0} +discordErrorLoggerInvalidChannel=由于无效的频道定义值,导致Discord控制台日志记录被禁用!如果你确实就打算禁用日志记录,请将频道ID的值设为“none”;否则请检查频道ID是否设置正确。 +discordErrorLoggerNoPerms=由于权限不足,导致Discord控制台日志记录已被禁用!请确认你的机器人是否拥有了服务器的“管理Webhook”权限。修复后,请执行“/ess reload”。 +discordErrorNoGuild=无效或缺失服务器ID!请按照配置里的教程来设置插件。 +discordErrorNoGuildSize=你的机器人尚未加入任何服务器!请按照配置里的教程来设置插件。 +discordErrorNoPerms=你的机器人无法在任何频道中查看或发送消息!请确保机器人在所有你希望使用的频道中都拥有读取及发送消息的权限。 +discordErrorNoToken=未提供令牌!请按照配置里的教程来设置插件。 +discordErrorWebhook=在传输信息到控制台频道时发生了错误!这很有可能是因为控制台的webhook被意外删除而导致的。这通常可以通过让你的机器人得到“管理Webhook”权限,然后使用“/ess reload”来修复。 +discordLoggingIn=正在尝试登录到Discord… +discordLoggingInDone=成功以{0}的身份登录 +discordNoSendPermission=无法在频道 \#{0} 中发送消息。请确认机器人在该频道中拥有“发送消息”权限! +discordReloadInvalid=尝试在插件处于无效状态时加载EssentialsX Discord的配置文件!如果你修改了配置文件,请重启服务器。 disposal=垃圾桶 disposalCommandDescription=打开便捷垃圾桶菜单。 disposalCommandUsage=/<command> @@ -502,11 +524,11 @@ itemId=§6ID:§c{0} itemloreClear=§6你已经清除该物品的描述。 itemloreCommandDescription=编辑一个物品的描述。 itemloreCommandUsage=/<command> <add/set/clear> [文本/行数] [文本] -itemloreCommandUsage1=/<command> <add> [文本] +itemloreCommandUsage1=/<command> add [文本] itemloreCommandUsage1Description=将指定文本添加到手持物品的描述的末尾 -itemloreCommandUsage2=/<command> <set> <行数> <文本> +itemloreCommandUsage2=/<command> set <行数> <文本> itemloreCommandUsage2Description=设置手持物品描述的指定行为给定的文本 -itemloreCommandUsage3=/<command> <clear> +itemloreCommandUsage3=/<command> clear itemloreCommandUsage3Description=清除手持物品的描述 itemloreInvalidItem=§4你需要拿着一个物品才能编辑它的描述。 itemloreNoLine=§4你手持物品的第§c{0}§4行并没有描述。 @@ -583,6 +605,7 @@ kitCost=\ §7§o({0})§r kitDelay=§m{0}§r kitError=§4没有有效的物品包。 kitError2=§4该物品包的配置不正确。请联系管理员。 +kitError3=无法给予玩家{1}工具包,因为工具包“{0}”需要Paper 1.15.2以上的版本来反序列化。 kitGiveTo=§6给予物品包§c{0}§6给§c{1}§6。 kitInvFull=§4你的物品栏已满,物品包将扔在地上。 kitInvFullNoDrop=§4你的物品栏里没有足够的空间装下该物品包。 @@ -624,21 +647,29 @@ loomCommandDescription=打开一个织布机。 loomCommandUsage=/<command> mailClear=§6若要清空你的邮件,输入§c/mail clear§6。 mailCleared=§6邮箱已清空! +mailClearIndex=§4你必须输入一个介于1到{0}之间的数字。 mailCommandDescription=管理玩家在服务器内的邮件。 -mailCommandUsage=/<command> [read|clear|send [到] [信息]|sendall [信息]] +mailCommandUsage=/<command> [read|clear|clear [编号]|send [接收方] [消息]|sendtemp [接收方] [过期时间] [消息]|sendall [消息]] mailCommandUsage1=/<command> read [页码] mailCommandUsage1Description=阅读你的邮件的第一(或指定)页 -mailCommandUsage2=/<command> clear -mailCommandUsage2Description=清空你的邮件 +mailCommandUsage2=/<command> clear [编号] +mailCommandUsage2Description=清空所有(或指定)的邮件 mailCommandUsage3=/<command> send <玩家> <消息> mailCommandUsage3Description=向指定玩家发送指定消息 mailCommandUsage4=/<command> sendall <消息> mailCommandUsage4Description=向所有玩家发送指定消息 +mailCommandUsage5=/<command> sendtemp <玩家> <过期时间> <消息> +mailCommandUsage5Description=向指定的玩家发送临时消息 mailDelay=你在一分钟内发送了太多的邮件。限制:{0} +mailFormatNew=§6[§r{0}§6] §6[§r{1}§6] §r{2} +mailFormatNewTimed=§6[§r{0}§6] §6[§r{1}§6] §r{2} +mailFormatNewRead=§6[§r{0}§6] §6[§r{1}§6] §r{2} +mailFormatNewReadTimed=§6[§e⚠§6] §6[§r{0}§6] §6[§r{1}§6] §7§o{2} mailFormat=§6[§r{0}§6] §r{1} mailMessage={0} mailSent=§6邮件已发送! mailSentTo=§c{0}§6发送了如下邮件: +mailSentToExpire=§c{0}§6发送了以下邮件,这些邮件将于§c{1}§6失效: mailTooLong=§4邮件字数超过限制。请使邮件字数保持在1000个字符以下。 markMailAsRead=§6若要标记你的邮件为已读,输入§c/mail clear§6。 matchingIPAddress=§6以下是使用该IP地址登录的玩家: @@ -948,6 +979,7 @@ repairCommandUsage2Description=修复你物品栏中的所有物品 repairEnchanted=§4你无权修复附魔物品。 repairInvalidType=§4该物品无法修复。 repairNone=§4没有需要修理的物品。 +replyFromDiscord=**回复自{0}:**`{1}` replyLastRecipientDisabled=§6已§c禁用§6回复最后一位消息发送者。 replyLastRecipientDisabledFor=§6已为§c{0}禁用§6回复最后一位消息发送者。 replyLastRecipientEnabled=§6已§c启用§6回复最后一位消息发送者。 @@ -974,7 +1006,7 @@ rtoggleCommandDescription=更改回复接收者为最后的接收者(或发送 rtoggleCommandUsage=/<command> [玩家] [on|off] rulesCommandDescription=查看服务器的规则。 rulesCommandUsage=/<command> [章节] [页数] -runningPlayerMatch=§6正在搜索匹配IP地址“§c{0}§6”的玩家(这可能会花费一些时间)。 +runningPlayerMatch=§6正在搜索匹配“§c{0}§6”的玩家(这可能会花费一些时间)。 second=秒 seconds=秒 seenAccounts=§6这位玩家也叫:§c{0} @@ -1352,6 +1384,7 @@ versionOutputFine=§6{0}版本:§a{1} versionOutputWarn=§6{0}版本:§c{1} versionOutputUnsupported=§d{0}§6版本:§d{1} versionOutputUnsupportedPlugins=§6你正在运行一个§d不支持的插件§6! +versionOutputEconLayer=§6经济层:§r{0} versionMismatch=§4版本不匹配!请升级{0}到相同版本。 versionMismatchAll=§4版本不匹配!请升级所有Essentials系列的jar插件到相同版本。 versionReleaseLatest=§6你正在运行最新的EssentialsX稳定版! diff --git a/Essentials/src/main/resources/messages_zh_TW.properties b/Essentials/src/main/resources/messages_zh_TW.properties index d39a8ece357..b3ddbeb6c91 100644 --- a/Essentials/src/main/resources/messages_zh_TW.properties +++ b/Essentials/src/main/resources/messages_zh_TW.properties @@ -57,7 +57,7 @@ balanceCommandUsage2Description=顯示指定玩家目前的金錢餘額 balanceOther=§a{0}§a 的金錢 : §c{1} balanceTop=§6金錢排行 : ({0}) balanceTopLine={0}. {1}, {2} -balancetopCommandDescription=獲取金錢排行。 +balancetopCommandDescription=獲得金錢排行。 balancetopCommandUsage=/<command> [page] balancetopCommandUsage1=/<command> [page] balancetopCommandUsage1Description=顯示第一頁或指定頁數的金錢排行 @@ -144,7 +144,7 @@ clearinventoryconfirmtoggleCommandDescription=切換是否提示確定清空物 clearinventoryconfirmtoggleCommandUsage=/<command> commandArgumentOptional=§7 commandArgumentRequired=§e -commandCooldown=§c請在 {0} 後重新輸入指令。 +commandCooldown=§c請在 {0}後重新輸入指令。 commandDisabled=§c已關閉 §6 {0}§c 指令。 commandFailed=無法執行指令 {0} : commandHelpFailedForPlugin=無法取得該插件的說明 : {0} @@ -181,7 +181,7 @@ createkitCommandUsage1Description=建立具有指定名稱和延遲的工具包 createKitFailed=§4建立 {0} 工具包時發生錯誤。 createKitSeparator=§m----------------------- createKitSuccess=§6建立的工具包 : §f{0}\n§6冷卻 : §f{1}\n§6連結 : §f{2}\n§6請將連結中的內容複製到 kits.yml。 -createKitUnsupported=§4已開啟 NBT 物品序列化,但此伺服器不是運行 Paper 1.15.2+,所以回到標準物品序列化。 +createKitUnsupported=§4已開啟 NBT 物品序列化,但此伺服器不是運行 Paper 1.15.2 以上,所以回到標準物品序列化。 creatingConfigFromTemplate=從模版 {0} 建立配置。 creatingEmptyConfig=建立空白配置 : {0} creative=創造模式 @@ -232,11 +232,33 @@ destinationNotSet=未設定目的地 ! disabled=關閉 disabledToSpawnMob=§4已在配置檔案中禁止該生物的生成。 disableUnlimited=§c已關閉 {1} §6無限放置§c {0} §6的能力。 +discordCommandExecuteDescription=在伺服器上執行控制台指令。 +discordCommandExecuteArgumentCommand=要執行的指令 +discordCommandExecuteReply=正在執行指令 : 「/{0}」 +discordCommandListDescription=列出所有線上玩家列表。 +discordCommandListArgumentGroup=指定一個特定的群組來縮小搜尋範圍 +discordCommandMessageDescription=向 Minecraft 伺服器中的玩家傳送訊息。 +discordCommandMessageArgumentUsername=將收到訊息的玩家 +discordCommandMessageArgumentMessage=要傳送給玩家的訊息 +discordErrorCommand=你將機器人加入伺服器的方式錯誤,請遵照設定檔案中的教學並透過 https\://essentialsx.net/discord.html 加入你的機器人 ! +discordErrorCommandDisabled=該指令已被停用 ! +discordErrorLogin=登入 Discord 時發生錯誤,故插件已自行停用: \n{0} +discordErrorLoggerInvalidChannel=由於頻道定義無效,Discord 控制台紀錄器已被停用 ! 如果你原本就打算停用,請將頻道 ID 設為「none」;否則,請確認你的頻道 ID 是否正確。 +discordErrorLoggerNoPerms=由於權限不足,Discord 控制台紀錄器已被停用 ! 請確保你的機器人在伺服器中有「管理 Webhooks」這項權限。修正後,請執行 「/ess reload」。 +discordErrorNoGuild=伺服器 ID 無效或遺失 ! 請按照設定檔案中的教學來設定插件。 +discordErrorNoGuildSize=你的機器人不在任何伺服器裡面 ! 請按照設定檔案中的教學來設定插件。 +discordErrorNoPerms=你的機器人無法查看或傳送訊息到任何頻道 ! 請確認你的機器人在所有你想使用的頻道中都有讀取及傳送訊息的權限。 +discordErrorNoToken=未提供權杖 ! 請按照設定檔案中的教學來設定插件。 +discordErrorWebhook=要傳送訊息至你的控制台頻道時發生錯誤 ! 這很有可能是因為控制台的 Webhook 被意外刪除而導致的。通常只要確認你的機器人有「管理 Webhooks」的權限,然後執行「/ess reload」即可修復。 +discordLoggingIn=正在嘗試登入至 Discord…… +discordLoggingInDone=成功以 {0} 的身分登入 +discordNoSendPermission=無法在頻道 \#{0} 中傳送訊息。請確認機器人在該頻道有「傳送訊息」的權限 ! +discordReloadInvalid=嘗試在插件處於無效狀態時,載入 EssentialsX Discord 配置檔案 ! 如果你修改了配置檔案,請重新開啟伺服器。 disposal=垃圾桶 disposalCommandDescription=開啟簡易垃圾桶選單。 disposalCommandUsage=/<command> distance=§6距離 : {0} -dontMoveMessage=§6傳送將在 §c{0} 秒 §6後開始,不要移動。 +dontMoveMessage=§6傳送將在 §c{0}§6後開始,不要移動。 downloadingGeoIp=下載 GeoIP 資料庫中…… 這可能會花點時間。 duplicatedUserdata=已經複製玩家資料 : {0} 和 {1}。 durability=§6這個工具還有 §c{0}§6 點耐久度。 @@ -289,7 +311,7 @@ essentialsCommandUsage7=/<command> homes essentialsCommandUsage7Description=管理玩家的家 essentialsHelp1=檔案毀損以致 Essentials 無法將其開啟,現已停用 Essentials。若無法自行修正,請前往 https\://essentialsx.net/wiki/Home.html 尋求協助。 essentialsHelp2=檔案毀損以致 Essentials 無法將其開啟,現已停用 Essentials。若無法自行修正,在遊戲中輸入 /essentialshelp 或前往 https\://essentialsx.net/wiki/Home.html 尋求協助。 -essentialsReload=§6已重新載入 Essentials§c {0}。 +essentialsReload=§6已重新載入 Essentials§c {0}§6。 exp=§c{0} §6擁有§c {1} §6點經驗值 (等級§c {2}§6) 。需要§c {3} §6點經驗才能升級。 expCommandDescription=給予、設定、重設或查看玩家的經驗值。 expCommandUsage=/<command> [reset|show|set|give] [playername [amount]] @@ -358,15 +380,15 @@ gamemodeCommandUsage1=/<command> <survival|creative|adventure|spectator> [player gamemodeCommandUsage1Description=設定你或指定玩家的遊戲模式 gcCommandDescription=報告記憶體、運行時間和 tick 資訊。 gcCommandUsage=/<command> -gcfree=§6空閒記憶體 : §c{0} MB。 -gcmax=§6最大記憶體 : §c{0} MB。 -gctotal=§6已分配記憶體 : §c{0} MB。 -gcWorld=§6{0} "§c{1}§6" : §c{2}§6 個區塊、§c{3}§6 個實體、§c{4}§6 個區塊資料。 +gcfree=§6空閒記憶體 : §c{0} §6MB。 +gcmax=§6最大記憶體 : §c{0} §6MB。 +gctotal=§6已分配記憶體 : §c{0} §6MB。 +gcWorld=§6{0} "§c{1}§6" : §c{2}§6 個區塊、§c{3}§6 個實體、§c{4}§6 個方塊實體。 geoipJoinFormat=§6玩家 §c{0} §6來自於 §c{1}§6。 -getposCommandDescription=獲取你目前的座標或玩家座標。 +getposCommandDescription=獲得目前你或指定玩家的座標。 getposCommandUsage=/<command> [player] getposCommandUsage1=/<command> [player] -getposCommandUsage1Description=獲取你或指定玩家的位置 +getposCommandUsage1Description=獲得你或指定玩家的座標 giveCommandDescription=給予玩家物品。 giveCommandUsage=/<command> <player> <item|numeric> [amount [itemmeta...]] giveCommandUsage1=/<command> <player> <item> [amount] @@ -374,7 +396,7 @@ giveCommandUsage1Description=給予指定玩家 64 個或指定數量的物品 giveCommandUsage2=/<command> <player> <item> <amount> <meta> giveCommandUsage2Description=給予指定玩家指定數量的元數據指定物品 geoipCantFind=§6玩家 §c{0} §6來自於 §a未知的國家§6。 -geoIpErrorOnJoin=無法獲取 {0} 的 GeoIP 資料。請確保你的許可證金鑰和配置正確。 +geoIpErrorOnJoin=無法獲得 {0} 的 GeoIP 資料。請確保你的許可證金鑰和配置正確。 geoIpLicenseMissing=找不到許可證金鑰 ! 請訪問 https\://essentialsx.net/geoip 以獲得初次設定說明。 geoIpUrlEmpty=GeoIP 下載連結空白。 geoIpUrlInvalid=GeoIP 下載連結無效。 @@ -386,12 +408,12 @@ godCommandUsage1Description=切換你或指定玩家的上帝模式 giveSpawn=§6給予§c {2}§c {0} §6個§c {1}§6。 giveSpawnFailure=§4沒有足夠的空間,§c{0} §c{1} §4已遺失。 godDisabledFor=§c已關閉 {0} §6的 -godEnabledFor=§c已開啟 {0} §6的 +godEnabledFor=§a已開啟 {0} §6的 godMode=§c{0}§6上帝模式。 grindstoneCommandDescription=開啟砂輪機。 grindstoneCommandUsage=/<command> groupDoesNotExist=§4目前組別沒有人在線 ! -groupNumber=§c{0}§f 位在線,想要獲取完整列表請使用 : §c /{1} {2}。 +groupNumber=§c{0}§f 位在線,想要獲得完整列表請使用 : §c /{1} {2}。 hatArmor=§4你無法使用這個物品作為帽子 ! hatCommandDescription=戴上一些酷炫的帽子。 hatCommandUsage=/<command> [remove] @@ -502,11 +524,11 @@ itemId=§6ID : §c {0} itemloreClear=§6你已清除該物品的描述文字。 itemloreCommandDescription=編輯物品描述文字。 itemloreCommandUsage=/<command> <add/set/clear> [text/line] [text] -itemloreCommandUsage1=/<command> <add> [text] +itemloreCommandUsage1=/<command> add [text] itemloreCommandUsage1Description=新增手中物品的描述文字 -itemloreCommandUsage2=/<command> <set> <line number> <text> +itemloreCommandUsage2=/<command> set <line number> <text> itemloreCommandUsage2Description=設定手中物品的描述文字為指定的文字 -itemloreCommandUsage3=/<command> <clear> +itemloreCommandUsage3=/<command> clear itemloreCommandUsage3Description=清除手中物品的描述文字 itemloreInvalidItem=§4你需要拿著一個物品才能編輯描述文字。 itemloreNoLine=§4你拿著的物品第 §c{0}§4 行沒有描述文字。 @@ -549,7 +571,7 @@ jailSentenceExtended=§6監禁時間增加到 : §c{0}§6。 jailSet=§6監獄 §c{0}§6 已被設定。 jailWorldNotExist=§4該監獄位於的世界不存在。 jumpEasterDisable=§c已關閉 §6飛行導向模式。 -jumpEasterEnable=§c已開啟 §6飛行導向模式。 +jumpEasterEnable=§a已開啟 §6飛行導向模式。 jailsCommandDescription=列出所有監獄列表。 jailsCommandUsage=/<command> jumpCommandDescription=跳到視野中最近的方塊。 @@ -572,7 +594,7 @@ killCommandUsage=/<command> <player> killCommandUsage1=/<command> <player> killCommandUsage1Description=殺死指定玩家 killExempt=§4你不能殺死§c {0}§4。 -kitCommandDescription=獲取指定的工具包或查看所有可用的工具包。 +kitCommandDescription=獲得指定的工具包或查看所有可用的工具包。 kitCommandUsage=/<command> [kit] [player] kitCommandUsage1=/<command> kitCommandUsage1Description=列出所有可用工具包 @@ -625,21 +647,29 @@ loomCommandDescription=開啟織布機。 loomCommandUsage=/<command> mailClear=§6輸入§c /mail clear§6 將郵件清除。 mailCleared=§6郵件已清空 ! +mailClearIndex=§4你必須輸入介於 1 到 {0} 之間的數字。 mailCommandDescription=管理玩家伺服器內的郵件。 -mailCommandUsage=/<command> [read|clear|send [to] [message]|sendall [message]] +mailCommandUsage=/<command> [read|clear|clear [number]|send [to] [message]|sendtemp [to] [expire time] [message]|sendall [message]] mailCommandUsage1=/<command> read [page] mailCommandUsage1Description=閱讀第一頁或指定頁數的郵件 -mailCommandUsage2=/<command> clear -mailCommandUsage2Description=清空你的郵件夾 +mailCommandUsage2=/<command> clear [number] +mailCommandUsage2Description=刪除所有或指定的郵件 mailCommandUsage3=/<command> send <player> <message> mailCommandUsage3Description=向指定玩家發送訊息 mailCommandUsage4=/<command> sendall <message> mailCommandUsage4Description=向所有玩家發送訊息 +mailCommandUsage5=/<command> sendtemp <player> <expire time> <message> +mailCommandUsage5Description=向指定的玩家傳送,指定時間內移除的訊息 mailDelay=在短時間內發送太多郵件,最多 {0} 封。 +mailFormatNew=§6[§r{0}§6] §6[§r{1}§6] §r{2} +mailFormatNewTimed=§6[§e⚠§6] §6[§r{0}§6] §6[§r{1}§6] §r{2} +mailFormatNewRead=§6[§r{0}§6] §6[§r{1}§6] §7§o{2} +mailFormatNewReadTimed=§6[§e⚠§6] §6[§r{0}§6] §6[§r{1}§6] §7§o{2} mailFormat=§6[§r{0}§6] §r{1} mailMessage={0} mailSent=§6郵件已送出 ! mailSentTo=§c{0}§6 已被發送以下郵件: +mailSentToExpire=§c{0}§6傳送了以下郵件,這些郵件將於 §c{1}§6 過期 : mailTooLong=§4郵件訊息過長,請不要超過 1000 字。 markMailAsRead=§6輸入§c /mail clear§6 將郵件標示為已讀。 matchingIPAddress=§6以下是來自該 IP 位址的玩家 : @@ -681,8 +711,8 @@ msgCommandUsage1=/<command> <to> <message> msgCommandUsage1Description=傳送私人訊息到指定玩家 msgDisabled=§c已關閉 §6接收訊息。 msgDisabledFor=§c已關閉 {0} §6的接收訊息 。 -msgEnabled=§c已開啟 §6接收訊息。 -msgEnabledFor=§c已開啟 {0} §6的接收訊息。 +msgEnabled=§a已開啟 §6接收訊息。 +msgEnabledFor=§a已開啟 {0} §6的接收訊息。 msgFormat=§6[§c{0}§6 -> §c{1}§6] §r{2} msgIgnore=§c{0} §4已關閉接收訊息。 msgtoggleCommandDescription=阻擋所有私人訊息接收。 @@ -793,7 +823,7 @@ onlySunStorm=§4/weather 指令只有 sun/storm 兩個選擇。 openingDisposal=§6正在打開垃圾桶選單…… orderBalances=§6正在排序§c {0} §6個玩家的金錢中,請稍候…… oversizedMute=§4你無法禁言該玩家。 -oversizedTempban=§4你無法在這個時段封禁玩家。 +oversizedTempban=§4你無法以該時長封禁玩家。 passengerTeleportFail=§4你無法在乘坐時被傳送。 payCommandDescription=從你的金錢中扣款支付給其他玩家。 payCommandUsage=/<command> <player> <amount> @@ -817,7 +847,7 @@ pendingTeleportCancelled=§4待處理的傳送請求已取消。 pingCommandDescription=啪 ! pingCommandUsage=/<command> playerBanIpAddress=§6IP 位址 §c{1}§6 被§c {0} §6封禁。原因 : §c{2}§6 -playerTempBanIpAddress=§6IP 位址 §c{1}§6 暫時被§c {0} §6封禁。時長:§c{2}§6。原因 : §c{3}§6。 +playerTempBanIpAddress=§6IP 位址 §c{1}§6 暫時被§c {0} §6封禁。時長 : §c{2}§6。原因 : §c{3}§6。 playerBanned=§6玩家§c {1} §6被§c {0} §6封禁§6。原因 : §c{2}§6。 playerJailed=§6玩家 §c{0} §6被關進監獄。 playerJailedFor=§6玩家§c {0} §6被逮捕並關進監獄§c {1}§6。 @@ -827,13 +857,13 @@ playerMutedFor=§6你已被 §c{0}§6 禁言。 playerMutedForReason=§6你已被禁言 §c {0}§6。原因 : §c{1} playerMutedReason=§6你已被禁言 ! 原因 : §c{0} playerNeverOnServer=§4玩家 §c{0} §4從未加入伺服器。 -playerNotFound=§4玩家未在線 (或不存在) 。 +playerNotFound=§4找不到玩家。 playerTempBanned=§6玩家§c {1} §6暫時被§c {0} §6封禁 §c{2}§6。原因 : §c{3}§6。 playerUnbanIpAddress=§6玩家§c {0} §6已解除該封禁 IP 位址 : §c{1}。 playerUnbanned=§6玩家§c {1} §6被§c {0} §6解除封禁。 playerUnmuted=§6你被解除禁言了。 pong=啪 ! -posPitch=§6仰角 : {0} (頭部的角度) 。 +posPitch=§6仰角 : {0} (頭部的角度) possibleWorlds=§6可使用的世界編號為 §c0§6 到 §c{0}§6。 potionCommandDescription=新增自訂義藥水效果到藥水。 potionCommandUsage=/<command> <clear|apply|effect\:<effect> power\:<power> duration\:<duration>> @@ -949,10 +979,11 @@ repairCommandUsage2Description=修復物品欄的所有物品 repairEnchanted=§4你沒有修復附魔物品的權限。 repairInvalidType=§4該物品無法修復。 repairNone=§4沒有需要被修復的物品。 +replyFromDiscord=**回覆自 {0} : **`{1}` replyLastRecipientDisabled=§c已關閉 §6回覆上一則訊息功能。 replyLastRecipientDisabledFor=§c已關閉 {0} §6的回覆上一則訊息功能。 -replyLastRecipientEnabled=§c已開啟§6 回覆上一則訊息功能。 -replyLastRecipientEnabledFor=§c已開啟§c {0} §6的回覆上一則訊息功能。 +replyLastRecipientEnabled=§a已開啟§6 回覆上一則訊息功能。 +replyLastRecipientEnabledFor=§a已開啟§c {0} §6的回覆上一則訊息功能。 requestAccepted=§6已接受傳送請求。 requestAcceptedAuto=§6自動接受來自 {0} 的傳送請求。 requestAcceptedFrom=§c{0} §6接受了你的傳送請求。 @@ -975,7 +1006,7 @@ rtoggleCommandDescription=更改回覆收件人為最後的收件人或發件人 rtoggleCommandUsage=/<command> [player] [on|off] rulesCommandDescription=查看伺服器規則。 rulesCommandUsage=/<command> [chapter] [page] -runningPlayerMatch=§6正在搜索匹配的玩家 §c{0}§6 (這可能會花費一些時間) 。 +runningPlayerMatch=§6正在搜索匹配「§c{0}§6」的玩家 (這可能會花費一些時間) 。 second=秒 seconds=秒 seenAccounts=§6玩家有相同帳號記錄 : §c{0} @@ -1042,8 +1073,8 @@ setworthCommandUsage2Description=以指定的值設定指定物品的物品價 sheepMalformedColor=§4無效的顏色。 shoutDisabled=§c已關閉 §6喊話模式。 shoutDisabledFor=§c已關閉 {0} §6的喊話模式。 -shoutEnabled=§c已開啟 §6喊話模式。 -shoutEnabledFor=§c已開啟 {0} §6的喊話模式。 +shoutEnabled=§a已開啟 §6喊話模式。 +shoutEnabledFor=§a已開啟 {0} §6的喊話模式。 shoutFormat=§6[喊話]§r {0} editsignCommandClear=§6告示牌已清除。 editsignCommandClearLine=§6已清除第 §c{0}§6 行。 @@ -1081,9 +1112,9 @@ skullChanged=§6頭顱更改為 §c{0}§6。 skullCommandDescription=設定玩家頭顱 skullCommandUsage=/<command> [owner] skullCommandUsage1=/<command> -skullCommandUsage1Description=獲取你的頭顱 +skullCommandUsage1Description=獲得你的頭顱 skullCommandUsage2=/<command> <player> -skullCommandUsage2Description=獲取指定玩家的頭顱 +skullCommandUsage2Description=獲得指定玩家的頭顱 slimeMalformedSize=§4大小非法。 smithingtableCommandDescription=開啟鍛造台。 smithingtableCommandUsage=/<command> @@ -1136,8 +1167,8 @@ teleportationCommencing=§6準備傳送…… teleportationDisabled=§c已關閉 §6傳送。 teleportationDisabledFor=§c已關閉 {0} §6的傳送。 teleportationDisabledWarning=§6你必須先開啟傳送,其他玩家才能傳送你這裡。 -teleportationEnabled=§c已開啟 §6傳送。 -teleportationEnabledFor=§c已開啟 {0}§6 的傳送。 +teleportationEnabled=§a已開啟 §6傳送。 +teleportationEnabledFor=§a已開啟 {0}§6 的傳送。 teleportAtoB=§c{0}§6 將你傳送到 §c{1}§6。 teleportDisabled=§c{0} §4取消傳送。 teleportHereRequest=§c{0}§6 請求你傳送到他那裡 (請注意安全)。 @@ -1273,7 +1304,7 @@ tptoggleCommandDescription=阻止所有形式的傳送。 tptoggleCommandUsage=/<command> [player] [on|off] tptoggleCommandUsage1=/<command> [player] tptoggleCommandUsageDescription=切換你或指定玩家是否開啟傳送 -tradeSignEmpty=§4交易告示牌上沒有你可獲得的東西。 +tradeSignEmpty=§4交易告示牌上沒有你可用的東西。 tradeSignEmptyOwner=§4交易告示牌上沒有你可收集的東西。 treeCommandDescription=在你的前方生成一棵樹木。 treeCommandUsage=/<command> <tree|birch|redwood|redmushroom|brownmushroom|jungle|junglebush|swamp> @@ -1345,14 +1376,15 @@ versionDevDiverged=§6你正在運行的實驗性 EssentialsX 開發版本 §c{0 versionDevDivergedBranch=§6特性分支 : §c{0}§6。 versionDevDivergedLatest=§6你正在運行最新版的實驗性 EssentialsX 開發版本 ! versionDevLatest=§6你正在運行最新的 EssentialsX 開發版本 ! -versionError=§4獲取 EssentialsX 版本資訊時發生錯誤 ! 開發版本資訊 : §c{0}§6。 +versionError=§4獲得 EssentialsX 版本資訊時發生錯誤 ! 開發版本資訊 : §c{0}§6。 versionErrorPlayer=§6檢查 EssentialsX 版本資訊時發生錯誤 ! -versionFetching=§6正在獲取版本資訊…… +versionFetching=§6正在獲得版本資訊…… versionOutputVaultMissing=§4未安裝 Vault 插件,聊天與權限可能無法正常運作。 versionOutputFine=§6{0} 版本 : §a{1} versionOutputWarn=§6{0} 版本 : §c{1} versionOutputUnsupported=§d{0} §6版本 : §d{1} versionOutputUnsupportedPlugins=§6你正在運行§d不被支援的插件§6 ! +versionOutputEconLayer=§6經濟層 : §r{0} versionMismatch=§4版本不匹配 ! 請升級 {0} 到相同版本。 versionMismatchAll=§4版本不匹配 ! 請升級所有 Essentials 系列的插件到相同版本。 versionReleaseLatest=§6你正在運行最新的 EssentialsX 穩定版本 ! From c746a1ce17431db85c91fb565251962c15bc43c4 Mon Sep 17 00:00:00 2001 From: Josh Roy <10731363+JRoy@users.noreply.github.com> Date: Tue, 24 Aug 2021 03:35:53 -0700 Subject: [PATCH 057/120] Bump Configurate (#4475) Some performance improvements, <3 zml --- Essentials/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Essentials/build.gradle b/Essentials/build.gradle index 647a5e57db7..a67c5083a6d 100644 --- a/Essentials/build.gradle +++ b/Essentials/build.gradle @@ -10,7 +10,7 @@ dependencies { api 'io.papermc:paperlib:1.0.6' - implementation 'org.spongepowered:configurate-yaml:4.1.1' + implementation 'org.spongepowered:configurate-yaml:4.1.2' implementation 'org.checkerframework:checker-qual:3.14.0' // Providers From df88a89c14eda8d9ed4f3551db8aa6fa30e302a9 Mon Sep 17 00:00:00 2001 From: Josh Roy <10731363+JRoy@users.noreply.github.com> Date: Thu, 26 Aug 2021 13:09:16 -0700 Subject: [PATCH 058/120] Add missing translation for argument pipe color (#4480) --- .../com/earth2me/essentials/commands/EssentialsCommand.java | 2 +- Essentials/src/main/resources/messages.properties | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/Essentials/src/main/java/com/earth2me/essentials/commands/EssentialsCommand.java b/Essentials/src/main/java/com/earth2me/essentials/commands/EssentialsCommand.java index cd849b2d3a4..db19816f2ae 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/commands/EssentialsCommand.java +++ b/Essentials/src/main/java/com/earth2me/essentials/commands/EssentialsCommand.java @@ -69,7 +69,7 @@ private void addUsageString(final String usage, final String description) { final Matcher matcher = ARGUMENT_PATTERN.matcher(usage); while (matcher.find()) { final String color = matcher.group(3).equals("<") ? tl("commandArgumentRequired") : tl("commandArgumentOptional"); - matcher.appendReplacement(buffer, "$1" + color + matcher.group(2).replace("|", ChatColor.RED + "|" + color) + ChatColor.RESET); + matcher.appendReplacement(buffer, "$1" + color + matcher.group(2).replace("|", tl("commandArgumentOr") + "|" + color) + ChatColor.RESET); } matcher.appendTail(buffer); usageStrings.put(buffer.toString(), description); diff --git a/Essentials/src/main/resources/messages.properties b/Essentials/src/main/resources/messages.properties index 1b049882638..16e282a8b7f 100644 --- a/Essentials/src/main/resources/messages.properties +++ b/Essentials/src/main/resources/messages.properties @@ -143,6 +143,7 @@ clearinventoryCommandUsage3Description=Clears all (or the specified amount) of t clearinventoryconfirmtoggleCommandDescription=Toggles whether you are prompted to confirm inventory clears. clearinventoryconfirmtoggleCommandUsage=/<command> commandArgumentOptional=\u00a77 +commandArgumentOr=\u00a7c commandArgumentRequired=\u00a7e commandCooldown=\u00a7cYou cannot type that command for {0}. commandDisabled=\u00a7cThe command\u00a76 {0}\u00a7c is disabled. From 69850d82c83c71fbdbfcd156150a7b7cff179d3f Mon Sep 17 00:00:00 2001 From: Josh Roy <10731363+JRoy@users.noreply.github.com> Date: Thu, 26 Aug 2021 13:12:52 -0700 Subject: [PATCH 059/120] Fix NoClassDefFoundError on < 1.12 with Discord execute command (#4478) --- .../providers/BukkitSenderProvider.java | 30 ++++---------- .../ModernCommandSenderSpigotCreator.java | 40 +++++++++++++++++++ 2 files changed, 47 insertions(+), 23 deletions(-) create mode 100644 providers/BaseProviders/src/main/java/net/ess3/provider/providers/ModernCommandSenderSpigotCreator.java diff --git a/providers/BaseProviders/src/main/java/net/ess3/provider/providers/BukkitSenderProvider.java b/providers/BaseProviders/src/main/java/net/ess3/provider/providers/BukkitSenderProvider.java index 9496f909175..4228a67b789 100644 --- a/providers/BaseProviders/src/main/java/net/ess3/provider/providers/BukkitSenderProvider.java +++ b/providers/BaseProviders/src/main/java/net/ess3/provider/providers/BukkitSenderProvider.java @@ -1,7 +1,5 @@ package net.ess3.provider.providers; -import net.md_5.bungee.api.chat.BaseComponent; -import net.md_5.bungee.api.chat.TextComponent; import org.bukkit.Server; import org.bukkit.command.CommandSender; import org.bukkit.command.ConsoleCommandSender; @@ -60,27 +58,13 @@ public String getName() { @Override public Spigot spigot() { - return new Spigot() { - @Override - public void sendMessage(BaseComponent component) { - BukkitSenderProvider.this.sendMessage(component.toLegacyText()); - } - - @Override - public void sendMessage(BaseComponent... components) { - sendMessage(new TextComponent(components)); - } - - @Override - public void sendMessage(UUID sender, BaseComponent... components) { - sendMessage(components); - } - - @Override - public void sendMessage(UUID sender, BaseComponent component) { - sendMessage(component); - } - }; + try { + Class.forName("org.bukkit.command.CommandSender$Spigot"); + return ModernCommandSenderSpigotCreator.stupidDumbHackToMakeTheJvmHappy(this); + } catch (ClassNotFoundException ignored) { + //noinspection ConstantConditions + return null; + } } @Override diff --git a/providers/BaseProviders/src/main/java/net/ess3/provider/providers/ModernCommandSenderSpigotCreator.java b/providers/BaseProviders/src/main/java/net/ess3/provider/providers/ModernCommandSenderSpigotCreator.java new file mode 100644 index 00000000000..5a4c43b14c5 --- /dev/null +++ b/providers/BaseProviders/src/main/java/net/ess3/provider/providers/ModernCommandSenderSpigotCreator.java @@ -0,0 +1,40 @@ +package net.ess3.provider.providers; + +import net.md_5.bungee.api.chat.BaseComponent; +import net.md_5.bungee.api.chat.TextComponent; +import org.bukkit.command.CommandSender; + +import java.util.UUID; + +public final class ModernCommandSenderSpigotCreator { + private ModernCommandSenderSpigotCreator() { + } + + /** + * The JVM will FOR SOME REASON try to load inner classes even BEFORE THE CODE WHICH REFERENCE THEM IS CALLED. + * This dumbass hack postpones the class lookup to until we know for sure the class exists. + */ + public static CommandSender.Spigot stupidDumbHackToMakeTheJvmHappy(BukkitSenderProvider provider) { + return new CommandSender.Spigot() { + @Override + public void sendMessage(BaseComponent component) { + provider.sendMessage(component.toLegacyText()); + } + + @Override + public void sendMessage(BaseComponent... components) { + sendMessage(new TextComponent(components)); + } + + @Override + public void sendMessage(UUID sender, BaseComponent... components) { + sendMessage(components); + } + + @Override + public void sendMessage(UUID sender, BaseComponent component) { + sendMessage(component); + } + }; + } +} From 4811eb155874c7b3e77e9036c525bf6eb99c4c1d Mon Sep 17 00:00:00 2001 From: Josh Roy <10731363+JRoy@users.noreply.github.com> Date: Fri, 27 Aug 2021 13:50:41 -0700 Subject: [PATCH 060/120] Fix /ess dump on 1.8.8 (#4489) Fixes #4487 pain --- .../com/earth2me/essentials/commands/Commandessentials.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/Essentials/src/main/java/com/earth2me/essentials/commands/Commandessentials.java b/Essentials/src/main/java/com/earth2me/essentials/commands/Commandessentials.java index d17d171433b..876304fe655 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/commands/Commandessentials.java +++ b/Essentials/src/main/java/com/earth2me/essentials/commands/Commandessentials.java @@ -16,7 +16,9 @@ import com.google.common.collect.ImmutableMap; import com.google.common.collect.Lists; import com.google.gson.JsonArray; +import com.google.gson.JsonNull; import com.google.gson.JsonObject; +import com.google.gson.JsonPrimitive; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.Location; @@ -237,7 +239,9 @@ private void runDump(Server server, CommandSource sender, String commandLabel, S pluginData.addProperty("unsupported", warnPlugins.contains(name)); final JsonArray authors = new JsonArray(); - info.getAuthors().forEach(authors::add); + for (final String author : info.getAuthors()) { + authors.add(author == null ? JsonNull.INSTANCE : new JsonPrimitive(author)); + } pluginData.add("authors", authors); if (name.startsWith("Essentials") && !name.equals("Essentials")) { From e4c179f5edfd76976a83416d6db85bba0dd7b24d Mon Sep 17 00:00:00 2001 From: pop4959 <pop4959@gmail.com> Date: Sat, 28 Aug 2021 08:46:38 -0700 Subject: [PATCH 061/120] Allow auto equip in nbt serialized kits (#4491) Co-authored-by: Josh Roy <10731363+JRoy@users.noreply.github.com> --- .../java/com/earth2me/essentials/Kit.java | 30 ++++++++++--------- 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/Essentials/src/main/java/com/earth2me/essentials/Kit.java b/Essentials/src/main/java/com/earth2me/essentials/Kit.java index 0105a2e4fa7..e072fece091 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/Kit.java +++ b/Essentials/src/main/java/com/earth2me/essentials/Kit.java @@ -188,31 +188,33 @@ public boolean expandItems(final User user, final List<String> items) throws Exc continue; } + final ItemStack stack; + if (kitItem.startsWith("@")) { if (ess.getSerializationProvider() == null) { ess.getLogger().log(Level.WARNING, tl("kitError3", kitName, user.getName())); continue; } - itemList.add(ess.getSerializationProvider().deserializeItem(Base64Coder.decodeLines(kitItem.substring(1)))); - continue; - } + stack = ess.getSerializationProvider().deserializeItem(Base64Coder.decodeLines(kitItem.substring(1))); + } else { + final String[] parts = kitItem.split(" +"); + final ItemStack parseStack = ess.getItemDb().get(parts[0], parts.length > 1 ? Integer.parseInt(parts[1]) : 1); - final String[] parts = kitItem.split(" +"); - final ItemStack parseStack = ess.getItemDb().get(parts[0], parts.length > 1 ? Integer.parseInt(parts[1]) : 1); + if (parseStack.getType() == Material.AIR) { + continue; + } - if (parseStack.getType() == Material.AIR) { - continue; - } + final MetaItemStack metaStack = new MetaItemStack(parseStack); - final MetaItemStack metaStack = new MetaItemStack(parseStack); + if (parts.length > 2) { + // We pass a null sender here because kits should not do perm checks + metaStack.parseStringMeta(null, allowUnsafe, parts, 2, ess); + } - if (parts.length > 2) { - // We pass a null sender here because kits should not do perm checks - metaStack.parseStringMeta(null, allowUnsafe, parts, 2, ess); + stack = metaStack.getItemStack(); } if (autoEquip) { - final ItemStack stack = metaStack.getItemStack(); final Material material = stack.getType(); final PlayerInventory inventory = user.getBase().getInventory(); if (MaterialUtil.isHelmet(material) && isEmptyStack(inventory.getHelmet())) { @@ -230,7 +232,7 @@ public boolean expandItems(final User user, final List<String> items) throws Exc } } - itemList.add(metaStack.getItemStack()); + itemList.add(stack); } final Map<Integer, ItemStack> overfilled; From 4bee15956abb6c17831984e59fbf603686f18137 Mon Sep 17 00:00:00 2001 From: Josh Roy <10731363+JRoy@users.noreply.github.com> Date: Sat, 28 Aug 2021 09:32:45 -0700 Subject: [PATCH 062/120] Fix economy usernames being unsanitized in some places (#4484) Co-authored-by: MD <1917406+mdcfe@users.noreply.github.com> This PR fixes various issues with NPC accounts: - Fixes some NPC account names not being sanitised - Fixes wrong keys being used when manually generating a NPC account file - Adds some debug logging to `UserMap` name lookups --- .../java/com/earth2me/essentials/UserData.java | 2 +- .../java/com/earth2me/essentials/UserMap.java | 16 +++++++++++++++- .../com/earth2me/essentials/api/Economy.java | 6 +++--- .../config/EssentialsUserConfiguration.java | 2 +- .../economy/vault/VaultEconomyProvider.java | 5 +++-- 5 files changed, 23 insertions(+), 8 deletions(-) diff --git a/Essentials/src/main/java/com/earth2me/essentials/UserData.java b/Essentials/src/main/java/com/earth2me/essentials/UserData.java index f2128b5ada0..313b984cc90 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/UserData.java +++ b/Essentials/src/main/java/com/earth2me/essentials/UserData.java @@ -69,7 +69,7 @@ public final void reset() { if (config.getUsername() != null) { ess.getUserMap().removeUser(config.getUsername()); if (isNPC()) { - final String uuid = UUID.nameUUIDFromBytes(("NPC:" + config.getUsername()).getBytes(Charsets.UTF_8)).toString(); + final String uuid = UUID.nameUUIDFromBytes(("NPC:" + StringUtil.safeString(config.getUsername())).getBytes(Charsets.UTF_8)).toString(); ess.getUserMap().removeUserUUID(uuid); } } diff --git a/Essentials/src/main/java/com/earth2me/essentials/UserMap.java b/Essentials/src/main/java/com/earth2me/essentials/UserMap.java index 895401f9414..35f5eefe614 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/UserMap.java +++ b/Essentials/src/main/java/com/earth2me/essentials/UserMap.java @@ -92,13 +92,21 @@ public boolean userExists(final UUID uuid) { } public User getUser(final String name) { + final String sanitizedName = StringUtil.safeString(name); try { - final String sanitizedName = StringUtil.safeString(name); + if (ess.getSettings().isDebug()) { + ess.getLogger().warning("Looking up username " + name + " (" + sanitizedName + ") ..."); + } + if (names.containsKey(sanitizedName)) { final UUID uuid = names.get(sanitizedName); return getUser(uuid); } + if (ess.getSettings().isDebug()) { + ess.getLogger().warning(name + "(" + sanitizedName + ") has no known usermap entry"); + } + final File userFile = getUserFileFromString(sanitizedName); if (userFile.exists()) { ess.getLogger().info("Importing user " + name + " to usermap."); @@ -108,6 +116,9 @@ public User getUser(final String name) { } return null; } catch (final UncheckedExecutionException ex) { + if (ess.getSettings().isDebug()) { + ess.getLogger().log(Level.WARNING, ex, () -> String.format("Exception while getting user for %s (%s)", name, sanitizedName)); + } return null; } } @@ -120,6 +131,9 @@ public User getUser(final UUID uuid) { return legacyCacheGet(uuid); } } catch (final ExecutionException | UncheckedExecutionException ex) { + if (ess.getSettings().isDebug()) { + ess.getLogger().log(Level.WARNING, ex, () -> "Exception while getting user for " + uuid); + } return null; } } diff --git a/Essentials/src/main/java/com/earth2me/essentials/api/Economy.java b/Essentials/src/main/java/com/earth2me/essentials/api/Economy.java index d0a12b77a9a..dd7ae19f71c 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/api/Economy.java +++ b/Essentials/src/main/java/com/earth2me/essentials/api/Economy.java @@ -52,7 +52,7 @@ private static void createNPCFile(String name) { } } final UUID npcUUID = UUID.nameUUIDFromBytes(("NPC:" + name).getBytes(Charsets.UTF_8)); - final File npcFile = new File(folder, npcUUID.toString() + ".yml"); + final File npcFile = new File(folder, npcUUID + ".yml"); if (npcFile.exists()) { LOGGER.log(Level.SEVERE, MessageFormat.format(WARN_NPC_RECREATE_1, name, npcUUID.toString()), new RuntimeException()); LOGGER.log(Level.SEVERE, WARN_NPC_RECREATE_2); @@ -60,7 +60,7 @@ private static void createNPCFile(String name) { final EssentialsUserConfiguration npcConfig = new EssentialsUserConfiguration(name, npcUUID, npcFile); npcConfig.load(); npcConfig.setProperty("npc", true); - npcConfig.setProperty("lastAccountName", name); + npcConfig.setProperty("last-account-name", name); npcConfig.setProperty("money", ess.getSettings().getStartingBalance()); npcConfig.blockingSave(); ess.getUserMap().trackUUID(npcUUID, name, false); @@ -96,7 +96,7 @@ private static User getUserByName(final String name) { } if (user == null) { - user = getUserByUUID(UUID.nameUUIDFromBytes(("NPC:" + name).getBytes(Charsets.UTF_8))); + user = getUserByUUID(UUID.nameUUIDFromBytes(("NPC:" + StringUtil.safeString(name)).getBytes(Charsets.UTF_8))); } return user; diff --git a/Essentials/src/main/java/com/earth2me/essentials/config/EssentialsUserConfiguration.java b/Essentials/src/main/java/com/earth2me/essentials/config/EssentialsUserConfiguration.java index 2eb9ab2cbe9..798b4da3720 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/config/EssentialsUserConfiguration.java +++ b/Essentials/src/main/java/com/earth2me/essentials/config/EssentialsUserConfiguration.java @@ -46,7 +46,7 @@ public void convertLegacyFile() { LOGGER.log(Level.WARNING, "Failed to migrate user: " + username, ex); } - setProperty("lastAccountName", username); + setProperty("last-account-name", username); } private File getAltFile() { diff --git a/Essentials/src/main/java/com/earth2me/essentials/economy/vault/VaultEconomyProvider.java b/Essentials/src/main/java/com/earth2me/essentials/economy/vault/VaultEconomyProvider.java index 054c95462d2..4ba9e66ca16 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/economy/vault/VaultEconomyProvider.java +++ b/Essentials/src/main/java/com/earth2me/essentials/economy/vault/VaultEconomyProvider.java @@ -5,6 +5,7 @@ import com.earth2me.essentials.api.UserDoesNotExistException; import com.earth2me.essentials.config.EssentialsUserConfiguration; import com.earth2me.essentials.utils.NumberUtil; +import com.earth2me.essentials.utils.StringUtil; import com.google.common.base.Charsets; import net.ess3.api.MaxMoneyException; import net.milkbowl.vault.economy.Economy; @@ -80,7 +81,7 @@ public boolean hasAccount(String playerName) { return true; } // We may not have the player name in the usermap, let's double check an NPC account with this name doesn't exist. - return com.earth2me.essentials.api.Economy.playerExists(UUID.nameUUIDFromBytes(("NPC:" + playerName).getBytes(Charsets.UTF_8))); + return com.earth2me.essentials.api.Economy.playerExists(UUID.nameUUIDFromBytes(("NPC:" + StringUtil.safeString(playerName)).getBytes(Charsets.UTF_8))); } @Override @@ -306,7 +307,7 @@ public boolean createPlayerAccount(OfflinePlayer player) { final EssentialsUserConfiguration npcConfig = new EssentialsUserConfiguration(player.getName(), player.getUniqueId(), npcFile); npcConfig.load(); npcConfig.setProperty("npc", true); - npcConfig.setProperty("lastAccountName", player.getName()); + npcConfig.setProperty("last-account-name", player.getName()); npcConfig.setProperty("money", ess.getSettings().getStartingBalance()); npcConfig.blockingSave(); ess.getUserMap().trackUUID(player.getUniqueId(), player.getName(), false); From 6f20a789f998e655ce6d1fb46b821b31b021819e Mon Sep 17 00:00:00 2001 From: Josh Roy <10731363+JRoy@users.noreply.github.com> Date: Tue, 31 Aug 2021 08:28:44 -0700 Subject: [PATCH 063/120] Delete (& backup) invalid NPC accounts created by poor econ code (#4490) Co-authored-by: MD <1917406+mdcfe@users.noreply.github.com> my magnum opus --- * Delete (& backup) invalid NPC accounts created by poor econ code * Add feedback for large migrations * Improve feedback messages - Improve the wording of console messages - Include details about how to resume purging userdata in case it gets interrupted - Scale the message delay based on the number of userdata files to be processed - Always cancel the repeating task and shut down the executor when we're done * Update Essentials/src/main/java/com/earth2me/essentials/EssentialsUpgrade.java * Add less ranty context to rant At least I had caffeine before writing this --- .../essentials/EssentialsUpgrade.java | 154 +++++++++++++++++- 1 file changed, 149 insertions(+), 5 deletions(-) diff --git a/Essentials/src/main/java/com/earth2me/essentials/EssentialsUpgrade.java b/Essentials/src/main/java/com/earth2me/essentials/EssentialsUpgrade.java index 42e18dc55d7..9c47154a1c1 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/EssentialsUpgrade.java +++ b/Essentials/src/main/java/com/earth2me/essentials/EssentialsUpgrade.java @@ -7,6 +7,7 @@ import com.earth2me.essentials.utils.StringUtil; import com.google.common.base.Charsets; import com.google.common.collect.Maps; +import com.google.common.io.Files; import com.google.gson.reflect.TypeToken; import net.ess3.api.IEssentials; import net.essentialsx.api.v2.services.mail.MailMessage; @@ -26,6 +27,7 @@ import java.io.FileWriter; import java.io.IOException; import java.io.PrintWriter; +import java.math.BigDecimal; import java.math.BigInteger; import java.security.DigestInputStream; import java.security.MessageDigest; @@ -39,6 +41,11 @@ import java.util.Map; import java.util.Set; import java.util.UUID; +import java.util.concurrent.Executors; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.ScheduledFuture; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicInteger; import java.util.logging.Level; import java.util.logging.Logger; import java.util.regex.Matcher; @@ -234,7 +241,7 @@ public void convertStupidCamelCaseUserdataKeys() { } config.blockingSave(); } catch (final RuntimeException ex) { - LOGGER.log(Level.INFO, "File: " + file.toString()); + LOGGER.log(Level.INFO, "File: " + file); throw ex; } } @@ -243,6 +250,142 @@ public void convertStupidCamelCaseUserdataKeys() { LOGGER.info("Done converting legacy userdata keys to Configurate."); } + /** + * This migration cleans up unused files left behind by the chaos resulting from Vault's questionable economy + * integration, and upstream Essentials' rushed and untested 1.7.10 UUID support. + * Both of these have been fixed in EssentialsX as of 2.18.x and 2.19.x respectively, but the leftover userdata + * files can reach into the tens of thousands and can cause excessive memory and storage usage, so this migration + * relocates these files to a backup folder to be removed by the server owner at a later date. + * <p> + * To quote JRoy, who suffered immensely while trying to debug and fix various related issues: + * <p> + * "Essentials decided when adding its initial support for UUIDs, it wanted an implementation which would cause + * eternal pain and suffering for any person who dared touch any of the code in the future. This code that was made + * was so bad, it managed to somehow not maintain any actual UUID support for any external integrations/plugins. + * Up until 2.19.0 and 2.18.0 respectively, our Vault integration and entire Economy system was entirely based off + * username strings, and thanks to Vault being a flawed standard, for some reason exposes account create to third + * party plugins rather than letting the implementation handle it. That doesn't seem like a huge problem at the + * surface, but there was one small problem: whoever made the Vault integration for Essentials suffered a stroke in + * the process of creating it. The implementation for the createAccount method, regardless of whether it was an + * actual player or an NPC account (which the Vault spec NEVER accounted for but plugins just have to guess when + * to support them), it would always create an NPC account. This caused any plugin integrating with Vault, creating + * NPC accounts for pretty much every single player on the server. It still, to this day, amazes me how nobody saw + * this code and didn't die without rewriting it; Or how everybody simply didn't stop using this plugin because how + * awful that godforsaken code was. Anyways, this upgrade does its best to delete NPC accounts created by the + * horrible economy code, as any operation which loads all user data into memory will load all these NPC accounts + * and spam the console with warnings." + */ + public void purgeBrokenNpcAccounts() { + if (doneFile.getBoolean("updatePurgeBrokenNpcAccounts", false)) { + return; + } + + final File userdataFolder = new File(ess.getDataFolder(), "userdata"); + if (!userdataFolder.exists() || !userdataFolder.isDirectory()) { + return; + } + final File[] userFiles = userdataFolder.listFiles(); + if (userFiles.length == 0) { + return; + } + final File backupFolder = new File(ess.getDataFolder(), "userdata-npc-backup"); + if (backupFolder.exists()) { + LOGGER.info("NPC backup folder already exists; skipping NPC purge."); + LOGGER.info("To finish purging broken NPC accounts, rename the \"plugins/Essentials/userdata-npc-backup\" folder and restart your server."); + return; + } else if (!backupFolder.mkdir()) { + LOGGER.info("Skipping NPC purge due to error creating backup folder."); + return; + } + + LOGGER.info("#===========================================================================#"); + LOGGER.info(" EssentialsX will now purge any NPC accounts which were incorrectly created."); + LOGGER.info(" Only NPC accounts with the default starting balance will be deleted. If"); + LOGGER.info(" they turn out to be valid NPC accounts, they will be re-created as needed."); + LOGGER.info(" Any files deleted here will be backed up to the "); + LOGGER.info(" \"plugins/Essentials/userdata-npc-backup\" folder. If you notice any files"); + LOGGER.info(" have been purged incorrectly, you should restore it from the backup and"); + LOGGER.info(" report it to us on GitHub:"); + LOGGER.info(" https://github.com/EssentialsX/Essentials/issues/new/choose"); + LOGGER.info(""); + LOGGER.info(" NOTE: This is a one-time process and will take several minutes if you have"); + LOGGER.info(" a lot of userdata files! If you interrupt this process, EssentialsX will"); + LOGGER.info(" skip the process until you rename or remove the backup folder."); + LOGGER.info("#===========================================================================#"); + + final int totalUserFiles = userFiles.length; + LOGGER.info("Found ~" + totalUserFiles + " files under \"plugins/Essentials/userdata\"..."); + + final AtomicInteger movedAccounts = new AtomicInteger(0); + final AtomicInteger totalAccounts = new AtomicInteger(0); + + // Less spammy feedback for greater userdata counts, eg 100 files -> 5 seconds, 1k -> 7s, 10k -> 9s, 100k -> 11s, 1m -> 14s + final long feedbackInterval = Math.min(15, 1 + Math.round(2.1 * Math.log10(userFiles.length))); + + final ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor(); + final ScheduledFuture<?> feedbackTask = executor.scheduleWithFixedDelay( + () -> LOGGER.info("Scanned " + totalAccounts.get() + "/" + totalUserFiles + " accounts; moved " + movedAccounts.get() + " accounts"), + 5, feedbackInterval, TimeUnit.SECONDS); + + for (final File file : userFiles) { + if (!file.isFile() || !file.getName().endsWith(".yml")) { + continue; + } + final EssentialsConfiguration config = new EssentialsConfiguration(file); + try { + totalAccounts.incrementAndGet(); + config.load(); + + if (config.getKeys().size() > 4) { + continue; + } + + if (!config.getBoolean("npc", false)) { + continue; + } + + final BigDecimal money = config.getBigDecimal("money", null); + if (money == null || money.compareTo(ess.getSettings().getStartingBalance()) != 0) { + continue; + } + + if (config.getKeys().size() == 4 && !config.hasProperty("last-account-name") && config.hasProperty("mail")) { + continue; + } + + try { + //noinspection UnstableApiUsage + Files.move(file, new File(backupFolder, file.getName())); + movedAccounts.incrementAndGet(); + } catch (IOException e) { + LOGGER.log(Level.SEVERE, "Error while moving NPC file", e); + } + } catch (final RuntimeException ex) { + LOGGER.log(Level.INFO, "File: " + file); + feedbackTask.cancel(false); + executor.shutdown(); + throw ex; + } + } + feedbackTask.cancel(false); + executor.shutdown(); + doneFile.setProperty("updatePurgeBrokenNpcAccounts", true); + doneFile.save(); + + LOGGER.info("#===========================================================================#"); + LOGGER.info(" EssentialsX has finished purging NPC accounts."); + LOGGER.info(""); + LOGGER.info(" Deleted accounts: " + movedAccounts); + LOGGER.info(" Total accounts processed: " + totalAccounts); + LOGGER.info(""); + LOGGER.info(" Purged accounts have been backed up to"); + LOGGER.info(" \"plugins/Essentials/userdata-npc-backup\", and can be restored from there"); + LOGGER.info(" if needed. Please report any files which have been incorrectly deleted"); + LOGGER.info(" to us on GitHub:"); + LOGGER.info(" https://github.com/EssentialsX/Essentials/issues/new/choose"); + LOGGER.info("#===========================================================================#"); + } + public void convertIgnoreList() { final Pattern pattern = Pattern.compile("^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$"); if (doneFile.getBoolean("updateUsersIgnoreListUUID", false)) { @@ -284,7 +427,7 @@ public void convertIgnoreList() { config.blockingSave(); } } catch (final RuntimeException ex) { - LOGGER.log(Level.INFO, "File: " + file.toString()); + LOGGER.log(Level.INFO, "File: " + file); throw ex; } } @@ -429,7 +572,7 @@ private void updateUsersPowerToolsFormat() { config.blockingSave(); } } catch (final RuntimeException ex) { - LOGGER.log(Level.INFO, "File: " + file.toString()); + LOGGER.log(Level.INFO, "File: " + file); throw ex; } } @@ -485,7 +628,7 @@ private void updateUsersHomesFormat() { } } catch (final RuntimeException ex) { - LOGGER.log(Level.INFO, "File: " + file.toString()); + LOGGER.log(Level.INFO, "File: " + file); throw ex; } } @@ -574,7 +717,7 @@ private void deleteOldItemsCsv() { final BigInteger hash = new BigInteger(1, digest.digest()); if (oldconfigs.contains(hash) && !file.delete()) { - throw new IOException("Could not delete file " + file.toString()); + throw new IOException("Could not delete file " + file); } doneFile.setProperty("deleteOldItemsCsv", true); doneFile.save(); @@ -864,5 +1007,6 @@ public void afterSettings() { convertIgnoreList(); convertStupidCamelCaseUserdataKeys(); convertMailList(); + purgeBrokenNpcAccounts(); } } From 14c2ab5ddd44bb3946c9c24718120f17d23bd505 Mon Sep 17 00:00:00 2001 From: Josh Roy <10731363+JRoy@users.noreply.github.com> Date: Tue, 31 Aug 2021 08:34:10 -0700 Subject: [PATCH 064/120] Add online mode data for /ess dump (#4497) EssentialsX/Website#60 --- .../com/earth2me/essentials/Essentials.java | 9 +++ .../com/earth2me/essentials/IEssentials.java | 3 + .../commands/Commandessentials.java | 1 + .../providers/ReflOnlineModeProvider.java | 59 +++++++++++++++++++ 4 files changed, 72 insertions(+) create mode 100644 providers/NMSReflectionProvider/src/main/java/net/ess3/nms/refl/providers/ReflOnlineModeProvider.java diff --git a/Essentials/src/main/java/com/earth2me/essentials/Essentials.java b/Essentials/src/main/java/com/earth2me/essentials/Essentials.java index dd9c353e09d..fa4a8a3ceed 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/Essentials.java +++ b/Essentials/src/main/java/com/earth2me/essentials/Essentials.java @@ -49,6 +49,7 @@ import net.ess3.api.ISettings; import net.ess3.nms.refl.providers.ReflFormattedCommandAliasProvider; import net.ess3.nms.refl.providers.ReflKnownCommandsProvider; +import net.ess3.nms.refl.providers.ReflOnlineModeProvider; import net.ess3.nms.refl.providers.ReflPersistentDataProvider; import net.ess3.nms.refl.providers.ReflServerStateProvider; import net.ess3.nms.refl.providers.ReflSpawnEggProvider; @@ -165,6 +166,7 @@ public class Essentials extends JavaPlugin implements net.ess3.api.IEssentials { private transient MaterialTagProvider materialTagProvider; private transient SyncCommandsProvider syncCommandsProvider; private transient PersistentDataProvider persistentDataProvider; + private transient ReflOnlineModeProvider onlineModeProvider; private transient Kits kits; private transient RandomTeleport randomTeleport; private transient UpdateChecker updateChecker; @@ -406,6 +408,8 @@ public void onEnable() { persistentDataProvider = new ReflPersistentDataProvider(this); } + onlineModeProvider = new ReflOnlineModeProvider(); + execTimer.mark("Init(Providers)"); reload(); @@ -1260,6 +1264,11 @@ public PersistentDataProvider getPersistentDataProvider() { return persistentDataProvider; } + @Override + public ReflOnlineModeProvider getOnlineModeProvider() { + return onlineModeProvider; + } + @Override public PluginCommand getPluginCommand(final String cmd) { return this.getCommand(cmd); diff --git a/Essentials/src/main/java/com/earth2me/essentials/IEssentials.java b/Essentials/src/main/java/com/earth2me/essentials/IEssentials.java index 6f47fbbed57..73e09b8c7a7 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/IEssentials.java +++ b/Essentials/src/main/java/com/earth2me/essentials/IEssentials.java @@ -7,6 +7,7 @@ import com.earth2me.essentials.commands.PlayerNotFoundException; import com.earth2me.essentials.perm.PermissionsHandler; import com.earth2me.essentials.updatecheck.UpdateChecker; +import net.ess3.nms.refl.providers.ReflOnlineModeProvider; import net.ess3.provider.ContainerProvider; import net.ess3.provider.FormattedCommandAliasProvider; import net.ess3.provider.KnownCommandsProvider; @@ -156,5 +157,7 @@ public interface IEssentials extends Plugin { PersistentDataProvider getPersistentDataProvider(); + ReflOnlineModeProvider getOnlineModeProvider(); + PluginCommand getPluginCommand(String cmd); } diff --git a/Essentials/src/main/java/com/earth2me/essentials/commands/Commandessentials.java b/Essentials/src/main/java/com/earth2me/essentials/commands/Commandessentials.java index 876304fe655..984f9cb4cd1 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/commands/Commandessentials.java +++ b/Essentials/src/main/java/com/earth2me/essentials/commands/Commandessentials.java @@ -190,6 +190,7 @@ private void runDump(Server server, CommandSource sender, String commandLabel, S serverData.addProperty("bukkit-version", Bukkit.getBukkitVersion()); serverData.addProperty("server-version", Bukkit.getVersion()); serverData.addProperty("server-brand", Bukkit.getName()); + serverData.addProperty("online-mode", ess.getOnlineModeProvider().getOnlineModeString()); final JsonObject supportStatus = new JsonObject(); final VersionUtil.SupportStatus status = VersionUtil.getServerSupportStatus(); supportStatus.addProperty("status", status.name()); diff --git a/providers/NMSReflectionProvider/src/main/java/net/ess3/nms/refl/providers/ReflOnlineModeProvider.java b/providers/NMSReflectionProvider/src/main/java/net/ess3/nms/refl/providers/ReflOnlineModeProvider.java new file mode 100644 index 00000000000..b5c43c2a699 --- /dev/null +++ b/providers/NMSReflectionProvider/src/main/java/net/ess3/nms/refl/providers/ReflOnlineModeProvider.java @@ -0,0 +1,59 @@ +package net.ess3.nms.refl.providers; + +import org.bukkit.Bukkit; + +import java.lang.invoke.MethodHandle; +import java.lang.invoke.MethodHandles; +import java.lang.invoke.MethodType; + +public class ReflOnlineModeProvider { + private final MethodHandle spigotBungeeGetter; + private final MethodHandle paperBungeeGetter; + private final boolean fancyPaperCheck; + + public ReflOnlineModeProvider() { + MethodHandle spigotBungeeGetter = null; + MethodHandle paperBungeeGetter = null; + boolean fancyCheck = false; + try { + final MethodHandles.Lookup lookup = MethodHandles.lookup(); + spigotBungeeGetter = lookup.findStaticGetter(Class.forName("org.spigotmc.SpigotConfig"), "bungee", boolean.class); + final Class<?> paperConfig = Class.forName("com.destroystokyo.paper.PaperConfig"); + paperBungeeGetter = lookup.findStaticGetter(paperConfig, "bungeeOnlineMode", boolean.class); + paperBungeeGetter = lookup.findStatic(paperConfig, "isProxyOnlineMode", MethodType.methodType(boolean.class)); + fancyCheck = true; + } catch (Throwable ignored) { + } + this.spigotBungeeGetter = spigotBungeeGetter; + this.paperBungeeGetter = paperBungeeGetter; + this.fancyPaperCheck = fancyCheck; + } + + public String getOnlineModeString() { + if (spigotBungeeGetter == null) { + return Bukkit.getOnlineMode() ? "Online Mode" : "Offline Mode"; + } + + try { + if (Bukkit.getOnlineMode()) { + return "Online Mode"; + } + + if (fancyPaperCheck) { + if ((boolean) paperBungeeGetter.invoke()) { + // Could be Velocity or Bungee, so do not specify. + return "Proxy Mode"; + } + return "Offline Mode"; + } + + if ((boolean) spigotBungeeGetter.invoke() && (paperBungeeGetter == null || (boolean) paperBungeeGetter.invoke())) { + return "Bungee Mode"; + } + + return "Offline Mode"; + } catch (Throwable ignored) { + return "Unknown"; + } + } +} From 8bbaf7da68a5490b745e823e044d1979aa1d33fa Mon Sep 17 00:00:00 2001 From: MD <1917406+mdcfe@users.noreply.github.com> Date: Tue, 31 Aug 2021 16:53:09 +0100 Subject: [PATCH 065/120] Update Gradle to 7.2; set run-paper to 1.17.1 with toolchain (#4496) :chatting: --- build-logic/build.gradle.kts | 4 +- build-logic/src/main/kotlin/constants.kt | 2 +- .../essentials.module-conventions.gradle.kts | 1 + gradle/wrapper/gradle-wrapper.jar | Bin 58910 -> 59536 bytes gradle/wrapper/gradle-wrapper.properties | 2 +- gradlew | 257 +++++++++++------- gradlew.bat | 21 +- 7 files changed, 161 insertions(+), 126 deletions(-) diff --git a/build-logic/build.gradle.kts b/build-logic/build.gradle.kts index f41c45e3dd7..0c57299878a 100644 --- a/build-logic/build.gradle.kts +++ b/build-logic/build.gradle.kts @@ -8,7 +8,7 @@ repositories { } dependencies { - implementation("net.kyori", "indra-common", "2.0.5") + implementation("net.kyori", "indra-common", "2.0.6") implementation("gradle.plugin.com.github.jengelman.gradle.plugins", "shadow", "7.0.0") - implementation("xyz.jpenilla", "run-paper", "1.0.2") + implementation("xyz.jpenilla", "run-paper", "1.0.4") } diff --git a/build-logic/src/main/kotlin/constants.kt b/build-logic/src/main/kotlin/constants.kt index 026fe0f0e55..ab3ac4a3595 100644 --- a/build-logic/src/main/kotlin/constants.kt +++ b/build-logic/src/main/kotlin/constants.kt @@ -1 +1 @@ -const val RUN_PAPER_MINECRAFT_VERSION = "1.16.5" +const val RUN_PAPER_MINECRAFT_VERSION = "1.17.1" diff --git a/build-logic/src/main/kotlin/essentials.module-conventions.gradle.kts b/build-logic/src/main/kotlin/essentials.module-conventions.gradle.kts index 2e2a2f9b9a6..9212b2fad0b 100644 --- a/build-logic/src/main/kotlin/essentials.module-conventions.gradle.kts +++ b/build-logic/src/main/kotlin/essentials.module-conventions.gradle.kts @@ -9,6 +9,7 @@ tasks { runServer { minecraftVersion(RUN_PAPER_MINECRAFT_VERSION) runDirectory(rootProject.file("run")) + javaLauncher.set(javaToolchains.launcherFor(java.toolchain)) if (project.name != "EssentialsX") { pluginJars.from(rootProject.project(":EssentialsX").the<EssentialsModuleExtension>().archiveFile) } diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 62d4c053550b91381bbd28b1afc82d634bf73a8a..7454180f2ae8848c63b8b4dea2cb829da983f2fa 100644 GIT binary patch delta 18328 zcmY(KV|Snp(4;dlC$??dwr$%s?%1|%+Y{TEB$J74XJYKL?}t6_{)RqPefp~E{28#s zMX<&I7zFQD-2pam5RgAmARxjiNx~Q@eb6u|)i9L6jw-G?+Lr@IPMA5WiWC)^j?e}U zD7iW<thKE!5e|+FIht6_9C;VQ218Hhy3lvHz{~H9zSERtOhX=05%+Tc<*YB#FP}y1 zyhUdT{%4c`H&`zGl*um6=S|nXo1T-)ElL3RgdU)MnGgeYWGhA=UW%1UVV}&kAK*qk zxw8OJlRJqt8L~S=7b#+mH-+W~bSa9xcwLMM&P_=YV5}K%GufO*2hc=E?r6~WSluxA z`je|(dM_hqs^>E@!V0LVEYpjM=<t;Hf{eJ@*2b6}SKRpw`p$jP4b^HOdT^jM!w3wX zMx(D*syBQ?4N)8h2JS<FRgbG(zTu<aKfr-}xMs(6V!rdVC|lP-kI}ThOTo96FTtX; z^bidrdD_<-_kce$9^GH{@M~u0khNT+{uy|U?K0=zdn?t2fv!+@JYR(Cr&h^F-3?f` zg&O$!hYsSY*gC3VIeuZ5ddOz=@+U2*s46Lg)8<)$#80g`#5(tSGB{|Vx-b}LW|RQd zOx+=iX)2OT2gR$4zO#ypdxy**ZSm<57tC+f94-5@?3<L6_3X)Ad9RJ>!-_G-j1d<j zUxp^DiWK@4yz^wsAvFUUPt{$B&GlmJoubY*GmKw2qlb2rEZu3AN}xKYL+Wt$Ty{nH z_!#kp%R|)gC^f=hH(Hqzi$gHEt*1bj_sT$Qm~AFI6D9x6Qq#3?&R(RB`{^m`GCOBu z#z?y=$sDfN{Lp)+!ycF(=Pj}56QGtScC#x_zllc9llOIE<p@bnPW!v*W?2Mr#ljt1 zVGUQhNZI#Q{LWdvlRW8a<EXRJV|r{tK)eC#rCqmZOm|N~UT&*!s^Y!}j1%BgQZi{U z8)0VeW>k20uwjkq>!`+4(Xkt6o-|jrlKp7EEb=pWN^Cb%UFSjMVtrh&&jh&(3&&Vz zcKd9bC@*3rdk-IDdhKyay<~pt5W2vLi+beI>IM*s9tUt*Tie5L!O&Oa+YxxyZ>XQ3 z*!CqyZc&Lp<-7_Dq9qyQYk&)mBB!iu=|iO1D$Wb90#Xq}qtc4I>k6*aFO<KYOw0WC zd+w)ZH`}7A7^3t^4MsE4&mED|MFqKti%3CcWz-tuMv0$c4DW_87n~~3yu_bDKR%+2 zKg#};MX?syx8M%SN>O`|o{~CB&AzSl{m8ypK)KV<DL<)Ec$Lm`VE`P;dwkaxu{iTa ziTSH`hNVp~6wV9wDi3pia~h#sy+lP=!5TB<{XRpxDe)HjhFpC8>5tzuj)?Yxgxq@0 zVju*z4j_?AVwN166T>$_hihYLmz(Bd%S>UDV3OWrqg0d1-n1=yX`@qg&@)zuF|(%> zvyoT-_`5(3rh$4^jH_N;Z=0<)c`DXh`)~WK?|^*4?;-^O@2}7_=0;h<gx$<$#c#`V zE12H$g~+aGKYYe&PDXtJszi|oLnT=-a99u!XlRiCJOv~_xNf5e3<M<LKZjxae+~n& ziUp*pZ@H?9qkUh=pUOLMvW>`8X;q;xOK*^ge-w%rmKGYl8TS{qf^OvGJ?{V8_Hs2n z6Fg+)$u6GZ5;%iLoZ$-O5qQyj*+m^*-)K!K%|qioyXNlccYVs;;qG}}d?*NjbiyGA zlVrvz+iMLH=&kw9s@xm#oc0(Lgy_6FfCY@X=dvQH2T}<{@AhUhx*d>Exama~A`O<t zPeb}RjS7Jh(mEELc2*zYh-UOVsHb>`2NhqWxtc4c+GTCrij|T4+AQta`%_O9hkBcP zr1j+;KBy*X<`YG%=Omk4RAI&K(*1Ol{fIG=El(R&Yzylv?UlZS8)J+PdNu2F{R^0l z%I;^t-(d;6@qz!SK9FiKim_2gq1ZV)Jv4wq^8~ctTFm<Pe9FrCr`@p>%9loa_HC0~ zOA9s##RyE$k321P$&vs38KOQp_Mdl|0*^+T@RVP(h=hC@tuB2reduHA&qPTh(!?)d z(L0?n9EX<#^J(+-W{+jb<pP;CngM#)=TkN5M&0ZzX=_+^y%5H^<BJTX#p9`GPBV{Q z;9c<^v=*8snnEvl9GvJ5C`1i?k27r2^^*z4VKvSgFCEVD3TTIQ@j9F%h_@XkoVYf| zXsHUost1W1%Zu5$6-Xu%KY`ByC%5O&_PC&UIhIhB=r=C+<=l^IiW;-lMnGG+wEe8= zxZH-DY(2PipUe<)+{wzr;dqQ?xGLk{1{%5YFD}i}vg1mtFr{8?%To<Z^NuKA&)Yit zfL<_JHNZH#Sw}wpxJtMMsuy+R+P2U9<TRiXQ-T=Jg*ExF@8h-=PF=-y{>?R;dhIB+ zdR#Keem4GG?N(a(&VFN)7=ZWUV65+jnor4bW-L>t3H$r;J+wtdiqSZ6dr!cpMw_qR z0a=>Z>Rd&cvR~mZ_7Yom+{^;v0*fxRzif8+51bxoFupNdwtFECCs4;lJdM1q+gnC! z<80e3o}rz+1<ppP^J-B>i@t~_kfex62FF3H>Jr{T>q^om(x0|35CFgGaKDKip;j+C z2md{8H;QCAAxRS-pUOC`?&&YZ!9E{BDJclw=sv1}8?=4Yw?Mu!#|75hQ9`ZJg3geB zqkTuUTg61Va8Ltr#%+okq$0;X{A8^4SW@w1lG0TvcKL6~LjH)V63h2zLNC0LJ*AK! zX%=YeJ{D13qxT2SPSH3kF7+iQ^$>_9=w@MbmmqTjM-gvC<)g6)g%YPTMuMW-Hzxn4 zZ;1b2&k0V7Gt?*`Ae9s#AjJQpXM@$Bz^FEim+nfMz_`wK%Ol=~%)Xd3G-xxIfiyJC zAEQWoDB8PZEstPS5wE6vd-7(o(h9m%^3-x)E!bANGPk18vV{c{?m?kKdKlj`JGZB^ z);wy~nLZDzi?8QCO6}$_>64tB9KSpN=X~Gmu9N(S0@v#{!|z#FMwCUGFJ<Z#U=i>- z6+G+bJN@ji3aDE6_L>kU^g4BZOUnq5@4s6zWeW<IHhxOZkmWOL6n)G!;F)58KLeXE z>99gutc1<*vHIydG5|MNTct<QX<4OL?-Uk+;Zhdi&$l7kaEG@zgKno@oOM$4GrytH za1Vk&X9$kp?FZxig05eDrU6|x;Hv)9>l8siaqnUD8FY~jc~)hS?qMOPcXN29SA>ln zcCA|Pq-aI&hUBgxxDWv2^f`6!Q#wi`Fc`&*60d<UZyUm-?Hv=<T!Nx$7|mcro-L!{ zjA{^-ve9^9DLOkUwnm;sFYZ!dyAWHZ$>s=Kqus2(heWjBvnYC3r}6XxsD^~oIIDZ5 zj}(NjP%N&V7Th;W?kx~MQ#&d*Yn-GK-_))(y=z1$(YKHHYP^Mxu0+OuhBYXARZOi_ z_sSk!sI97R)4SoJ^+c$1s1c}mYaJn{k<#2KdpBrdse7sIVWnWij>eklswtMmqAhn_ z#1Zr3v#*Umj~6@h_i|$cgbFxSYL;Z?I7VjoL2kRd-L2dvBQq0)4r9V}H#ghAw_56a z*H)jll^QE>?ecsd{e4W;5)e4UXUxbrHfPjUF%rt;_$?e(O02CgEbrT&9RDnA_t2tk zZqJPfLn*T}&;H%qa8-BorE0CI18c?~GF_;ztLW+ZRfouXc@F0Rv^_sQU!B8xctDC? zWoi=+?H{4beQiIvU&OF5b(P%h89T>^<=q`R9XP2VO2&<SO7kZ%CCBBtpk&ivd0v!2 zra=9wlVCxQ8rDINvVN*$q&OL#ftp0G3OP+MfsC~f!}_(^to}Dv47cYIJX1zAX)n{E zJVj}De`tNW9M^*fD1%_x%n&z0ZV9Vu^9e7>k84HO&C0dEYa~{S8;QMsJar&luegcF z8Ctv(=I>Tllo<I#!84l#{nKMku01IF0rH^9zfr_0TRL6yB+tjC*n5;swF_kUP}pyy z?q*XYo;(>|K#@ezPu=;938xq01uj0=6kpCPVO38qpik8Y@VH@yoIO56+e>XutU|mV z<)N0}3msacg~xKw+X|Zh`_4Ik`nUtpY}s;v)&M=gcmG{Epsgca*#(V+7Y$FkRDR5k zeH(8xSQ>7>l^AR%I11m=)X!-(9XEo@DOMbwT6wzHxIidfn}|NiU{^XLHIvR?<3vyN zH^68?DpHybsGqpTj?I!_DVJ;_%412s2uI)rK<j#zMMX(q(k`t=$C@6k8i-RLvz=8F zJaC$fUC9)ak>`@VNJY4FrvL6+H$fC*v<DhIJgi)cO~wECr38z^!olz8!h=S*X`AVv zq)eL6;W`yEALPt1<us7rnkALP)LWEb(oKdk4MAf8gfx9flb0c4e@>pFy}K9hmZNc? zE70~T?tQ`%PB2SmVkkP#L|2UoRs<sPV6pxKgW#zM%cSvYP*)U(tROKKR~}d7Ob!gR zWa5PM3SA3sB1Yr2@5pCat#wF1m@@0G?Ut&i*WjcLM_ATLy=0k5;?nCSN?^2x7jM!n zVTTF;W)o+$4MuS&;A)!l(u^#GdparC>nTf+2iZ9jXm>=Co$U!qbc<p0yuE1;^@~*% z2FxcW(xgg5&MF;nKDlLc4L5be#?#YdCTVIZh};0asO1;fkx3_`Y*l@=V9AAcoTkRk zQm?uo{V7_?3Kup{K6CWXB`=zSP6lo+5(iKqBm_ExoR+aSv8u?*XL_am%)R;$M8jL; z&dp^3=`LO;@yG$G7iUY{Q0WCSPH>FV=F!|os>Jt9T31<CB_bauh>iKKb&T_F7Ivrj zj<`?#AmPCt2M9)Fon=rdVEZB?Tzye}%pWVj_%(lP$^M4tZ%{(&CRMU=hD5Ug52XX# zBR`8&jub4P{_IvQsW`PZG9O_>MSw~A@7!Vg;v*EEL;n4n4BI2udihLKzG?mncBkkr z&o5)laJPrO4@$BE9)I~X;xT^g`5rTAwWX^}-9m~qw;(8S|DM(HD>d<(d~vhl?(-v1 zqF)gxTx2}ue^H>)W4tTB3;8hDBenz<^baClXmJGTvK#K#*uHoG(F4hs99Y5XJLLem zgYnn)+72<4%gHbthemDYpidtfB;+&hEQL&oPT|w1&>=;e5BdO^gNoM;Ij?N|<rnM# zk%JrPje>V%7@RvEb`727q{`UCsmnPc$nfO5#lW$hBTI2tyeKNB(qWUm@<70P67Ae9 z(dj-!`+zy91+|!)TH!PIG%n`Yn@#Hu)Q(e>MZzQJcLU}qjPH^B+%}OrbmpCqh+=tc z;GdKL3Bhr4rG420%vZGKJ^Krvo{%j~h&R=JCVYSY959wPC|FltqIg~_p@hLXYEvZ6 zpaHWtj2yFROOO~)O=(Z4p#i|3rJ0xB3kNi(1QMl3D?NH3I>^moSP5)j&kj>j!l98i zYC}b&#Pe(%r+<Xe_JjXRAeQ#$77=Jik@_l395B!T;+3*ah|EU5XycbX|0i(Hu!pR} zBt7l(eLub8%KzRraHzrN1E>Gz`@d)V%6_o}&X-xxzRRU`aab@_AteBj4G$}h<1&6^ z2;stAmDAbOp~c}DMFR$!iGD@L84QK<U*4+{t;w325io+6HRzb6Mufo$R^>*5JkGHP zVg;3C1cuw;F?cON%Z7Wo(0VVgPVC&GuL0h-v-Dz*eA=wQcG*%BZjo?lqvU`fNl7ik zw_=1&jpzemroS2&CJU&>$*KmOmsMH30^$am2ZZ;$Qkvo{(oX)@OWt#G(k|rn=2Z0N z5Y~hh1$a<<pci=p6@PF^ar-=YW?baE+6Uc69r<3l>C(sZ3s8CB3YR&PV{bYPR9$1X zabcS%2_v|OhKLN$URPel+jr3`rZ|l!21W~;1K~=KK~<#**nwnLCG{V^t4{kGJjE5= zabV?sD0bue+!Rn@&+(gSQwaK;*aMw5$3qGbvwa=BDEmHs(*GXImZ`;$9Nz?e^`b7S zO|`U)wUOPU9RfyYGz+pQGHO$C6-cb7Zj$(@hg%(SB6E6qO@0)l67LmK3bzXBCjA>Z z^qu1G=ERc*r2!aN8JIH<CIzU$1<Lz(KT=wQBVsahATmeq2m6hpXM&%T5l_z8>lF{y zEx{gl4{taG-ZB`{v>c{eY`Fq8@l$=ICVjXh3m|;aMs|AnLeTmeM_fToet@vP6M<KT zB<7{gOKSd$*I=%tg4X6%4}YVw%g4vu-zkoUjwuaJ$pA1yy_+(ADk#763Zbhsr*Vb8 zB`dVW31ue=_)eLc97qsvv<XIaN*wO930t#%M~uP4BgK(Q=!YzN$?(;Vn!y)e%%4YD z?Br)x++xBMSADRvni6MFm$k|4bu8>g65GTD2T1an>-?In1UwWmuhF_JWd9<muf|-5 zmkRLF>;TeHEkoOGGPgj7oYfWN*FP&8Sm@^Vbq8wNl>S?@z9zD!^<WQS_gh8F7Q$Sn zWROUDhcihp#-1Q1yQd~U^CWiO^18_kmaA9(@8M&kSSdS0KgJJFYh=^QOl;mRa60%^ zpM})^2|5pvyXivl6?@h_g+h~i_G^M@N=bLuXh1{!=XX)0L-|8xJiJMF5Z_^i?kUn+ z2Z}O`e=f#?{bSVT3)5J^3@!kBpm-7|7;<L`HzshWCcZ;yP;>9w^En!#8gS<U`Ms6= zO|Z1kpV1fjBwKh%#L0a}-%xeb{f4UM5{zeh=qJIl6R{e?xG2sRqp|#Xx}tUY2*OYG z4d|#bbXcyV!lq8-D-8y<c~yl3$NdRv((3Zg)dMp<ysn*0bV*h#ukTJ#n?mY?#7A6~ zJ-n)~6O_g|*wYE0qbq0i8p9`_#R>FDp2BavIvvUSYnphLnyr!a^1h;@a)zQKld(i$ zQ|w@qt^?KhuA(DhSkzDqMSp7h=<cU}4iq{{J@Ao`r~c8~0ncFfL_8)K)x+fm<ORaw zX&(Q8*AZ2SB<PZc^{SEdB*D<p<T`1gzI@BhXbX6W`0PqgGjYYi2@qA+V3$N^|2<IC zRt0kX*aJ?Sv-J-=@hR)EE4abh+)de@xzvN~^PLhz3Eupq$ZdjP>I+r6Q5<w60oO`& zD(jM?)_j{PeVoG4zoaMa-MJg*WC}87H<4~Rr!Y`F=8A>m<g+E~AD)9$4DWP1L-VSS zt#K4!w&3&8*_KiM4~ohC;Po}BB@ixd*;C`zdqN2LgE0yV+$m65<eb-q;;l*5RjM@h z_MJl-Z^~z9$>Ih|{qo~>5C2j`fqJ@z>4kmxyq-D<EE*;lBUvZJ%U0}9dTuVX;1}$- zc!d3%r4}u3J%_PYs82Z$)^P$Y<&P$NbWhimnkVqQjG~8}%>%c=0WNy%fic-}EA5V* zyrTa$MYc}AYi#viBf5O_4on6OHfWuTw|MyZm1D?GR?!%Rra3!*14oq!;I@aOc&6ic z_Lrr9y1~NgXdrtjIl}q`MklQ(=DMQUS%-hO$18R<xB7mLp1-!?pGMlGqqh1wo(`{$ z&%9`<@s#UJK9p5ZDYotOZfLd6LUk|YnF{BVCcdjI>u)!=ePKEEw`^9otR44kwSHRB zjJ1OD{5SYEys~%-aXT&rK$FC7?Nx{MH^p4X_FB9_ILAvGbN9KLs<$(7G}1n!;6Hde zftc;`=O9(TE|e$#0?X+Jh(IVLuc18hR)o`T9K8)|<|{FwYtZBR67^EjOi!@25a=tW zf1vhYY_VC$N+fLHhFPr{4#iZ>7I>8k1D4Vw+OPubXTGh3?>kaAK=8r*sl^)%(wD2* z;`15NC+QZ5yu+cm8)|_h=K~AR2)i3C=YoAN%DRTpv4D{&I?7+HRq8+7@|4i8a6Njm z^FbA8*&|kX{D_b1vh&Muk>A8t&m=zPT;te0VTZ>f4wwtm3zEoEQzl6KxFM(7Saf@E zXYY?-E<#Z4Yu%msfPpYtS0Z$V(0+|jDRivo1aHvn6k4@vrD)L_nvZ@FCz_9HQHL2Q zEGjSZA}YwYoE}{lLuGd0y^OLzYAQ@_lTq>|wZ>_5qllv-5sW&TY2$Yg#4PyFS7YBp z@j{vaPixD}93#u5n)C50QxI~p2`i3$OVj`{`LiL#XRLpCzy)3fJy_rNUuM|6<RW|_ z>}|b7dk3hapQQ`DWg+5Ef`k<TSpj6P7iZ7ANVGSdQSJ~mvLiQqS2GW2xkM^vvItM7 z7xjW6&1V-4VG7uP-$1Nch}wyX&iynkODsW{RaFHgHtPNe^JLBh#y}7$VQo^)5nS$u zX*_@=fCzbV1Lvn^|LiBp>(ll2ZHffJg=8AvP~J$h#=^FlRvRYZ=I18YUD-3Y%LsL! z4yicM)Apce+DS#%+*V#aEKYTH7{=k;^ur&od3GF_3EWKhc5lN(i8#0~upcDC!?X1Q zDt5x8O$U@OaOW1FvBC|CCzxwDX*DF^G~e>{VtXd3fh~3#7K#sblI4FGT>Y3uK5%{M zaW+QSB2qPtUw)~1kZQrQN%<WEKYu~zAcN1*bDh^o{T(t`8vuP6yc>U{Ok4;YcvpSQ zEu4`=d2#h}0_SMA>L}j+fcPZ$`6a~$gyj!RB<0p6NcHT8N6G$GJZ&f{X>_7blQZ&- z2xSI61u94&pX5OJ=kQ>_rALzsh)=YnFw#`HTI4mxGi&1;#WL{5T86K?m)#idPepKr zD_!i-<*{Xc>q7HD_UZ$45yTfiANf>P;0Bgsq^c?cV>2Eam(zI_b4EBrJlQ|vdb{W) zlHWG)Jd`W}dHU5Oh?M@qXS*3S6Vx9oJ!RFCKy7uNOC}9pWEO8EUU`eCnk4gf25!%x z7vOODgkPyduEewlhXDPxUi4#to^AK3M+7W-2OmetRul~Vnukrs{}ddbFP-*XgY8%F za-PID{Kp+l@hSVc2*Y1#N2wS$t?@>BmH6MEo=d|qNt@pWI;8~M|NO0!rmbl|LweEN z<rg7KZ$+7g6m&$tL-Tt?%7Aj934bH9AyUe_SUPMoxs&b2<e(Tx!_8RepM2U;&KrrF zlO{y{3R>W<^yB<-4|n$q8_$482C+vLfNKdOnuJAAa_P>hfdK)b#{dDL`5(|Uv4)uv zNs9m!yA(%}6o~Uik;pM?4IvT3koge_p@{8*#Iz>=ymlDfCLmYXcdJO2h{mtLq;!T= z$W3Vk9Z~S~xmh{;m9o$EYWeKe-Av^FD!|t9a6C)<?fb9|pCE9zU=CtCN&+#j)&w!H zQnbJB;uVjVU$g5?BSY2&KCkJN5sdkACn5+Kkijr&+@bXTPH+wAl^dK^SCby2=@nt< zQyHysG8n8;pK+dSP`=aYRfztj`}28X?;p+eC@xy>Vgl#uodr6mqw=i=y1Q3Sv`(-7 zAg>x-8tC;XFZ$-mc#m4>tpoba;OG6tFBh)@yzQHDsE^LVVl>2wS15HqXvFFlCKVb$ zg1LO3gg}L<ewUPnV=p<H*J(Y0)@4}o(@SfR^!~xr<?et+AV@KNPxYlWcwTBwvP>#j zFlK&o?}4T-kg@s&rLT6Emd0bh2GrH_($*TTgYfLiVaKzy#8&e?sh*!dPrnBObnoDe z`WJKccmz(5JuM2M4Myg=%@}GsLB}(2u~<rsME7TVb$fXU+re>qqDrCV^6JX&W>N|B zSP70J%`Sd~^a&%VSm`t1hhYu3kUjdI)aIYOSbWx6f={jAi4xhLK5qRE;)i_lkL$xp zp##m0)(GrBwcmt(Tk+YSk&=e5bPi_`I9c{QO64lNntY&VqVlMnHkaskgi|#De@(T8 z<Yl+3bU}|8BuDHv38HZH=n0$T82%!Y5>taln`e9IhW3(^cBe7DC}-GP0&GivY{pD{ z{DgRV#`lT}mjYM=qJs~^5nge-=PB$++bK(EWQ8t9IHr_lka>q*yer)v;mxi{ea%S} z>4;rEW&b8w9gyk2olTvWHQ`$Tu>t8~vqi+#m!J()p?TuhHBzd7=dnKjOD?`q7{9=} z^iZCjSU<xr;)5HQx!wkZ1mMMJ4(**BGF>cL_S=g1bOQ8hmeS2>Yv9ovUrXc^t<5Od z_rtgT^faW{22;^b5qlKGZM<d0njXSfm~T3?uvb%}*pKacuwoNhb<jZpky%^q+ki=i zz&=@ja06T|f;|2<sA`9T?eag9DvuoLnjNPHKZQYIU3zpDLO!w9tcn9=Rl<cv#4VhB zP+d{b^zafR3GfOY0-U}eN0jf6<w>(_1qdUm37xa%IvJJSYUAU^aL2t3*uIjzo)-dd z1z5BKISF`Oqpfe}FE&4bP;lW^^h0Vef&BwKfjNdErA1T`o;4CDAi9A1r7PTUHv@;n zD?1!H_qP+CqUJ3vLjRZ}__1&23iX8x+mz}xLvHz`Em>jzthiG!kl=vWL53m`t8FUX zw==o-3_8u9+0kT0Zl^$IAjh><B)FRZs^dYhNbY%ZKG{t<`Xvnv7O;On04ukg*qi+a z)#1P{&Be&o44iG0koH_Uuy5$H(~r(qzbEJ=G6=BqkfAY)qKXeyM4HH_Iz>aQaSMyt zuuwjcA9#>im|;*GzOXCP)ZHR1dC6B6%Nfbm5G3SyI1Lo0Fo!e!VVvKBzJvXlt-%y0 zod_YwWtG)rBnbE}GxHmRXE4gs8Rn%#=#R(aezsGvF{@V7YKnzX(1@pzfM!=hs#ZO{ zLFu8kIH@DIuro`}m`g-^M^`S6_(|&#J%o_h)O%Bv&4ty*rSLQtE;a|HK(OJkD?X1Y zj(B7BP~eOvD}B0kt43vEbT76<7)Xj~mj9L?9Y(`mMFr?rl~^oBuBzmwC(`0vnOIU= zGjnC(Z1jp)n?Epl>%6<Sy`JW3?G>DjiU?RPFFlwYi}lewRLQq4A=>3jXe_0TA*}1? zbKqv~RY)0$q<h3QVuh#-!I>*_x)GM42qM8=^A_mAFW_`eTi<-@hrRjBnXtAo+i^uy z*<Xg&)PVza14^IN6B`9)cQmT-1Jod{!!)scnoZd2u4DB;eEt}I{aL8eK~b}S<#Qte z@uRr9>?j?tw5jn{rrBKZHF^RCPB0l(*YaJl<`aW_^ybUeBY)+V*rZAZM?{U_j~tQZ z=(dcRqvZ`5H5!U4g(G+Uie-)%jvC3FGXeN>3LsXIsZ?V`U?X#WnNNA5VRCPXw1D}V zK8mprv?`@0mGef&wl*XcZBCDlbxoloH6q7V);IHLh9eK9V4Rw<=%IP=9J_sH`5xn} zkaT!$OVEz1!~4KYB>|;yef`71)3#nv3KAnYb8cX3Kj@1%f!`o0=c-9lXaA{zi&e4R z8aQcOOf4oJJ_GGykoU@*m0JuFp^0mseJq)oRFj^%5rJ4q?`(vVcOz4bff=`8d`nH^ zTW(30Pe{3e!^sbb^3~t)IOLleD)%Pg9-3A-HTn$Lgnlic3`AsyHpK+@aOD6q&-FB) zWuJRCo2BL2$zg8@E!gSpaJ?ihOX?5q2SyP}GVcP1m!_LWh#{K_N{(4}LGovIR37(; zx;nLUE0oPk`B}n?Z=;!CJe;Yv`QwxOl&R$Va13F;z}WltWvQ-cVN>0oUqN*|VOdqF z3dl62T*}A@u_VzwA+w`xqmQ=FaSTOaTe4-wn0lnEl%?pg$MKqH<c$qr+1d57fStpW zXkY~kW8!S6d@0RT>v!pDCBi}FRSh+M#4c7RF%sTr+(G39=>ru;g2^OTy2@%ZTDqc7 zAL@_zX&AT2zSR;uS|&`|Cg_?*f||u3cJN0ElcxBaJOm~u);S~8YcbU8A&Xqo%sEq9 z0*RWC?Z_CUpL-sZei^R@JaS^PfHSh>3wsC-L22nQRdN1%(E(Q1(>~c7v(WDZ7YCz6 zWads+=wYSGnl#VJVfZ8NzixPxR9AfVF(hM=Bl!HF6#cJQ(oj4i+TtJja%v*}v|#^A ztgwb*gHMq(%#bMtsXW^+h0wR^MJo=J7SIneK~HG+xybtCd45*i6K87l0K|EQ=J1Cy z&pTngba0mD+F2n#sYsHL7n6^3Xs=2$)jxFct>9~=_sW%PXE8e{Wj8ltxdc>}_X$V? zSzk6#l~lDdhThOPN}V3;pN%cN@N(WXV)xT&)fUmL6pSDEGby8jbp10L%Ni<+eBpH^ z?@DPytB*+9Vf3IYW^HiAfp-W=7YJ1=Qio9wk~NvuQu}Evl7(hif&!2P6?RlBVnmh5 zC}&#x%|WwMB8R0X$nb{X_hhb7ZFbLmi)fg7+Yg@UhA=rU&wo`PHNlPr!Ep&CYJ>QL z3SlzpuNd;Yn<r*qN*hR2vc~UQnMYc5l)NgZi53Y(szX|-=x!l4%uvh)!ug>stCM1y z*2pil%15G{brz~R@~>PTDn1bEar^Bbr(!K5X%(X|e8YR)4?qhedprzyh^19p%AkM* zU<bE~h=vxeMh&rkUj(BZn>1pj@(8*Nep9|tL`O%zZodK?B4B1qv1NOmg$Yi1S$Mol zBiLu>XSML&xNf(w_5fdBFAzrf3GgFH8OGeg#^T{nEcz?Ti3iz1;H&O-Ojzm(ntFH5 z0VG%|qoiN?x(Zu9d!75t`dqv58;>JE{jI-28Ty$~*tD&>ZNnaS8%^EPusZy4P4>=i zeUB^ErD@t~Xvcxe4yM4c$91t!mDY2$hSAX5?%lHLo;ET0hI|RnUxi;H;uO&e^1TlE zsbSCQ8Tv=n4z3*|{F29e;-97FI?p-n@-V|1^&P{?)#C+R>=k#Z#zlxMg;gj(mOUPi znsX{__(4YK2_9GR5YjCDFH@;&_D=uaX~p4k_<EkndURNL+ODF#Wb{|9Q;=11BU^Bx z??tO14l*lWGo>3C9LKh@Hyg{T(k4wupY}v^UMM?t5xLEQ)F`z2Or|6@W24Ox`_09s z$wsbHQdCZ7+3*PX6nsa=Daj$gfl2P0u!N&36#kbojL#j3lq?jRtSm1Z1r?=dA*#$e z1zYxy|Mt+c_80Esyo`IAiQcxcYNv!Nt5(=WwDAN56!N_th;exYQfJfzr09@<xiSuA z<%d?lE1pik5#A!By<E0T;H-$Lt5hSrik$&5YY_Z$=8xZULs{9A7Nn0r2_<2=w?av8 z#tablgxmcDqw^TcAlB1s(bG#IdQ10d8W}5Snqrz+QvG8d)|<H*pZDT|duuex*uX`~ z4-*b^#H{=~2m!;=*)fodC-)`5cbs?sCQ^?=f#%M{x20$FlEt}ko*O-bsmh~3KpVU$ z?hWdHXV`GUAO?AK2SsQgAfhR8!Ysh#?H>|i_#9G{37J0`LQT@pDDXij>5w}A$i1Z{ zEFNZYQx?Q^(KFgtSC^vo?dsCni_z1-<;Ck(bUIcYJXZetFFP1w>gv1+KF`WgOo|Td zj5BV&Z~r>U_f7xie(vQ}{CplX6>H7>#wq=!M>eayB$rgKm0cBPB~zM3(NF{sr9HUC zS$akGKS(78^Qj(NNVD=zSh{Luy9V<`%p)xQ$fuRB8hZ$43p;`H&l)@WQ4hWJORvgV zJ+a)?J@NVgf<=W?5$?!3X)GoL?f6XCU`RIP_rUa_dlwsRsWx|f{9QH3noX}x`5O2c z{s#rN9`5c#Dd3uT(J3&1z|sOJlscjf{S&6ydjRVdexr!vgtUe*EOd5F)G+3ScStT5 z&z>E!jG^<F4eXebsu|m0+a}n>|FKOC=7^xe-yz*XD<ycmh0`y8&@p`wCfps!2)iWF zr)5eil@s<Z;ehBA(d#DDqGHM_wb3Pea82~=B$h23+^Q<^1a8f#i0A~Uy=Ah|hTxru z1*Qo1rPhfkG||(Pf%#=U{vuH-82c1HN3MCg-FAND42WR6`Te3V9DQeDy-gpQVe1z* zb_0`4-kNdmYd)A(e5o${*3(%ence@ef^)O{f<y6(I=?y2s<mkR@=uAuLHP<2y9zby zD4Nb%XP<-bLwn3Bdz%BW@mH<iUw8R9J*NG){l<XWZ@(z#EM-*o{Vn#ocJwIE1`C{> zM5F*`-w0&+oF9GZlZ5hao;euHvB#k+`pfp%dCD#2Yb?pq%hlEzDO%X4a*tyrFeNG0 z?YPFv-7~$H$!wSTJds$o39u*J4sh*<%SMZCEe)jE3gQf`Ym&u)g}!7&mW(~iet2@- zSe)pAG-hBPAWufnw8o;Z^~B@ztB;}rqsI>_rGt3UnnnJ<>uNULt#+%m9Xk^Zk&Gwy z^yhH&gs;Vd?X%c!S5`eQZ(sQ1;Lm9`J6C-&bJjYS6{Cvf;UfK{>sIqWNn(EPT?da+ z#S(TT^`{dBmNbHZy~aW%>V|I8Q){ndN3k3#-jnlk{d!*;4B6-_Ssnk_zWKE7GIRN) zva-MacInufai{kq)AEw4j`ww@`XB9-yfyLKT%}>23!4Z1q|)Bu^ns|XRCDUMh6r7z z^`!WrUT@HOYTU`PO?sb1n8=*Kx+gcyjDcn&PyUpO@ylVr3%u`21s7ukiL3<=lDdV| zUi|VaTV9B=u!~{IzTEEi-VFvm+O>ycG{qX1H%mgUxb7F>Hm6-k71AX>OlEmpQni6J zNxVZ_Ts(hHZ0S(e*ngw{#MvskgUT#7u+T}W|MG)#kS7bQg_E%6*Ra;?HFM(O6yy{R zP4;7|WmN_6HOS6h{%l}36<(1=2p*TP&mx<L7Y_S~l0Xj2<6|>@PTDPmO494Gs$90! zu=g2j&C0#dG^y-wnwy)V^Oo&L+R-0#At*5MT(%;sD^bglFKI+nftuv5XRz_wwW!X5 z7yqOvviXCr_*(rAPEVBA=}T56p=gq_D&@J^xQqdC7<$1PnAZL%ES2kNLj2P*8mKEr ziy>V`28t9?(j~kII=J7u*$GC|;#y<v#xu!g?n$xa@w36^;vWpH#h-SPTZyEP0m}7w zv3$!JdJT~!7k?fUcP{7Tv)U$b7Snj>h}o`6{k(^Mokg_qbPXPul9QBJ&%ob_k)yF( z`-)J2^3ar6-WXx1G-*{{5?4I)={Ys+4n!MD6^3Y_<{xVbdFhVy7=NM4vZZscpj0n7 zw?`rTY4FDRzgOv$e1Sa@{h=|-cfXLW{Mv1Ek9-F#$LwnaPr%KM=<0+qY*VqNZEuAb zB&8b7vh3z?GiIo2NrG#W`7Gk@+-7FVJQ7fV=?&|t*W#<$@~Pye9!r;V6Hg6W8bykR zk;6C~0Q%)xitPPi33oZz*!8f2-!lx)Z)lYuOh{4fl7KB$@R&ibGqGyppWh5Y`F8<! zeW7C!TTH1oAKj=*($Ht>oXlRgY<=exiw?zq_?x@rW1n`~_O;48k44<vyAH`<#c~L+ zUAx^+Ykr}xXnK)bb`{=9-qY8ZWT=_Pf_Y`;Vi>kr9AeeLtO=<**Kz`-)@^4*V#&)d zvUGn#_|&L~I77}0kYT)d<l-+{R(EStxGAG`$0-!ft3N?BJz%AAH(!+J(U)C2YfY$M zd?DqzIY~JGVD8gC0K0dInIk+=JpBNqzrbPV*M#3mjGw6U9FG)5!~77E$aFY=tC#33 zy|Vh@vWS1#86bs#xgE{lU-1C(Hw&*sfY!<U17>35rY&Y%f8|4-pVUdui$h-j$g`BI z)`{<{Mcz#bW)_2h;Uw-{1LM$xtm?yX9t<mbJmn?Rl-@?<$go5&p&7>9VJL7o0I@eV z^8>#fb&sL+yKz0Dh3_w+L2Ai`Vc?RPR_E+hhLP6E`)lMJ7+>Xsa$nBb6(u@Jizlou z*-#TFMbI4LZ3qtH*@t;Rr1e1+JH{GzI@9bKfrmE4-1v)eo`7h_*$1>>^@FC7%Jn*N zn@Xvu`JGeow7qrbbf7EmJT(xPF}4BXpqZVyNO;Z6z&d<Yj*Yk>K}Ve?+R171Oh*-0 zqX<ij(e4Y68;6~L^ESvNnA?h?W%V3UB-wv?B-F|Swg{2sjm1W1uF91h{5M?-k>Mtl z+;}+HDvJ-=t?G(pdRSkB1oHil1`m0@6HO;Xu@+Z9&Cim`8ib5;nFC-w6es<^a4dH( zmywrc)V%H<_D|@AS{Rpw$jSJN1)BKq%irwyjik&hS_87vzGxK_uJ={#^hHK$t&{OH z@w|fFhO>`SK7ah5r3F%Q;2WfOa(Hkd6-qq0wU;<S*OwKc4JDN6LV1VUO?FvxilnOp zN7#7<M<;Gy;UEFkzTChBnhSSt9(P{<<UCx7qx8cSvdqzxcwRp##$7Z&`BYyHIj;88 z*#|#y&gWZN!5HJ|hyPd5oM7svHVenNnViyMqLd`B`e7l51iVGefs;!o&reVC+P{s5 z1%%cgrg;EK{31#fgmY>X&hQV$J4N;Y?URDLdG{}flCfo<ykbD*#PF`c{R`n6!@brP zyKK4UgEtRgjQ;@ZPj0)-{40H;N&fFsd6Unz6_q1_3bf*=V(){x>APSAA6Pvjd{oT) z9`XbUqg4Eodr)loDN>i0mu@7H*Yz^fzuO|9SwH2SVm)@@$9{4^)}K3b&{{Vx^T@Lk ziz=bPN_9CtG7dmX9;vs<scy<B|63<&^U+pKd31nu?U50N*|h&l+E$>ZA@Igv{+Ft_ zcO#10y#5(^Pjx--teCZn*GCkSS-fOKgHW0KU$~=raN+dUq~5=9xV9t>Ui+g>TB-h| z*V-D_Pa)OLfiqa9ecSnZ>p&;adgKmKg)R_?abe*y;a&g?hry-Gl}d0lFA<aK0?qHL zo-xC=+^u=JvFvFm5RBVUk}YW{vY!<ddAr%AD<qqbMYfuE+1bNn_;y9vSv!R`{NpA6 zyxkYA-CVIL&rfik$`(tupvS(Nr_00P@CR>FnrKWZj;S<mLH8GfJ4q#D1@nwYLR(|a zOINmk(r@6>(FOhDvHzyGYQjKk4NNh<No#K2!Pu}s>JRh}(k_@Vtr~l+b}ysiRNq+% zp7`Q{zg9+O?eFSyPN|2F+PSagc;W$X-7mAU$_Y~Ow60BMn*m%I1PUJ2wu<D%)*Go_ zgl%Mk1~USb2bfdxYd$AmHY`M35^+*C`t9vu{BeK+(fOvTA%{tfG*bCsB;|gkd`Uc; z>a?DNwi;XM$P$S|UrBgFYO4XMNy+tqaiIw-V@k#$d1aDj!}2C0rCEPVcm<25DGN?w zrM<?pq3s;>q^ZLqnYhE00r&BW9oLGQ308r$*!pwQcra_X4nucySn^vmf1S|m_I#Lv zk32xE$ryE=)Mh4FeU_Q>+HMBxRqkEUc63fhc@ml)BF=!+(QzEmHI<`P*R1VYjA^}< z_>r+iS}^90h=6SMWPi;AQ=apC#e8Zo@j~CAl5R(r)NzsG39CvTX4)<`o4FIBiHX7C zX+3Lg@oSPC3E|k~8vnD2e{R;x3QOCRp&zihcgJ@g_h5m3_i^scbo+T#=0b9>9Jwu@ zfx3+DMO*l+l(fmc+a<+7q}HEMul(8OhX2+g<jemH@#_7~1A@zIalQ_#bSRn_wjDh# zM^5o)azN;qrWyfpUGX{eD{XbcLg=tf1Y%*HLO`o)Ba58sson%rhJ`A1{_!G0W)<M% zwFGr0LGq7`rO5}S3ifx(#L?hs#OW{=vUR*lBHN=aEtJ(h1zU;^&2<HgSEk+tf;UuU z<tpWtc3VJf0^)0gm5i?V1mV59x(1@k9f-VtsLVAsxh1z-EyxMYgpNF`)ekbm%EQgw z%k&gi`YkcSATa?Q@%OWmU6j(YM`qy9T1XqZ8>>HF_H1B&L7`%>&Cl6V#l1<z4wE)a zTERH>7d+3$y>}*zftjyjYf0)>>&WsB^`A?z81pVShtiKnLUj#)be(8tYk$5%S{=JM zHa)9SeyO3~dq)=?)`n09DDw-oASN4JWJDx>?^XZc=~?9!+iMr*saQSHzGeiTB6`Oi zO2Sgk#3pnv4ezf@*eW#OtijyspO@Jf4s%+a0*|lZU(G7rPSgVgy!N@*9k%(ATuACl zABc9n)hc`vST=srNNhl~bqgc^aAOFHd0tpYD|<x?AwJNuT*Q$vP7{wi<y6Ynsm$<D zA#76>B>%Ax-~$En$}mumNYMv~Wc9*P(1Xee$aV~K5#N5`ZT(QCxbs5_U$w%dFPS&h z(CZL9$^LwVz``*OOJZEglX>!Yi@Xk=p?4G5LSQhs>`U(xdk!oJbf>na99V5wG>DU7 z>((rJ*D86BGALQUVCO-3VU!>1kuVlecwn>fiW^ICIs!qkDD(#9^CtlS2)<L>s(`>_ zR{TP0ar5nn%HCPk6`xd^c$Fjm%qo%NE_BtEk_tY=g<w!nF^E~os$*Ls9j<683XH81 zGbF>A5|LI-(HsAT7aZ_ScaZ&mtvD?w!^Jtq2{FhboK*g4q1-v{)S1mbJg^%WfzzY^ zRYst5@(`yHjaOw2$9n%OFVMOo8Y|dwCh?6^*Df}ljaxI+at_fUib9RkDH_W<tBL+Y zRnt^vmx{6dwSrPC>rf;vbg`5tKFwBUWNw>-2{x^};kQy}FH}dRcY#}sZcn^JROk2N z^b?4mdvDqrx55i{fQ82|)<v^PFEoUi`3*+OS(*6nfL|&>M34}u)LhWKB|EDiwv2%E zkt>t(PIjVKQZ!UI_SYg;{^G<swteB^PjdAOir$M8ZG~0Vq_wvG_d_SdK_0HvK!tve zuYD6{%w)&jEgpQ|gc5qkE%32A@d>1ko`~|rpcdz9lXvhN2|fT5?N?6ukAWDFJ$0ly zf_Yq!p;}kWMKg2&5{D{dY3)>+3S`nH+F^!^FEDNYI5^ieFDZhF1XeTo1Uxx29U;~f z#~&YnN1eqe^mRd<8ckLx82h$7)js(X_~TRNaoou+*E6s;BBHXiuK9E}M6DxAH@vcM z_8W=4)jN81@IpN9mRqmC&pmO@^Zo_$(D|^i9IQ1UlA|3!ScI^@-{zCbfvhUS@b+i5 z`vt-Ah`6Bp*9J^cNm`2b@A-%f)dG)D9d8oh=*Wi7&n3BttDk)PrCc(O_=OzUf5-`7 z4{8^}tvI>*>Q1k~+=>Q}wm|gRgfI!iIYyxyZLNFG9Ys)_jXGn>i~W&S34%Wfh9<q? z(Goy{6IAE{BMn5YEAUtbNR6if+>GV5rmvjcM>fz$?3crw-6y)h54^cJ$6Y-yf`LyA zjQ~k+Hki)q5$i|1W3m?+;cq^Viz4m9ZaiOxqPj<WCEunUh)4Z50zX%NE5pJYQ#(Pv zchFCvpwA{eNCH*kxL^#dw<1tqW~F~6cz<xIk+^~Ye=u#rg9hOepSXb9MF|9$u=r)W zSQw<<S1~fN4dG^2KP)>ygwY~8lAu>wPM(n^UgiDQZ)Tyq*);KE5O?%V1%Vsl`J(@t zj?~VEfu}nW-T+AFw-mN%^)PWsxB}`aIeH6;OJHJtMHD#1{kx3CS_xC=VGnv5%?w82 z#r7ef&07OIzQ>IYo2cG`0hSbUm{#%+<KFwH{*f?rANW$)Fv+a)-6sm&x2oL-i^+xM z?dW`x1rStnZLTBNKP_%VT^SJ0%?O@b6Hkq}Is<mZm<CGg5}+mAuM&U+F_v;7$R=E3 z_)xnxP%0F_IF$+=(bOfj6es$dbX2$$Lh=(J2R(tZO2}nG_Ks$8!gLL$2nduB>!I<M z7V7^YLxPb{SS*VyrLhs&B`kxG9OojPhIN(*Br>FAp7To`<ei=)SR)ehIiq@9rO1#H zAr^r&H)Sx4bU6xh#MrH14w1eu+<=WdA0=zS6-qqPSbT?)Jz<)i_YcVdqE-Jq%}xNI zu=xd(3m>ZCTLtv&x5!SySKb6ihU*XgNrJx-U!SLf6We;m8nB69@d1dw`jPwhh>x%z z{K&!&G@r`Gr(?NQjw5q(+@7SL+QNNElt+d{5tJDqd1>DfY5R#QrJoTLB){3-Hk@@z zl`p|%MCcK(SVD{uWD3o=?s3q+VqgKa*+gE-cGD7IL6G$%6t4_)d})$P1<e@nEL? zXggs!wAw~}{vRRV9c&;c?s|piORXw7jmNEPBE<t&_9UuOoLp%aAN7qK<LsGE^xq?f zGF$4)w`iW_Je(;osq}?@b$xd&Ykem@n}YWQRc1suergcI4@y!uQjJOEVs$`m|MDli z=3GGAC_K5yAL5`5JY+VmdFBoZhLPyaNp9)^cuk)F?8czdFB#a<zW5n5j1$9u>8^b# z_-j<)$r5AD0wviH-S)aBFZ5vE`pB~tlrRp=!LK)BE>V$K?>y5Ru9h?rVPNJ(;SSH^ z=+KWH!X+1U_b`?IN4eZO3W%r}S;~p7-pO74HJ#JW@xQItNj^_dTD~7zZp@H94+2rl zl^|A-{EB01fkxXQj3K`s6@J^RPP}>so)k9Ieh~g&wwc1Pj??0<kqe4&hGLW%{{sZ% z1{4H@E9HkSY0B_AR*JSZJg~Ux)ld7PRD*@IgC>k7OhrQ#+-JX0wuO_@Ex$6aq6AL( z0U{`qyM@t26UoTxYH>W1yYBA`ctbSCztX8-%?}KQa-=Yn>(4NCs;|p1n57su{@&%} zOLT5z6m43kzmgtJ+)hrCYsWr@`z8O&>NR$7J+3C0STi|^%g!(@4B$CBN@NM3uD`vF zrLA)2JR@^oH^E|Q<JYM$>&lzpGP(U(ELFLc*r5}w!y(gD4Z%KIQv~gR?#K}a8}F^M zQ}l+8peidEzJL%QPiClkoa<-&`d+7fUZS}WIUv2Mfxh@7U_P0B_91bwHbS72V97~; zhPn3JkN}36MucD`7$|WORYQU7DKvE6Yp~WTRg_zt*ST$jjP|3C>_w1xYc_j_$y1Gx z7tr*Bq^;*0q^TDe3}8~5U%+d2Z%(#CfZs;}OVvJIfJXd5v2>6X^(Yc!LO8s|{=-{e z7M;*|3;3y+bJ&J`>W<S5hAk05zOggu*`G)si^Chv=j~q|f=9iS_6qX9L9{SP;a)p0 z_<xU)v?-rD8~{D(^Z~@EbYm0hC`=RGB!)ChDp#pkdlWhy?>~t=kU1%w=@cnelk|}@ z1sGd6`gawX=k)7xa+PQ}znh)k|8+)KO(!{Af*2jIeO-6>Px3ua=H8zx2m|1ExddPj zurzd#C6gjnnAG%srnrYipdgwf<1k+ERYiL7#d6f%MgxQC*ukTUys=32_xJ1st73YH zCAd5A2f8mFSUbiMTz$Ah&qFT)`OpU_0RyWkBo4O^RZMSpY>4xbUK%5=#C(KfAOToI z34dN82n-H|1T8KoNep23%sC8U_EwM#;P%{~0MU^gP=}nQ2N!ESc6!m-_4I06(9+m) z>M<>84nTest?~QvGV87?>L{!$YW-+3>vH6N^TW>Ktu}DtxA|*zF3qG4GrQ!E*8R%B zCuV(CdhHgBqvSg1Q!YVXR|gZjzP_3gtBJ7WW+R%hQUeP_&e-Y-0ySCKu+wU+H*<2w zxEjc~ZfAX=+tli+RqG#6rW?OH=EE@{UdA6m#eu6_6?XH#3@2!&26Jg><<ngZQ{hvt zj*E_U)v1RAsSaqW3@yLeMeEhjNZk$EHRcnc&F|SFH7%8!+GX4DY};>)pQS}=E5$bw z*FD`%U6JGcj_I`KK31tfv%{@nsfbcj<jr*~;zS`}FS6~!>swl{<qk2~9%|ui#0TUq zTL7qc@_RcKv|{^I3Uk*qx}}A-cn)Ff?yg_8ndN$FV=KibI-qa*l&X^(;Wqk;<{f<$ z-$K{jqhT8^%=AKqc+U<|JWc7EH2DI;%Rxk;+_H0qlT+voR6Gb}wT9{xt90V5`0Jn9 zCFw%v(AY~0HQ<{6;Q&<mCKb4rEPXN~ZvZn^<<~anFKVx_DWMTv&>=KV`G{k@iGgcS z_C9pM0%rT%WqZ<wTN3oQ_GX+td=!bh_RxlX0T@c>g2)0Hse}Jh#kEE?b!B0C5ClY$ zfDj2m0;oU=LO>o#5QbNI#FAnJk&2c<#6U~K5FP_)jLirrQ0PI>3gOXIs1G`+6cMnY zfGrV`q%Z^s5Z>BB1q2c0;oRO)*W%nC`}_9&&R+Mdb$;x%?%vx}8$X{d$fDRq>0{)# zCC<%)^07#5$A9!{q#OuT#{E#SUH|k$4@rxC;N>F0vH8!pNs8x8>Q7%t)gZokezBWJ z3C>wA6R0Nk;dliF_v+M+rK}3FJ%g4F)@{e^m#+&XQIUVU-B!Dw!eak?NpAanNAE~% zR>*1@d(EdsxI2baaa&A_k1vi0t8ac{()09y`L#d8xEHUvT#GYQo^MQcY887{)JYq1 zt_cVUfy-9ak<ks0AASFESwifW7w61fcs1e8R|B2zPjMWBcHu+2YHmi#7vuA3Z>om3 zPCHQ(E-8zro5z>#HGHUd`q$YK@Ah*kMvsN2dG=3xkEGsUSI%;$i)=9G{?GyEB(m7q zP`oRJp?WaM=^2sO$*NYihL|K#(+x`6Oh4Yc-HOU++~4lYIvQf68`{F3Rwemhc<h<d z@%8f4lS}7w7Z?u=Dx;gKCGkF65)W}QzV&ozkF+~^NarWNF(AIc4yJ|A$<B&%n|^XF zW~aN)pXj<Pc9g_DRy1s(Mbyi8o$0_A{e0O_Z$LnwQpFA4=?ZJKFJ|X==BYl^m`eO~ z&t>}f9Yc2-Hws_sN36<_QyTML@#J4MB?9oQ^6(b@y^_?<%<Z@Y?s5MHg`6cy?PZ>9 zE<eGTocJy_wpr6$*pO44_I!8dEd2_Tu3X)_qhg*Ef%Dt!#mft;dgkJO#_3EnC3iGj zx7Ry`5WV9;wHDTaV=1g@J?29)VfJB5^D$O&SmtY2Y{dAXo6Z7PS^YuYSH8EF$TW+x zy^G82nyTyPl);)Vr!1A3FF#*MzHvO7#Zez-?BfeR+nS-6x%0vzV1hJdXxZn}&#cNX z6vPM6sKJe;Gt`k5x82s?g*6I20xWLJ_L#&<pUX!aUzL-}e(Rw7=xnmi7bG3mkivCq zq0#QH@Sb1YaEq$eU&u>51!sk8i7#3IH$&p(x}Q0^2ke`cU1*B>@1mwD`D`>L<Z3GY zDly$|wR=vh*?%SNQGn=?QTnY-X}@#7k-c`2NhYlhY>sp5PZphjoSvet&M0i-hWUFW zT9{QSpPQdo6wH1==$1u#<n0MMb*2Dg;IhzkWv5mZ#>tJj{KZZ=PeEa1VBo&2e_CBB zq^;m=-Jam3dfpv5f}U1h^w%$92Bo_cW!XcA@5xtIM!ZO3;oOT*N(bRpebEe+){vzY zqw};*5>h*yT$hm9=4Bv_*2Zf|+tx6Hf7Z7j`T+A%dr(Tr2&@iwk@_bsay|K03b?k; z2-S6#y$t!Sg2+=ZD)%)`2?@sCuS|@%o2+>^ZQIwlkJK{6Pqsl{GknrK^+<&IDjtU` zxuh3Kcc*o;wi`V=XyGmR=1cQ!Z`AB&aymGtrayheTDWiH=p8fJdoXSxsbL113hed! zEjO)Oo64iPpOp|>SB{j@##kK+Otu@hu4m;et5oNg@gi-jHBFnYiIZz)x1#=T&4GnV z!Yx{l1<*i;l)$L}#1S_P6F|lbyjvo^x*jaVn!-(eHpC4b%I_4274esFh{zJ!_hVsZ z9|0WQ2`foXu(OX0f_K3}b7yF)AcIg_L}UoRP>_imN>DdMGPXxW9SSd?OGP26p9+@# z4>|p2#J`FiGLaO_SQDvW-LN&+8`Zb;lZo$tLn8{(1`*2-6^(jqhP7Ur(0YIj93xN{ zdw@vXkmGIGH*y444g?Y3=M{QtYDk~<`z7MH9z_He&}Ps9=$t?Uat8eYAs&Sf2YrEI z!dti*Iw;)$Cl$sinLw5bo0OrzI1TC#(Lq2OWDZ4wo^-?*!(*vC;mi;j2zW42OoUFu zUVy+y;n0v76b}<X`dO5|?$m|K0W8!QA%K=_Xg+cfT+cy_CH!{87clcsIF+LhvlLiZ zor~3d_uV4CcLDTLodlPPP|ZUX69kr^Pz8zb=qMR*g($r_>Iaf4QK(m`2{A$=<SiEZ zj1fSZ=&job-XF)p8pM@djk<P-@Nj*M4F2^4N^8e;;o)%yz`ya9egrr_qR@DP4%)>i zjHum#My{S9fb}}$c-C-cf(*ichn;QK&~uUuV!C1cWH`wA1Fk-Fhbz5Uh?^pS$X+Ou Y(TzS~Xdo8@nTUZrK}a{fL*HNQe=4o%4FCWD delta 17568 zcmY(KV|OJCl&r%}$F^<Twr%socIN~g+qP}nNyoNrTl3!gY34uFuC?l^U2${ZIg{XZ ze$enlrOc(g5Fj9{P#_?}iO47fiRI8#z%5l=b+n%?TMpQXUn){mNiF^@><}^)8cjvj zb^%saRLM$6)jX+(9JZa8`xf9|xbM5FhVKQ63WmOCQNNecpXDui{JKx0rcYmYM_-u_ zfV-a8<i4&jT=<FO?H)7jC!c;NrVa$34|n_^GrRPtPF+f|7+G;9N)b`g`)2qGz;v!? zOx(CW>~e0KeY_AHrYK}^ZE(i)u>GU4bnLR&a6E}(E(fE@K1lEbIOI{<)Zm%f_?J)T zj?0Gx(s@|{LoFmfp4uqvkd6dLv2>`wy;FCn&~EaTJI}L%o8&*r<%d@?M0!UZ9{re+ zEt=J~S;&6MZJ^*2$luZ%%|Q!rz>~yIBu~1r9O{tUI8Blod9Mw0%!-G`f!xDJ1VF}v zK|HVOX6uoQJT}7dC5-4vUE4sVLY=DFFWQrNp2J%i@wmbAEl>RSSSz&*v2qJq2);6n zkmEL84Dyf^vu_&1Lx3j4nJjAi<Z0RD_-=6mT;J?#T{^MOqaF;-VX!U&@VKm@5boI9 z5t~`&_pptrZ+?oCh_l;@ZvRBVt~ob(8RbfyPNez{<wPNW;<U|eOX_rVtR7=TaNo0@ z$(%$oy#{_pg5;)}p0$VQF65?mDfUKDTMY}WL9%Z{iy5|l>;fYw{pF}QZ1t*5KKvEN zbN=9f@*`@cA9$@+no$1$&={}&wA*XBuP9hHjfIJxzE(xMHGis35r9wg$GhPC*K^k@ zlgtn{c&)Z4eky%ez{Ia@v$4<E8rAts&x1xy@%V~`53GZ!JaY5Ubq`<N(_)<qhQa!E zB5F1q#$KZB8kklp7Jgkg%OwCeR(j|uI@pf;1e<5%W_iRN?c$pm(7y6u9n?9(0W*q= zBGi2dupwjTJpGcABwVuG2EaOSrfTx?)1OviptO|AY%RCL?_7k_cf}nM_RY`NR)Et7 zPB~jy!H>7+v&%hyaS7cM@lPcf6td^&fXY5GkS3k$hNR4=Aomn@@kqCbP`+`$`2~3U zhD-R0OBtdPoR)q9=b}Z=JECdzO59Pn#e6cRaJE0fW-+lYD|+7;o{I$jK4VX+Y1()~ z@{DJ;B9WVyao;0H0RZ1<%<Yc}cMRtwaaC-?=R|M`JG16L^u~WA*ZwF<3FaXR?nC&g zT&fJE&vLB7?^BbZcM3nou@|{_pX(7`xmn$5!IqzWRVe!bl?t<>)61u?(HBSMEbWC9 zPg@=TrUj$E`*0C)Q$DJviSfF>GT?}$DUiEX?Ax)ypXU<sEY#HI-F@Rj3J5_|>)<Hn z#T?G4EgF_F_wHl)k$&X5?t7TsLP^}F${caU+mPJ@WYj1lr73eYqQ~uvQq`rIn-ir0 zH03;2;3sf;TJTAjTS(1a6jZcl__4`N*SOi7U0fM8-Hj3al~&(Ig-^)nS2y@Nf4V|2 zMqOa&#U_hS9z0dP9_EjN_{^=oVU=XTAz(m2e*Xsf&sIP#l0WFN!9YOd{xcf3|8FvU z2sl7heMMAZH2y|<TYa6X$`+D)Vj_Fx&f!`sYdI<SaA|fjs_;F473Ecid1<-={g>uD zi5M!%;}oHJS0kEj9(4yIFY8N=%XPa8Yp)-W7vdI45ns+|Ss160<5(rl!x0yjny#eI zti=P5?w}?Jf)AIL<C;0D_jiF%ubGr*Fg-BDOnez~@W>h|yfu3ZKY#l!JC4L&ec7{Z zSlwv)%SeSYh~tPOY4f7m%~e&5r_6~SUG&`z4O$)AtCRk>YK6?wEpEh$=$;3<L-XHz z!*P2w83RKeMkR|h>)+kNk2Pvf0eVEFA>y@4Ut@w!f+*{R2s9gQGj+SsbX__e`no_L z@{o2|f4J$A%d!kDM7f*vM76nBDbgV6`L;gPK{M40je7I<KRX!zMuONPZqHDDC=}Y@ zn8p*Lm)PWA;;HXfM^HodfAlFtuNPO-hbG5Lup5|}50wXZE}NTI&C{4%loR4QM(Zxs zp@?)Kl?(N_2u(aWAYNk^FW0crXB&X?ht~4c3KR(j#+?IkgeoSTCKP=91@e;%mC}R0 z&{`I8d6+`~=_3PlMB~}`PkwYT-Ph>BE^$rYB;~KZVK<$`G2$J{-u$xhqh8Xxet80; zNqmnh@S>jmd4a5%QfG!af6|06;gei4CpMyN!4wLkU#fr3PMUQ77}~bgZZfmw-Ar8C zoA8uuMclErVWhT{J%QB>^uvQslzfByU;QMJ-b~IRf`IT4B_g0u0;{#5J#k0f{9-}s zWgWeKCr}AD&}mT)FC@4nG?>H}kV$ok#U&AIC#3cz{Dm;t8x{#g-H1nBb251g%a#Qs zaL8ZawUCk{Q>9BMHHFW&NqQHZ#kZWr696)EYJA9zzp?3r{Qp{&8oog{vN~*cy&U8J zOx75Djnf)Z6v%)20U4|Fb{<sHdh`RfZz7L*3*Nwkzh`9$-btBXP5YnplfQ>#fil37 z*_W=Oxm=$!##6@bN5DJnoUh^SXS3D!h%E1!1Nu8}u-|U+@Z*btj@Zv`aq1c2@FSx5 zgCfmWW2!+BQ2Eqw_+dxv;ikY#p6zF^IQ7(x@r&{+)#|$w2<H7GS^V=fAA33q^Ceac zU|eENPJFE-uP{4iVf+)KPt)10H%%aAB(8)OtR76;)s)^--GHfBgBD%lob0IqE6onG zGGJ>!gp+H95n&N;g%Mezz$S}kP*G=iWNvW2k7N5cwbC~;HRcW`*+J8*_#dcnH#otO zx&hAN5>4$LaDK(J`rieb0i)Ctje}CVaK0=Ir+0gJrn)^ciw=5^>RvRBgUTC2GG}F% z_)+!1h@HrXd$LE_W{Gp>KVJ17-6MUPUU9lE$-ONY4<<mr*gzf6fj5nLQJTgzv&56@ z=C)~$^pHINx<k5YO1zBQs7ec{1O=g#<;<1B#(~5DFh<;U1ESud?8V4oXKx#IP#-+s z$dGZhL-D-yX}K*2%LaZ;gN}K5T5SnHq0*957y9J6uGF4b-e78Vvt1K_n!g**K!MN^ zb{<~d0nBsQ5z?e`EpQPu>l7O@(zi5paL_y<V#~sUdv<+-htD~McK3i1)lXYP9oT<r zmirC>)@=F6urPV;AFrmZj^5iZ;Mm|dK3Z*B@tdBF7a2FZPe^N37;RQ6V#ygihQQOJ zv!cp1k8^)pF_52VTnCxWOly%?+?bq~<&FlnZ)eJ`F-;y`vlTKml<=l7c`u-nhOn2# z4#DpMSqnx(-DoLB5a#S+N0AQEAJXAar@ZKaAKEP+7OhUYLvm3gBl9WDyq!fG`cHx7 zG-em^s{G#bYtcAvizLkFjn1ecTRdz?u1!Oe%iZ;D#OzewY&3GB*658SkcATeV#x9I zmxgWPLG&$2B~;{0oa_`VnT&BYL}E>adCavsN8u<dk@w;sPs^mD8w#nI$m4UcnEu8C zlUo26clM;r7O|L8ECt*sghFI4*vo*DU>FGao&bGW*r{s?V)CdkCKwEsq-|zad=}DD zI3Fes<1_%T1K+D27VFXx=W1$8A^_Kz=@D8kbvVz$$&VwADoah}y^Psx*z&EmQ-6;i z#)G;`bMFt#jV4!`WeoF{04)=)1uqaNj!f*zV0>X2X{!Ls>=tGaniC;zVL1|#5RiL8 z77w;9<rj5`tPD#bAuqHWmc!Cwe=Q?sMqgdY7++XCTjf4k*BDtvFi60Oyl)Qao5G9} z+Om9!_sTBHa^jhMIZHG0uO~iH3*y>Zcw^qu?M#D@q74Jn5#3vg#h%vaajXg`VkzAZ z6Mnnp3`Q(kKo7zvHt)2>5ptiSrOu->ypfV4D`l&eh~z!eREKLA&!vqZ7kMr#a|^Rx z7atZ;SjfWb2;$y9sg`rhtg1~_!=xHKw50(degK~ipfw3IffPH8D-$1^I|bvX&M0N` z{<~c>=heXOon)l_!AI3{3_lGNk~$2+=?>a1pA+|nLB?vmGLuyyN?q+5*ur_4bt_4E zYntSj4Bj;e{$RU45ye4tlsXV5m_G%7tddAQix?U7#j;ALokM_TlW3}o3qT77(cmIK z+@Z~=8<Bi1lQ7Jy#QBqG5R4hTH^pL$vokvCC@^i>IWqe8cjP5f;shBOO$wLMUkDQm z;G1TSR)pyk>@P*yP3vQ(&2EY=8*qxI#JbZ>3r+9wWjQ#U2K>&NQw<0VrXRTcJ5Vwr z?I&a!2|7~5R3+~sa<D*xK)VA1ri|R!SWk){IiaH+w*Y5iw8%mUhLgM3Sil{sf*5t~ zXwgJ(WNB{wNz_ea>rD$h@2In2^TVZhC7$D>>$(p+?bc^IX{03xb~x$h^B;?f2j>FM zt21)mGXO~Saezy2$zX%#C-x|CIyIvM(&k_BKNU(~Lp=~5fBC#XhNzfGen3HefTIY5 z4<q3)DdK7fDfX>VlLmrwF$E=vNM9$x7%3a&%7qG{1se@Z%m)HX$!7^U{c}yUX?|(` zn)eFM$51O$vec=E!tZ-Fi=I8j(O-E56D+wq_+;?Zvh9E*IiSZ!iDCB(+=(8_0@cQg zX}py?c)3kf7{IL2Pc&4{hFlY7#kH4IBwnQPRX!+v1-v>~IXXPJN9XQYM!q`BVy5&N zmiXu8*m3hBJ75FD$qVRxTy<M#$l>t>ZmanEG0BMgrZbiUB13|scr?-+$Uie+vclI6 z9){>sV94Zn<76lkDHg@R^RmIwej&iU^xgE>p0#il)BeL9wPLQ{5q5|_yjgnX28BS0 z(N*Bxt>Pwya<yp~49AWzDbZ=L48ZIrX<*p%dRte!SXTq)`Po(Ie{U$wF1>pB5$;w& z%tO2!-ni2qgU>~`eQl=G3PasHUMF?z8GRHpLIoQoQ5i8-U0fI3BF5+*r(cr0I*pU2 zobCQ>;Opq=!!+LEoz~T$1cMsTHP4JE`WSFZQ?q{LKD{5yW4E}R5}QD#`jZGy7s`|^ z(IYk1)Jy^K?^rP{W`@eGCS}HLK9G}=?PPwAxLr6U(Imb$BRhI~9>3Hk)lECY2m0tU z$s12~E(dFVMM2HCZOw35{|VpFKl4a{)VdyXK|t9Yz6hE}pw^B(K3lq#QNE_5c9gvn z*V)7&#;9+0dGULNPPJ$y-$D6z5$hgiY^U5YUQPqtZM^lh*YoZEr!uVTPKTbw%?(@o z_yrbvpF&3`9O4J9p{0I~6V=W64c87!-TnZ6WADzh#Ek$LC<$(~&wxVsy>?_-l@?v3 zvKy55*z}Vk4$-=&PGCdg#7e&1F=Pf-kh!z?wZ;9qVR^^9a`X18&I?Rqo6ME-N{frB z6xs!f#yg4n7YBa(v6@@@e1SNYmPYz2&G9C23^5Z|_|_K3%8z}x-piBU=*isvw8&{) z34@;9EmrxCwVz2XYlZuglm+`G4n5o2p$QiP88RPCz$nA@oQA6Z1PL9Z{T@9wsJN!C zKR(T34^}zuDxvRQ!plOI&Eilb_T!b|IyeP>0+N9Bs0bHamXWn~ZpH3Y0yvu*JKTma z5mjkkHV;u5%YW@>8Y+g49nv?iT%oG-n3&1S0zZ>TaKG4)lji_B5|*d7e!d6?P_QEo z!>@Lb2cb-UZC014jE1KlLm#QW0_S{pFu|pmU6`lLO|hnIVn>G~jRpDfnHiMfwNgOl zn}jHHD_!Yg-ZSV&oQ9}Jd+*rK3SDCK`b%ha^9IVK_M!+%eDoQi;8%pM8smh2I5@Ql zmHBTp?YN)Um1^5e;yI3{3uM%q(vYIVQQsTV$hm#_PYh#Qa!XCY7;_q24!G6DSMw!P z+T&iC%SU!Pl&!iHJ}1TU1(a1TK@mVq>Cp}W0R0?E?hB6kcF{TY`~aV{`bwG3>V86t z+Qie<?XZH5RA-SredqMtSJUB9Fp+@hjEMMhCqsK(3AHFYb_M??QA>xBMXYvvCvhwI zmjX3soPNTNDtvcpPGX1ksh2mQMi1d1PO8zlA0dVG3pTGqj}4CNqn7&-n?vBl>;T6M z8a<5S+&&Z9iu`<nK`*7K?8YX1wBHNa+upsoUBu3n?zJY1YvxY3(I2}IdygF2uWLBS z^?#U)3z$nB>QUFL=hdqk+V$1{46ij=n`pY43ocE~^a_`-bsmUyKDl)+bW`)6RMiNd z?b3=uaNUw4X&Fv8Xf7%a8!Lb{*2wG%YJ5M)^GrwGx1Z!X6o8SIiV()Q_1`-BM{d^7 zN{xnY^fhBj6R-<2#{Z6Nre?Fh?=y?uCs>>6-zc8gEv*({n|kGuVM?uBJQG@8TP&<H zS5Mq`5FS|;k2NXEza(_!0mKnV`?c*(kU6y_H?uZlTzqSYg1sXXN36h1D8k|=tC#)* zVY6*eM>kSMpSalW#lL#%VqaqkqG5+1_(e$T!f5YITZ*C7A}{k)5*+x#=>+1zo1s<Q z0l&8u2@8?m`M64`WNPQJY{M2_tO9!w!(Ktj&q5zTsv_ntTv3*Xyx`?;f5|w)l6#@@ z_vum(^Ac$v&OpUeW}X63J=e?fm|XvaF%S<X%zhgSi9<eSm*k4hz(!NQ|8`doZzrpI zrBXL$+$qQ{H53ZzR;WBXc#JGSXs1t&J>`B2GvFYc@Z^2`LTNVw=e3#eg8gFY24Pfp zLH&~;5PXToe!ro{4R5XvQ>|oGDw3;l$_mq6HY*F$T{X)LX<!26jI+o%KRGfPZ|<<i z8KEVA^Y>a<HJu~lR;`-VR}L27jRvcsAKv{8fSh9E@S??sTq=vGl|ZQBgAjy$1mqNC z?}fl^O<B3`y<mJ^_d9U<;U_M7wfjVL4D@tICpO)L&^>?<*()O7^1=NhZGxGl0Mmo& zudKU>T{s~FvZ?@2xS<01hB^Y5%=c{)gG3m)v3e^(d7fW5fI*v@zWoxbN%`QZQi<YD zNaAyc7t`uWi037sC&CUbejxCyMrn}8u(MBCn;%?sUV$k@{9yi{ouJjMp~E$NVORfx zRvG>g3ID6}=9QN*^3x%}GZ!q75p!4G&V4fKkXUK_KI8%>c{8~n+h0s50TmN(ltO;_ z60f9MF^P(H%l8;F3tWzHUEXiug4IuLO{O7Qo=WMq?_4pCnsHrPKjKf#{xRaZN9S?J zrd13}e!;AL>}*H#$kYvy#XJr7OeQ}4qIx}`dJ07@Jcx<K*~J!VFQ=+4rmDn1TR}(~ zA-?<rLe3713G{*>cOeib`E(=Xt3$)91p(9BHIO$Hn}PqQ@{aNc8yPP&wz27f%iDfd za~2n5)fb&Vo)q(;r-$k*q7u>Mk@m5&PT8|9{$EM{Hu(Y;<RiN>_-JW7|1}>pg!FJi z?SedIBBL=`VEY_rAZo)XrtrpwYoZ1icPj5&;Da4dm%f2)J!>j;VvOOyS-|xCkok)Q z>=nfph|T_@-FK86D7Ti@>Q^{vvDs*J$9dQ+0#5d&BcMtX4wRFh-!@JAq_}0VIq}FB zBRgi^p`yEdj+V9=4Q}qiTIXoJDe_GEPzVnl#jI5~_mBU%R$7gg^rDJlgAV5RdqnG{ zMAHD`itgzsqT&>DyGBzm%yi`F1!rSxafN>@v2PyL6v7zv6El;)v<TY7HF6>%1Q@2q z&mo2F#Q8kzrM=3xa|%{Gw;n!``O~~(cpt?zqWc3(&9T2?7C$@v0R!1H;w7KCZs;zw zj$C0sw}!$PUO<@t3j@3w?Z`S{pwmq`I7^{HK;RRZ7zKbN`KVV`0;WQg%73YUMOqL; zOFI$?fsr`+A2mrqd9<21#3pd@E07Ntt%on5^5Ux~G@ui8b9KL*KW>YnjE)O-mM$bi zo=v>uw`X%Yd~2R`V-t9N?$Ls1ghRsQ<eRYOl#2{E9^Tq=Z&vSe)6kH$gUzVl@<GnL z96<VYDWL$TD?O17E=OfQJ<9`q)D~q%boAmP8CCC`yF~hF)hAuYYgO*7H))M;5(jM# zZ*|aL4%}c2ZborGJquw1IH^4wBZ566BOpC116#|r=s>SW!C?p<53XniJVPTq_Vw>C zwwyg<@wP8U#RVD4%Z5G<Kfh=M{1Ge0jI@S-6Q}_1m?Y4BrTWd$FPy}O_1n%zLytmY zU+<J52@`V(QzLVg?xcMyU~)$+(fCNX1!;+;zwrbZLmA6nNqUO*Ctf20Yb#b`YN033 zS2yM{0D=v*rGIYXr?0cGBs)A_+}&<aev2ubmOhoV<=|PJ*H>#f8wK?(YOtm^JQZ~t z#+Cx%1C+*}Tb{R5YNUL05lR^*8Y~SpeH>zVYW;N@%1un^up2pHlY()dVPAEo{A4P_ zhZ06=T=&zApUy}3L)7M@&hNfD&=Vi%<}49MRKR3OO4w)FjLyEC3eTd75#g~lR6|+$ zcc<OY>&c?;$zN%iSbfVD%_KYQ;gM>mO|^kSQzQ;6^a0kXq!t`@k;Cvc8i?8ym{)1> z3230hEb^W765A2P|K)&Bt+ZN8HUb-Kc2sEoHOA<zt6QWp7HbMcR4IEc-LCu-y?-1i zoh}9UAUdNh$fC@lmskfU#PjhBxvjC63o7DuuJJa8>oLQbBWLppm^OsTS8S+FjU+&O z1UM=46K`?ieL81D`ILFT<**XF#LvjCS41>t>DJcVXq*~un4am~)32{#d!#mMJ*>Ea z^r-4{8RujJrJ-#lyy^8SkvEo-VA<7ACyU}m`c!1;LHqUA)<~N`=VMGHpJ{TtFWYH? z`@i=ncByMPE2`xj2d^Bg*_RHjbfduUa{d+q{&rPDXJ><cP6&-)${6eL3SElkGYMif zpUEb4_RYr}ZRZ{hsQ@`}#4wHrITri#FP!HB$wAckWh2t!J*v}{S+P=)LC!n+_uf|} zmQV_pTWpvH1(&syQs_3{IPJW>jn|mK8|zns9>pA0u%ps>=0OatFCZQ-ydba-k^S?x zpvEmKeC&SdWWk;2VtMH=Y%zGj!5Q>VkwL~gT6ktY@j)a709QaM&1-YW&TcE13*Y2< z!Vwq2$(}prw9--Xe10$O<1W^Z{T6|(ba50!<4A&UZ|Wc+#5sRjYlB9ytwK?6nq!SH za3~j|>65QO`g$7u;7DQMTN~JK$o7d2T)6eX-URMugaG$(CI+)7VQu1t)caF_dppiM zrZC@ydrqI4`9#D+XyQqL0m^^q%K6aZujz`MT*8lwo(h-plvi2<WArG7YStpjI<GOR zUh-<t@<uL|IdU29WjlHC&>>7{$tU(<-!S-`)k@2h#LI89P7`u}3xKxLqmN0*6^2<A zhRSiFTcZkC%DSkk;>~E9g<*h<GIUV!MSuy<d=(p~z-~rbfK5bNdAPO-2dfGMI<q9I z3%OIyB%%mJtq)c4<QrZ10n5E!;SsOG@|5Q$Un8Rz%lP0b|1u#)FfPSH63rytDbLKZ z7kJpUUU_C%C^bu2DNv^>z;!@s9ko1VF!}4=)0W7NnHw{8u}#I)jFHNN=iaRP&Nkg^ zBWu4;gx_fO?aJg?tCPyEK&E9B);3#AeOlBQa&1<L4KwYUTw<Gd-aWDkE5MN%;!mC9 z{<SQwClLaghe#_@6*V9~(fTC#7v@viypiY5f_0>MqWfz|AJ72Ot%}yG1|vyP(%*zj zWA;(h0B}G(P`#F8V?e$V?-F^UUa|@qO%OM1SCNQ~ma5svQ*u1yQ8GW|tfJHEiMN%e zd3-F_QUA!$MNVtBRy@I*Vu3B{q`!?>h4!`*N{Oz|IQc$qSFCA0Qm#<#CSN+oF~N2r zo_W>-f)PWV3pA0cPWw|+o@P0yb=JcWdO`4J;B+JId!CdRQ;Xv8{Ism~7KS#iPws*# z-|8vJfrjz$8#c|3N4z^s)qvOXgtyXTmStwlr|<wDyC>%~Z%=O{S{1;r05vss;_<N- z5)x##JEwRGw|PadEqGWzO6$zZ_bem78Ix>wJU()X2jr+w;V|NI>zyrPhJ8qf#-}P) z0c=e6^km5;7wz|`su-SOK4;ex9F{Y0)z3u=7++1hm6InP97YC4SmtgTU^d4Du4oRi zDVBtKc0&`|uEu5(|D;0P5{LbE7cs)LR8<=G^4Qip@b%d43VGo7dH~!$WOBO2bQiJR zY2LPW0iCc^8Mx^_xHPzike*!@^?u>?p}y*d3*eDqaz^@;si6ZjC6zF=dBAoQ5RN(} zl;=3%iq|k7&36Tn9+M3v%nh~kDoSTCXT4d{GK8PF+9eW7rSAij7o9Eh+WE8?UX~&M zL}SZ2)L`{TS&)~-=`cs6o24iBU%~|n*GvMQflyx)l1!Qk$LyL6xc#3N>}4D=Cc=hw z&S-(AyCp(aSe&sY#)h+kQMw`ZR%nsXO=LmuPK~Xkef2p82n(~n)J&-@jIobRxtEO~ zdFm6kyOLwHrcS1Gu-f1)>j@M^S+7SVvMi$*j9_c>mYlZYE(q`jvK1~R-uQUrJTypx zfTW)pBG9Q}u2|+t4@9nbq$>nu$l`+feo1=2Vp#EhWefNVQzf}U)y9Nkk3KB!LnxqJ zfjvc%_B)c{bAwUzzCDjgaLZIt&$IA2qwV#K2n{mfNY*6@OeUlp$B*Ev$PfG5m5D;7 z%=!Wr<uG9|lKmgt7MW#|8GEYwn%9~tfF_?Q?LQ0{<SQ{<hZWABU?QvBVJUPwbdq~; zDGv_fdDL|*LAs&!6<9UAi1r!?F|~7an}x2~i=CW#7Ii#9?ATRPyDj*LM%HF%7au7I z2hWvgb9k$9{UaYtx+vh8zNz)?wN>?&5V|2wqv||mN5r=1ZCK+KOB_+pkqFN4z(h-Y zjyYX?IAD6=2Ffp}&kEyz5M{>rigSE9c}#=t;p=WnGYY@7&$q|=mK=8gS$kD6yfgcF z%{N8rmUm=+Q>GQ|m5RrP^u9jmRX%XZFxN0{)Myp|BrTVB1t<~yA)^B-;99mK&+HGm z&&KjpEBFH$&PE!#lwMS;0=Ore>76_n9Gz#;b$&62n!FZFMQG=utMW%&iPh$p8DCPx zOpo)mozrC*(a6@6{vbBOamPSItimObCFY1o0JlWw{fG*DWp!zEVKR`0v81CY#2K07 zZ|${08tT5r>?^-X9olBa3g(7n89$XrSQ}+^W#HN5XC~LOU$}49(zgVGz)vux0a9?M zLvt+!C91Jop%Pl22xmR^I3ej#oFL_=*B)8}4(mYUCf}hQmkEFtBc3K-2`tp6(?-rJ z5Tj?NvWWz>%F(Oa`l^Yq)Sy`1yDg&MSN%nI)2$UD_)pb*$8C$=^~Zqa>ZF0%$v^m7 zYe<SJL;?qnV9Vg7U;~_`xfYxcHM6SA#o-HgJ4H{2x135ncH3)>wv#cwuCkSBxeLFI z7HZ?wv78&nwDUVkg)IQTdD=}7oK=Mg&_Xv9K^?CoaPJj;j~gmx)iTV&<pxWIm)@Sx z;lW}xsb8HEwsM$6l-S3-%}iVXqtibD!WItnR1n89j~#j)56ATzf_!FO<&PVS`TQ!N ziC=fDVGF#4gqXs9KP6mQkJXsOd_ZV^2<`e@%TlYOfD{$Ajebxx#C2sOvzycy*osB* z6RVu5)(_XM4DEeKGA0GZHX+5!MnOgCk%ua?#>4hs1*kaWq5X~fI3vTZz|3${2d!7y zj$JhXKg?v781&nV!=K452B|H4?3d^OgSj%!XxXQf-y51vk7LAXDguQld0$C>JvP}Y zoy1y}$TS3t+&)5{1<LfI90zVbkdXhaZqfzks9WuuwrOX!S#h?2(v^7qz^#7Nh6ZA% z5C|84$eKdX&!!IVsWBEAf3+%YICH?Cg=Ik=I^>epOGLr?g=kyn2^tALG*=mZ<Kf;# z`yDf8zMq7`=*H2hImv(u^^v8{9NM)0=iLnXFUL9I|4tN$!XSt4V2*`oARr9%ARt7E z$UOLok>bceV^6y9zf86WQbe@Il3*r@NMu-G<aF?h=d$++QIjY;UChw>P1Wel)zv!I za~jq9r-9XFWL7lm>pHrr)^;}4om-flf7bo{isgS!deX<qynerayas=4cfM@8%-jo} z<oKL~{<Pm<A=B^mLID_0WL1f#u;=CCOC0es%IDF5<0nl-$<9&-X9WAXd{{+9Gja9l z^OG?5wgRddj&Ucqn?(4#jYa9DPEK(px4!v?c}~*)vO%txsQ^8KqBA|@qRw^|Z;XGs z$zAmGo=$NCcrf=U1~^4L1{Apy#oEME|L$C)W)N;^qASfk-Qu<<Y>FPTKx&gu+J*g~ zRv_Ad8WQJX?`|SmgheC<gu4%i?ZO8kMAe7UIJtyH>RJfd(et(mCDO09DdoCgp9*Jd z6;6#K8(>}heY{1cmT}f^`twZ?XI|UIclOac^tG4}XTE-laUA!-IEH9NQv-iUaY5~q zV>tjC)|&)HSGLxh$cGBo2^1(r+4C+=aqccasy?4X>|_h`I8!`CN0PBE-*K)ME^3-J zP=)aa734C>gKZ+WaP`hM2fprUpJK1tksDZ*sLUd-UL-%Eg9)}CKB<&hg8{-MXhIZo zLA)Z)A$a}yu6|9cPvq!Yvw7To>5VXni;l?_{&QA)9XDmtbhbpfe7C0yn-)&{PDg#9 z=tE02eDg*tyRChPqwG`*yd30zUrDJr>dK_s+Do>&@t!BvCD3lrdzh^rSaV6(yMN@q ztqK|!n$j%TD5|C_6eg@<Gt~K0=C<r~)T6DDSi!Htb3ECMn^>pZNo}=K2~yQN;5#dS zk&NgR4tUjU{H1SaOJm!*w2LfBh?kuLKE;=5FDzS7BxXjn<(pMHA1DC_pp8xpQNtxK zo8@k(y<oeybrKUJ^*e&bbyKZ4(<#^`_AOLtmaTO*;NT*lQ0ydJLyg4`dAH7*J4tRg z<yMmM4MpFLGR<*X+8Gj>(ly$x>lVBQ^6}%RlgwA+#eCh$4<4loWNb-ltS0b*mNfk4 z8nb2i6T0!sNxlxP1#+nP&rS<9>pjh&WWnuZQ~DzbN3<EL%q5>?Wjzd*N(Ys*TU;HP zfHmoAK8H!Vs;cpS7bF@QWyaZV&9605t-gaPec@~L3kf)e@U2F5^ytA}E)Y4oED5sZ zx{pjlN570J*_Y;s>n1n!Cl1emEIxCD0S>&2fnLlI<8-0I^R}|u$ep#;sI$;kHIc3v z(zsoG_+UW;mlg1L*GbXIa-<Y<%j-}#xGnu`2$%TKX(iF|6&lhcG4?IdE&Q2L_Q9;t zwR5k9IDfPcVwvT;7n?}%|FmOlW=Mf(pTy34SIyUWN*}ly*xLvG7H>BKYFScjR7tfS zm^%0j1-2yOe`CdJuuCLi2O?a+hhxEUx|#Jox>*KN@LBI?#GBOWSKp0>F3E+~qR>)L z>l?6W)F;x!j4hkQEbKxQPAOn3Lnb?oi~X}^RTqll^y!@9*s#?k4JZqeF2ivjRjoM} z5QdeaydsdUm?PCH;-1F_a$Y6{4`XKkUBR*ep^{#xxq*DPW!}YDh!9VZ4hI?9wX#=Y zQ>^2n-?;JrXS-vKbEUu{zkU^-ls#Oj<NaqK0=uR9cb77m;O&{cILQq2F$OI$pq&Ff zoF}U;d>-2r+H43986mS#xs&Gt$X-YsLtd@M8I>c;(hsVlPlCY;+z%7P7lWq7cf&D+ zO_WIBC3Uhjon2B@>43E+Pmm7*anS3;W+&g$VR#13PmwFXf>hb3on3}>qeJZzFm2V% zxdpk#`NCmP7=Dq+yGyTeO1S{d#cr+csX|Q(U~Y!dt}>7ytL_J1!z1obFmB*3HDoEQ zi}>9T;heTKs>=Ky=3VEPp>yb@{)lYhOr(h%sks(P5X`@$1YK$o^DtB>G11Z5&*<MY zcgg$J=!KTXr_5|Tt5lNRYBfhvqOelU(8%}=q^RuL7N4g}u^6vIn-GI}f#)O*zMxs- zp&qnqXVP(bk8-{!gR4cSJaL=1P26i%@l?-2sMQ}#oJko6-tYyFmu3PUyi*Zs8)P)J z|Ex=m!I$0vG$JvxTRPJ4Z8fmB!^7nudz8jpy`u<L&O9D{vI+8_+`Q8b=FWT`>l8F+ zC0*Z<{%Do@;mn@l^dP|IYAn$t)~uY-bm)}Q0&+(<Pd}-*YadGAB%%dL387qj!X1|1 z8hu%<$6AGeA121n+}RF$y7?kCAz?4a@a)M{zOFsdg0Xos_*2j(j{Y^iyg=a-#`{#) zZx+MS2jOoR=U5-?f;&yOZycchiKuVr^v<q>j7#Zs=$l0LO#x;)1CQc3?le960Bl4e z?7$T?D|QU!B@>OtM%d7xL>HnNM$5|IqQ>C8_eTRDZVT!jg4uoDTBIHKI;KHZ@r7;} zjj2}KR5fOy?n&nxL3XTT?=-kC)B+?W8cDZ1iY(bceJf?awB(yX^v!}-T<>tx-62lo z1)OY}g&Sh$B-qKvTbe>{>4ux1KjGrr1{1Z%Ra^t*e2KFU*W4Zl`=)VU`;|+?!SEf1 z|3)&9!s0QwGfH;Ku@W#c*n)hKLPE5OTHlF*F}ift7ZH5LFeqUfg4wqG4Lh)<0fu_j z!}NHX*o+sZQ9|6o#E%dZQVa$onV__Ra?yWu#X@eYg+!kX6~NG}=k47#C^KY4xFJJ6 zjH<xgqJ#!}g3)HYXt}hvZ|208s5Gde|1S=>ko{z?+o4dUVE~%x7)|p$0(bg}--G-# z#njVMvhPl2VR3;3-4UvU4rjT8Gr{ss26^$R@2z}tb2rEXG~6Z#06&8a4>z(Q%ZV{H zz6DnUrL4%4$m4aPxovhEMxpZJqfKR8c?%6=cl1&_8O7TB_zU7!;bT6E=DgOG&72Jc z4k^MEmKMF;{Vr}u&Yf0_6z?)o3~$Ia8<Ws*<oQt>v*>k0F1?#^^$P*kJTxZoMvfe( zH9`M7M=7`JjKE8359^o9#=RzBa2>>luH>P6JHf;eEPZ&`$D)td!;%~>y@TcH9b*K1 zHcZ#vR`UEL0E71kN(C0*Rz7jFffK-9QR#CX<g-W1@9t?JlH_;%Pg4DDT7&$_3fa?_ z_9mZ86Dmh+*-6P!$=)V${g2@gK5*%b@KG`QXT%T;MltI%9V5#G|8D~~D_wt7g46gJ z;RvgMX3anEM8JqHp1+Gzg08}`<NC5Wxp&sV&QSakob@B~9rJ)PcQeBRS}RaREgPih zk^x{9SDM+sX)mq>=8^F%bw!z)6w`x|&JjU%QeZ3-ez7F-YUXa)aqC(Wu)Ulu(@#~u z<V97veG4gz<hpi|OuOx#&oOUZT9xGkdB!<U*@Uywm@)wAuIY~q#o1YbFaX^qq4&sj z1cru(2$}rrj>D>L_2@nCkqo%PYmir^f7{&IqGlhZvUL?g-;BwFH}<w(5KiX(d36?c zo09a;P33!xuDnKYbR!&ouvI9S9KHtY{(x@@;6ZIWkzvBi4KqVkjw_qn%~iow?{0qx z${Qaq8cB9xy2YVT{f*E}T9&wgWzjjRv#S1SJJq9Q{p_MQ%=7e+%?ZR_gT3(H9cRXv zcweKxv_XZ&B{p((5FuW+#Z93nNFzHkD2$INq^je<IZeOvqh-Y-*Zz}IG?P>~rl^nE z>jiy|Jnlr!(2^7hck(?juE1VBF2-h_iE>j|aySyXc47AE<P2!uZjbl}1u<HNEL}6P z*iu(Ihai^icJCuf#|*?CSj4^)!)pdC##>m2PXvcYgcND%3{AN$-d@Emn~K>k;;+J~ z*&dtS7i2-O-($FCd>s9)@))^QdQXw{21jX*KBuvn0uXym2B#H`$)|4&W@W&4X2`&y z&WBSy@H^`|dTUN(tCuLLl&-46EKaKHp8j1ybAC!V#nYC3&Ie}1aHl)ScKBOn0A*xr zrX8K#t=6;-8616Fo+Zn&0+whp*(to^mf^>N>Fmw`y_H#{0E?UB7*wMU;Vlsge7JUl ziC`J$ZuWZ-Tb0!K&7``?_cH7tT_o6p1B=@1Z@jBqTd+AJh7*`M!i@tx=g^RN_T&3X z8qF2t6(7pLI$$l-Mx?Zh6=O0=e5}YLXh&2U!>A^~pE#JqY0w);XVCl{&3S>Ru85kE z2e?@SQ9|(#W?y{-1OvX4Wcb;(24R>Mw5XX<$zM`}BB=lV#l~r9IQ{)JPnNXWH*Ovn zol~F`TyIaqE}?eCFiVqcEXQ(qIMazr;^sR;eUv77q5!hgd!v@$FJ_J%3E#N6@_UPA z6rz#A&om!>u>nvs#^udlX2rS=HGM?4{b<Ub#}A^c1>Y(Eeg?4>7t<XgzR~=ng(|Dd zEfJ6s_lQYoMB_;baDg<dF2Zg?N?=rRws+K+_}89dpQk8HLRek!^$2i;o@ePmett5t z$Nm#y9|E*s%{#F?bIHq)Wj({_dOOpYd^S0@OA9(^D@5Fh?g5c_#+2ig$(Ije>n`^7 zw_x+q@O+?LXa!s95pmeAW@}_QyeLhl?F!!34f)nVzW0L3KdcH8?X9>hU4xRYeV&jV z`w<cs%+|ibFLIm!nJRzw(s+gaBEG5L04NK<2Lro;zl#aEWLzqn<CYaIy&MYfh<6Uf zzt|is$0+rOd24SU`tvEx+TT1x#-v?2vSC4IigBJEsT!~HM4IrGDpAppg-%S`JQ1^{ zm34%eu~=ffFsk#(EVR{PPkzZLqdv_loEK}H7utg~#csn2^$^xw1cx(fQr!4U!-6C- z&H^!wvyeRf!h7IU-4DKq;Hu{sbQBEx%i8RL%j_R#l}u~{F#LvvwX|!sMWU`yX7&XS zr?|WO!{;_<nXZ(t&|0bS91tyj(a+XuMRWQ%TT?h&qK_0)2DNkXeLyP09h~4duBnx> zYxxYOf#ff?xR7Hc&v&tJ7SGugH7`bbBOs5EDvV6miz*<pwBU^@8Nc|RmsurX(uFpJ zMiSBMx;WSiA`B)YR%Pi$xXB7F9*(X@b)2XtP4QsX55n6JI{Jlpx8@g8ZT=D#KO)8! zoR8jLqz;X<O0voID$)L=r48j(4n#eM0-rO1)k{7tKcqr~cZ?A?b8YNSLQ|7YY2YEZ zf^l?=yr9B^Q8%)M7YGlR#T#)7n>YfE>FyI(Spjx-K<w$0LOfToc2FcAcIoObTbK z=Ujb3`>^KPCfH)cz*3K}&Kk-+{OlSc-t_*=oR?rqXZ#51X-VHKaffui1$B-kIBRp? zSTl{;*DJz&Ykn@`BJCNkXX2x3DzI4;pT9_@s7t!-xV-hIqE4VHf$9eq&V~JxfIrL4 zHz#5*I;aUoS(6?BcmmZ48qJ`v>TXiW^0Ey^jSBAB0K`D-qfq{y;TG~1m+DMiK8{EA zWz>jrzh3G8L4xyxLi_q95AKf%K2S-dL%+=l@)!Grp~M&c7Y<eG+{+m<6%b^+A;Mmc zm(M?a|G2BlB|GP1jua*}(ek&n+yul3bF`noU`V(H>@5Ep=#hzZY3%-w>0?`?U7x=n z`Mc;U$27mt_F$0OqKd(73~0sLkbIEZ#(r<^xeg!X#qLv}_bXnF;SQhB3AdLo_&t}i z(jcggpcJm|ud`2#H+#H1c_8?rT69+rcFQ&x?)%4CHvLjSXgO68x~-cDIhxgV>2da0 ztjWHeJQSd0&>hO4UKOv{<4HBr^%4a!xL(sLs0kNuN8eFcuv^k7Oj1yPRS^?Egd_NO zU8Pm0_qIRTexD<zytofx760##t=Q}bEGhyBh+g?6e{FiBW>lt*-$1Q3a0fjJ!M;z* z{xfBWQ`6h=#NB5u|4)eLXhLH{Pnf<hW{YnzuO?i_t?;c==qTx1^q_C*s%7y;Avf%0 zJsI6IfRa!B_S>WCJGQS2yj5;~ZlQx9-v=CjW#6|F1~_7QorEwf+?Pl|H&U551MIUm z3`9tsJ<);b=Mq4z5;*sOW49Qmbjmd)kqgqFDJ%BhS(EWn{_TH;^k&u<bKR3QvGxvd zO47M0Xz{alpkrkEC?~y%JbWOy$NM+p9)R+K9ro>#_FpCb#cdu{ju6^}!y{jmsx}!h z1}fs6LxFNQenWev9y@@PaHEk@$)p=5c|tL>u8qEmaFRqV1k{++0TV-r(`;GJ96RB5 z4Td6qMUhH{k7Uyvevz&FoX~njA6l-w9cGNT00viIqw9zO$0UrH%M6CoFu|r(H<F-S zj)U%3WCD`41*?j7s072nP{$q|GRo#0yp}VK5-58yi)H_o*0qVvKLst44+{?o-w!to zUdH271g27f1KpV^E%u?xq>?J*Vj&hUO6~s+ECjhi?~hqyGjj-ygElDB2Y1aU!@NPA zs)U#41hMsp*W|=K_x0y1ju&*#V=Fo2gWT7rGW1P52=heRKEVx8s>odrGBh#T^ilXn zpE6>7;mVi%2-o=GkGw%ey(sd8ey45=|A3VOgI18pfm&_w$Ox#90%TbetD>59sn2^} z^f@c_ir7B1mn^Z{kPAP^7@Z)UOSz})p1v&BQG%xQ(!MK}(SP{A*t-|>5wRg2SN10I zVM&O75X!s$q5lH>l#Jta$8hl~sN)QW#A!6+Wlj9<VD}DEqQmn_965sTzv!V0hf&7H z2|V#F1X`GcPYN{Pn|y*(I6fn<Swq$gzpXlh%O91UTC`N%Zp)$4(x`W@csQQ2gSc=s zsLtFPl*woz#O02v3S6)yQs(QV%RO)jTFx*|>l9!;_lRm2V5v{rSkHJ^(;*V+iv5(H z*9_8(+{eh;xz0Gz92)0SLhV)`0P-)GW$CJufyt&0h;W+Ae$7L0<RYuY0YUi4Z10Ne z*f@Cf=92D~*?2~Q3)vtwBpPZ0<1^P)ZlQg~(c@m1PU)9|&Ep0_6X|-{3R-^ZlkGF^ zC<%g<$vbl}zMr?<u!J}H3x}w?P5@Si05>xFUq%*LrhK9L+}x!VLMf^sSy>GfAiTWh z;`07MGz%v>zI;Xp$J2Z-=G*Jpxf4#5bpxoL1)0pN*)Pyh!d^n`rvVo)w39xL&a1LF zqL&K9Cp(}yLH`^!fuR47awZCG;xsDhWPw4-$kb9sC*J8P0`D+xJRk|J(ZPo~#p5u9 zsc5JId+auf?W3jFN+N*8M##Rm;Ga}Z?z%%2L_L#}>FKO47B5#{N9aPJ6WT>g*#SY= zb{6`RomxhYHVw&o|0o6>+xs27hz@pzLQG0EX{3kawv*%Kp0QF~zU05GzOwqMN7(zB zR8r!(tasG@0(lOS<5>K-YwmBeXv>`#&&V_zhM6p^$#qK2inGVKOl}bhrOHgkbm@iZ zH;%NHf;#q_l^{GKI5R~cDf!yhOW)z)Rc!=AX5szx$qZGGv*tG6UvwK6C2RAL0~Xq< zD+*vgd&qS&PKblV5y2h#i}pISOsGB$380y2L<p9GfCn<7YN)?>OAVclY5`isigI%^ zI=9WgB7Et?y5J?=8_b}f^_4>9{m6dcQg%-J{yDfC3F1^(S|Mmlw+J`cz>y9inQL^g z4Ve0eKYCh_bk7#7j(R%C3mL4ayisZ)<_<1UluruPZp`A2G2PLweJk|*1lt<VuTn=P ztd#Pk5t8bsBmQp!Eez6h;_Auy-vTop0R)8Nzkw7+BBDNgf*~SM7RQUvpkNi6!(Ay$ z$V|E=14KSEEoqe{ystsuVG-I$VqPpqEQ7g`%pD*LSP*$hsR5jcXm&(m6rr^iO|*W? z)Aw%kvZmM)W4`9ST>Es~Y`Ua+oP2#;aqfUQ!u%vS3NG_9!N?D&>m^Fj+$kLkV;bK+ z|6<HRHkOI2o8|>#$hu=8%&d@ywe@dg^4W&Jw*3wA)EJ<=m4?nW30CIA94RH|i=B}g z+iRrTLc8P65o9#}&3JoT5XKnxYJz2$;D~03a6nu2sZQ`;t7d3<hD%}qbC5~rM;ql3 zdWR3aGyIY^RL#^wID+_kOOMP5%f)1Rn5?4HXsbHG-C_Ye1v`wYsXSJbuBTf<aeN&Z zczc|DT)*Fc99SQ2zkFQZpBJ%s4)h<JR6puSprQ6=Zk7V^zN_-Dp%!hm6>rr{N+^Um z%`r^#arL$?_p9i%q6tpuuq{6pFPy|7h_Wamn3JIq{!788-#7zp6&qdi`?nl6q{>D5 zoU7Y1^@$qLMS470t!3s=6HWD?xfi=`h24ao#WZa=$&$uxP>q8_jg`H2_2Oi_k_C`q zb}D3B3uswZRlDlG(~4{!@ZQWE-=Ni*V@6-*=Y6lyi0via#cTYuM+2od*1<tTnx;<S zsdOY7gbaKdQdnRbgI~}M|AeacJxgdIHez_5zU&4f3hJ5}xK7TC59?5do199&G}q1F zJ8Eh-(-oJMG#6N}fraps%TDo@SU40nbpB9$8QD)9pWAlwQ40|fet6_7I2<p*3kncV zunS{g*pUP2D{Wtc=S?fj4?1|d0hJv`A^drrb0}0iA|WQHnt_;u$UCU|&8icy>3>A} z_Vj@qvQGuua}>AmG~mdBXhg`@WaLxwV`JZ-)_P$eCus-_I5Fv(UWpMvMeXPZXlztZ zsS)ff^gB{)z^B$oqNmIV&9OOO1l`uv))<Rlpr+ZOa-Qz?q{;l84CGSMo$B%%wx5Eq z^!O`eEyb-YcCX2qdKby=;s>Mm$ZK=h&KU5O-j8zsh2@w@5mO-3PictI>=PLsyLL~J z<vVHx^0EE$-{16%#R%*zjYzpGc#SlnWWW*xo~<${*e~2p*cf{obGMaTQPmJt8Zo!Q zm>Si73HCpO^@RrGQLN8)&Y6FEcjd7+UMr(|>o+!R8Q$&fVNdO@vstzW@GDSzspo;& zZe@rum~5&;JLaE3sO$kil{M$!tZ)@{33l4^(-qf)Uw2n_T&$^`6~|Znx{-e6xt_5v zX$YednXpers^D3!Hnoh)4ZE4iYe15j64#1~`WM%)FO>re3tV0SJe%_=dVh_sPO+=W zgHuL6gqJ41-p+-cEfN_(g!8ykSO?IGT657{71gomY05!NZo8Xe^Jk&Gt0uvzH_ofT z*ZBwJYU6!iQ?TnAGc4Nq2bLQba+spc=<=Sd6NBb;S)@Lyb%AiANzSNi$uh6LvB@5X zv(2yr`J#vuG@h|6(?t`j0n+2XchK3HSN=tbZeg7PNb+f-oa>a7u=Mvt{ROx-C+h?2 zJJGPzfH~x~kQcS4`+=mL&pA!SzwPf1w;RL-4@y{|j=SIVeOu#};J3&sjj%w_tb{W& zckY(~nGtk{^LIsWDR!1>4i1jgpVTvrY)y5*OKyG=L{*@Vv}n8o1$+qAA+I`MUcSkn zDj!cAN<yzlG^ZtY2xY+p1pt)$NOMRek3Y`56GOjZhiJGngYRE^)hY;?P4D9vQvasa z6CLF!TEgK0kZaDNpOqLB35lZfvp?oQU!M}J7UHfIUdW7(<j-;-)F41WiLgJapKrsF zh?&BDDqZJ;5K06V#0^o5=*=*AXI<oM6|L$K#q!+JeR*UkdG8X5ssMSj=@(kh*~Bd( z9tjJ7LqJQ8z)2I&7u}>0!bWO<W+)DY8-3V4YC4sL3^u|W^1Yi9e95T7C??FQGIX~= zsg`;S6qB@}pqhJo7%vyEj2P17_EoyZD8@)$cSHx!VdG`VCp34qGB@E6sSL8?o$(tC z^Cw?&#MDSgP-%`{w*ki_sn3)LZ2sQxMJJw;wfa!+ktW@nnq|N73laaGd-y5TBKpWi zD-frfTQenNG#!4j=$iJ!i|xD=lyLqnqCm!L_xbBq+psuM&-YLGZ{^OH{QOj8IW?3k zQT0ttryE$8h_)PliSSHfT5Z?(9mG!Zi=1lRi$U_03@Mz{I|!im{na;={v+Q3RG7ny z7teTF5Lzkf8d>S_w#%RypSCmtR89@a|8#M!AyEZU_;xHUE4{wk^_sb>xm~l>Kr<g% zQDA5f2z&d(G%Xcb*HwGi$`+-fMRERA7+I}Z6m3yq(T0(Ml=(=>Tyr0~zRE%bAt_>; z9o)^^T!#71nQ!LKxpM~&cjnyQN9w9X*At@9<Rir2)Yq~~>A|xlu4nhP^khq`)Uv|p zcdA!cQeU<;xV)+G^17TAKixO=Rlg;Qd#;jr>m)^s2WKXZ-Vc>*EBn;eBwbq?XpPbG zbxF++5+%X)N@f1UaL2Q_lE&&8pKS7JWXiW8Z)t1w9;>=>;%(2aiE7Cj<DY4pUsFoW z@vg|-zg~A=ILQRrT%Ne+$P_E*#v%XdOTOhtB9eVb4kkHQnVDU1Br>bu7}k|7Uoyh; z?Gf)jY=1Ta%q6i$n2=#K1%eBMH%;7=v|b4;pnp!l;=Vji5Z+80Ig(c6?tw+C{ZL_8 zh>0E|lp9#?Uo0!bggBU_)M`rDS#lhlTj6Z?Vv#=@4Lp>DP*p|P3f$1oL%EEIa=hBl za?X>m{tUwldfXU6NP%eSPXKugZJxB=6V(P5=f|^498|4F6iX{#ZC;4-csHyZU^)Bg zjB*mPEplZTvMcUPT8(bQELn`-zp$KO@7zhV+f%xU5+euJ!QMR-o*Ljd>W0o^m`T!k zoPh7LpOQQ?!te(ffxssc5JwNp5{ZlCY9B2w%b9CV=3!c&kQ0PAj64+OVss&gW5y&X z$Rm))T_zq{i?Q6a6T(&4Zb}D*3Pa5aa6^Te<_zG=NFhRlc?Wzsg*WeUsILgXLl)B4 zX)5NAd!fzjfmLVb-uI)LR{plcLclo!rD&^i!;C>5;5-!{3~qrt)f8U5;Emx!JY21% zV(HLUn7l-xWoReVBSu?~LEAN|X|`^K_tyzrh4SHz&{>Z~!&zXyO*OXR1Q=)_For$} z&4?KK?h;XsA4cM#^*(`8)akrXVP!FGR1AR+sj6l)1=1fAD8ZkjQJ`x<O{WA?$D%;r zM&KG^E{iY6#9-;b&tp08v<s8Rlk8T@{$ECp$<b;my9JA?))dXzSCJ!WH3lKUXbSRO TK;AHhi6z%JZ-!akW0(E{0YX_0 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 0f80bbf516c..ffed3a254e9 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.0.2-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.2-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew index fbd7c515832..1b6c787337f 100755 --- a/gradlew +++ b/gradlew @@ -1,7 +1,7 @@ -#!/usr/bin/env sh +#!/bin/sh # -# Copyright 2015 the original author or authors. +# Copyright © 2015-2021 the original authors. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -17,67 +17,101 @@ # ############################################################################## -## -## Gradle start up script for UN*X -## +# +# Gradle start up script for POSIX generated by Gradle. +# +# Important for running: +# +# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is +# noncompliant, but you have some other compliant shell such as ksh or +# bash, then to run this script, type that shell name before the whole +# command line, like: +# +# ksh Gradle +# +# Busybox and similar reduced shells will NOT work, because this script +# requires all of these POSIX shell features: +# * functions; +# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», +# «${var#prefix}», «${var%suffix}», and «$( cmd )»; +# * compound commands having a testable exit status, especially «case»; +# * various built-in commands including «command», «set», and «ulimit». +# +# Important for patching: +# +# (2) This script targets any POSIX shell, so it avoids extensions provided +# by Bash, Ksh, etc; in particular arrays are avoided. +# +# The "traditional" practice of packing multiple parameters into a +# space-separated string is a well documented source of bugs and security +# problems, so this is (mostly) avoided, by progressively accumulating +# options in "$@", and eventually passing that to Java. +# +# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, +# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; +# see the in-line comments for details. +# +# There are tweaks for specific operating systems such as AIX, CygWin, +# Darwin, MinGW, and NonStop. +# +# (3) This script is generated from the Groovy template +# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# within the Gradle project. +# +# You can find Gradle at https://github.com/gradle/gradle/. +# ############################################################################## # Attempt to set APP_HOME + # Resolve links: $0 may be a link -PRG="$0" -# Need this for relative symlinks. -while [ -h "$PRG" ] ; do - ls=`ls -ld "$PRG"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG=`dirname "$PRG"`"/$link" - fi +app_path=$0 + +# Need this for daisy-chained symlinks. +while + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path + [ -h "$app_path" ] +do + ls=$( ls -ld "$app_path" ) + link=${ls#*' -> '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac done -SAVED="`pwd`" -cd "`dirname \"$PRG\"`/" >/dev/null -APP_HOME="`pwd -P`" -cd "$SAVED" >/dev/null + +APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit APP_NAME="Gradle" -APP_BASE_NAME=`basename "$0"` +APP_BASE_NAME=${0##*/} # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' # Use the maximum available, or set MAX_FD != -1 to use that value. -MAX_FD="maximum" +MAX_FD=maximum warn () { echo "$*" -} +} >&2 die () { echo echo "$*" echo exit 1 -} +} >&2 # OS specific support (must be 'true' or 'false'). cygwin=false msys=false darwin=false nonstop=false -case "`uname`" in - CYGWIN* ) - cygwin=true - ;; - Darwin* ) - darwin=true - ;; - MINGW* ) - msys=true - ;; - NONSTOP* ) - nonstop=true - ;; +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; esac CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar @@ -87,9 +121,9 @@ CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar if [ -n "$JAVA_HOME" ] ; then if [ -x "$JAVA_HOME/jre/sh/java" ] ; then # IBM's JDK on AIX uses strange locations for the executables - JAVACMD="$JAVA_HOME/jre/sh/java" + JAVACMD=$JAVA_HOME/jre/sh/java else - JAVACMD="$JAVA_HOME/bin/java" + JAVACMD=$JAVA_HOME/bin/java fi if [ ! -x "$JAVACMD" ] ; then die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME @@ -98,7 +132,7 @@ Please set the JAVA_HOME variable in your environment to match the location of your Java installation." fi else - JAVACMD="java" + JAVACMD=java which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. Please set the JAVA_HOME variable in your environment to match the @@ -106,80 +140,95 @@ location of your Java installation." fi # Increase the maximum file descriptors if we can. -if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then - MAX_FD_LIMIT=`ulimit -H -n` - if [ $? -eq 0 ] ; then - if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then - MAX_FD="$MAX_FD_LIMIT" - fi - ulimit -n $MAX_FD - if [ $? -ne 0 ] ; then - warn "Could not set maximum file descriptor limit: $MAX_FD" - fi - else - warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" - fi +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac fi -# For Darwin, add options to specify how the application appears in the dock -if $darwin; then - GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" -fi +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. # For Cygwin or MSYS, switch paths to Windows format before running java -if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then - APP_HOME=`cygpath --path --mixed "$APP_HOME"` - CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` - - JAVACMD=`cygpath --unix "$JAVACMD"` - - # We build the pattern for arguments to be converted via cygpath - ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` - SEP="" - for dir in $ROOTDIRSRAW ; do - ROOTDIRS="$ROOTDIRS$SEP$dir" - SEP="|" - done - OURCYGPATTERN="(^($ROOTDIRS))" - # Add a user-defined pattern to the cygpath arguments - if [ "$GRADLE_CYGPATTERN" != "" ] ; then - OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" - fi +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + # Now convert the arguments - kludge to limit ourselves to /bin/sh - i=0 - for arg in "$@" ; do - CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` - CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option - - if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition - eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` - else - eval `echo args$i`="\"$arg\"" + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) fi - i=`expr $i + 1` + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg done - case $i in - 0) set -- ;; - 1) set -- "$args0" ;; - 2) set -- "$args0" "$args1" ;; - 3) set -- "$args0" "$args1" "$args2" ;; - 4) set -- "$args0" "$args1" "$args2" "$args3" ;; - 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; - 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; - 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; - 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; - 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; - esac fi -# Escape application args -save () { - for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done - echo " " -} -APP_ARGS=`save "$@"` +# Collect all arguments for the java command; +# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of +# shell script including quotes and variable substitutions, so put them in +# double quotes to make sure that they get re-expanded; and +# * put everything else in single quotes, so that it's not re-expanded. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# -# Collect all arguments for the java command, following the shell quoting and substitution rules -eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' exec "$JAVACMD" "$@" diff --git a/gradlew.bat b/gradlew.bat index 5093609d512..107acd32c4e 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -40,7 +40,7 @@ if defined JAVA_HOME goto findJavaFromJavaHome set JAVA_EXE=java.exe %JAVA_EXE% -version >NUL 2>&1 -if "%ERRORLEVEL%" == "0" goto init +if "%ERRORLEVEL%" == "0" goto execute echo. echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. @@ -54,7 +54,7 @@ goto fail set JAVA_HOME=%JAVA_HOME:"=% set JAVA_EXE=%JAVA_HOME%/bin/java.exe -if exist "%JAVA_EXE%" goto init +if exist "%JAVA_EXE%" goto execute echo. echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% @@ -64,21 +64,6 @@ echo location of your Java installation. goto fail -:init -@rem Get command-line arguments, handling Windows variants - -if not "%OS%" == "Windows_NT" goto win9xME_args - -:win9xME_args -@rem Slurp the command line arguments. -set CMD_LINE_ARGS= -set _SKIP=2 - -:win9xME_args_slurp -if "x%~1" == "x" goto execute - -set CMD_LINE_ARGS=%* - :execute @rem Setup the command line @@ -86,7 +71,7 @@ set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar @rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* :end @rem End local scope for the variables with windows NT shell From 3ca960e31b1432afc6994096b89eb8bd5f868a18 Mon Sep 17 00:00:00 2001 From: Josh Roy <10731363+JRoy@users.noreply.github.com> Date: Tue, 31 Aug 2021 13:04:34 -0400 Subject: [PATCH 066/120] Release 2.19.0 --- README.md | 4 ++-- build.gradle | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 57b9e8f89d1..acf2963a21b 100644 --- a/README.md +++ b/README.md @@ -65,9 +65,9 @@ To add EssentialsX to your build system, you should use the following artifacts: | Type | Group ID | Artifact ID | Version | | :-------------- | :-------------- | :---------- | :-------------- | -| Older releases | net.ess3 | EssentialsX | 2.18.2 | +| Latest release | net.essentialsx | EssentialsX | 2.19.0 | Snapshots | net.essentialsx | EssentialsX | 2.19.0-SNAPSHOT | -| Future releases | net.essentialsx | EssentialsX | 2.19.0 | +| Older releases | net.ess3 | EssentialsX | 2.18.2 | Note: up until `2.18.2`, EssentialsX used the `net.ess3` group ID, but starting with `2.19.0` snapshots, the group ID is now `net.essentialsx`. When updating your plugin, make sure you use the correct group ID. diff --git a/build.gradle b/build.gradle index 986d9b91fa5..2a4155befa3 100644 --- a/build.gradle +++ b/build.gradle @@ -3,7 +3,7 @@ plugins { } group = "net.essentialsx" -version = "2.19.0-SNAPSHOT" +version = "2.19.0" project.ext { GIT_COMMIT = !indraGit.isPresent() ? "unknown" : indraGit.commit().abbreviate(7).name() From d145fbc5ccba33a111b6188770aed138e2e6d3b8 Mon Sep 17 00:00:00 2001 From: MD <1917406+mdcfe@users.noreply.github.com> Date: Tue, 31 Aug 2021 21:27:35 +0100 Subject: [PATCH 067/120] Require forceSign property even on releases --- .../src/main/kotlin/essentials.base-conventions.gradle.kts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/build-logic/src/main/kotlin/essentials.base-conventions.gradle.kts b/build-logic/src/main/kotlin/essentials.base-conventions.gradle.kts index 3f058721f9e..48c7ce4a5da 100644 --- a/build-logic/src/main/kotlin/essentials.base-conventions.gradle.kts +++ b/build-logic/src/main/kotlin/essentials.base-conventions.gradle.kts @@ -70,6 +70,9 @@ tasks { withType<Jar> { archiveVersion.set(rootProject.ext["FULL_VERSION"] as String) } + withType<Sign> { + onlyIf { project.hasProperty("forceSign") } + } } // Dependency caching From b86a34c909f12351aca817843340869da8a5ee03 Mon Sep 17 00:00:00 2001 From: Josh Roy <10731363+JRoy@users.noreply.github.com> Date: Wed, 1 Sep 2021 04:55:37 -0700 Subject: [PATCH 068/120] Prepare for 2.19.1 dev builds (#4505) --- README.md | 2 +- build.gradle | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index acf2963a21b..58b0993e1d0 100644 --- a/README.md +++ b/README.md @@ -66,7 +66,7 @@ To add EssentialsX to your build system, you should use the following artifacts: | Type | Group ID | Artifact ID | Version | | :-------------- | :-------------- | :---------- | :-------------- | | Latest release | net.essentialsx | EssentialsX | 2.19.0 -| Snapshots | net.essentialsx | EssentialsX | 2.19.0-SNAPSHOT | +| Snapshots | net.essentialsx | EssentialsX | 2.19.1-SNAPSHOT | | Older releases | net.ess3 | EssentialsX | 2.18.2 | Note: up until `2.18.2`, EssentialsX used the `net.ess3` group ID, but starting with `2.19.0` snapshots, the group ID is now `net.essentialsx`. diff --git a/build.gradle b/build.gradle index 2a4155befa3..12ecf990c17 100644 --- a/build.gradle +++ b/build.gradle @@ -3,7 +3,7 @@ plugins { } group = "net.essentialsx" -version = "2.19.0" +version = "2.19.1-SNAPSHOT" project.ext { GIT_COMMIT = !indraGit.isPresent() ? "unknown" : indraGit.commit().abbreviate(7).name() From 19ca5186e44ba63d36812efab1a67ae3fc11882f Mon Sep 17 00:00:00 2001 From: Josh Roy <10731363+JRoy@users.noreply.github.com> Date: Wed, 1 Sep 2021 05:26:54 -0700 Subject: [PATCH 069/120] Replace unneeded inputs with new /ess dump in issue template (#4479) Co-authored-by: MD <1917406+mdcfe@users.noreply.github.com> --- .github/ISSUE_TEMPLATE/report-a-bug.yml | 18 ++---------------- 1 file changed, 2 insertions(+), 16 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/report-a-bug.yml b/.github/ISSUE_TEMPLATE/report-a-bug.yml index 2b0188ada97..abb2bea39c3 100644 --- a/.github/ISSUE_TEMPLATE/report-a-bug.yml +++ b/.github/ISSUE_TEMPLATE/report-a-bug.yml @@ -22,24 +22,10 @@ body: validations: required: true -- type: textarea - attributes: - label: "`/ess version` output" - description: Run `/ess version` in the console, then copy and paste the full output of the command into this box. - validations: - required: true -- type: input - attributes: - label: Server startup log - description: Upload your server startup log (from the start of `latest.log` up to where it says "Done!") to either https://paste.gg or https://gist.github.com, save and then paste the link in this box. - placeholder: "Example: https://paste.gg/p/anonymous/109dd6a10a734a3aa430d5a351ea5210" - validations: - required: true - type: input attributes: - label: EssentialsX config files - description: Upload your EssentialsX `config.yml` (and any other relevant files like `kits.yml`) to either https://paste.gg or https://gist.github.com, save and then paste the link in this box. If you included those files in the same paste as your startup log, paste the same link here. - placeholder: "Example: https://paste.gg/p/anonymous/109dd6a10a734a3aa430d5a351ea5210" + label: "`/ess dump *` output" + description: Run `/ess dump *` in the console, then copy and paste the link from the output of the command into this box. (If this command doesn't work, you should [update EssentialsX](https://essentialsx.net/downloads.html) and try again.) validations: required: true - type: input From b2886969f07a5aebea90b16dfd88997758d64d9a Mon Sep 17 00:00:00 2001 From: triagonal <10545540+triagonal@users.noreply.github.com> Date: Thu, 2 Sep 2021 03:33:43 +1000 Subject: [PATCH 070/120] Update to bStats v2 (#4350) Co-authored-by: MD <1917406+mdcfe@users.noreply.github.com> Co-authored-by: Josh Roy <10731363+JRoy@users.noreply.github.com> --- Essentials/build.gradle | 5 +- .../essentials/metrics/MetricsWrapper.java | 107 +++--------------- EssentialsXMPP/build.gradle | 2 +- .../essentials/xmpp/EssentialsXMPP.java | 4 +- 4 files changed, 21 insertions(+), 97 deletions(-) diff --git a/Essentials/build.gradle b/Essentials/build.gradle index a67c5083a6d..86d46d43993 100644 --- a/Essentials/build.gradle +++ b/Essentials/build.gradle @@ -10,6 +10,8 @@ dependencies { api 'io.papermc:paperlib:1.0.6' + api 'org.bstats:bstats-bukkit:2.2.1' + implementation 'org.spongepowered:configurate-yaml:4.1.2' implementation 'org.checkerframework:checker-qual:3.14.0' @@ -28,6 +30,7 @@ shadowJar { dependencies { include (dependency('io.papermc:paperlib')) include (dependency('org.bstats:bstats-bukkit')) + include (dependency('org.bstats:bstats-base')) include (dependency('org.spongepowered:configurate-yaml')) include (dependency('org.spongepowered:configurate-core')) include (dependency('org.yaml:snakeyaml')) @@ -39,7 +42,7 @@ shadowJar { include (project(':providers:1_8Provider')) } relocate 'io.papermc.lib', 'com.earth2me.essentials.paperlib' - relocate 'org.bstats.bukkit', 'com.earth2me.essentials.metrics' + relocate 'org.bstats', 'com.earth2me.essentials.libs.bstats' relocate 'org.spongepowered.configurate', 'com.earth2me.essentials.libs.configurate' relocate 'org.yaml.snakeyaml', 'com.earth2me.essentials.libs.snakeyaml' relocate 'io.leangen.geantyref', 'com.earth2me.essentials.libs.geantyref' diff --git a/Essentials/src/main/java/com/earth2me/essentials/metrics/MetricsWrapper.java b/Essentials/src/main/java/com/earth2me/essentials/metrics/MetricsWrapper.java index ba80b7131fb..f57a0b7606d 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/metrics/MetricsWrapper.java +++ b/Essentials/src/main/java/com/earth2me/essentials/metrics/MetricsWrapper.java @@ -3,40 +3,32 @@ import com.earth2me.essentials.Essentials; import com.earth2me.essentials.economy.EconomyLayer; import com.earth2me.essentials.economy.EconomyLayers; -import com.google.common.collect.ImmutableList; import org.bstats.bukkit.Metrics; +import org.bstats.charts.AdvancedBarChart; +import org.bstats.charts.CustomChart; +import org.bstats.charts.DrilldownPie; +import org.bstats.charts.MultiLineChart; +import org.bstats.charts.SimplePie; import org.bukkit.Bukkit; -import org.bukkit.plugin.Plugin; import org.bukkit.plugin.java.JavaPlugin; -import java.lang.reflect.Field; import java.util.HashMap; -import java.util.List; import java.util.Map; public class MetricsWrapper { - private static final List<String> KNOWN_FORCED_METRICS = ImmutableList.of( - "ChatControl", - "catserver.server.Metrics"); - private static boolean hasWarned = false; private final Essentials ess; private final Metrics metrics; + private final JavaPlugin plugin; private final Map<String, Boolean> commands = new HashMap<>(); - private final Plugin plugin; - public MetricsWrapper(final Plugin plugin, final int pluginId, final boolean includeCommands) { + public MetricsWrapper(final JavaPlugin plugin, final int pluginId, final boolean includeCommands) { this.plugin = plugin; this.ess = (Essentials) Bukkit.getPluginManager().getPlugin("Essentials"); this.metrics = new Metrics(plugin, pluginId); - if (metrics.isEnabled()) { - plugin.getLogger().info("Starting Metrics. Opt-out using the global bStats config."); - } else { - plugin.getLogger().info("Metrics disabled per bStats config."); - } + plugin.getLogger().info("Starting Metrics. Opt-out using the global bStats config."); - checkForcedMetrics(); addPermsChart(); addEconomyChart(); addReleaseBranchChart(); @@ -51,12 +43,12 @@ public void markCommand(final String command, final boolean state) { commands.put(command, state); } - public void addCustomChart(final Metrics.CustomChart chart) { + public void addCustomChart(final CustomChart chart) { metrics.addCustomChart(chart); } private void addPermsChart() { - metrics.addCustomChart(new Metrics.DrilldownPie("permsPlugin", () -> { + metrics.addCustomChart(new DrilldownPie("permsPlugin", () -> { final Map<String, Map<String, Integer>> result = new HashMap<>(); final String handler = ess.getPermissionsHandler().getName(); final Map<String, Integer> backend = new HashMap<>(); @@ -67,7 +59,7 @@ private void addPermsChart() { } private void addEconomyChart() { - metrics.addCustomChart(new Metrics.DrilldownPie("econPlugin", () -> { + metrics.addCustomChart(new DrilldownPie("econPlugin", () -> { final Map<String, Map<String, Integer>> result = new HashMap<>(); final Map<String, Integer> backend = new HashMap<>(); final EconomyLayer layer = EconomyLayers.getSelectedLayer(); @@ -83,7 +75,7 @@ private void addEconomyChart() { } private void addVersionHistoryChart() { - metrics.addCustomChart(new Metrics.MultiLineChart("versionHistory", () -> { + metrics.addCustomChart(new MultiLineChart("versionHistory", () -> { final HashMap<String, Integer> result = new HashMap<>(); result.put(plugin.getDescription().getVersion(), 1); return result; @@ -91,7 +83,7 @@ private void addVersionHistoryChart() { } private void addReleaseBranchChart() { - metrics.addCustomChart(new Metrics.SimplePie("releaseBranch", ess.getUpdateChecker()::getVersionBranch)); + metrics.addCustomChart(new SimplePie("releaseBranch", ess.getUpdateChecker()::getVersionBranch)); } private void addCommandsChart() { @@ -99,7 +91,7 @@ private void addCommandsChart() { markCommand(command, false); } - metrics.addCustomChart(new Metrics.AdvancedBarChart("commands", () -> { + metrics.addCustomChart(new AdvancedBarChart("commands", () -> { final Map<String, int[]> result = new HashMap<>(); for (final Map.Entry<String, Boolean> entry : commands.entrySet()) { if (entry.getValue()) { @@ -112,75 +104,4 @@ private void addCommandsChart() { })); } - private boolean isForcedMetricsClass(Class<?> bStatsService) { - for (String identifier : KNOWN_FORCED_METRICS) { - if (bStatsService.getCanonicalName().contains(identifier)) { - return true; - } - } - - final JavaPlugin owningPlugin = getProvidingPlugin(bStatsService); - if (owningPlugin != null && KNOWN_FORCED_METRICS.contains(owningPlugin.getName())) { - return true; - } - return false; - } - - private void checkForcedMetrics() { - if (hasWarned) return; - hasWarned = true; - - Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, () -> { - for (final Class<?> service : Bukkit.getServicesManager().getKnownServices()) { - try { - service.getField("B_STATS_VERSION"); // Identifies bStats classes - - if (isForcedMetricsClass(service)) { - warnForcedMetrics(service); - } else { - try { - service.getDeclaredField("pluginId"); // Only present in recent bStats classes, which should also have the enabled field unless modified - } catch (final NoSuchFieldException e) { - // Old bStats class found so "enabled" field detection is unreliable. - break; - } - - try { - service.getDeclaredField("enabled"); // In some modified forced metrics classes, this will fail - } catch (final NoSuchFieldException e) { - warnForcedMetrics(service); - } - } - } catch (final NoSuchFieldException ignored) { - } - } - }); - } - - private void warnForcedMetrics(final Class<?> service) { - final Plugin servicePlugin = JavaPlugin.getProvidingPlugin(service); - plugin.getLogger().severe("WARNING: Potential forced metrics collection by plugin '" + servicePlugin.getName() + "' v" + servicePlugin.getDescription().getVersion()); - plugin.getLogger().severe("Your server is running a plugin that may not respect bStats' opt-out settings."); - plugin.getLogger().severe("This may cause data to be uploaded to bStats.org for plugins that use bStats, even if you've opted out in the bStats config."); - plugin.getLogger().severe("Please report this to bStats and to the authors of '" + servicePlugin.getName() + "'. (Offending class: " + service.getName() + ")"); - } - - private JavaPlugin getProvidingPlugin(final Class<?> clazz) { - try { - return JavaPlugin.getProvidingPlugin(clazz); - } catch (final Exception ignored) { - } - - final ClassLoader parent = clazz.getClassLoader().getParent(); - if (parent.getClass().getName().equals("org.bukkit.plugin.java.PluginClassLoader")) { - try { - final Field pluginField = parent.getClass().getDeclaredField("plugin"); - pluginField.setAccessible(true); - return (JavaPlugin) pluginField.get(parent); - } catch (final Exception ignored) { - } - } - - return null; - } } diff --git a/EssentialsXMPP/build.gradle b/EssentialsXMPP/build.gradle index 048ae44e24d..5af0ff05c13 100644 --- a/EssentialsXMPP/build.gradle +++ b/EssentialsXMPP/build.gradle @@ -11,5 +11,5 @@ shadowJar { dependencies { include (dependency('org.igniterealtime.smack:smack')) } - relocate 'org.bstats.bukkit', 'com.earth2me.essentials.metrics' + relocate 'org.bstats', 'com.earth2me.essentials.libs.bstats' } diff --git a/EssentialsXMPP/src/main/java/com/earth2me/essentials/xmpp/EssentialsXMPP.java b/EssentialsXMPP/src/main/java/com/earth2me/essentials/xmpp/EssentialsXMPP.java index 3314d6b6aa1..5ddc91c014c 100644 --- a/EssentialsXMPP/src/main/java/com/earth2me/essentials/xmpp/EssentialsXMPP.java +++ b/EssentialsXMPP/src/main/java/com/earth2me/essentials/xmpp/EssentialsXMPP.java @@ -3,7 +3,7 @@ import com.earth2me.essentials.IEssentials; import com.earth2me.essentials.metrics.MetricsWrapper; import net.ess3.api.IUser; -import org.bstats.bukkit.Metrics; +import org.bstats.charts.SimplePie; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; @@ -56,7 +56,7 @@ public void onEnable() { if (metrics == null) { metrics = new MetricsWrapper(this, 3818, true); - metrics.addCustomChart(new Metrics.SimplePie("config-valid", () -> xmpp.isConfigValid() ? "yes" : "no")); + metrics.addCustomChart(new SimplePie("config-valid", () -> xmpp.isConfigValid() ? "yes" : "no")); } } From fde6524e465e619a8a88815fbaa7c717361d9c9d Mon Sep 17 00:00:00 2001 From: MD <1917406+mdcfe@users.noreply.github.com> Date: Wed, 1 Sep 2021 18:37:46 +0100 Subject: [PATCH 071/120] Fix error with commands ending in single colon (#4508) Co-authored-by: Josh Roy <10731363+JRoy@users.noreply.github.com> --- .../com/earth2me/essentials/AlternativeCommandsHandler.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Essentials/src/main/java/com/earth2me/essentials/AlternativeCommandsHandler.java b/Essentials/src/main/java/com/earth2me/essentials/AlternativeCommandsHandler.java index 8657dffd681..2be729a4d33 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/AlternativeCommandsHandler.java +++ b/Essentials/src/main/java/com/earth2me/essentials/AlternativeCommandsHandler.java @@ -33,7 +33,8 @@ public final void addPlugin(final Plugin plugin) { return; } for (final Map.Entry<String, Command> entry : getPluginCommands(plugin).entrySet()) { - final String commandName = entry.getKey().contains(":") ? entry.getKey().split(":")[1] : entry.getKey(); + final String[] commandSplit = entry.getKey().split(":", 2); + final String commandName = commandSplit.length > 1 ? commandSplit[1] : entry.getKey(); final Command command = entry.getValue(); final List<Command> pluginCommands = altcommands.computeIfAbsent(commandName.toLowerCase(Locale.ENGLISH), k -> new ArrayList<>()); From c85d772e1b709bb0d65f9ff7de10879029805cf0 Mon Sep 17 00:00:00 2001 From: Lax <LaxWasHere@PoweredByHate.net> Date: Wed, 8 Sep 2021 14:48:47 -0700 Subject: [PATCH 072/120] Add `/ess dump all` as alias for `/ess dump *` (#4517) Co-authored-by: Josh Roy <10731363+JRoy@users.noreply.github.com> --- .github/ISSUE_TEMPLATE/report-a-bug.yml | 4 ++-- .../com/earth2me/essentials/commands/Commandessentials.java | 6 +++--- Essentials/src/main/resources/messages.properties | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/report-a-bug.yml b/.github/ISSUE_TEMPLATE/report-a-bug.yml index abb2bea39c3..7c385ca3f33 100644 --- a/.github/ISSUE_TEMPLATE/report-a-bug.yml +++ b/.github/ISSUE_TEMPLATE/report-a-bug.yml @@ -24,8 +24,8 @@ body: - type: input attributes: - label: "`/ess dump *` output" - description: Run `/ess dump *` in the console, then copy and paste the link from the output of the command into this box. (If this command doesn't work, you should [update EssentialsX](https://essentialsx.net/downloads.html) and try again.) + label: "`/ess dump all` output" + description: Run `/ess dump all` in the console, then copy and paste the link from the output of the command into this box. (If this command doesn't work, you should [update EssentialsX](https://essentialsx.net/downloads.html) and try again.) validations: required: true - type: input diff --git a/Essentials/src/main/java/com/earth2me/essentials/commands/Commandessentials.java b/Essentials/src/main/java/com/earth2me/essentials/commands/Commandessentials.java index 984f9cb4cd1..2295294bb0c 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/commands/Commandessentials.java +++ b/Essentials/src/main/java/com/earth2me/essentials/commands/Commandessentials.java @@ -266,7 +266,7 @@ private void runDump(Server server, CommandSource sender, String commandLabel, S boolean kits = false; boolean log = false; for (final String arg : args) { - if (arg.equals("*")) { + if (arg.equals("*") || arg.equalsIgnoreCase("all")) { config = true; discord = true; kits = true; @@ -719,9 +719,9 @@ protected List<String> getTabCompleteOptions(final Server server, final CommandS } break; case "dump": - final List<String> list = Lists.newArrayList("config", "kits", "log", "discord", "*"); + final List<String> list = Lists.newArrayList("config", "kits", "log", "discord", "all"); for (String arg : args) { - if (arg.equals("*")) { + if (arg.equals("*") || arg.equalsIgnoreCase("all")) { list.clear(); return list; } diff --git a/Essentials/src/main/resources/messages.properties b/Essentials/src/main/resources/messages.properties index 16e282a8b7f..6a083cd7a1a 100644 --- a/Essentials/src/main/resources/messages.properties +++ b/Essentials/src/main/resources/messages.properties @@ -316,7 +316,7 @@ essentialsCommandUsage6=/<command> cleanup essentialsCommandUsage6Description=Cleans up old userdata essentialsCommandUsage7=/<command> homes essentialsCommandUsage7Description=Manages user homes -essentialsCommandUsage8=/<command> dump [*] [config] [discord] [kits] [log] +essentialsCommandUsage8=/<command> dump [all] [config] [discord] [kits] [log] essentialsCommandUsage8Description=Generates a server dump with the requested information essentialsHelp1=The file is broken and Essentials can''t open it. Essentials is now disabled. If you can''t fix the file yourself, go to http\://tiny.cc/EssentialsChat essentialsHelp2=The file is broken and Essentials can''t open it. Essentials is now disabled. If you can''t fix the file yourself, either type /essentialshelp in game or go to http\://tiny.cc/EssentialsChat From 767508fb874ec1aead43576ba7ea35c8aff0d5c2 Mon Sep 17 00:00:00 2001 From: Josh Roy <10731363+JRoy@users.noreply.github.com> Date: Wed, 15 Sep 2021 10:40:23 -0400 Subject: [PATCH 073/120] Fix bed spawn setting when waking up villagers (#4524) Fixes #4461. --- .../java/com/earth2me/essentials/EssentialsPlayerListener.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Essentials/src/main/java/com/earth2me/essentials/EssentialsPlayerListener.java b/Essentials/src/main/java/com/earth2me/essentials/EssentialsPlayerListener.java index 9d341600080..0a7d2695682 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/EssentialsPlayerListener.java +++ b/Essentials/src/main/java/com/earth2me/essentials/EssentialsPlayerListener.java @@ -738,6 +738,9 @@ public void onPlayerInteract(final PlayerInteractEvent event) { switch (event.getAction()) { case RIGHT_CLICK_BLOCK: if (!event.isCancelled() && MaterialUtil.isBed(event.getClickedBlock().getType()) && ess.getSettings().getUpdateBedAtDaytime()) { + if (VersionUtil.getServerBukkitVersion().isHigherThanOrEqualTo(VersionUtil.v1_13_2_R01) && ((org.bukkit.block.data.type.Bed) event.getClickedBlock().getBlockData()).isOccupied()) { + break; + } final User player = ess.getUser(event.getPlayer()); if (player.isAuthorized("essentials.sethome.bed") && player.getWorld().getEnvironment().equals(World.Environment.NORMAL)) { player.getBase().setBedSpawnLocation(event.getClickedBlock().getLocation()); From d86b471402e20f39a774fba2ae5ba6dc3cc26712 Mon Sep 17 00:00:00 2001 From: Josh Roy <10731363+JRoy@users.noreply.github.com> Date: Wed, 15 Sep 2021 10:52:14 -0400 Subject: [PATCH 074/120] Add action message type (#4520) Adds a message type which will show when a player runs the /action (/me) command. Message Type: ```yml # Configure which Discord channels different messages will be sent to. # You can either use the names of the channels listed above or just the id of a channel. # If an invalid channel is used, the primary channel will be used instead. # # To disable a message from showing, use 'none' as the channel name. message-types: ... # Action messages sent when a player runs the /me or /action commands. action: primary ``` Message Format: ```yml # The following entries allow you to customize the formatting of messages sent by the plugin. # Each message has a description of how it is used along with placeholders that can be used. messages: ... # This is the message sent to Discord when a player runs the /me or /action command. # The following placeholders can be used here: # - {username}: The name of the user who ran the command # - {displayname}: The display name of the user who ran the command # - {action}: The action (message) the user used in the command. # ... PlaceholderAPI placeholders are also supported here too! action: ":person_biking: {displayname} *{action}*" ``` --- .../essentials/commands/Commandme.java | 3 ++ .../api/v2/events/UserActionEvent.java | 46 +++++++++++++++++++ .../api/v2/services/discord/MessageType.java | 3 +- .../essentialsx/discord/DiscordSettings.java | 12 +++++ .../discord/listeners/BukkitListener.java | 15 ++++++ .../src/main/resources/config.yml | 9 ++++ 6 files changed, 87 insertions(+), 1 deletion(-) create mode 100644 Essentials/src/main/java/net/essentialsx/api/v2/events/UserActionEvent.java diff --git a/Essentials/src/main/java/com/earth2me/essentials/commands/Commandme.java b/Essentials/src/main/java/com/earth2me/essentials/commands/Commandme.java index 114b0ddd71b..bde26a1b7dc 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/commands/Commandme.java +++ b/Essentials/src/main/java/com/earth2me/essentials/commands/Commandme.java @@ -4,6 +4,7 @@ import com.earth2me.essentials.User; import com.earth2me.essentials.utils.DateUtil; import com.earth2me.essentials.utils.FormatUtil; +import net.essentialsx.api.v2.events.UserActionEvent; import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.Server; @@ -44,6 +45,7 @@ public void run(final Server server, final User user, final String commandLabel, final String toSend = tl("action", user.getDisplayName(), message); if (radius < 1) { ess.broadcastMessage(user, toSend); + ess.getServer().getPluginManager().callEvent(new UserActionEvent(user, message, Collections.unmodifiableCollection(ess.getServer().getOnlinePlayers()))); return; } radius *= radius; @@ -86,6 +88,7 @@ public void run(final Server server, final User user, final String commandLabel, for (final Player onlinePlayer : outList) { onlinePlayer.sendMessage(toSend); } + ess.getServer().getPluginManager().callEvent(new UserActionEvent(user, message, Collections.unmodifiableCollection(outList))); } @Override diff --git a/Essentials/src/main/java/net/essentialsx/api/v2/events/UserActionEvent.java b/Essentials/src/main/java/net/essentialsx/api/v2/events/UserActionEvent.java new file mode 100644 index 00000000000..e3cda6a398e --- /dev/null +++ b/Essentials/src/main/java/net/essentialsx/api/v2/events/UserActionEvent.java @@ -0,0 +1,46 @@ +package net.essentialsx.api.v2.events; + +import net.ess3.api.IUser; +import org.bukkit.entity.Player; +import org.bukkit.event.Event; +import org.bukkit.event.HandlerList; + +import java.util.Collection; + +/** + * Called when a user runs the /me command. + */ +public class UserActionEvent extends Event { + private static final HandlerList handlers = new HandlerList(); + + private final IUser user; + private final String message; + private final Collection<Player> recipients; + + public UserActionEvent(IUser user, String message, Collection<Player> recipients) { + this.user = user; + this.message = message; + this.recipients = recipients; + } + + public IUser getUser() { + return user; + } + + public String getMessage() { + return message; + } + + public Collection<Player> getRecipients() { + return recipients; + } + + @Override + public HandlerList getHandlers() { + return handlers; + } + + public static HandlerList getHandlerList() { + return handlers; + } +} diff --git a/EssentialsDiscord/src/main/java/net/essentialsx/api/v2/services/discord/MessageType.java b/EssentialsDiscord/src/main/java/net/essentialsx/api/v2/services/discord/MessageType.java index fe33252b648..a702101e6fb 100644 --- a/EssentialsDiscord/src/main/java/net/essentialsx/api/v2/services/discord/MessageType.java +++ b/EssentialsDiscord/src/main/java/net/essentialsx/api/v2/services/discord/MessageType.java @@ -59,11 +59,12 @@ public static final class DefaultTypes { public final static MessageType DEATH = new MessageType("death", true); public final static MessageType AFK = new MessageType("afk", true); public final static MessageType ADVANCEMENT = new MessageType("advancement", true); + public final static MessageType ACTION = new MessageType("action", true); public final static MessageType SERVER_START = new MessageType("server-start", false); public final static MessageType SERVER_STOP = new MessageType("server-stop", false); public final static MessageType KICK = new MessageType("kick", false); public final static MessageType MUTE = new MessageType("mute", false); - private final static MessageType[] VALUES = new MessageType[]{JOIN, LEAVE, CHAT, DEATH, AFK, ADVANCEMENT, SERVER_START, SERVER_STOP, KICK, MUTE}; + private final static MessageType[] VALUES = new MessageType[]{JOIN, LEAVE, CHAT, DEATH, AFK, ADVANCEMENT, ACTION, SERVER_START, SERVER_STOP, KICK, MUTE}; /** * Gets an array of all the default {@link MessageType MessageTypes}. diff --git a/EssentialsDiscord/src/main/java/net/essentialsx/discord/DiscordSettings.java b/EssentialsDiscord/src/main/java/net/essentialsx/discord/DiscordSettings.java index ec6d2059f46..cb31be06a3e 100644 --- a/EssentialsDiscord/src/main/java/net/essentialsx/discord/DiscordSettings.java +++ b/EssentialsDiscord/src/main/java/net/essentialsx/discord/DiscordSettings.java @@ -301,6 +301,18 @@ public MessageFormat getAdvancementFormat(Player player) { "username", "displayname", "advancement"); } + public MessageFormat getActionFormat(Player player) { + final String format = getFormatString("action"); + final String filled; + if (plugin.isPAPI() && format != null) { + filled = me.clip.placeholderapi.PlaceholderAPI.setPlaceholders(player, format); + } else { + filled = format; + } + return generateMessageFormat(filled, ":person_biking: {displayname} *{action}*", false, + "username", "displayname", "action"); + } + public String getStartMessage() { return config.getString("messages.server-start", ":white_check_mark: The server has started!"); } diff --git a/EssentialsDiscord/src/main/java/net/essentialsx/discord/listeners/BukkitListener.java b/EssentialsDiscord/src/main/java/net/essentialsx/discord/listeners/BukkitListener.java index 68ca0eeb2f4..338f9e25bf9 100644 --- a/EssentialsDiscord/src/main/java/net/essentialsx/discord/listeners/BukkitListener.java +++ b/EssentialsDiscord/src/main/java/net/essentialsx/discord/listeners/BukkitListener.java @@ -9,6 +9,7 @@ import net.ess3.api.events.VanishStatusChangeEvent; import net.ess3.provider.AbstractAchievementEvent; import net.essentialsx.api.v2.events.AsyncUserDataLoadEvent; +import net.essentialsx.api.v2.events.UserActionEvent; import net.essentialsx.api.v2.events.discord.DiscordChatMessageEvent; import net.essentialsx.api.v2.events.discord.DiscordMessageEvent; import net.essentialsx.api.v2.services.discord.MessageType; @@ -203,6 +204,20 @@ public void onAdvancement(AbstractAchievementEvent event) { event.getPlayer()); } + @EventHandler(priority = EventPriority.MONITOR) + public void onAction(UserActionEvent event) { + if (isVanishHide(event.getUser())) { + return; + } + + sendDiscordMessage(MessageType.DefaultTypes.ACTION, + MessageUtil.formatMessage(jda.getSettings().getActionFormat(event.getUser().getBase()), + MessageUtil.sanitizeDiscordMarkdown(event.getUser().getName()), + MessageUtil.sanitizeDiscordMarkdown(event.getUser().getDisplayName()), + event.getMessage()), + event.getUser().getBase()); + } + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void onKick(PlayerKickEvent event) { if (isVanishHide(event.getPlayer())) { diff --git a/EssentialsDiscord/src/main/resources/config.yml b/EssentialsDiscord/src/main/resources/config.yml index d8bb0b0a451..f018d3128f1 100644 --- a/EssentialsDiscord/src/main/resources/config.yml +++ b/EssentialsDiscord/src/main/resources/config.yml @@ -119,6 +119,8 @@ message-types: afk: primary # Achievement/advancement messages sent when a player is awarded an achievement/advancement. advancement: primary + # Action messages sent when a player runs the /me or /action commands. + action: primary # Message sent when the server starts up. server-start: primary # Message sent when the server shuts down. @@ -332,6 +334,13 @@ messages: # - {advancement}: The name of the advancement. # ... PlaceholderAPI placeholders are also supported here too! advancement: ":medal: {displayname} has completed the advancement **{advancement}**!" + # This is the message sent to Discord when a player runs the /me or /action command. + # The following placeholders can be used here: + # - {username}: The name of the user who ran the command + # - {displayname}: The display name of the user who ran the command + # - {action}: The action (message) the user used in the command. + # ... PlaceholderAPI placeholders are also supported here too! + action: ":person_biking: {displayname} *{action}*" # This is the message sent to Discord when the server starts. server-start: ":white_check_mark: The server has started!" # This is the message sent to Discord when the server stops. From f0da17b75cafa67ed45c7073c29c7cb4a869d415 Mon Sep 17 00:00:00 2001 From: MD <1917406+mdcfe@users.noreply.github.com> Date: Wed, 15 Sep 2021 22:23:31 +0100 Subject: [PATCH 075/120] Asynchronously filter commands on Paper when possible (#4460) Co-authored-by: MD <1917406+mdcfe@users.noreply.github.com> Co-authored-by: Josh Roy <10731363+JRoy@users.noreply.github.com> --- .../essentials/EssentialsPlayerListener.java | 43 +++++++++++-------- .../provider/CommandSendListenerProvider.java | 30 +++++++++++++ .../BukkitCommandSendListenerProvider.java | 25 +++++++++++ providers/PaperProvider/build.gradle | 1 + .../PaperCommandSendListenerProvider.java | 35 +++++++++++++++ settings.gradle.kts | 3 ++ 6 files changed, 120 insertions(+), 17 deletions(-) create mode 100644 providers/BaseProviders/src/main/java/net/ess3/provider/CommandSendListenerProvider.java create mode 100644 providers/BaseProviders/src/main/java/net/ess3/provider/providers/BukkitCommandSendListenerProvider.java create mode 100644 providers/PaperProvider/src/main/java/net/ess3/provider/providers/PaperCommandSendListenerProvider.java diff --git a/Essentials/src/main/java/com/earth2me/essentials/EssentialsPlayerListener.java b/Essentials/src/main/java/com/earth2me/essentials/EssentialsPlayerListener.java index 0a7d2695682..b5aa2e64d7a 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/EssentialsPlayerListener.java +++ b/Essentials/src/main/java/com/earth2me/essentials/EssentialsPlayerListener.java @@ -13,6 +13,9 @@ import io.papermc.lib.PaperLib; import net.ess3.api.IEssentials; import net.ess3.api.events.AfkStatusChangeEvent; +import net.ess3.provider.CommandSendListenerProvider; +import net.ess3.provider.providers.BukkitCommandSendListenerProvider; +import net.ess3.provider.providers.PaperCommandSendListenerProvider; import net.essentialsx.api.v2.events.AsyncUserDataLoadEvent; import org.bukkit.BanEntry; import org.bukkit.BanList; @@ -37,7 +40,6 @@ import org.bukkit.event.player.PlayerBucketEmptyEvent; import org.bukkit.event.player.PlayerChangedWorldEvent; import org.bukkit.event.player.PlayerCommandPreprocessEvent; -import org.bukkit.event.player.PlayerCommandSendEvent; import org.bukkit.event.player.PlayerEggThrowEvent; import org.bukkit.event.player.PlayerFishEvent; import org.bukkit.event.player.PlayerInteractEvent; @@ -68,6 +70,7 @@ import java.util.Set; import java.util.UUID; import java.util.concurrent.ConcurrentHashMap; +import java.util.function.Predicate; import java.util.logging.Level; import java.util.logging.Logger; import java.util.regex.Pattern; @@ -101,6 +104,15 @@ private static boolean isCommandSendEvent() { } } + private static boolean isPaperCommandSendEvent() { + try { + Class.forName("com.destroystokyo.paper.event.brigadier.AsyncPlayerSendCommandsEvent"); + return true; + } catch (final ClassNotFoundException ignored) { + return false; + } + } + private static boolean isArrowPickupEvent() { try { Class.forName("org.bukkit.event.player.PlayerPickupArrowEvent"); @@ -123,8 +135,10 @@ public void registerEvents() { ess.getServer().getPluginManager().registerEvents(new PickupListenerPre1_12(), ess); } - if (isCommandSendEvent()) { - ess.getServer().getPluginManager().registerEvents(new CommandSendListener(), ess); + if (isPaperCommandSendEvent()) { + ess.getServer().getPluginManager().registerEvents(new PaperCommandSendListenerProvider(new CommandSendFilter()), ess); + } else if (isCommandSendEvent()) { + ess.getServer().getPluginManager().registerEvents(new BukkitCommandSendListenerProvider(new CommandSendFilter()), ess); } } @@ -975,15 +989,14 @@ public void onPlayerPickupItem(final org.bukkit.event.entity.EntityPickupItemEve } } - private final class CommandSendListener implements Listener { - @EventHandler(priority = EventPriority.NORMAL) - public void onCommandSend(final PlayerCommandSendEvent event) { - final User user = ess.getUser(event.getPlayer()); - + private final class CommandSendFilter implements CommandSendListenerProvider.Filter { + @Override + public Predicate<String> apply(Player player) { + final User user = ess.getUser(player); final Set<PluginCommand> checked = new HashSet<>(); final Set<PluginCommand> toRemove = new HashSet<>(); - event.getCommands().removeIf(label -> { + return label -> { if (isEssentialsCommand(label)) { final PluginCommand command = ess.getServer().getPluginCommand(label); if (!checked.contains(command)) { @@ -995,25 +1008,21 @@ public void onCommandSend(final PlayerCommandSendEvent event) { return toRemove.contains(command); } return false; - }); - - if (ess.getSettings().isDebug()) { - ess.getLogger().info("Removed commands: " + toRemove.toString()); - } + }; } /** * Returns true if all of the following are true: * - The command is a plugin command - * - The plugin command is from a plugin in an essentials-controlled package + * - The plugin command is from an official EssentialsX plugin or addon * - There is no known alternative OR the alternative is overridden by Essentials */ private boolean isEssentialsCommand(final String label) { final PluginCommand command = ess.getServer().getPluginCommand(label); return command != null - && (command.getPlugin() == ess || command.getPlugin().getClass().getName().startsWith("com.earth2me.essentials")) - && (ess.getSettings().isCommandOverridden(label) || (ess.getAlternativeCommandsHandler().getAlternative(label) == null)); + && (command.getPlugin() == ess || command.getPlugin().getClass().getName().startsWith("com.earth2me.essentials") || command.getPlugin().getClass().getName().startsWith("net.essentialsx")) + && (ess.getSettings().isCommandOverridden(label) || (ess.getAlternativeCommandsHandler().getAlternative(label) == null)); } } diff --git a/providers/BaseProviders/src/main/java/net/ess3/provider/CommandSendListenerProvider.java b/providers/BaseProviders/src/main/java/net/ess3/provider/CommandSendListenerProvider.java new file mode 100644 index 00000000000..5c69003e845 --- /dev/null +++ b/providers/BaseProviders/src/main/java/net/ess3/provider/CommandSendListenerProvider.java @@ -0,0 +1,30 @@ +package net.ess3.provider; + +import org.bukkit.entity.Player; +import org.bukkit.event.Listener; + +import java.util.function.Function; +import java.util.function.Predicate; + +/** + * A provider for 1.13+ command send listeners. + * <p> + * Note to maintainers: this doesn't extend {@link ProviderListener} because it doesn't make sense here. + */ +public abstract class CommandSendListenerProvider implements Provider, Listener { + private final Filter commandFilter; + + protected CommandSendListenerProvider(Filter commandFilter) { + this.commandFilter = commandFilter; + } + + protected final Predicate<String> filter(final Player player) { + return commandFilter.apply(player); + } + + /** + * A function that returns a predicate to test whether commands should be hidden from the given player. + */ + public interface Filter extends Function<Player, Predicate<String>> { + } +} diff --git a/providers/BaseProviders/src/main/java/net/ess3/provider/providers/BukkitCommandSendListenerProvider.java b/providers/BaseProviders/src/main/java/net/ess3/provider/providers/BukkitCommandSendListenerProvider.java new file mode 100644 index 00000000000..d3feffc687c --- /dev/null +++ b/providers/BaseProviders/src/main/java/net/ess3/provider/providers/BukkitCommandSendListenerProvider.java @@ -0,0 +1,25 @@ +package net.ess3.provider.providers; + +import net.ess3.provider.CommandSendListenerProvider; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.player.PlayerCommandSendEvent; + +import java.util.function.Predicate; + +public class BukkitCommandSendListenerProvider extends CommandSendListenerProvider { + public BukkitCommandSendListenerProvider(Filter commandFilter) { + super(commandFilter); + } + + @EventHandler(priority = EventPriority.NORMAL) + public void onCommandSend(PlayerCommandSendEvent event) { + final Predicate<String> filter = filter(event.getPlayer()); + event.getCommands().removeIf(filter); + } + + @Override + public String getDescription() { + return "Bukkit synchronous command send listener"; + } +} diff --git a/providers/PaperProvider/build.gradle b/providers/PaperProvider/build.gradle index 49ced3f5a5d..1b1dba5379f 100644 --- a/providers/PaperProvider/build.gradle +++ b/providers/PaperProvider/build.gradle @@ -5,6 +5,7 @@ plugins { dependencies { implementation project(':providers:BaseProviders') compileOnly 'com.destroystokyo.paper:paper-api:1.16.5-R0.1-SNAPSHOT' + compileOnly 'com.destroystokyo.paper:paper-mojangapi:1.16.5-R0.1-SNAPSHOT' } essentials { diff --git a/providers/PaperProvider/src/main/java/net/ess3/provider/providers/PaperCommandSendListenerProvider.java b/providers/PaperProvider/src/main/java/net/ess3/provider/providers/PaperCommandSendListenerProvider.java new file mode 100644 index 00000000000..1bc1a56e440 --- /dev/null +++ b/providers/PaperProvider/src/main/java/net/ess3/provider/providers/PaperCommandSendListenerProvider.java @@ -0,0 +1,35 @@ +package net.ess3.provider.providers; + +import com.destroystokyo.paper.event.brigadier.AsyncPlayerSendCommandsEvent; +import com.mojang.brigadier.tree.CommandNode; +import net.ess3.provider.CommandSendListenerProvider; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; + +import java.util.Collection; +import java.util.function.Predicate; + +public class PaperCommandSendListenerProvider extends CommandSendListenerProvider { + + public PaperCommandSendListenerProvider(Filter commandFilter) { + super(commandFilter); + } + + @EventHandler(priority = EventPriority.NORMAL) + public void onAsyncCommandSend(@SuppressWarnings("deprecation") AsyncPlayerSendCommandsEvent<?> event) { + if (!event.isAsynchronous() && event.hasFiredAsync()) { + // this has already fired once async + return; + } + + final Collection<? extends CommandNode<?>> children = event.getCommandNode().getChildren(); + final Predicate<String> filter = filter(event.getPlayer()); + + children.removeIf(node -> filter.test(node.getName())); + } + + @Override + public String getDescription() { + return "Paper async Brigadier command send listener"; + } +} diff --git a/settings.gradle.kts b/settings.gradle.kts index bd9fa6fc189..0ad3170fc9a 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -14,6 +14,9 @@ dependencyResolutionManagement { maven("https://repo.extendedclip.com/content/repositories/placeholderapi/") { content { includeGroup("me.clip") } } + maven("https://libraries.minecraft.net/") { + content { includeGroup("com.mojang") } + } mavenCentral { content { includeGroup("net.kyori") } } From 7d7a8e47aca460d5db9a83f4e01b27ee2a6fa097 Mon Sep 17 00:00:00 2001 From: Josh Roy <10731363+JRoy@users.noreply.github.com> Date: Tue, 28 Sep 2021 09:09:04 -0400 Subject: [PATCH 076/120] Fix verbose command usages not being disabled properly (#4530) Co-authored-by: MD <1917406+mdcfe@users.noreply.github.com> --- .../src/main/java/com/earth2me/essentials/Essentials.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/Essentials/src/main/java/com/earth2me/essentials/Essentials.java b/Essentials/src/main/java/com/earth2me/essentials/Essentials.java index fa4a8a3ceed..9c87875cde3 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/Essentials.java +++ b/Essentials/src/main/java/com/earth2me/essentials/Essentials.java @@ -771,14 +771,15 @@ public boolean onCommandEssentials(final CommandSender cSender, final Command co } catch (final NoChargeException | QuietAbortException ex) { return true; } catch (final NotEnoughArgumentsException ex) { - sender.sendMessage(tl("commandHelpLine1", commandLabel)); - sender.sendMessage(tl("commandHelpLine2", command.getDescription())); - sender.sendMessage(tl("commandHelpLine3")); if (getSettings().isVerboseCommandUsages() && !cmd.getUsageStrings().isEmpty()) { + sender.sendMessage(tl("commandHelpLine1", commandLabel)); + sender.sendMessage(tl("commandHelpLine2", command.getDescription())); + sender.sendMessage(tl("commandHelpLine3")); for (Map.Entry<String, String> usage : cmd.getUsageStrings().entrySet()) { sender.sendMessage(tl("commandHelpLineUsage", usage.getKey().replace("<command>", commandLabel), usage.getValue())); } } else { + sender.sendMessage(command.getDescription()); sender.sendMessage(command.getUsage().replace("<command>", commandLabel)); } if (!ex.getMessage().isEmpty()) { From a7b2b675d5c4a97db7c97447a00aa966517f8beb Mon Sep 17 00:00:00 2001 From: Josh Roy <10731363+JRoy@users.noreply.github.com> Date: Tue, 28 Sep 2021 09:13:50 -0400 Subject: [PATCH 077/120] Add essentials.seen.uuid permission to show uuids in seen (#4531) Adds `essentials.seen.uuid` permission requirement to show uuids in `/seen`. People were complaining this cluttered it so whatever. Also adds said permission to the `essentials.seen.extra` permission group. Closes #4499. --- .../com/earth2me/essentials/commands/Commandseen.java | 8 ++++++-- Essentials/src/main/resources/plugin.yml | 1 + 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/Essentials/src/main/java/com/earth2me/essentials/commands/Commandseen.java b/Essentials/src/main/java/com/earth2me/essentials/commands/Commandseen.java index 1dbabc9d055..c293e7e47f2 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/commands/Commandseen.java +++ b/Essentials/src/main/java/com/earth2me/essentials/commands/Commandseen.java @@ -102,7 +102,9 @@ private void seenOnline(final CommandSource sender, final User user, final boole user.setDisplayNick(); sender.sendMessage(tl("seenOnline", user.getDisplayName(), DateUtil.formatDateDiff(user.getLastLogin()))); - sender.sendMessage(tl("whoisUuid", user.getBase().getUniqueId().toString())); + if (sender.isAuthorized("essentials.seen.uuid", ess)) { + sender.sendMessage(tl("whoisUuid", user.getBase().getUniqueId().toString())); + } final List<String> history = ess.getUserMap().getUserHistory(user.getBase().getUniqueId()); if (history != null && history.size() > 1) { @@ -136,7 +138,9 @@ private void seenOffline(final CommandSource sender, final User user, final bool user.setDisplayNick(); if (user.getLastLogout() > 0) { sender.sendMessage(tl("seenOffline", user.getName(), DateUtil.formatDateDiff(user.getLastLogout()))); - sender.sendMessage(tl("whoisUuid", user.getBase().getUniqueId())); + if (sender.isAuthorized("essentials.seen.uuid", ess)) { + sender.sendMessage(tl("whoisUuid", user.getBase().getUniqueId())); + } } else { sender.sendMessage(tl("userUnknown", user.getName())); } diff --git a/Essentials/src/main/resources/plugin.yml b/Essentials/src/main/resources/plugin.yml index a80ab358fc9..9d683e72aac 100644 --- a/Essentials/src/main/resources/plugin.yml +++ b/Essentials/src/main/resources/plugin.yml @@ -625,6 +625,7 @@ permissions: children: essentials.seen.ip: true essentials.seen.location: true + essentials.seen.uuid: true essentials.keepinv: default: false description: Controls whether players keep their inventory on death. From b3692d18b002be6d3fe6e0e3eb1fc26b1aff20cc Mon Sep 17 00:00:00 2001 From: MD <1917406+mdcfe@users.noreply.github.com> Date: Tue, 28 Sep 2021 20:49:55 +0100 Subject: [PATCH 078/120] Update plugin.yml authors to reflect EssentialsX contributions (#4551) Co-authored-by: Josh Roy <10731363+JRoy@users.noreply.github.com> --- Essentials/src/main/resources/plugin.yml | 2 +- EssentialsAntiBuild/src/main/resources/plugin.yml | 2 +- EssentialsChat/src/main/resources/plugin.yml | 2 +- EssentialsGeoIP/src/main/resources/plugin.yml | 2 +- EssentialsProtect/src/main/resources/plugin.yml | 2 +- EssentialsSpawn/src/main/resources/plugin.yml | 2 +- EssentialsXMPP/src/main/resources/plugin.yml | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/Essentials/src/main/resources/plugin.yml b/Essentials/src/main/resources/plugin.yml index 9d683e72aac..502ee13252c 100644 --- a/Essentials/src/main/resources/plugin.yml +++ b/Essentials/src/main/resources/plugin.yml @@ -6,7 +6,7 @@ version: ${full.version} website: https://essentialsx.net/ description: Provides an essential, core set of commands for Bukkit. softdepend: [Vault, LuckPerms] -authors: [Zenexer, ementalo, Aelux, Brettflan, KimKandor, snowleo, ceulemans, Xeology, KHobbits, md_5, Iaccidentally, drtshock, vemacs, SupaHam, md678685] +authors: [Zenexer, ementalo, Aelux, Brettflan, KimKandor, snowleo, ceulemans, Xeology, KHobbits, md_5, Iaccidentally, drtshock, vemacs, SupaHam, mdcfe, JRoy, pop4959] api-version: "1.13" commands: afk: diff --git a/EssentialsAntiBuild/src/main/resources/plugin.yml b/EssentialsAntiBuild/src/main/resources/plugin.yml index d71e4ae7ae6..f7dac0e8942 100644 --- a/EssentialsAntiBuild/src/main/resources/plugin.yml +++ b/EssentialsAntiBuild/src/main/resources/plugin.yml @@ -5,7 +5,7 @@ main: com.earth2me.essentials.antibuild.EssentialsAntiBuild version: ${full.version} website: https://essentialsx.net/ description: Provides build protection. -authors: [Zenexer, ementalo, Aelux, Brettflan, KimKandor, snowleo, ceulemans, Xeology, KHobbits, Iaccidentally] +authors: [Zenexer, ementalo, Aelux, Brettflan, KimKandor, snowleo, ceulemans, Xeology, KHobbits, Iaccidentally, drtshock, mdcfe] depend: [Essentials] api-version: "1.13" diff --git a/EssentialsChat/src/main/resources/plugin.yml b/EssentialsChat/src/main/resources/plugin.yml index 06e8aed0148..68ba619202a 100644 --- a/EssentialsChat/src/main/resources/plugin.yml +++ b/EssentialsChat/src/main/resources/plugin.yml @@ -5,7 +5,7 @@ main: com.earth2me.essentials.chat.EssentialsChat version: ${full.version} website: https://essentialsx.net/ description: Provides chat control features for Essentials. Requires Permissions. -authors: [Zenexer, ementalo, Aelux, Brettflan, KimKandor, snowleo, ceulemans, Xeology, KHobbits, md_5, Okamosy, Iaccidentally] +authors: [Zenexer, ementalo, Aelux, Brettflan, KimKandor, snowleo, ceulemans, Xeology, KHobbits, md_5, Okamosy, Iaccidentally, mdcfe, JRoy, triagonal] depend: [Essentials] api-version: 1.13 commands: diff --git a/EssentialsGeoIP/src/main/resources/plugin.yml b/EssentialsGeoIP/src/main/resources/plugin.yml index d2c88853d25..2ddee7b1201 100644 --- a/EssentialsGeoIP/src/main/resources/plugin.yml +++ b/EssentialsGeoIP/src/main/resources/plugin.yml @@ -5,6 +5,6 @@ main: com.earth2me.essentials.geoip.EssentialsGeoIP version: ${full.version} website: https://essentialsx.net/ description: Shows the country or city of a user on login and /whois. -authors: [Zenexer, ementalo, Aelux, Brettflan, KimKandor, snowleo, ceulemans, Xeology, kjiang] +authors: [Zenexer, ementalo, Aelux, Brettflan, KimKandor, snowleo, ceulemans, Xeology, kjiang, pop4959] depend: [Essentials] api-version: 1.13 diff --git a/EssentialsProtect/src/main/resources/plugin.yml b/EssentialsProtect/src/main/resources/plugin.yml index 37785782bcb..65764be4a41 100644 --- a/EssentialsProtect/src/main/resources/plugin.yml +++ b/EssentialsProtect/src/main/resources/plugin.yml @@ -5,6 +5,6 @@ main: com.earth2me.essentials.protect.EssentialsProtect version: ${full.version} website: https://essentialsx.net/ description: Provides protection for various parts of the world. -authors: [Zenexer, ementalo, Aelux, Brettflan, KimKandor, snowleo, ceulemans, Xeology, KHobbits] +authors: [Zenexer, ementalo, Aelux, Brettflan, KimKandor, snowleo, ceulemans, Xeology, KHobbits, drtshock] softdepend: [Essentials] api-version: 1.13 diff --git a/EssentialsSpawn/src/main/resources/plugin.yml b/EssentialsSpawn/src/main/resources/plugin.yml index 09c073c38e9..e0a7b770d05 100644 --- a/EssentialsSpawn/src/main/resources/plugin.yml +++ b/EssentialsSpawn/src/main/resources/plugin.yml @@ -5,7 +5,7 @@ main: com.earth2me.essentials.spawn.EssentialsSpawn version: ${full.version} website: https://essentialsx.net/ description: Provides spawn control commands, utilizing Essentials. -authors: [Zenexer, ementalo, Aelux, Brettflan, KimKandor, snowleo, ceulemans, Xeology, KHobbits] +authors: [Zenexer, ementalo, Aelux, Brettflan, KimKandor, snowleo, ceulemans, Xeology, KHobbits, SupaHam, mdcfe, DoNotSpamPls, JRoy] depend: [Essentials] api-version: 1.13 commands: diff --git a/EssentialsXMPP/src/main/resources/plugin.yml b/EssentialsXMPP/src/main/resources/plugin.yml index 77ae92bd071..9b2d54c8c73 100644 --- a/EssentialsXMPP/src/main/resources/plugin.yml +++ b/EssentialsXMPP/src/main/resources/plugin.yml @@ -5,7 +5,7 @@ main: com.earth2me.essentials.xmpp.EssentialsXMPP version: ${full.version} website: http://ess.khhq.net/wiki/XMPP description: Provides XMPP communication. -authors: [snowleo] +authors: [snowleo, SupaHam, mdcfe] depend: [Essentials] api-version: 1.13 commands: From ef8bcc8bc413292a6d1b6e4d8208d6355ab48e21 Mon Sep 17 00:00:00 2001 From: Gen <34498632+GenSecrets@users.noreply.github.com> Date: Sat, 2 Oct 2021 19:14:41 -0400 Subject: [PATCH 079/120] Add kits subfolder to allow for multiple kit files (#4407) Co-authored-by: MD <1917406+mdcfe@users.noreply.github.com> Co-authored-by: Josh Roy <10731363+JRoy@users.noreply.github.com> --- .../essentials/EssentialsUpgrade.java | 2 +- .../java/com/earth2me/essentials/Kits.java | 125 +++++++++++------- .../essentials/commands/Commanddelkit.java | 3 +- .../essentials/commands/Commandkit.java | 5 +- .../essentials/commands/Commandkitreset.java | 3 +- .../essentials/commands/Commandshowkit.java | 3 +- Essentials/src/main/resources/kits.yml | 4 + 7 files changed, 87 insertions(+), 58 deletions(-) diff --git a/Essentials/src/main/java/com/earth2me/essentials/EssentialsUpgrade.java b/Essentials/src/main/java/com/earth2me/essentials/EssentialsUpgrade.java index 9c47154a1c1..5511967cf5d 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/EssentialsUpgrade.java +++ b/Essentials/src/main/java/com/earth2me/essentials/EssentialsUpgrade.java @@ -438,7 +438,7 @@ public void convertIgnoreList() { public void convertKits() { final Kits kits = ess.getKits(); - final EssentialsConfiguration config = kits.getConfig(); + final EssentialsConfiguration config = kits.getRootConfig(); if (doneFile.getBoolean("kitsyml", false)) { return; } diff --git a/Essentials/src/main/java/com/earth2me/essentials/Kits.java b/Essentials/src/main/java/com/earth2me/essentials/Kits.java index 9d8c4639a6b..40f40843d45 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/Kits.java +++ b/Essentials/src/main/java/com/earth2me/essentials/Kits.java @@ -4,84 +4,106 @@ import com.earth2me.essentials.config.EssentialsConfiguration; import com.earth2me.essentials.utils.NumberUtil; import org.spongepowered.configurate.CommentedConfigurationNode; -import org.spongepowered.configurate.serialize.SerializationException; import java.io.File; import java.math.BigDecimal; +import java.util.HashMap; import java.util.List; import java.util.Locale; import java.util.Map; +import java.util.Set; import static com.earth2me.essentials.I18n.capitalCase; import static com.earth2me.essentials.I18n.tl; public class Kits implements IConf { - private final EssentialsConfiguration config; - private CommentedConfigurationNode kits; + private final IEssentials ess; + private final EssentialsConfiguration rootConfig; + private final Map<String, EssentialsConfiguration> kitToConfigMap = new HashMap<>(); + private final Map<String, Map<String, Object>> kitMap = new HashMap<>(); public Kits(final IEssentials essentials) { - config = new EssentialsConfiguration(new File(essentials.getDataFolder(), "kits.yml"), "/kits.yml"); + this.ess = essentials; + this.rootConfig = new EssentialsConfiguration(new File(essentials.getDataFolder(), "kits.yml"), "/kits.yml"); reloadConfig(); } @Override public void reloadConfig() { - config.load(); - kits = _getKits(); + rootConfig.load(); + parseKits(); } public File getFile() { - return config.getFile(); + return rootConfig.getFile(); } - private CommentedConfigurationNode _getKits() { - final CommentedConfigurationNode section = config.getSection("kits"); - if (section != null) { - final CommentedConfigurationNode newSection = config.newSection(); - for (final String kitItem : ConfigurateUtil.getKeys(section)) { - final CommentedConfigurationNode kitSection = section.node(kitItem); - if (kitSection.isMap()) { - try { - newSection.node(kitItem.toLowerCase(Locale.ENGLISH)).set(kitSection); - } catch (SerializationException e) { - e.printStackTrace(); + private void parseKit(final String kitName, final CommentedConfigurationNode kitSection, final EssentialsConfiguration parentConfig) { + if (kitSection.isMap()) { + final String effectiveKitName = kitName.toLowerCase(Locale.ENGLISH); + kitToConfigMap.put(effectiveKitName, parentConfig); + kitMap.put(effectiveKitName, ConfigurateUtil.getRawMap(kitSection)); + } + } + + private void parseKits() { + kitToConfigMap.clear(); + kitMap.clear(); + + // Kits from kits.yml file + final CommentedConfigurationNode fileKits = rootConfig.getSection("kits"); + if (fileKits != null) { + for (final Map.Entry<String, CommentedConfigurationNode> kitEntry : ConfigurateUtil.getMap(fileKits).entrySet()) { + parseKit(kitEntry.getKey(), kitEntry.getValue(), rootConfig); + } + } + + // Kits from kits subdirectory + final File kitsFolder = new File(this.ess.getDataFolder(), "kits"); + if (!kitsFolder.exists() || !kitsFolder.isDirectory()) { + return; + } + + final File[] kitsFiles = kitsFolder.listFiles(); + + //noinspection ConstantConditions - will not be null, conditions checked above. + for (final File kitFile : kitsFiles) { + if (kitFile.getName().endsWith(".yml")) { + final EssentialsConfiguration kitConfig = new EssentialsConfiguration(kitFile); + kitConfig.load(); + final CommentedConfigurationNode kits = kitConfig.getSection("kits"); + if (kits != null) { + for (final Map.Entry<String, CommentedConfigurationNode> kitEntry : ConfigurateUtil.getMap(kits).entrySet()) { + parseKit(kitEntry.getKey(), kitEntry.getValue(), kitConfig); } } } - return newSection; } - return null; } - public EssentialsConfiguration getConfig() { - return config; + /** + * Should be used for EssentialsUpgrade conversions <b>only</b>. + */ + public EssentialsConfiguration getRootConfig() { + return rootConfig; } - public CommentedConfigurationNode getKits() { - return kits; + public Set<String> getKitKeys() { + return kitMap.keySet(); } - public Map<String, Object> getKit(String name) { - name = name.replace('.', '_').replace('/', '_'); - if (getKits() != null) { - final CommentedConfigurationNode kits = getKits(); - // Other parts of the codebase/3rd party plugins expect us to lowercase kit names here. - // This isn't strictly needed for the future of Essentials, but for compatibility it's here. - final CommentedConfigurationNode kitSection = kits.node(name.toLowerCase()); - if (!kitSection.virtual() && kitSection.isMap()) { - return ConfigurateUtil.getRawMap(kitSection); - } + public Map<String, Object> getKit(final String name) { + if (name != null) { + return kitMap.get(name.replace('.', '_').replace('/', '_')); } - return null; } // Tries to find an existing kit name that matches the given name, ignoring case. Returns null if no match. public String matchKit(final String name) { - final CommentedConfigurationNode section = config.getSection("kits"); - if (section != null) { - for (final String kitName : ConfigurateUtil.getKeys(section)) { + if (name != null) { + for (final String kitName : kitMap.keySet()) { if (kitName.equalsIgnoreCase(name)) { return kitName; } @@ -90,25 +112,32 @@ public String matchKit(final String name) { return null; } - public void addKit(final String name, final List<String> lines, final long delay) { + public void addKit(String name, final List<String> lines, final long delay) { + name = name.replace('.', '_').replace('/', '_').toLowerCase(Locale.ENGLISH); // Will overwrite but w/e - config.setProperty("kits." + name + ".delay", delay); - config.setProperty("kits." + name + ".items", lines); - kits = _getKits(); - config.save(); + rootConfig.setProperty("kits." + name + ".delay", delay); + rootConfig.setProperty("kits." + name + ".items", lines); + parseKits(); + rootConfig.save(); } - public void removeKit(final String name) { + public void removeKit(String name) { + name = name.replace('.', '_').replace('/', '_').toLowerCase(Locale.ENGLISH); + if (!kitToConfigMap.containsKey(name) || !kitMap.containsKey(name)) { + return; + } + + final EssentialsConfiguration config = kitToConfigMap.get(name); config.removeProperty("kits." + name); - kits = _getKits(); - config.save(); + + config.blockingSave(); + parseKits(); } public String listKits(final net.ess3.api.IEssentials ess, final User user) throws Exception { try { - final CommentedConfigurationNode kits = config.getSection("kits"); final StringBuilder list = new StringBuilder(); - for (final String kitItem : ConfigurateUtil.getKeys(kits)) { + for (final String kitItem : kitMap.keySet()) { if (user == null) { list.append(" ").append(capitalCase(kitItem)); } else if (user.isAuthorized("essentials.kits." + kitItem.toLowerCase(Locale.ENGLISH))) { diff --git a/Essentials/src/main/java/com/earth2me/essentials/commands/Commanddelkit.java b/Essentials/src/main/java/com/earth2me/essentials/commands/Commanddelkit.java index 777fd29b20f..6bb08d9df4e 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/commands/Commanddelkit.java +++ b/Essentials/src/main/java/com/earth2me/essentials/commands/Commanddelkit.java @@ -2,7 +2,6 @@ import com.earth2me.essentials.CommandSource; import com.earth2me.essentials.Kit; -import com.earth2me.essentials.config.ConfigurateUtil; import com.google.common.collect.Lists; import org.bukkit.Server; @@ -38,7 +37,7 @@ public void run(final Server server, final CommandSource sender, final String co @Override protected List<String> getTabCompleteOptions(final Server server, final CommandSource sender, final String commandLabel, final String[] args) { if (args.length == 1) { - return Lists.newArrayList(ConfigurateUtil.getKeys(ess.getKits().getKits())); + return Lists.newArrayList(ess.getKits().getKitKeys()); } return Collections.emptyList(); } diff --git a/Essentials/src/main/java/com/earth2me/essentials/commands/Commandkit.java b/Essentials/src/main/java/com/earth2me/essentials/commands/Commandkit.java index 10f2eacb0bf..28fc58911ac 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/commands/Commandkit.java +++ b/Essentials/src/main/java/com/earth2me/essentials/commands/Commandkit.java @@ -3,7 +3,6 @@ import com.earth2me.essentials.CommandSource; import com.earth2me.essentials.Kit; import com.earth2me.essentials.User; -import com.earth2me.essentials.config.ConfigurateUtil; import com.earth2me.essentials.utils.StringUtil; import org.bukkit.Server; @@ -101,7 +100,7 @@ protected List<String> getTabCompleteOptions(final Server server, final User use if (args.length == 1) { final List<String> options = new ArrayList<>(); // TODO: Move all of this to its own method - for (final String kitName : ConfigurateUtil.getKeys(ess.getKits().getKits())) { + for (final String kitName : ess.getKits().getKitKeys()) { if (!user.isAuthorized("essentials.kits." + kitName)) { // Only check perm, not time or money continue; } @@ -118,7 +117,7 @@ protected List<String> getTabCompleteOptions(final Server server, final User use @Override protected List<String> getTabCompleteOptions(final Server server, final CommandSource sender, final String commandLabel, final String[] args) { if (args.length == 1) { - return new ArrayList<>(ConfigurateUtil.getKeys(ess.getKits().getKits())); // TODO: Move this to its own method + return new ArrayList<>(ess.getKits().getKitKeys()); // TODO: Move this to its own method } else if (args.length == 2) { return getPlayers(server, sender); } else { diff --git a/Essentials/src/main/java/com/earth2me/essentials/commands/Commandkitreset.java b/Essentials/src/main/java/com/earth2me/essentials/commands/Commandkitreset.java index 82dc5492138..09b1c7f794c 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/commands/Commandkitreset.java +++ b/Essentials/src/main/java/com/earth2me/essentials/commands/Commandkitreset.java @@ -2,7 +2,6 @@ import com.earth2me.essentials.CommandSource; import com.earth2me.essentials.User; -import com.earth2me.essentials.config.ConfigurateUtil; import org.bukkit.Server; import java.util.ArrayList; @@ -59,7 +58,7 @@ protected void run(Server server, CommandSource sender, String commandLabel, Str @Override protected List<String> getTabCompleteOptions(Server server, CommandSource sender, String commandLabel, String[] args) { if (args.length == 1) { - return new ArrayList<>(ConfigurateUtil.getKeys(ess.getKits().getKits())); + return new ArrayList<>(ess.getKits().getKitKeys()); } else if (args.length == 2 && sender.isAuthorized("essentials.kitreset.others", ess)) { return getPlayers(server, sender); } else { diff --git a/Essentials/src/main/java/com/earth2me/essentials/commands/Commandshowkit.java b/Essentials/src/main/java/com/earth2me/essentials/commands/Commandshowkit.java index 1da50851a0d..1b0fabd7a05 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/commands/Commandshowkit.java +++ b/Essentials/src/main/java/com/earth2me/essentials/commands/Commandshowkit.java @@ -2,7 +2,6 @@ import com.earth2me.essentials.Kit; import com.earth2me.essentials.User; -import com.earth2me.essentials.config.ConfigurateUtil; import org.bukkit.Server; import java.util.ArrayList; @@ -34,7 +33,7 @@ public void run(final Server server, final User user, final String commandLabel, @Override protected List<String> getTabCompleteOptions(final Server server, final User user, final String commandLabel, final String[] args) { if (args.length == 1) { - return new ArrayList<>(ConfigurateUtil.getKeys(ess.getKits().getKits())); // TODO: Move this to its own method + return new ArrayList<>(ess.getKits().getKitKeys()); // TODO: Move this to its own method } else { return Collections.emptyList(); } diff --git a/Essentials/src/main/resources/kits.yml b/Essentials/src/main/resources/kits.yml index c725664fa02..cefc3ed8bae 100644 --- a/Essentials/src/main/resources/kits.yml +++ b/Essentials/src/main/resources/kits.yml @@ -9,6 +9,10 @@ # {PLAYER} will show the player's displayname instead of username. # 'delay' refers to the cooldown between how often you can use each kit, measured in seconds. # Set delay to -1 for a one time kit. +# +# In addition, you can also organize your kits into separate files under the `kits` subdirectory. +# Essentials will treat all .yml files in the `kits` subdirectory as kits files, and will add any kits from those files along with the kits in `kits.yml`. +# Any file in the `kits` subdirectory must be formatted in the same way as this file. This allows you to define multiple kits in each file. # For more information, visit http://wiki.ess3.net/wiki/Kits kits: tools: From a7a1fcd98cfbd4366522d1031c03ec3315da2b9c Mon Sep 17 00:00:00 2001 From: Josh Roy <10731363+JRoy@users.noreply.github.com> Date: Thu, 7 Oct 2021 04:22:41 -0400 Subject: [PATCH 080/120] Fix Discord token regex censor pattern (#4563) Discord changed their token format again --- .../com/earth2me/essentials/commands/Commandessentials.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Essentials/src/main/java/com/earth2me/essentials/commands/Commandessentials.java b/Essentials/src/main/java/com/earth2me/essentials/commands/Commandessentials.java index 2295294bb0c..51310d35e1f 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/commands/Commandessentials.java +++ b/Essentials/src/main/java/com/earth2me/essentials/commands/Commandessentials.java @@ -295,7 +295,7 @@ private void runDump(Server server, CommandSource sender, String commandLabel, S try { files.add(new PasteUtil.PasteFile("discord-config.yml", new String(Files.readAllBytes(essDiscord.getDataFolder().toPath().resolve("config.yml")), StandardCharsets.UTF_8) - .replaceAll("[MN][A-Za-z\\d]{23}\\.[\\w-]{6}\\.[\\w-]{27}", "<censored token>"))); + .replaceAll("[A-Za-z\\d]{24}\\.[\\w-]{6}\\.[\\w-]{27}", "<censored token>"))); } catch (IOException e) { sender.sendMessage(tl("dumpErrorUpload", "discord-config.yml", e.getMessage())); } From f3aea5e6ecbb4e13101fb56e3dd17303b4b50b81 Mon Sep 17 00:00:00 2001 From: Josh Roy <10731363+JRoy@users.noreply.github.com> Date: Mon, 11 Oct 2021 15:06:18 -0400 Subject: [PATCH 081/120] Improve error message for updater checker rate limit (#4560) Fixes #4556 --- .../com/earth2me/essentials/updatecheck/UpdateChecker.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Essentials/src/main/java/com/earth2me/essentials/updatecheck/UpdateChecker.java b/Essentials/src/main/java/com/earth2me/essentials/updatecheck/UpdateChecker.java index a56e3f94537..2c39cace0aa 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/updatecheck/UpdateChecker.java +++ b/Essentials/src/main/java/com/earth2me/essentials/updatecheck/UpdateChecker.java @@ -147,8 +147,8 @@ private RemoteVersion fetchDistance(final String head, final String hash) { // Locally built? return new RemoteVersion(BranchStatus.UNKNOWN); } - if (connection.getResponseCode() == HttpURLConnection.HTTP_INTERNAL_ERROR) { - // Github is down + if (connection.getResponseCode() == HttpURLConnection.HTTP_INTERNAL_ERROR || connection.getResponseCode() == HttpURLConnection.HTTP_FORBIDDEN) { + // GitHub is down or we hit a local rate limit return new RemoteVersion(BranchStatus.ERROR); } From cb7d9baf7aede246452f6b369861210133d494e9 Mon Sep 17 00:00:00 2001 From: Josh Roy <10731363+JRoy@users.noreply.github.com> Date: Mon, 11 Oct 2021 15:32:41 -0400 Subject: [PATCH 082/120] Fix exception while running vanilla commands for chat command relay (#4552) Fixes #4545 --- .../listeners/DiscordCommandDispatcher.java | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/EssentialsDiscord/src/main/java/net/essentialsx/discord/listeners/DiscordCommandDispatcher.java b/EssentialsDiscord/src/main/java/net/essentialsx/discord/listeners/DiscordCommandDispatcher.java index 2c3205074b8..20fa1ff0a96 100644 --- a/EssentialsDiscord/src/main/java/net/essentialsx/discord/listeners/DiscordCommandDispatcher.java +++ b/EssentialsDiscord/src/main/java/net/essentialsx/discord/listeners/DiscordCommandDispatcher.java @@ -6,6 +6,7 @@ import net.essentialsx.discord.util.DiscordCommandSender; import net.essentialsx.discord.util.DiscordUtil; import org.bukkit.Bukkit; +import org.bukkit.command.CommandException; import org.jetbrains.annotations.NotNull; public class DiscordCommandDispatcher extends ListenerAdapter { @@ -23,9 +24,21 @@ public void onGuildMessageReceived(@NotNull GuildMessageReceivedEvent event) { return; } - Bukkit.getScheduler().runTask(jda.getPlugin(), () -> + final String command = event.getMessage().getContentRaw(); + Bukkit.getScheduler().runTask(jda.getPlugin(), () -> { + try { Bukkit.dispatchCommand(new DiscordCommandSender(jda, Bukkit.getConsoleSender(), message -> - event.getMessage().reply(message).queue()).getSender(), event.getMessage().getContentRaw())); + event.getMessage().reply(message).queue()).getSender(), command); + } catch (CommandException e) { + // Check if this is a vanilla command, in which case we have to use a vanilla command sender :( + if (e.getMessage().contains("a vanilla command listener") || (e.getCause() != null && e.getCause().getMessage().contains("a vanilla command listener"))) { + Bukkit.dispatchCommand(Bukkit.getConsoleSender(), command); + return; + } + // Something unrelated, should error out here + throw e; + } + }); } } From 43f4d306bea2b3573467f3068d60d4b61eb72fdd Mon Sep 17 00:00:00 2001 From: Josh Roy <10731363+JRoy@users.noreply.github.com> Date: Mon, 11 Oct 2021 15:54:55 -0400 Subject: [PATCH 083/120] Add discordbroadcast command (#4541) * Add discordbroadcast command * Update EssentialsDiscord/src/main/resources/plugin.yml Co-authored-by: MD <1917406+mdcfe@users.noreply.github.com> * Add emoji parsing/tab complete for discordbroadcast command Co-authored-by: MD <1917406+mdcfe@users.noreply.github.com> --- .../AlternativeCommandsHandler.java | 2 +- .../earth2me/essentials/utils/NumberUtil.java | 9 +++ .../src/main/resources/messages.properties | 7 ++ .../essentialsx/discord/DiscordSettings.java | 4 + .../discord/EssentialsDiscord.java | 18 +++++ .../discord/JDADiscordService.java | 32 ++++++-- .../commands/Commanddiscordbroadcast.java | 81 +++++++++++++++++++ .../src/main/resources/plugin.yml | 5 ++ 8 files changed, 150 insertions(+), 8 deletions(-) create mode 100644 EssentialsDiscord/src/main/java/net/essentialsx/discord/commands/Commanddiscordbroadcast.java diff --git a/Essentials/src/main/java/com/earth2me/essentials/AlternativeCommandsHandler.java b/Essentials/src/main/java/com/earth2me/essentials/AlternativeCommandsHandler.java index 2be729a4d33..b5d86018269 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/AlternativeCommandsHandler.java +++ b/Essentials/src/main/java/com/earth2me/essentials/AlternativeCommandsHandler.java @@ -29,7 +29,7 @@ public AlternativeCommandsHandler(final IEssentials ess) { } public final void addPlugin(final Plugin plugin) { - if (plugin.getDescription().getMain().contains("com.earth2me.essentials")) { + if (plugin.getDescription().getMain().contains("com.earth2me.essentials") || plugin.getDescription().getMain().contains("net.essentialsx")) { return; } for (final Map.Entry<String, Command> entry : getPluginCommands(plugin).entrySet()) { diff --git a/Essentials/src/main/java/com/earth2me/essentials/utils/NumberUtil.java b/Essentials/src/main/java/com/earth2me/essentials/utils/NumberUtil.java index a4d91e5a8f3..c9d8249140e 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/utils/NumberUtil.java +++ b/Essentials/src/main/java/com/earth2me/essentials/utils/NumberUtil.java @@ -104,6 +104,15 @@ public static boolean isInt(final String sInt) { return true; } + public static boolean isLong(final String sLong) { + try { + Long.parseLong(sLong); + } catch (final NumberFormatException e) { + return false; + } + return true; + } + public static boolean isPositiveInt(final String sInt) { if (!isInt(sInt)) { return false; diff --git a/Essentials/src/main/resources/messages.properties b/Essentials/src/main/resources/messages.properties index 6a083cd7a1a..a140e3036cb 100644 --- a/Essentials/src/main/resources/messages.properties +++ b/Essentials/src/main/resources/messages.properties @@ -233,6 +233,13 @@ destinationNotSet=Destination not set\! disabled=disabled disabledToSpawnMob=\u00a74Spawning this mob was disabled in the config file. disableUnlimited=\u00a76Disabled unlimited placing of\u00a7c {0} \u00a76for\u00a7c {1}\u00a76. +discordbroadcastCommandDescription=Broadcasts a message to the specified Discord channel. +discordbroadcastCommandUsage=/<command> <channel> <msg> +discordbroadcastCommandUsage1=/<command> <channel> <msg> +discordbroadcastCommandUsage1Description=Sends the given message to the specified Discord channel +discordbroadcastInvalidChannel=\u00a74Discord channel \u00a7c{0}\u00a74 does not exist. +discordbroadcastPermission=\u00a74You do not have permission to send messages to the \u00a7c{0}\u00a74 channel. +discordbroadcastSent=\u00a76Message sent to \u00a7c{0}\u00a76! discordCommandExecuteDescription=Executes a console command on the Minecraft server. discordCommandExecuteArgumentCommand=The command to be executed discordCommandExecuteReply=Executing command: "/{0}" diff --git a/EssentialsDiscord/src/main/java/net/essentialsx/discord/DiscordSettings.java b/EssentialsDiscord/src/main/java/net/essentialsx/discord/DiscordSettings.java index cb31be06a3e..e06d5dbc1a6 100644 --- a/EssentialsDiscord/src/main/java/net/essentialsx/discord/DiscordSettings.java +++ b/EssentialsDiscord/src/main/java/net/essentialsx/discord/DiscordSettings.java @@ -69,6 +69,10 @@ public long getChannelId(String key) { } } + public List<String> getChannelNames() { + return new ArrayList<>(nameToChannelIdMap.keySet()); + } + public List<String> getKeysFromChannelId(long channelId) { return channelIdToNamesMap.get(channelId); } diff --git a/EssentialsDiscord/src/main/java/net/essentialsx/discord/EssentialsDiscord.java b/EssentialsDiscord/src/main/java/net/essentialsx/discord/EssentialsDiscord.java index 1760129c31a..438f8455a47 100644 --- a/EssentialsDiscord/src/main/java/net/essentialsx/discord/EssentialsDiscord.java +++ b/EssentialsDiscord/src/main/java/net/essentialsx/discord/EssentialsDiscord.java @@ -4,8 +4,13 @@ import com.earth2me.essentials.IEssentialsModule; import com.earth2me.essentials.metrics.MetricsWrapper; import net.essentialsx.discord.interactions.InteractionControllerImpl; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; import org.bukkit.plugin.java.JavaPlugin; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; +import java.util.List; import java.util.logging.Level; import java.util.logging.Logger; @@ -86,4 +91,17 @@ public void onDisable() { jda.shutdown(); } } + + @Override + public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) { + return ess.onCommandEssentials(sender, command, label, args, EssentialsDiscord.class.getClassLoader(), "net.essentialsx.discord.commands.Command", + "essentials.", jda); + } + + @Nullable + @Override + public List<String> onTabComplete(@NotNull CommandSender sender, @NotNull Command command, @NotNull String alias, @NotNull String[] args) { + return ess.onTabCompleteEssentials(sender, command, alias, args, EssentialsDiscord.class.getClassLoader(), + "net.essentialsx.discord.commands.Command", "essentials.", jda); + } } diff --git a/EssentialsDiscord/src/main/java/net/essentialsx/discord/JDADiscordService.java b/EssentialsDiscord/src/main/java/net/essentialsx/discord/JDADiscordService.java index 7e02352b08c..025daf51cae 100644 --- a/EssentialsDiscord/src/main/java/net/essentialsx/discord/JDADiscordService.java +++ b/EssentialsDiscord/src/main/java/net/essentialsx/discord/JDADiscordService.java @@ -4,17 +4,21 @@ import club.minnced.discord.webhook.WebhookClientBuilder; import club.minnced.discord.webhook.send.WebhookMessage; import club.minnced.discord.webhook.send.WebhookMessageBuilder; +import com.earth2me.essentials.IEssentialsModule; import com.earth2me.essentials.User; import com.earth2me.essentials.utils.FormatUtil; +import com.earth2me.essentials.utils.NumberUtil; import com.earth2me.essentials.utils.VersionUtil; import net.dv8tion.jda.api.JDA; import net.dv8tion.jda.api.JDABuilder; +import net.dv8tion.jda.api.entities.Emote; import net.dv8tion.jda.api.entities.Guild; import net.dv8tion.jda.api.entities.TextChannel; import net.dv8tion.jda.api.entities.Webhook; import net.dv8tion.jda.api.events.ShutdownEvent; import net.dv8tion.jda.api.hooks.EventListener; import net.dv8tion.jda.api.hooks.ListenerAdapter; +import net.dv8tion.jda.api.utils.cache.CacheFlag; import net.ess3.nms.refl.providers.AchievementListenerProvider; import net.ess3.nms.refl.providers.AdvancementListenerProvider; import net.essentialsx.api.v2.events.discord.DiscordMessageEvent; @@ -51,10 +55,11 @@ import java.util.logging.Level; import java.util.logging.Logger; import java.util.regex.Matcher; +import java.util.regex.Pattern; import static com.earth2me.essentials.I18n.tl; -public class JDADiscordService implements DiscordService { +public class JDADiscordService implements DiscordService, IEssentialsModule { private final static Logger logger = Logger.getLogger("EssentialsDiscord"); private final EssentialsDiscord plugin; private final Unsafe unsafe = this::getJda; @@ -80,12 +85,14 @@ public JDADiscordService(EssentialsDiscord plugin) { } public TextChannel getChannel(String key, boolean primaryFallback) { - long resolvedId; - try { - resolvedId = Long.parseLong(key); - } catch (NumberFormatException ignored) { - resolvedId = getSettings().getChannelId(getSettings().getMessageChannel(key)); + if (NumberUtil.isLong(key)) { + return getDefinedChannel(key, primaryFallback); } + return getDefinedChannel(getSettings().getMessageChannel(key), primaryFallback); + } + + public TextChannel getDefinedChannel(String key, boolean primaryFallback) { + final long resolvedId = getSettings().getChannelId(key); if (isDebug()) { logger.log(Level.INFO, "Channel definition " + key + " resolved as " + resolvedId); @@ -149,8 +156,9 @@ public void startup() throws LoginException, InterruptedException { jda = JDABuilder.createDefault(plugin.getSettings().getBotToken()) .addEventListeners(new DiscordListener(this)) + .enableCache(CacheFlag.EMOTE) + .disableCache(CacheFlag.MEMBER_OVERRIDES, CacheFlag.VOICE_STATE) .setContextEnabled(false) - .setRawEventsEnabled(true) .build() .awaitReady(); updatePresence(); @@ -182,6 +190,9 @@ public void startup() throws LoginException, InterruptedException { } catch (InteractionException ignored) { } + // Load emotes into cache, JDA will handle updates from here on out. + guild.retrieveEmotes().queue(); + updatePrimaryChannel(); updateConsoleRelay(); @@ -274,6 +285,13 @@ public void updatePrimaryChannel() { primaryChannel = channel; } + public String parseMessageEmotes(String message) { + for (final Emote emote : guild.getEmoteCache()) { + message = message.replaceAll(":" + Pattern.quote(emote.getName()) + ":", emote.getAsMention()); + } + return message; + } + public void updatePresence() { jda.getPresence().setPresence(plugin.getSettings().getStatus(), plugin.getSettings().getStatusActivity()); } diff --git a/EssentialsDiscord/src/main/java/net/essentialsx/discord/commands/Commanddiscordbroadcast.java b/EssentialsDiscord/src/main/java/net/essentialsx/discord/commands/Commanddiscordbroadcast.java new file mode 100644 index 00000000000..d94fa9274f5 --- /dev/null +++ b/EssentialsDiscord/src/main/java/net/essentialsx/discord/commands/Commanddiscordbroadcast.java @@ -0,0 +1,81 @@ +package net.essentialsx.discord.commands; + +import com.earth2me.essentials.CommandSource; +import com.earth2me.essentials.commands.EssentialsCommand; +import com.earth2me.essentials.commands.NotEnoughArgumentsException; +import com.vdurmont.emoji.EmojiParser; +import net.dv8tion.jda.api.entities.Emote; +import net.dv8tion.jda.api.entities.TextChannel; +import net.essentialsx.discord.JDADiscordService; +import net.essentialsx.discord.util.DiscordUtil; +import net.essentialsx.discord.util.MessageUtil; +import org.bukkit.Server; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +import static com.earth2me.essentials.I18n.tl; + +public class Commanddiscordbroadcast extends EssentialsCommand { + public Commanddiscordbroadcast() { + super("discordbroadcast"); + } + + @Override + protected void run(Server server, CommandSource sender, String commandLabel, String[] args) throws Exception { + if (args.length < 2) { + throw new NotEnoughArgumentsException(); + } + + if (!sender.isAuthorized("essentials.discordbroadcast." + args[0], ess)) { + throw new Exception(tl("discordbroadcastPermission", args[0])); + } + + String message = getFinalArg(args, 1); + if (!sender.isAuthorized("essentials.discordbroadcast.markdown", ess)) { + message = MessageUtil.sanitizeDiscordMarkdown(message); + } + + final JDADiscordService jda = (JDADiscordService) module; + final TextChannel channel = jda.getDefinedChannel(args[0], false); + if (channel == null) { + throw new Exception(tl("discordbroadcastInvalidChannel", args[0])); + } + + if (!channel.canTalk()) { + throw new Exception(tl("discordNoSendPermission", channel.getName())); + } + + channel.sendMessage(jda.parseMessageEmotes(message)) + .allowedMentions(sender.isAuthorized("essentials.discordbroadcast.ping", ess) ? null : DiscordUtil.NO_GROUP_MENTIONS) + .queue(); + + sender.sendMessage(tl("discordbroadcastSent", "#" + EmojiParser.parseToAliases(channel.getName()))); + } + + @Override + protected List<String> getTabCompleteOptions(Server server, CommandSource sender, String commandLabel, String[] args) { + if (args.length == 1) { + final JDADiscordService jda = (JDADiscordService) module; + final List<String> channels = jda.getSettings().getChannelNames(); + channels.removeIf(s -> !sender.isAuthorized("essentials.discordbroadcast." + s, ess)); + return channels; + } else { + final String curArg = args[args.length - 1]; + if (!curArg.isEmpty() && curArg.charAt(0) == ':' && (curArg.length() == 1 || curArg.charAt(curArg.length() - 1) != ':')) { + final JDADiscordService jda = (JDADiscordService) module; + if (jda.getGuild().getEmoteCache().isEmpty()) { + return Collections.emptyList(); + } + + final List<String> completions = new ArrayList<>(); + for (final Emote emote : jda.getGuild().getEmoteCache()) { + completions.add(":" + emote.getName() + ":"); + } + return completions; + } + } + return Collections.emptyList(); + } +} diff --git a/EssentialsDiscord/src/main/resources/plugin.yml b/EssentialsDiscord/src/main/resources/plugin.yml index 32679b7db4e..5f9ed30193c 100644 --- a/EssentialsDiscord/src/main/resources/plugin.yml +++ b/EssentialsDiscord/src/main/resources/plugin.yml @@ -8,3 +8,8 @@ authors: [mdcfe, JRoy, pop4959, Glare] depend: [Essentials] softdepend: [EssentialsChat, PlaceholderAPI] api-version: 1.13 +commands: + discordbroadcast: + description: Broadcasts a message to the specified Discord channel. + usage: /<command> <channel> <msg> + aliases: [dbroadcast, dbc, dbcast, ediscordbroadcast, edbroadcast, edbc, edbcast] \ No newline at end of file From 90e4845627551a02a5868141544396bf50ac51a9 Mon Sep 17 00:00:00 2001 From: Josh Roy <10731363+JRoy@users.noreply.github.com> Date: Wed, 13 Oct 2021 13:41:48 -0400 Subject: [PATCH 084/120] Remove config reloads on world load/unload (#4573) Since the Configurate rewrite, we hold locations using `LazyLocation`, which is converted to a `Location` with world lookups on demand; as such we no longer need to reload configs on each world load since invalid locations will now softly fail. --- .../com/earth2me/essentials/Essentials.java | 22 +------------------ 1 file changed, 1 insertion(+), 21 deletions(-) diff --git a/Essentials/src/main/java/com/earth2me/essentials/Essentials.java b/Essentials/src/main/java/com/earth2me/essentials/Essentials.java index 9c87875cde3..ba26a7246d5 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/Essentials.java +++ b/Essentials/src/main/java/com/earth2me/essentials/Essentials.java @@ -61,8 +61,8 @@ import net.ess3.provider.MaterialTagProvider; import net.ess3.provider.PersistentDataProvider; import net.ess3.provider.PotionMetaProvider; -import net.ess3.provider.SerializationProvider; import net.ess3.provider.ProviderListener; +import net.ess3.provider.SerializationProvider; import net.ess3.provider.ServerStateProvider; import net.ess3.provider.SpawnEggProvider; import net.ess3.provider.SpawnerBlockProvider; @@ -103,7 +103,6 @@ import org.bukkit.event.player.PlayerEvent; import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.event.world.WorldLoadEvent; -import org.bukkit.event.world.WorldUnloadEvent; import org.bukkit.plugin.InvalidDescriptionException; import org.bukkit.plugin.Plugin; import org.bukkit.plugin.PluginDescriptionFile; @@ -1303,25 +1302,6 @@ private static class EssentialsWorldListener implements Listener, Runnable { @EventHandler(priority = EventPriority.LOW) public void onWorldLoad(final WorldLoadEvent event) { PermissionsDefaults.registerBackDefaultFor(event.getWorld()); - - ess.getJails().reloadConfig(); - ess.getWarps().reloadConfig(); - for (final IConf iConf : ((Essentials) ess).confList) { - if (iConf instanceof IEssentialsModule) { - iConf.reloadConfig(); - } - } - } - - @EventHandler(priority = EventPriority.LOW) - public void onWorldUnload(final WorldUnloadEvent event) { - ess.getJails().reloadConfig(); - ess.getWarps().reloadConfig(); - for (final IConf iConf : ((Essentials) ess).confList) { - if (iConf instanceof IEssentialsModule) { - iConf.reloadConfig(); - } - } } @Override From 58b0fb089f4e20599e3cd7a48eb99694fe5f0486 Mon Sep 17 00:00:00 2001 From: Josh Roy <10731363+JRoy@users.noreply.github.com> Date: Wed, 20 Oct 2021 08:09:56 -0400 Subject: [PATCH 085/120] Improve error message when primary channel is improperly defined (#4586) * Improve message verboseness when primary channel is improperly defined * Clarify primary channel behavior --- Essentials/src/main/resources/messages.properties | 2 ++ EssentialsDiscord/README.md | 4 +++- .../java/net/essentialsx/discord/JDADiscordService.java | 7 ++++++- 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/Essentials/src/main/resources/messages.properties b/Essentials/src/main/resources/messages.properties index a140e3036cb..9fb0db84ab8 100644 --- a/Essentials/src/main/resources/messages.properties +++ b/Essentials/src/main/resources/messages.properties @@ -256,6 +256,8 @@ discordErrorLoggerNoPerms=Discord console logger has been disabled due to insuff discordErrorNoGuild=Invalid or missing server ID! Please follow the tutorial in the config in order to setup the plugin. discordErrorNoGuildSize=Your bot is not in any servers! Please follow the tutorial in the config in order to setup the plugin. discordErrorNoPerms=Your bot cannot see or talk in any channel! Please make sure your bot has read and write permissions in all channels you wish to use. +discordErrorNoPrimary=You did not define a primary channel or your defined primary channel is invalid. Falling back to the default channel: #{0}. +discordErrorNoPrimaryPerms=Your bot cannot speak in your primary channel, #{0}. Please make sure your bot has read and write permissions in all channels you wish to use. discordErrorNoToken=No token provided! Please follow the tutorial in the config in order to setup the plugin. discordErrorWebhook=An error occurred while sending messages to your console channel\! This was likely caused by accidentally deleting your console webhook. This can usually by fixed by ensuring your bot has the "Manage Webhooks" permission and running "/ess reload". discordLoggingIn=Attempting to login to Discord... diff --git a/EssentialsDiscord/README.md b/EssentialsDiscord/README.md index 65930e19f49..0a3533eeb14 100644 --- a/EssentialsDiscord/README.md +++ b/EssentialsDiscord/README.md @@ -179,7 +179,9 @@ and `staff`. If you only completed the initial setup, the `staff` channel defini most situations however, as the message system will always fallback to the `primary` channel if a channel ID is invalid. -Now on to the types of messages you can receive themselves (which is where you're going to use these channel +**Note:** If you do not define a `primary` channel, the default channel of your server will be used. + +Now on to the types of messages you can receive themselves (which is where you're going to use these channel definitions). In the `message-types` section of the config, you can see a list of message types (join/leave/chat/etc.) on the left (as the key), and on the right there is a channel definition. diff --git a/EssentialsDiscord/src/main/java/net/essentialsx/discord/JDADiscordService.java b/EssentialsDiscord/src/main/java/net/essentialsx/discord/JDADiscordService.java index 025daf51cae..52bd24f16db 100644 --- a/EssentialsDiscord/src/main/java/net/essentialsx/discord/JDADiscordService.java +++ b/EssentialsDiscord/src/main/java/net/essentialsx/discord/JDADiscordService.java @@ -278,9 +278,14 @@ public void updatePrimaryChannel() { TextChannel channel = guild.getTextChannelById(plugin.getSettings().getPrimaryChannelId()); if (channel == null) { channel = guild.getDefaultChannel(); - if (channel == null || !channel.canTalk()) { + if (channel == null) { throw new RuntimeException(tl("discordErrorNoPerms")); } + logger.warning(tl("discordErrorNoPrimary", channel.getName())); + } + + if (!channel.canTalk()) { + throw new RuntimeException(tl("discordErrorNoPrimaryPerms", channel.getName())); } primaryChannel = channel; } From add664441e07cd08e3dd93c52f350968128a921a Mon Sep 17 00:00:00 2001 From: Tadhg Boyle <tadhgsmboyle@gmail.com> Date: Sat, 23 Oct 2021 12:18:51 -0700 Subject: [PATCH 086/120] Add notify messages to jail command (#4576) Co-authored-by: Josh Roy <10731363+JRoy@users.noreply.github.com> --- .../earth2me/essentials/commands/Commandtogglejail.java | 9 +++++++++ Essentials/src/main/resources/messages.properties | 3 +++ 2 files changed, 12 insertions(+) diff --git a/Essentials/src/main/java/com/earth2me/essentials/commands/Commandtogglejail.java b/Essentials/src/main/java/com/earth2me/essentials/commands/Commandtogglejail.java index 93a7128f194..1cd06cea9be 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/commands/Commandtogglejail.java +++ b/Essentials/src/main/java/com/earth2me/essentials/commands/Commandtogglejail.java @@ -15,6 +15,7 @@ import java.util.Collections; import java.util.List; import java.util.concurrent.CompletableFuture; +import java.util.logging.Level; import static com.earth2me.essentials.I18n.tl; @@ -84,6 +85,10 @@ public void run(final Server server, final CommandSource sender, final String co player.setOnlineJailedTime(ess.getSettings().isJailOnlineTime() ? ((player.getBase().getStatistic(PLAY_ONE_TICK)) + (timeDiff / 50)) : 0); } sender.sendMessage(timeDiff > 0 ? tl("playerJailedFor", player.getName(), DateUtil.formatDateDiff(finalDisplayTime)) : tl("playerJailed", player.getName())); + + final String notifyMessage = timeDiff > 0 ? tl("jailNotifyJailedFor", player.getName(), DateUtil.formatDateDiff(finalDisplayTime), sender.getSender().getName()) : tl("jailNotifyJailed", player.getName(), sender.getSender().getName()); + server.getLogger().log(Level.INFO, notifyMessage); + ess.broadcastMessage("essentials.jail.notify", notifyMessage); } }); if (player.getBase().isOnline()) { @@ -107,6 +112,10 @@ public void run(final Server server, final CommandSource sender, final String co player.setJailTimeout(timeDiff); player.setOnlineJailedTime(ess.getSettings().isJailOnlineTime() ? ((player.getBase().getStatistic(PLAY_ONE_TICK)) + (timeDiff / 50)) : 0); sender.sendMessage(tl("jailSentenceExtended", DateUtil.formatDateDiff(displayTimeDiff))); + + final String notifyMessage = tl("jailNotifySentenceExtended", player.getName(), DateUtil.formatDateDiff(displayTimeDiff), sender.getSender().getName()); + server.getLogger().log(Level.INFO, notifyMessage); + ess.broadcastMessage("essentials.jail.notify", notifyMessage); return; } diff --git a/Essentials/src/main/resources/messages.properties b/Essentials/src/main/resources/messages.properties index 9fb0db84ab8..d373a4f27b3 100644 --- a/Essentials/src/main/resources/messages.properties +++ b/Essentials/src/main/resources/messages.properties @@ -583,6 +583,9 @@ jailAlreadyIncarcerated=\u00a74Person is already in jail\:\u00a7c {0} jailList=\u00a76Jails\:\u00a7r {0} jailMessage=\u00a74You do the crime, you do the time. jailNotExist=\u00a74That jail does not exist. +jailNotifyJailed=\u00a76Player\u00a7c {0} \u00a76jailed by \u00a7c{1}. +jailNotifyJailedFor=\u00a76Player\u00a7c {0} \u00a76jailed for\u00a7c {1}\u00a76by \u00a7c{2}\u00a76. +jailNotifySentenceExtended=\u00a76Player\u00a7c{0} \u00a76jail's time extended to \u00a7c{1} \u00a76by \u00a7c{2}\u00a76. jailReleased=\u00a76Player \u00a7c{0}\u00a76 unjailed. jailReleasedPlayerNotify=\u00a76You have been released\! jailSentenceExtended=\u00a76Jail time extended to \u00a7c{0}\u00a76. From edd15132fd03c671911e990b0ba4c1fa623254e5 Mon Sep 17 00:00:00 2001 From: Melluh <mellemoerkerk@gmail.com> Date: Sat, 23 Oct 2021 21:29:37 +0200 Subject: [PATCH 087/120] Add playtime command (#4562) Co-authored-by: Josh Roy <10731363+JRoy@users.noreply.github.com> --- .../essentials/commands/Commandplaytime.java | 53 +++++++++++++++++++ .../src/main/resources/messages.properties | 8 +++ Essentials/src/main/resources/plugin.yml | 4 ++ 3 files changed, 65 insertions(+) create mode 100644 Essentials/src/main/java/com/earth2me/essentials/commands/Commandplaytime.java diff --git a/Essentials/src/main/java/com/earth2me/essentials/commands/Commandplaytime.java b/Essentials/src/main/java/com/earth2me/essentials/commands/Commandplaytime.java new file mode 100644 index 00000000000..0ecfa8325df --- /dev/null +++ b/Essentials/src/main/java/com/earth2me/essentials/commands/Commandplaytime.java @@ -0,0 +1,53 @@ +package com.earth2me.essentials.commands; + +import static com.earth2me.essentials.I18n.tl; + +import java.util.Collections; +import java.util.List; + +import org.bukkit.Server; +import org.bukkit.Statistic; + +import com.earth2me.essentials.CommandSource; +import com.earth2me.essentials.IUser; +import com.earth2me.essentials.utils.DateUtil; +import com.earth2me.essentials.utils.EnumUtil; + +public class Commandplaytime extends EssentialsCommand { + // For some reason, in 1.13 PLAY_ONE_MINUTE = ticks played = what used to be PLAY_ONE_TICK + // https://hub.spigotmc.org/stash/projects/SPIGOT/repos/bukkit/commits/b848d8ce633871b52115247b089029749c02f579 + private static final Statistic PLAY_ONE_TICK = EnumUtil.getStatistic("PLAY_ONE_MINUTE", "PLAY_ONE_TICK"); + + public Commandplaytime() { + super("playtime"); + } + + @Override + protected void run(Server server, CommandSource sender, String commandLabel, String[] args) throws Exception { + final IUser target; + final String key; + + if (args.length > 0 && sender.isAuthorized("essentials.playtime.others", ess)) { + target = getPlayer(server, sender, args, 0); + key = "playtimeOther"; + } else if (sender.isPlayer()) { + target = sender.getUser(ess); + key = "playtime"; + } else { + throw new NotEnoughArgumentsException(); + } + + final long playtimeMs = System.currentTimeMillis() - (target.getBase().getStatistic(PLAY_ONE_TICK) * 50); + sender.sendMessage(tl(key, DateUtil.formatDateDiff(playtimeMs), target.getDisplayName())); + } + + @Override + protected List<String> getTabCompleteOptions(final Server server, final CommandSource sender, final String commandLabel, final String[] args) { + if (args.length == 1 && sender.isAuthorized("essentials.playtime.others", ess)) { + return getPlayers(server, sender); + } else { + return Collections.emptyList(); + } + } + +} diff --git a/Essentials/src/main/resources/messages.properties b/Essentials/src/main/resources/messages.properties index d373a4f27b3..ecabac9d1f5 100644 --- a/Essentials/src/main/resources/messages.properties +++ b/Essentials/src/main/resources/messages.properties @@ -884,6 +884,14 @@ playerTempBanned=\u00a76Player \u00a7c{0}\u00a76 temporarily banned \u00a7c{1}\u playerUnbanIpAddress=\u00a76Player\u00a7c {0} \u00a76unbanned IP\:\u00a7c {1} playerUnbanned=\u00a76Player\u00a7c {0} \u00a76unbanned\u00a7c {1} playerUnmuted=\u00a76You have been unmuted. +playtimeCommandDescription=Shows a player''s time played in game +playtimeCommandUsage=/<command> [player] +playtimeCommandUsage1=/<command> +playtimeCommandUsage1Description=Shows your time played in game +playtimeCommandUsage2=/<command> <player> +playtimeCommandUsage2Description=Shows the specified player''s time played in game +playtime=\u00a76Playtime\:\u00a7c {0} +playtimeOther=\u00a76Playtime of {1}\u00a76\:\u00a7c {0} pong=Pong\! posPitch=\u00a76Pitch\: {0} (Head angle) possibleWorlds=\u00a76Possible worlds are the numbers \u00a7c0\u00a76 through \u00a7c{0}\u00a76. diff --git a/Essentials/src/main/resources/plugin.yml b/Essentials/src/main/resources/plugin.yml index 502ee13252c..45f2607fc77 100644 --- a/Essentials/src/main/resources/plugin.yml +++ b/Essentials/src/main/resources/plugin.yml @@ -344,6 +344,10 @@ commands: description: Pong! usage: /<command> aliases: [echo,eecho,eping,pong,epong] + playtime: + description: Shows a player's time played in game + usage: /<command> [player] + aliases: [eplaytime] potion: description: Adds custom potion effects to a potion. usage: /<command> <clear|apply|effect:<effect> power:<power> duration:<duration>> From 494e82e5812074608c8d4d7e0703b882ec6e1d00 Mon Sep 17 00:00:00 2001 From: Josh Roy <10731363+JRoy@users.noreply.github.com> Date: Sun, 24 Oct 2021 10:05:10 -0400 Subject: [PATCH 088/120] Fix ability to delete warps in unloaded worlds (#4590) Fixes #4584. --- .../src/main/java/com/earth2me/essentials/Warps.java | 5 +++++ .../main/java/com/earth2me/essentials/api/IWarps.java | 8 ++++++++ .../earth2me/essentials/commands/Commanddelwarp.java | 10 ++++++++-- .../net/essentialsx/api/v2/events/WarpModifyEvent.java | 4 ++-- 4 files changed, 23 insertions(+), 4 deletions(-) diff --git a/Essentials/src/main/java/com/earth2me/essentials/Warps.java b/Essentials/src/main/java/com/earth2me/essentials/Warps.java index 334f3fe1c88..6c34493b383 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/Warps.java +++ b/Essentials/src/main/java/com/earth2me/essentials/Warps.java @@ -38,6 +38,11 @@ public boolean isEmpty() { return warpPoints.isEmpty(); } + @Override + public boolean isWarp(String name) { + return warpPoints.containsKey(new StringIgnoreCase(name)); + } + @Override public Collection<String> getList() { final List<String> keys = new ArrayList<>(); diff --git a/Essentials/src/main/java/com/earth2me/essentials/api/IWarps.java b/Essentials/src/main/java/com/earth2me/essentials/api/IWarps.java index 2ddf06dc7e6..d9af55ab6fd 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/api/IWarps.java +++ b/Essentials/src/main/java/com/earth2me/essentials/api/IWarps.java @@ -26,6 +26,14 @@ public interface IWarps extends IConf { */ Location getWarp(String warp) throws WarpNotFoundException, net.ess3.api.InvalidWorldException; + /** + * Checks if the provided name is a warp. + * + * @param name The warp name. + * @return true if a warp by that name exists. + */ + boolean isWarp(String name); + /** * Gets a list of warps * diff --git a/Essentials/src/main/java/com/earth2me/essentials/commands/Commanddelwarp.java b/Essentials/src/main/java/com/earth2me/essentials/commands/Commanddelwarp.java index 0d1bd1be64c..439cdca5880 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/commands/Commanddelwarp.java +++ b/Essentials/src/main/java/com/earth2me/essentials/commands/Commanddelwarp.java @@ -23,8 +23,14 @@ public void run(final Server server, final CommandSource sender, final String co throw new NotEnoughArgumentsException(); } //Check if warp exists before calling the event - final Location location = ess.getWarps().getWarp(args[0]); - if (location != null) { + if (ess.getWarps().isWarp(args[0])) { + Location location; + try { + location = ess.getWarps().getWarp(args[0]); + } catch (Exception ignored) { + // World is unloaded/deleted + location = null; + } final WarpModifyEvent event = new WarpModifyEvent(sender.getUser(this.ess), args[0], location, null, WarpModifyEvent.WarpModifyCause.DELETE); Bukkit.getServer().getPluginManager().callEvent(event); if (event.isCancelled()) { diff --git a/Essentials/src/main/java/net/essentialsx/api/v2/events/WarpModifyEvent.java b/Essentials/src/main/java/net/essentialsx/api/v2/events/WarpModifyEvent.java index 64586008d0e..395f10c9dbc 100644 --- a/Essentials/src/main/java/net/essentialsx/api/v2/events/WarpModifyEvent.java +++ b/Essentials/src/main/java/net/essentialsx/api/v2/events/WarpModifyEvent.java @@ -23,7 +23,7 @@ public class WarpModifyEvent extends Event implements Cancellable { /** * @param user the {@link IUser} who is modifing the warp. * @param warpName the name of the warp that's being altered. - * @param oldLocation the old location before being modified. Null if {@link WarpModifyCause#CREATE}. + * @param oldLocation the old location before being modified. Null if {@link WarpModifyCause#CREATE} or if the previous location's world is not loaded. * @param newLocation the new location after being modified. Null if {@link WarpModifyCause#DELETE}. * @param cause the cause of change. */ @@ -58,7 +58,7 @@ public String getWarpName() { } /** - * Gets the current location of the warp or null if it's being created. + * Gets the current location of the warp or null if it's being created or if the previous location's world is not loaded. * @return The warps new location or null. */ public Location getOldLocation() { From ce88c0e1e4831694c5a4bf0ba530e49c3a95afa5 Mon Sep 17 00:00:00 2001 From: Josh Roy <10731363+JRoy@users.noreply.github.com> Date: Sun, 24 Oct 2021 10:12:20 -0400 Subject: [PATCH 089/120] Fix kit issues with potions in 1.8 (#4591) Fixes #2867 --- .../main/java/com/earth2me/essentials/MetaItemStack.java | 6 +++--- .../com/earth2me/essentials/commands/Commandpotion.java | 4 ++-- .../java/com/earth2me/essentials/items/AbstractItemDb.java | 2 +- .../java/com/earth2me/essentials/items/LegacyItemDb.java | 4 ++-- .../src/main/java/net/ess3/nms/refl/ReflUtil.java | 1 - 5 files changed, 8 insertions(+), 9 deletions(-) diff --git a/Essentials/src/main/java/com/earth2me/essentials/MetaItemStack.java b/Essentials/src/main/java/com/earth2me/essentials/MetaItemStack.java index d4e755e9ded..5a727c08434 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/MetaItemStack.java +++ b/Essentials/src/main/java/com/earth2me/essentials/MetaItemStack.java @@ -7,9 +7,9 @@ import com.earth2me.essentials.utils.FormatUtil; import com.earth2me.essentials.utils.MaterialUtil; import com.earth2me.essentials.utils.NumberUtil; +import com.earth2me.essentials.utils.VersionUtil; import com.google.common.base.Joiner; import net.ess3.api.IEssentials; -import net.ess3.nms.refl.ReflUtil; import org.bukkit.Color; import org.bukkit.DyeColor; import org.bukkit.FireworkEffect; @@ -529,14 +529,14 @@ public void addPotionMeta(final CommandSource sender, final boolean allowShortNa } pmeta.addCustomEffect(pEffect, true); stack.setItemMeta(pmeta); - if (ReflUtil.getNmsVersionObject().isHigherThanOrEqualTo(ReflUtil.V1_9_R1)) { + if (VersionUtil.getServerBukkitVersion().isHigherThanOrEqualTo(VersionUtil.v1_9_R01)) { if (isSplashPotion && stack.getType() != Material.SPLASH_POTION) { stack.setType(Material.SPLASH_POTION); } else if (!isSplashPotion && stack.getType() != Material.POTION) { stack.setType(Material.POTION); } } else { - final Potion potion = Potion.fromItemStack(stack); + final Potion potion = Potion.fromDamage(stack.getDurability()); potion.setSplash(isSplashPotion); potion.apply(stack); } diff --git a/Essentials/src/main/java/com/earth2me/essentials/commands/Commandpotion.java b/Essentials/src/main/java/com/earth2me/essentials/commands/Commandpotion.java index 5bf258cb11c..447772df318 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/commands/Commandpotion.java +++ b/Essentials/src/main/java/com/earth2me/essentials/commands/Commandpotion.java @@ -4,8 +4,8 @@ import com.earth2me.essentials.Potions; import com.earth2me.essentials.User; import com.earth2me.essentials.utils.StringUtil; +import com.earth2me.essentials.utils.VersionUtil; import com.google.common.collect.Lists; -import net.ess3.nms.refl.ReflUtil; import org.bukkit.Material; import org.bukkit.Server; import org.bukkit.inventory.ItemStack; @@ -42,7 +42,7 @@ protected void run(final Server server, final User user, final String commandLab } boolean holdingPotion = stack.getType() == Material.POTION; - if (!holdingPotion && ReflUtil.getNmsVersionObject().isHigherThanOrEqualTo(ReflUtil.V1_9_R1)) { + if (!holdingPotion && VersionUtil.getServerBukkitVersion().isHigherThanOrEqualTo(VersionUtil.v1_9_R01)) { holdingPotion = stack.getType() == Material.SPLASH_POTION || stack.getType() == Material.LINGERING_POTION; } if (holdingPotion) { diff --git a/Essentials/src/main/java/com/earth2me/essentials/items/AbstractItemDb.java b/Essentials/src/main/java/com/earth2me/essentials/items/AbstractItemDb.java index 579d64f01be..2e8c7e0b40e 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/items/AbstractItemDb.java +++ b/Essentials/src/main/java/com/earth2me/essentials/items/AbstractItemDb.java @@ -279,7 +279,7 @@ public String serialize(final ItemStack is, final boolean useResolvers) { serializeEffectMeta(sb, fireworkEffectMeta.getEffect()); } } else if (MaterialUtil.isPotion(material)) { - final Potion potion = Potion.fromItemStack(is); + final Potion potion = Potion.fromDamage(is.getDurability()); for (final PotionEffect e : potion.getEffects()) { // long but needs to be effect:speed power:2 duration:120 in that order. sb.append("splash:").append(potion.isSplash()).append(" ").append("effect:").append(e.getType().getName().toLowerCase()).append(" ").append("power:").append(e.getAmplifier()).append(" ").append("duration:").append(e.getDuration() / 20).append(" "); diff --git a/Essentials/src/main/java/com/earth2me/essentials/items/LegacyItemDb.java b/Essentials/src/main/java/com/earth2me/essentials/items/LegacyItemDb.java index a1b307f0e19..e0de483b3ba 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/items/LegacyItemDb.java +++ b/Essentials/src/main/java/com/earth2me/essentials/items/LegacyItemDb.java @@ -3,8 +3,8 @@ import com.earth2me.essentials.ManagedFile; import com.earth2me.essentials.utils.EnumUtil; import com.earth2me.essentials.utils.NumberUtil; +import com.earth2me.essentials.utils.VersionUtil; import net.ess3.api.IEssentials; -import net.ess3.nms.refl.ReflUtil; import org.apache.commons.lang.StringUtils; import org.bukkit.Material; import org.bukkit.entity.EntityType; @@ -204,7 +204,7 @@ public ItemStack get(final String id, final boolean useResolvers) throws Excepti } retval = ess.getSpawnEggProvider().createEggItem(type); } else if (mat.name().endsWith("POTION") - && ReflUtil.getNmsVersionObject().isLowerThan(ReflUtil.V1_11_R1)) { // Only apply this to pre-1.11 as items.csv might only work in 1.11 + && VersionUtil.getServerBukkitVersion().isLowerThan(VersionUtil.v1_11_R01)) { // Only apply this to pre-1.11 as items.csv might only work in 1.11 retval = ess.getPotionMetaProvider().createPotionItem(mat, metaData); } else { retval.setDurability(metaData); diff --git a/providers/NMSReflectionProvider/src/main/java/net/ess3/nms/refl/ReflUtil.java b/providers/NMSReflectionProvider/src/main/java/net/ess3/nms/refl/ReflUtil.java index f4fe3574638..ba3d6a012cf 100644 --- a/providers/NMSReflectionProvider/src/main/java/net/ess3/nms/refl/ReflUtil.java +++ b/providers/NMSReflectionProvider/src/main/java/net/ess3/nms/refl/ReflUtil.java @@ -17,7 +17,6 @@ public final class ReflUtil { public static final NMSVersion V1_12_R1 = NMSVersion.fromString("v1_12_R1"); - public static final NMSVersion V1_9_R1 = NMSVersion.fromString("v1_9_R1"); public static final NMSVersion V1_11_R1 = NMSVersion.fromString("v1_11_R1"); public static final NMSVersion V1_17_R1 = NMSVersion.fromString("v1_17_R1"); private static final Map<String, Class<?>> classCache = new HashMap<>(); From 70045c30f3e790de112460ef42462eb07eaa532a Mon Sep 17 00:00:00 2001 From: Josh Roy <10731363+JRoy@users.noreply.github.com> Date: Sun, 24 Oct 2021 10:17:06 -0400 Subject: [PATCH 090/120] Migrate reflection in MetaItemStack to a provider (#4592) --- Essentials/build.gradle | 4 ++ .../com/earth2me/essentials/Essentials.java | 15 ++++++++ .../com/earth2me/essentials/IEssentials.java | 3 ++ .../earth2me/essentials/MetaItemStack.java | 38 ++----------------- providers/1_12Provider/build.gradle | 12 ++++++ .../com/earth2me/essentials/FakeAccessor.java | 0 .../com/earth2me/essentials/FakeServer.java | 0 .../com/earth2me/essentials/FakeWorld.java | 0 .../earth2me/essentials/OfflinePlayer.java | 0 providers/1_8Provider/build.gradle | 5 ++- .../LegacyItemUnbreakableProvider.java | 16 ++++++++ .../provider/ItemUnbreakableProvider.java | 7 ++++ .../ModernItemUnbreakableProvider.java | 16 ++++++++ settings.gradle.kts | 1 + 14 files changed, 82 insertions(+), 35 deletions(-) create mode 100644 providers/1_12Provider/build.gradle rename providers/{1_8Provider => 1_12Provider}/src/main/java/com/earth2me/essentials/FakeAccessor.java (100%) rename providers/{1_8Provider => 1_12Provider}/src/main/java/com/earth2me/essentials/FakeServer.java (100%) rename providers/{1_8Provider => 1_12Provider}/src/main/java/com/earth2me/essentials/FakeWorld.java (100%) rename providers/{1_8Provider => 1_12Provider}/src/main/java/com/earth2me/essentials/OfflinePlayer.java (100%) create mode 100644 providers/1_8Provider/src/main/java/net/ess3/provider/providers/LegacyItemUnbreakableProvider.java create mode 100644 providers/BaseProviders/src/main/java/net/ess3/provider/ItemUnbreakableProvider.java create mode 100644 providers/BaseProviders/src/main/java/net/ess3/provider/providers/ModernItemUnbreakableProvider.java diff --git a/Essentials/build.gradle b/Essentials/build.gradle index 86d46d43993..f864f2c652b 100644 --- a/Essentials/build.gradle +++ b/Essentials/build.gradle @@ -22,6 +22,9 @@ dependencies { exclude group: "org.bukkit", module: "bukkit" } api(project(':providers:1_8Provider')) { + exclude group: "org.spigotmc", module: "spigot" + } + api(project(':providers:1_12Provider')) { exclude group: "org.bukkit", module: "bukkit" } } @@ -40,6 +43,7 @@ shadowJar { include (project(':providers:PaperProvider')) include (project(':providers:NMSReflectionProvider')) include (project(':providers:1_8Provider')) + include (project(':providers:1_12Provider')) } relocate 'io.papermc.lib', 'com.earth2me.essentials.paperlib' relocate 'org.bstats', 'com.earth2me.essentials.libs.bstats' diff --git a/Essentials/src/main/java/com/earth2me/essentials/Essentials.java b/Essentials/src/main/java/com/earth2me/essentials/Essentials.java index ba26a7246d5..4305ed6474d 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/Essentials.java +++ b/Essentials/src/main/java/com/earth2me/essentials/Essentials.java @@ -57,6 +57,7 @@ import net.ess3.nms.refl.providers.ReflSyncCommandsProvider; import net.ess3.provider.ContainerProvider; import net.ess3.provider.FormattedCommandAliasProvider; +import net.ess3.provider.ItemUnbreakableProvider; import net.ess3.provider.KnownCommandsProvider; import net.ess3.provider.MaterialTagProvider; import net.ess3.provider.PersistentDataProvider; @@ -73,8 +74,10 @@ import net.ess3.provider.providers.BukkitMaterialTagProvider; import net.ess3.provider.providers.BukkitSpawnerBlockProvider; import net.ess3.provider.providers.FlatSpawnEggProvider; +import net.ess3.provider.providers.LegacyItemUnbreakableProvider; import net.ess3.provider.providers.LegacyPotionMetaProvider; import net.ess3.provider.providers.LegacySpawnEggProvider; +import net.ess3.provider.providers.ModernItemUnbreakableProvider; import net.ess3.provider.providers.ModernPersistentDataProvider; import net.ess3.provider.providers.PaperContainerProvider; import net.ess3.provider.providers.PaperKnownCommandsProvider; @@ -166,6 +169,7 @@ public class Essentials extends JavaPlugin implements net.ess3.api.IEssentials { private transient SyncCommandsProvider syncCommandsProvider; private transient PersistentDataProvider persistentDataProvider; private transient ReflOnlineModeProvider onlineModeProvider; + private transient ItemUnbreakableProvider unbreakableProvider; private transient Kits kits; private transient RandomTeleport randomTeleport; private transient UpdateChecker updateChecker; @@ -409,6 +413,12 @@ public void onEnable() { onlineModeProvider = new ReflOnlineModeProvider(); + if (VersionUtil.getServerBukkitVersion().isHigherThanOrEqualTo(VersionUtil.v1_11_2_R01)) { + unbreakableProvider = new ModernItemUnbreakableProvider(); + } else { + unbreakableProvider = new LegacyItemUnbreakableProvider(); + } + execTimer.mark("Init(Providers)"); reload(); @@ -1269,6 +1279,11 @@ public ReflOnlineModeProvider getOnlineModeProvider() { return onlineModeProvider; } + @Override + public ItemUnbreakableProvider getItemUnbreakableProvider() { + return unbreakableProvider; + } + @Override public PluginCommand getPluginCommand(final String cmd) { return this.getCommand(cmd); diff --git a/Essentials/src/main/java/com/earth2me/essentials/IEssentials.java b/Essentials/src/main/java/com/earth2me/essentials/IEssentials.java index 73e09b8c7a7..1852eb9b655 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/IEssentials.java +++ b/Essentials/src/main/java/com/earth2me/essentials/IEssentials.java @@ -10,6 +10,7 @@ import net.ess3.nms.refl.providers.ReflOnlineModeProvider; import net.ess3.provider.ContainerProvider; import net.ess3.provider.FormattedCommandAliasProvider; +import net.ess3.provider.ItemUnbreakableProvider; import net.ess3.provider.KnownCommandsProvider; import net.ess3.provider.MaterialTagProvider; import net.ess3.provider.PersistentDataProvider; @@ -159,5 +160,7 @@ public interface IEssentials extends Plugin { ReflOnlineModeProvider getOnlineModeProvider(); + ItemUnbreakableProvider getItemUnbreakableProvider(); + PluginCommand getPluginCommand(String cmd); } diff --git a/Essentials/src/main/java/com/earth2me/essentials/MetaItemStack.java b/Essentials/src/main/java/com/earth2me/essentials/MetaItemStack.java index 5a727c08434..015eb03f12c 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/MetaItemStack.java +++ b/Essentials/src/main/java/com/earth2me/essentials/MetaItemStack.java @@ -33,7 +33,6 @@ import org.bukkit.potion.PotionEffect; import org.bukkit.potion.PotionEffectType; -import java.lang.reflect.Method; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; @@ -48,9 +47,6 @@ public class MetaItemStack { private static final Map<String, DyeColor> colorMap = new HashMap<>(); private static final Map<String, FireworkEffect.Type> fireworkShape = new HashMap<>(); - private static int bukkitUnbreakableSupport = -1; - private static Method spigotMethod; - private static Method setUnbreakableMethod; private static boolean useNewSkullMethod = true; static { @@ -212,7 +208,7 @@ public void addStringMeta(final CommandSource sender, final boolean allowUnsafe, stack.setItemMeta(meta); } else if (split[0].equalsIgnoreCase("unbreakable") && hasMetaPermission(sender, "unbreakable", false, true, ess)) { final boolean value = split.length <= 1 || Boolean.parseBoolean(split[1]); - setUnbreakable(stack, value); + setUnbreakable(ess, stack, value); } else if (split.length > 1 && (split[0].equalsIgnoreCase("player") || split[0].equalsIgnoreCase("owner")) && hasMetaPermission(sender, "head", false, true, ess)) { if (MaterialUtil.isPlayerHead(stack.getType(), stack.getDurability())) { final String owner = split[1]; @@ -686,35 +682,9 @@ private boolean hasMetaPermission(final User user, final String metaPerm, final } } - private void setUnbreakable(final ItemStack is, final boolean unbreakable) { + private void setUnbreakable(final IEssentials ess, final ItemStack is, final boolean unbreakable) { final ItemMeta meta = is.getItemMeta(); - try { - if (bukkitUnbreakableSupport == -1) { - try { - ItemMeta.class.getDeclaredMethod("setUnbreakable", boolean.class); - bukkitUnbreakableSupport = 1; - } catch (final NoSuchMethodException | SecurityException ex) { - bukkitUnbreakableSupport = 0; - } - } - - if (bukkitUnbreakableSupport == 1) { - meta.setUnbreakable(unbreakable); - } else { - if (spigotMethod == null) { - spigotMethod = meta.getClass().getDeclaredMethod("spigot"); - spigotMethod.setAccessible(true); - } - final Object itemStackSpigot = spigotMethod.invoke(meta); - if (setUnbreakableMethod == null) { - setUnbreakableMethod = itemStackSpigot.getClass().getDeclaredMethod("setUnbreakable", Boolean.TYPE); - setUnbreakableMethod.setAccessible(true); - } - setUnbreakableMethod.invoke(itemStackSpigot, unbreakable); - } - is.setItemMeta(meta); - } catch (final Throwable t) { - t.printStackTrace(); - } + ess.getItemUnbreakableProvider().setUnbreakable(meta, unbreakable); + is.setItemMeta(meta); } } diff --git a/providers/1_12Provider/build.gradle b/providers/1_12Provider/build.gradle new file mode 100644 index 00000000000..e04aa542689 --- /dev/null +++ b/providers/1_12Provider/build.gradle @@ -0,0 +1,12 @@ +plugins { + id("essentials.base-conventions") +} + +dependencies { + api project(':providers:NMSReflectionProvider') +} + +essentials { + injectBukkitApi.set(false) + injectBstats.set(false) +} diff --git a/providers/1_8Provider/src/main/java/com/earth2me/essentials/FakeAccessor.java b/providers/1_12Provider/src/main/java/com/earth2me/essentials/FakeAccessor.java similarity index 100% rename from providers/1_8Provider/src/main/java/com/earth2me/essentials/FakeAccessor.java rename to providers/1_12Provider/src/main/java/com/earth2me/essentials/FakeAccessor.java diff --git a/providers/1_8Provider/src/main/java/com/earth2me/essentials/FakeServer.java b/providers/1_12Provider/src/main/java/com/earth2me/essentials/FakeServer.java similarity index 100% rename from providers/1_8Provider/src/main/java/com/earth2me/essentials/FakeServer.java rename to providers/1_12Provider/src/main/java/com/earth2me/essentials/FakeServer.java diff --git a/providers/1_8Provider/src/main/java/com/earth2me/essentials/FakeWorld.java b/providers/1_12Provider/src/main/java/com/earth2me/essentials/FakeWorld.java similarity index 100% rename from providers/1_8Provider/src/main/java/com/earth2me/essentials/FakeWorld.java rename to providers/1_12Provider/src/main/java/com/earth2me/essentials/FakeWorld.java diff --git a/providers/1_8Provider/src/main/java/com/earth2me/essentials/OfflinePlayer.java b/providers/1_12Provider/src/main/java/com/earth2me/essentials/OfflinePlayer.java similarity index 100% rename from providers/1_8Provider/src/main/java/com/earth2me/essentials/OfflinePlayer.java rename to providers/1_12Provider/src/main/java/com/earth2me/essentials/OfflinePlayer.java diff --git a/providers/1_8Provider/build.gradle b/providers/1_8Provider/build.gradle index e04aa542689..9313505930d 100644 --- a/providers/1_8Provider/build.gradle +++ b/providers/1_8Provider/build.gradle @@ -3,7 +3,10 @@ plugins { } dependencies { - api project(':providers:NMSReflectionProvider') + implementation(project(':providers:BaseProviders')) { + exclude group: "org.spigotmc", module: "spigot-api" + } + implementation 'org.spigotmc:spigot-api:1.8.8-R0.1-SNAPSHOT' } essentials { diff --git a/providers/1_8Provider/src/main/java/net/ess3/provider/providers/LegacyItemUnbreakableProvider.java b/providers/1_8Provider/src/main/java/net/ess3/provider/providers/LegacyItemUnbreakableProvider.java new file mode 100644 index 00000000000..f4781514d77 --- /dev/null +++ b/providers/1_8Provider/src/main/java/net/ess3/provider/providers/LegacyItemUnbreakableProvider.java @@ -0,0 +1,16 @@ +package net.ess3.provider.providers; + +import net.ess3.provider.ItemUnbreakableProvider; +import org.bukkit.inventory.meta.ItemMeta; + +public class LegacyItemUnbreakableProvider implements ItemUnbreakableProvider { + @Override + public void setUnbreakable(ItemMeta meta, boolean unbreakable) { + meta.spigot().setUnbreakable(unbreakable); + } + + @Override + public String getDescription() { + return "Legacy ItemMeta Unbreakable Provider"; + } +} diff --git a/providers/BaseProviders/src/main/java/net/ess3/provider/ItemUnbreakableProvider.java b/providers/BaseProviders/src/main/java/net/ess3/provider/ItemUnbreakableProvider.java new file mode 100644 index 00000000000..07d91437dd1 --- /dev/null +++ b/providers/BaseProviders/src/main/java/net/ess3/provider/ItemUnbreakableProvider.java @@ -0,0 +1,7 @@ +package net.ess3.provider; + +import org.bukkit.inventory.meta.ItemMeta; + +public interface ItemUnbreakableProvider extends Provider { + void setUnbreakable(ItemMeta meta, boolean unbreakable); +} diff --git a/providers/BaseProviders/src/main/java/net/ess3/provider/providers/ModernItemUnbreakableProvider.java b/providers/BaseProviders/src/main/java/net/ess3/provider/providers/ModernItemUnbreakableProvider.java new file mode 100644 index 00000000000..74775dd9cda --- /dev/null +++ b/providers/BaseProviders/src/main/java/net/ess3/provider/providers/ModernItemUnbreakableProvider.java @@ -0,0 +1,16 @@ +package net.ess3.provider.providers; + +import net.ess3.provider.ItemUnbreakableProvider; +import org.bukkit.inventory.meta.ItemMeta; + +public class ModernItemUnbreakableProvider implements ItemUnbreakableProvider { + @Override + public void setUnbreakable(ItemMeta meta, boolean unbreakable) { + meta.setUnbreakable(unbreakable); + } + + @Override + public String getDescription() { + return "1.11+ ItemMeta Unbreakable Provider"; + } +} diff --git a/settings.gradle.kts b/settings.gradle.kts index 0ad3170fc9a..9e25c0594f0 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -50,3 +50,4 @@ include(":providers:BaseProviders") include(":providers:NMSReflectionProvider") include(":providers:PaperProvider") include(":providers:1_8Provider") +include(":providers:1_12Provider") From 2ed94f104891f5f253c5ef46a11ac3d34e82f40d Mon Sep 17 00:00:00 2001 From: Josh Roy <10731363+JRoy@users.noreply.github.com> Date: Sun, 24 Oct 2021 10:27:07 -0400 Subject: [PATCH 091/120] Add provider to use new Paper advancement API (#4588) Paper added in PaperMC/Paper@40ee634 --- .../discord/JDADiscordService.java | 8 +++++++- providers/PaperProvider/build.gradle | 8 ++++++-- .../PaperAdvancementListenerProvider.java | 20 +++++++++++++++++++ 3 files changed, 33 insertions(+), 3 deletions(-) create mode 100644 providers/PaperProvider/src/main/java/net/ess3/provider/providers/PaperAdvancementListenerProvider.java diff --git a/EssentialsDiscord/src/main/java/net/essentialsx/discord/JDADiscordService.java b/EssentialsDiscord/src/main/java/net/essentialsx/discord/JDADiscordService.java index 52bd24f16db..e9b810ec2f7 100644 --- a/EssentialsDiscord/src/main/java/net/essentialsx/discord/JDADiscordService.java +++ b/EssentialsDiscord/src/main/java/net/essentialsx/discord/JDADiscordService.java @@ -21,6 +21,7 @@ import net.dv8tion.jda.api.utils.cache.CacheFlag; import net.ess3.nms.refl.providers.AchievementListenerProvider; import net.ess3.nms.refl.providers.AdvancementListenerProvider; +import net.ess3.provider.providers.PaperAdvancementListenerProvider; import net.essentialsx.api.v2.events.discord.DiscordMessageEvent; import net.essentialsx.api.v2.services.discord.DiscordService; import net.essentialsx.api.v2.services.discord.InteractionController; @@ -207,7 +208,12 @@ public void startup() throws LoginException, InterruptedException { try { if (VersionUtil.getServerBukkitVersion().isHigherThanOrEqualTo(VersionUtil.v1_12_0_R01)) { - Bukkit.getPluginManager().registerEvents(new AdvancementListenerProvider(), plugin); + try { + Class.forName("io.papermc.paper.advancement.AdvancementDisplay"); + Bukkit.getPluginManager().registerEvents(new PaperAdvancementListenerProvider(), plugin); + } catch (ClassNotFoundException e) { + Bukkit.getPluginManager().registerEvents(new AdvancementListenerProvider(), plugin); + } } else { Bukkit.getPluginManager().registerEvents(new AchievementListenerProvider(), plugin); } diff --git a/providers/PaperProvider/build.gradle b/providers/PaperProvider/build.gradle index 1b1dba5379f..9a483358e2f 100644 --- a/providers/PaperProvider/build.gradle +++ b/providers/PaperProvider/build.gradle @@ -2,10 +2,14 @@ plugins { id("essentials.base-conventions") } +java { + disableAutoTargetJvm() +} + dependencies { implementation project(':providers:BaseProviders') - compileOnly 'com.destroystokyo.paper:paper-api:1.16.5-R0.1-SNAPSHOT' - compileOnly 'com.destroystokyo.paper:paper-mojangapi:1.16.5-R0.1-SNAPSHOT' + compileOnly 'io.papermc.paper:paper-api:1.17.1-R0.1-SNAPSHOT' + compileOnly 'io.papermc.paper:paper-mojangapi:1.17.1-R0.1-SNAPSHOT' } essentials { diff --git a/providers/PaperProvider/src/main/java/net/ess3/provider/providers/PaperAdvancementListenerProvider.java b/providers/PaperProvider/src/main/java/net/ess3/provider/providers/PaperAdvancementListenerProvider.java new file mode 100644 index 00000000000..c54811e2e6b --- /dev/null +++ b/providers/PaperProvider/src/main/java/net/ess3/provider/providers/PaperAdvancementListenerProvider.java @@ -0,0 +1,20 @@ +package net.ess3.provider.providers; + +import io.papermc.paper.advancement.AdvancementDisplay; +import net.ess3.provider.AbstractAchievementEvent; +import org.bukkit.Bukkit; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerAdvancementDoneEvent; + +public class PaperAdvancementListenerProvider implements Listener { + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + public void onAdvancement(final PlayerAdvancementDoneEvent event) { + final AdvancementDisplay display = event.getAdvancement().getDisplay(); + if (display != null && display.doesAnnounceToChat()) { + //noinspection deprecation + Bukkit.getPluginManager().callEvent(new AbstractAchievementEvent(event.getPlayer(), Bukkit.getUnsafe().plainComponentSerializer().serialize(display.title()))); + } + } +} From 96016871907b89e15ebc0d3d383067b10ce734eb Mon Sep 17 00:00:00 2001 From: Josh Roy <10731363+JRoy@users.noreply.github.com> Date: Sun, 24 Oct 2021 12:12:42 -0400 Subject: [PATCH 092/120] Add console regex filter for discord module (#4534) --- .../essentialsx/discord/DiscordSettings.java | 62 ++++++++++++++++--- .../discord/listeners/DiscordListener.java | 13 ++-- .../discord/util/ConsoleInjector.java | 9 +++ .../src/main/resources/config.yml | 4 ++ 4 files changed, 76 insertions(+), 12 deletions(-) diff --git a/EssentialsDiscord/src/main/java/net/essentialsx/discord/DiscordSettings.java b/EssentialsDiscord/src/main/java/net/essentialsx/discord/DiscordSettings.java index e06d5dbc1a6..18b9c702d74 100644 --- a/EssentialsDiscord/src/main/java/net/essentialsx/discord/DiscordSettings.java +++ b/EssentialsDiscord/src/main/java/net/essentialsx/discord/DiscordSettings.java @@ -12,6 +12,7 @@ import java.io.File; import java.text.MessageFormat; import java.util.ArrayList; +import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -30,10 +31,11 @@ public class DiscordSettings implements IConf { private OnlineStatus status; private Activity statusActivity; - private Pattern discordFilter; + private List<Pattern> discordFilter; private MessageFormat consoleFormat; private Level consoleLogLevel; + private List<Pattern> consoleFilter; private MessageFormat discordToMcFormat; private MessageFormat tempMuteFormat; @@ -109,7 +111,7 @@ public boolean isChatFilterNewlines() { return config.getBoolean("chat.filter-newlines", true); } - public Pattern getDiscordFilter() { + public List<Pattern> getDiscordFilters() { return discordFilter; } @@ -153,6 +155,10 @@ public Level getConsoleLogLevel() { return consoleLogLevel; } + public List<Pattern> getConsoleFilters() { + return consoleFilter; + } + public boolean isShowAvatar() { return config.getBoolean("show-avatar", false); } @@ -388,20 +394,60 @@ public void reloadConfig() { statusActivity = Activity.of(activityType, config.getString("presence.message", "Minecraft")); } - final String filter = config.getString("chat.discord-filter", null); - if (filter != null && !filter.trim().isEmpty()) { + if (config.isList("chat.discord-filter")) { + final List<Pattern> filters = new ArrayList<>(); + for (final String chatFilterString : config.getList("chat.discord-filter", String.class)) { + if (chatFilterString != null && !chatFilterString.trim().isEmpty()) { + try { + filters.add(Pattern.compile(chatFilterString)); + } catch (PatternSyntaxException e) { + plugin.getLogger().log(java.util.logging.Level.WARNING, "Invalid pattern for \"chat.discord-filter\": " + e.getMessage()); + } + } + } + discordFilter = Collections.unmodifiableList(filters); + } else { try { - discordFilter = Pattern.compile(filter); + final String chatFilter = config.getString("chat.discord-filter", null); + if (chatFilter != null && !chatFilter.trim().isEmpty()) { + discordFilter = Collections.singletonList(Pattern.compile(chatFilter)); + } else { + discordFilter = Collections.emptyList(); + } } catch (PatternSyntaxException e) { plugin.getLogger().log(java.util.logging.Level.WARNING, "Invalid pattern for \"chat.discord-filter\": " + e.getMessage()); - discordFilter = null; + discordFilter = Collections.emptyList(); } - } else { - discordFilter = null; } consoleLogLevel = Level.toLevel(config.getString("console.log-level", null), Level.INFO); + if (config.isList("console.console-filter")) { + final List<Pattern> filters = new ArrayList<>(); + for (final String filterString : config.getList("console.console-filter", String.class)) { + if (filterString != null && !filterString.trim().isEmpty()) { + try { + filters.add(Pattern.compile(filterString)); + } catch (PatternSyntaxException e) { + plugin.getLogger().log(java.util.logging.Level.WARNING, "Invalid pattern for \"console.log-level\": " + e.getMessage()); + } + } + } + consoleFilter = Collections.unmodifiableList(filters); + } else { + try { + final String cFilter = config.getString("console.console-filter", null); + if (cFilter != null && !cFilter.trim().isEmpty()) { + consoleFilter = Collections.singletonList(Pattern.compile(cFilter)); + } else { + consoleFilter = Collections.emptyList(); + } + } catch (PatternSyntaxException e) { + plugin.getLogger().log(java.util.logging.Level.WARNING, "Invalid pattern for \"console.log-level\": " + e.getMessage()); + consoleFilter = Collections.emptyList(); + } + } + consoleFormat = generateMessageFormat(getFormatString(".console.format"), "[{timestamp} {level}] {message}", false, "timestamp", "level", "message"); diff --git a/EssentialsDiscord/src/main/java/net/essentialsx/discord/listeners/DiscordListener.java b/EssentialsDiscord/src/main/java/net/essentialsx/discord/listeners/DiscordListener.java index f544553beb7..cdb3746975c 100644 --- a/EssentialsDiscord/src/main/java/net/essentialsx/discord/listeners/DiscordListener.java +++ b/EssentialsDiscord/src/main/java/net/essentialsx/discord/listeners/DiscordListener.java @@ -17,6 +17,7 @@ import java.util.List; import java.util.logging.Level; import java.util.logging.Logger; +import java.util.regex.Pattern; public class DiscordListener extends ListenerAdapter { private final static Logger logger = Logger.getLogger("EssentialsDiscord"); @@ -51,11 +52,15 @@ public void onGuildMessageReceived(@NotNull GuildMessageReceivedEvent event) { final String effectiveName = member == null ? event.getAuthor().getName() : member.getEffectiveName(); final Message message = event.getMessage(); - if (plugin.getSettings().getDiscordFilter() != null && plugin.getSettings().getDiscordFilter().matcher(message.getContentDisplay()).find()) { - if (plugin.isDebug()) { - logger.log(Level.INFO, "Skipping message " + message.getId() + " with content, \"" + message.getContentDisplay() + "\" as it matched the filter!"); + if (!plugin.getSettings().getDiscordFilters().isEmpty()) { + for (final Pattern pattern : plugin.getSettings().getDiscordFilters()) { + if (pattern.matcher(message.getContentDisplay()).find()) { + if (plugin.isDebug()) { + logger.log(Level.INFO, "Skipping message " + message.getId() + " with content, \"" + message.getContentDisplay() + "\" as it matched the filter!"); + } + return; + } } - return; } final StringBuilder messageBuilder = new StringBuilder(message.getContentDisplay()); diff --git a/EssentialsDiscord/src/main/java/net/essentialsx/discord/util/ConsoleInjector.java b/EssentialsDiscord/src/main/java/net/essentialsx/discord/util/ConsoleInjector.java index 6a668bdecb2..91cc5f464c6 100644 --- a/EssentialsDiscord/src/main/java/net/essentialsx/discord/util/ConsoleInjector.java +++ b/EssentialsDiscord/src/main/java/net/essentialsx/discord/util/ConsoleInjector.java @@ -15,6 +15,7 @@ import java.time.Instant; import java.util.concurrent.BlockingQueue; import java.util.concurrent.LinkedBlockingQueue; +import java.util.regex.Pattern; import static com.earth2me.essentials.I18n.tl; @@ -67,6 +68,14 @@ public void append(LogEvent event) { return; } + if (!jda.getSettings().getConsoleFilters().isEmpty()) { + for (final Pattern pattern : jda.getSettings().getConsoleFilters()) { + if (pattern.matcher(entry).find()) { + return; + } + } + } + final String loggerName = event.getLoggerName(); if (!loggerName.isEmpty() && !loggerName.contains(".")) { entry = "[" + event.getLoggerName() + "] " + entry; diff --git a/EssentialsDiscord/src/main/resources/config.yml b/EssentialsDiscord/src/main/resources/config.yml index f018d3128f1..7f998b673fc 100644 --- a/EssentialsDiscord/src/main/resources/config.yml +++ b/EssentialsDiscord/src/main/resources/config.yml @@ -100,6 +100,10 @@ console: # - debug # - trace log-level: info + # Blocks any console message from sending to Discord if it matches this regex pattern. + # This is useful if you want to ignore certain messages from the console. + # Can also be a list of regex patterns in addition to a single regex pattern. + console-filter: "" # Configure which Discord channels different messages will be sent to. # You can either use the names of the channels listed above or just the id of a channel. From e43f06bfa6db9fd449a29d072ca13a8aa3283468 Mon Sep 17 00:00:00 2001 From: Josh Roy <10731363+JRoy@users.noreply.github.com> Date: Sun, 24 Oct 2021 12:45:01 -0400 Subject: [PATCH 093/120] Add /mail sendtempall (#4561) Implements #4558 --- .../essentials/commands/Commandmail.java | 78 +++++++++++++------ .../src/main/resources/messages.properties | 2 + 2 files changed, 55 insertions(+), 25 deletions(-) diff --git a/Essentials/src/main/java/com/earth2me/essentials/commands/Commandmail.java b/Essentials/src/main/java/com/earth2me/essentials/commands/Commandmail.java index 387ec86662d..a40f4ade9d7 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/commands/Commandmail.java +++ b/Essentials/src/main/java/com/earth2me/essentials/commands/Commandmail.java @@ -152,7 +152,19 @@ public void run(final Server server, final User user, final String commandLabel, if (!user.isAuthorized("essentials.mail.sendall")) { throw new Exception(tl("noPerm", "essentials.mail.sendall")); } - ess.runTaskAsynchronously(new SendAll(user, FormatUtil.formatMessage(user, "essentials.mail", StringUtil.sanitizeString(FormatUtil.stripFormat(getFinalArg(args, 1)))))); + ess.runTaskAsynchronously(new SendAll(user, + FormatUtil.formatMessage(user, "essentials.mail", + StringUtil.sanitizeString(FormatUtil.stripFormat(getFinalArg(args, 1)))), 0)); + user.sendMessage(tl("mailSent")); + return; + } + if (args.length >= 3 && "sendtempall".equalsIgnoreCase(args[0])) { + if (!user.isAuthorized("essentials.mail.sendtempall")) { + throw new Exception(tl("noPerm", "essentials.mail.sendtempall")); + } + ess.runTaskAsynchronously(new SendAll(user, + FormatUtil.formatMessage(user, "essentials.mail", + StringUtil.sanitizeString(FormatUtil.stripFormat(getFinalArg(args, 2)))), DateUtil.parseDateDiff(args[1], true))); user.sendMessage(tl("mailSent")); return; } @@ -213,7 +225,12 @@ protected void run(final Server server, final CommandSource sender, final String sender.sendMessage(tl("mailSent")); return; } else if (args.length >= 2 && "sendall".equalsIgnoreCase(args[0])) { - ess.runTaskAsynchronously(new SendAll(Console.getInstance(), FormatUtil.replaceFormat(getFinalArg(args, 1)))); + ess.runTaskAsynchronously(new SendAll(Console.getInstance(), FormatUtil.replaceFormat(getFinalArg(args, 1)), 0)); + sender.sendMessage(tl("mailSent")); + return; + } else if (args.length >= 3 && "sendtempall".equalsIgnoreCase(args[0])) { + final long dateDiff = DateUtil.parseDateDiff(args[1], true); + ess.runTaskAsynchronously(new SendAll(Console.getInstance(), FormatUtil.replaceFormat(getFinalArg(args, 2)), dateDiff)); sender.sendMessage(tl("mailSent")); return; } else if (args.length >= 2) { @@ -232,12 +249,14 @@ protected void run(final Server server, final CommandSource sender, final String } private class SendAll implements Runnable { - IMessageRecipient messageRecipient; - String message; + private final IMessageRecipient messageRecipient; + private final String message; + private final long dateDiff; - SendAll(IMessageRecipient messageRecipient, String message) { + SendAll(IMessageRecipient messageRecipient, String message, long dateDiff) { this.messageRecipient = messageRecipient; this.message = message; + this.dateDiff = dateDiff; } @Override @@ -245,7 +264,7 @@ public void run() { for (UUID userid : ess.getUserMap().getAllUniqueUsers()) { final User user = ess.getUserMap().getUser(userid); if (user != null) { - user.sendMail(messageRecipient, message); + user.sendMail(messageRecipient, message, dateDiff); } } } @@ -264,38 +283,47 @@ protected List<String> getTabCompleteOptions(final Server server, final User use if (user.isAuthorized("essentials.mail.sendall")) { options.add("sendall"); } + if (user.isAuthorized("essentials.mail.sendtempall")) { + options.add("sendtempall"); + } return options; - } else if (args.length == 2 && ((args[0].equalsIgnoreCase("send") && user.isAuthorized("essentials.mail.send")) || (args[0].equalsIgnoreCase("sendtemp") && user.isAuthorized("essentials.mail.sendtemp")))) { - return getPlayers(server, user); - } else if (args.length == 2 && args[0].equalsIgnoreCase("read")) { - final ArrayList<MailMessage> mail = user.getMailMessages(); - final int pages = mail != null ? (mail.size() / 9 + (mail.size() % 9 > 0 ? 1 : 0)) : 0; - if (pages == 0) { - return Lists.newArrayList("0"); - } else { - final List<String> options = Lists.newArrayList("1"); - if (pages > 1) { - options.add(String.valueOf(pages)); + } else if (args.length == 2) { + if ((args[0].equalsIgnoreCase("send") && user.isAuthorized("essentials.mail.send")) || (args[0].equalsIgnoreCase("sendtemp") && user.isAuthorized("essentials.mail.sendtemp"))) { + return getPlayers(server, user); + } else if (args[0].equalsIgnoreCase("sendtempall") && user.isAuthorized("essentials.mail.sendtempall")) { + return COMMON_DATE_DIFFS; + } else if (args[0].equalsIgnoreCase("read")) { + final ArrayList<MailMessage> mail = user.getMailMessages(); + final int pages = mail != null ? (mail.size() / 9 + (mail.size() % 9 > 0 ? 1 : 0)) : 0; + if (pages == 0) { + return Lists.newArrayList("0"); + } else { + final List<String> options = Lists.newArrayList("1"); + if (pages > 1) { + options.add(String.valueOf(pages)); + } + return options; } - return options; } } else if (args.length == 3 && args[0].equalsIgnoreCase("sendtemp") && user.isAuthorized("essentials.mail.sendtemp")) { return COMMON_DATE_DIFFS; - } else { - return Collections.emptyList(); } + return Collections.emptyList(); } @Override protected List<String> getTabCompleteOptions(final Server server, final CommandSource sender, final String commandLabel, final String[] args) { if (args.length == 1) { - return Lists.newArrayList("send", "sendall"); - } else if (args.length == 2 && (args[0].equalsIgnoreCase("send") || args[0].equalsIgnoreCase("sendtemp"))) { - return getPlayers(server, sender); + return Lists.newArrayList("send", "sendall", "sendtemp", "sendtempall"); + } else if (args.length == 2) { + if (args[0].equalsIgnoreCase("send") || args[0].equalsIgnoreCase("sendtemp")) { + return getPlayers(server, sender); + } else if (args[0].equalsIgnoreCase("sendtempall")) { + return COMMON_DATE_DIFFS; + } } else if (args.length == 3 && args[0].equalsIgnoreCase("sendtemp")) { return COMMON_DATE_DIFFS; - } else { - return Collections.emptyList(); } + return Collections.emptyList(); } } diff --git a/Essentials/src/main/resources/messages.properties b/Essentials/src/main/resources/messages.properties index ecabac9d1f5..a6bd576bbb5 100644 --- a/Essentials/src/main/resources/messages.properties +++ b/Essentials/src/main/resources/messages.properties @@ -682,6 +682,8 @@ mailCommandUsage4=/<command> sendall <message> mailCommandUsage4Description=Sends all players the given message mailCommandUsage5=/<command> sendtemp <player> <expire time> <message> mailCommandUsage5Description=Sends the specified player the given message which will expire in the specified time +mailCommandUsage6=/<command> sendtempall <expire time> <message> +mailCommandUsage6Description=Sends all players the given message which will expire in the specified time mailDelay=Too many mails have been sent within the last minute. Maximum\: {0} mailFormatNew=\u00a76[\u00a7r{0}\u00a76] \u00a76[\u00a7r{1}\u00a76] \u00a7r{2} mailFormatNewTimed=\u00a76[\u00a7e\u26a0\u00a76] \u00a76[\u00a7r{0}\u00a76] \u00a76[\u00a7r{1}\u00a76] \u00a7r{2} From 6994005a5fd8818d358992e92907ec604f169e7c Mon Sep 17 00:00:00 2001 From: Josh Roy <10731363+JRoy@users.noreply.github.com> Date: Sun, 31 Oct 2021 01:25:03 -0400 Subject: [PATCH 094/120] Fix light blocks being considering solid (#4601) --- .../java/com/earth2me/essentials/utils/LocationUtil.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Essentials/src/main/java/com/earth2me/essentials/utils/LocationUtil.java b/Essentials/src/main/java/com/earth2me/essentials/utils/LocationUtil.java index 90083f670f3..06ad564f1c1 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/utils/LocationUtil.java +++ b/Essentials/src/main/java/com/earth2me/essentials/utils/LocationUtil.java @@ -30,6 +30,7 @@ public final class LocationUtil { private static final Set<Material> LAVA_TYPES = EnumUtil.getAllMatching(Material.class, "FLOWING_LAVA", "LAVA", "STATIONARY_LAVA"); private static final Material PORTAL = EnumUtil.getMaterial("NETHER_PORTAL", "PORTAL"); + private static final Material LIGHT = EnumUtil.getMaterial("LIGHT"); // The player can stand inside these materials private static final Set<Material> HOLLOW_MATERIALS = EnumSet.noneOf(Material.class); private static final Set<Material> TRANSPARENT_MATERIALS = EnumSet.noneOf(Material.class); @@ -47,6 +48,11 @@ public final class LocationUtil { // Barrier is transparent, but solid HOLLOW_MATERIALS.remove(Material.BARRIER); + + // Light blocks can be passed through and are not considered transparent for some reason + if (LIGHT != null) { + HOLLOW_MATERIALS.add(LIGHT); + } } static { From c466c9c3701998dde589b0f70b164fb3b83d1c91 Mon Sep 17 00:00:00 2001 From: pop4959 <pop4959@gmail.com> Date: Sun, 31 Oct 2021 14:25:18 -0700 Subject: [PATCH 095/120] Add metadata value to bypass last location setting on teleport (#4597) Co-authored-by: Josh Roy <10731363+JRoy@users.noreply.github.com> --- .../essentials/EssentialsPlayerListener.java | 25 ++++++++----------- 1 file changed, 10 insertions(+), 15 deletions(-) diff --git a/Essentials/src/main/java/com/earth2me/essentials/EssentialsPlayerListener.java b/Essentials/src/main/java/com/earth2me/essentials/EssentialsPlayerListener.java index b5aa2e64d7a..8e2dac1fcac 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/EssentialsPlayerListener.java +++ b/Essentials/src/main/java/com/earth2me/essentials/EssentialsPlayerListener.java @@ -535,21 +535,16 @@ public void onPlayerLogin(final PlayerLoginEvent event) { @EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true) public void onPlayerTeleport(final PlayerTeleportEvent event) { - final boolean backListener = ess.getSettings().registerBackInListener(); - final boolean teleportInvulnerability = ess.getSettings().isTeleportInvulnerability(); - if (backListener || teleportInvulnerability) { - final Player player = event.getPlayer(); - if (player.hasMetadata("NPC")) { - return; - } - final User user = ess.getUser(player); - //There is TeleportCause.COMMMAND but plugins have to actively pass the cause in on their teleports. - if (user.isAuthorized("essentials.back.onteleport") && backListener && (event.getCause() == TeleportCause.PLUGIN || event.getCause() == TeleportCause.COMMAND)) { - user.setLastLocation(); - } - if (teleportInvulnerability && (event.getCause() == TeleportCause.PLUGIN || event.getCause() == TeleportCause.COMMAND)) { - user.enableInvulnerabilityAfterTeleport(); - } + final Player player = event.getPlayer(); + if (player.hasMetadata("NPC") || !(event.getCause() == TeleportCause.PLUGIN || event.getCause() == TeleportCause.COMMAND)) { + return; + } + final User user = ess.getUser(player); + if (ess.getSettings().registerBackInListener() && user.isAuthorized("essentials.back.onteleport") && !player.hasMetadata("ess_ignore_teleport")) { + user.setLastLocation(); + } + if (ess.getSettings().isTeleportInvulnerability()) { + user.enableInvulnerabilityAfterTeleport(); } } From 78c846a0a857be815f2dcff22a9c725eaa6e078c Mon Sep 17 00:00:00 2001 From: Andre_601 <11576465+Andre601@users.noreply.github.com> Date: Tue, 2 Nov 2021 02:41:58 +0100 Subject: [PATCH 096/120] Minor typo corrections for EssentialsXDiscord (#4603) --- EssentialsDiscord/src/main/resources/config.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/EssentialsDiscord/src/main/resources/config.yml b/EssentialsDiscord/src/main/resources/config.yml index 7f998b673fc..badddea7285 100644 --- a/EssentialsDiscord/src/main/resources/config.yml +++ b/EssentialsDiscord/src/main/resources/config.yml @@ -89,7 +89,7 @@ console: # Set to true if bots/webhooks should be able to send commands through the command relay. bot-command-relay: false # The maximum log level of messages to send to the console relay. - # The following is a list of available log levels in order of lowest to highest. + # The following is a list of available log levels in order of highest to lowest. # Changing the log level will send all log levels above it to the console relay. # For example, setting this to 'info' will display log messages with info, warn, error, and fatal levels. # Log Levels: @@ -135,6 +135,7 @@ message-types: mute: staff # Whether or not player messages should show their avatar as the profile picture in Discord. +# The bot will require the "Manage Webhooks" permission in the defined channels in order to use this feature. show-avatar: false # The URL which should be used to get the avatars of users when "show-avatar" is set to true. # Any URL in here should only return a proper JPEG/PNG image and nothing else. @@ -237,7 +238,7 @@ presence: # Each message has a description of how it is used along with placeholders that can be used. messages: # This is the message that is used to show Discord chat to players in game. - # Color/formatting codes and the follow placeholders can be used here: + # Color/formatting codes and the following placeholders can be used here: # - {channel}: The name of the Discord channel the message was sent from # - {username}: The username of the user who sent the message # - {discriminator}: The four numbers displayed after the user's name From e4cf965baeb6de3de1aad6d28277b5bb99c37a53 Mon Sep 17 00:00:00 2001 From: Bobcat00 <njtbob3@optonline.net> Date: Fri, 5 Nov 2021 18:24:21 -0400 Subject: [PATCH 097/120] Add translation for /list real name (#4614) Co-authored-by: Bobcat00 <Bobcat00@users.noreply.github.com> --- .../src/main/java/com/earth2me/essentials/PlayerList.java | 2 +- Essentials/src/main/resources/messages.properties | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/Essentials/src/main/java/com/earth2me/essentials/PlayerList.java b/Essentials/src/main/java/com/earth2me/essentials/PlayerList.java index 5a57a14fa03..b92021913eb 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/PlayerList.java +++ b/Essentials/src/main/java/com/earth2me/essentials/PlayerList.java @@ -42,7 +42,7 @@ public static String listUsers(final IEssentials ess, final List<User> users, fi final String strippedNick = FormatUtil.stripFormat(user.getNickname()); if (ess.getSettings().realNamesOnList() && strippedNick != null && !strippedNick.equals(user.getName())) { - groupString.append(" (").append(user.getName()).append(")"); + groupString.append(" ").append(tl("listRealName",user.getName())); } groupString.append(ChatColor.WHITE.toString()); } diff --git a/Essentials/src/main/resources/messages.properties b/Essentials/src/main/resources/messages.properties index a6bd576bbb5..30513ae1ddd 100644 --- a/Essentials/src/main/resources/messages.properties +++ b/Essentials/src/main/resources/messages.properties @@ -662,6 +662,7 @@ listCommandUsage1=/<command> [group] listCommandUsage1Description=Lists all players on the server, or the given group if specified listGroupTag=\u00a76{0}\u00a7r\: listHiddenTag=\u00a77[HIDDEN]\u00a7r +listRealName=({0}) loadWarpError=\u00a74Failed to load warp {0}. localFormat=[L]<{0}> {1} localNoOne= From 86d435eee10a156287167cf8e9d84fd11c64de6c Mon Sep 17 00:00:00 2001 From: Josh Roy <10731363+JRoy@users.noreply.github.com> Date: Sat, 6 Nov 2021 16:50:56 -0400 Subject: [PATCH 098/120] Move UUID below alts in /seen (#4615) --- .../essentials/commands/Commandseen.java | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/Essentials/src/main/java/com/earth2me/essentials/commands/Commandseen.java b/Essentials/src/main/java/com/earth2me/essentials/commands/Commandseen.java index c293e7e47f2..378d69333f7 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/commands/Commandseen.java +++ b/Essentials/src/main/java/com/earth2me/essentials/commands/Commandseen.java @@ -102,15 +102,16 @@ private void seenOnline(final CommandSource sender, final User user, final boole user.setDisplayNick(); sender.sendMessage(tl("seenOnline", user.getDisplayName(), DateUtil.formatDateDiff(user.getLastLogin()))); - if (sender.isAuthorized("essentials.seen.uuid", ess)) { - sender.sendMessage(tl("whoisUuid", user.getBase().getUniqueId().toString())); - } final List<String> history = ess.getUserMap().getUserHistory(user.getBase().getUniqueId()); if (history != null && history.size() > 1) { sender.sendMessage(tl("seenAccounts", StringUtil.joinListSkip(", ", user.getName(), history))); } + if (sender.isAuthorized("essentials.seen.uuid", ess)) { + sender.sendMessage(tl("whoisUuid", user.getBase().getUniqueId().toString())); + } + if (user.isAfk()) { sender.sendMessage(tl("whoisAFK", tl("true"))); } @@ -138,6 +139,11 @@ private void seenOffline(final CommandSource sender, final User user, final bool user.setDisplayNick(); if (user.getLastLogout() > 0) { sender.sendMessage(tl("seenOffline", user.getName(), DateUtil.formatDateDiff(user.getLastLogout()))); + final List<String> history = ess.getUserMap().getUserHistory(user.getBase().getUniqueId()); + if (history != null && history.size() > 1) { + sender.sendMessage(tl("seenAccounts", StringUtil.joinListSkip(", ", user.getName(), history))); + } + if (sender.isAuthorized("essentials.seen.uuid", ess)) { sender.sendMessage(tl("whoisUuid", user.getBase().getUniqueId())); } @@ -145,11 +151,6 @@ private void seenOffline(final CommandSource sender, final User user, final bool sender.sendMessage(tl("userUnknown", user.getName())); } - final List<String> history = ess.getUserMap().getUserHistory(user.getBase().getUniqueId()); - if (history != null && history.size() > 1) { - sender.sendMessage(tl("seenAccounts", StringUtil.joinListSkip(", ", user.getName(), history))); - } - if (BanLookup.isBanned(ess, user)) { final BanEntry banEntry = BanLookup.getBanEntry(ess, user.getName()); final String reason = showBan ? banEntry.getReason() : tl("true"); From 8f679de35255fd2005ff31cd850784b59e75eecc Mon Sep 17 00:00:00 2001 From: Josh Roy <10731363+JRoy@users.noreply.github.com> Date: Sat, 6 Nov 2021 18:41:38 -0400 Subject: [PATCH 099/120] Add offline user support to /playtime (#4619) --- .../essentials/commands/Commandplaytime.java | 37 ++++++++++++------- .../commands/EssentialsCommand.java | 14 +++++-- 2 files changed, 35 insertions(+), 16 deletions(-) diff --git a/Essentials/src/main/java/com/earth2me/essentials/commands/Commandplaytime.java b/Essentials/src/main/java/com/earth2me/essentials/commands/Commandplaytime.java index 0ecfa8325df..70eb470c8f1 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/commands/Commandplaytime.java +++ b/Essentials/src/main/java/com/earth2me/essentials/commands/Commandplaytime.java @@ -1,17 +1,17 @@ package com.earth2me.essentials.commands; -import static com.earth2me.essentials.I18n.tl; +import com.earth2me.essentials.CommandSource; +import com.earth2me.essentials.utils.DateUtil; +import com.earth2me.essentials.utils.EnumUtil; +import net.ess3.api.IUser; +import org.bukkit.Bukkit; +import org.bukkit.Server; +import org.bukkit.Statistic; import java.util.Collections; import java.util.List; -import org.bukkit.Server; -import org.bukkit.Statistic; - -import com.earth2me.essentials.CommandSource; -import com.earth2me.essentials.IUser; -import com.earth2me.essentials.utils.DateUtil; -import com.earth2me.essentials.utils.EnumUtil; +import static com.earth2me.essentials.I18n.tl; public class Commandplaytime extends EssentialsCommand { // For some reason, in 1.13 PLAY_ONE_MINUTE = ticks played = what used to be PLAY_ONE_TICK @@ -24,21 +24,32 @@ public Commandplaytime() { @Override protected void run(Server server, CommandSource sender, String commandLabel, String[] args) throws Exception { - final IUser target; + String displayName; + long playtime; final String key; if (args.length > 0 && sender.isAuthorized("essentials.playtime.others", ess)) { - target = getPlayer(server, sender, args, 0); + try { + final IUser user = getPlayer(server, sender, args, 0); + displayName = user.getDisplayName(); + playtime = user.getBase().getStatistic(PLAY_ONE_TICK); + } catch (PlayerNotFoundException ignored) { + final IUser user = getPlayer(server, sender, args, 0, true); + displayName = user.getName(); + playtime = Bukkit.getOfflinePlayer(user.getBase().getUniqueId()).getStatistic(PLAY_ONE_TICK); + } key = "playtimeOther"; } else if (sender.isPlayer()) { - target = sender.getUser(ess); + //noinspection ConstantConditions + displayName = sender.getPlayer().getDisplayName(); + playtime = sender.getPlayer().getStatistic(PLAY_ONE_TICK); key = "playtime"; } else { throw new NotEnoughArgumentsException(); } - final long playtimeMs = System.currentTimeMillis() - (target.getBase().getStatistic(PLAY_ONE_TICK) * 50); - sender.sendMessage(tl(key, DateUtil.formatDateDiff(playtimeMs), target.getDisplayName())); + final long playtimeMs = System.currentTimeMillis() - (playtime * 50L); + sender.sendMessage(tl(key, DateUtil.formatDateDiff(playtimeMs), displayName)); } @Override diff --git a/Essentials/src/main/java/com/earth2me/essentials/commands/EssentialsCommand.java b/Essentials/src/main/java/com/earth2me/essentials/commands/EssentialsCommand.java index db19816f2ae..7fcfdea88b4 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/commands/EssentialsCommand.java +++ b/Essentials/src/main/java/com/earth2me/essentials/commands/EssentialsCommand.java @@ -112,11 +112,15 @@ public String getName() { // Get online players - only show vanished if source has permission protected User getPlayer(final Server server, final CommandSource sender, final String[] args, final int pos) throws PlayerNotFoundException, NotEnoughArgumentsException { + return getPlayer(server, sender, args, pos, false); + } + + protected User getPlayer(final Server server, final CommandSource sender, final String[] args, final int pos, final boolean getOffline) throws PlayerNotFoundException, NotEnoughArgumentsException { if (sender.isPlayer()) { final User user = ess.getUser(sender.getPlayer()); - return getPlayer(server, user, args, pos); + return getPlayer(server, user, args, pos, getOffline); } - return getPlayer(server, args, pos, true, false); + return getPlayer(server, args, pos, true, getOffline); } // Get online players - only show vanished if source has permission @@ -130,7 +134,11 @@ protected User getPlayer(final Server server, final CommandSource sender, final // Get online players - only show vanished if source has permission protected User getPlayer(final Server server, final User user, final String[] args, final int pos) throws PlayerNotFoundException, NotEnoughArgumentsException { - return getPlayer(server, user, args, pos, user.canInteractVanished(), false); + return getPlayer(server, user, args, pos, false); + } + + protected User getPlayer(final Server server, final User user, final String[] args, final int pos, final boolean getOffline) throws PlayerNotFoundException, NotEnoughArgumentsException { + return getPlayer(server, user, args, pos, user.canInteractVanished(), getOffline); } // Get online or offline players, this method allows for raw access From 680d3230ea382b0cf9f146008a878c9aa9218f11 Mon Sep 17 00:00:00 2001 From: Josh Roy <10731363+JRoy@users.noreply.github.com> Date: Sat, 6 Nov 2021 19:18:37 -0400 Subject: [PATCH 100/120] Add /discord command to display invite code (#4620) --- .../src/main/resources/messages.properties | 5 +++++ .../essentialsx/discord/DiscordSettings.java | 4 ++++ .../discord/commands/Commanddiscord.java | 19 +++++++++++++++++++ .../src/main/resources/config.yml | 3 +++ .../src/main/resources/plugin.yml | 6 +++++- 5 files changed, 36 insertions(+), 1 deletion(-) create mode 100644 EssentialsDiscord/src/main/java/net/essentialsx/discord/commands/Commanddiscord.java diff --git a/Essentials/src/main/resources/messages.properties b/Essentials/src/main/resources/messages.properties index 30513ae1ddd..33275ba5912 100644 --- a/Essentials/src/main/resources/messages.properties +++ b/Essentials/src/main/resources/messages.properties @@ -240,6 +240,11 @@ discordbroadcastCommandUsage1Description=Sends the given message to the specifie discordbroadcastInvalidChannel=\u00a74Discord channel \u00a7c{0}\u00a74 does not exist. discordbroadcastPermission=\u00a74You do not have permission to send messages to the \u00a7c{0}\u00a74 channel. discordbroadcastSent=\u00a76Message sent to \u00a7c{0}\u00a76! +discordCommandDescription=Sends the discord invite link to the player. +discordCommandLink=\u00a76Join our Discord server at \u00a7c{0}\u00a76! +discordCommandUsage=/<command> +discordCommandUsage1=/<command> +discordCommandUsage1Description=Sends the discord invite link to the player discordCommandExecuteDescription=Executes a console command on the Minecraft server. discordCommandExecuteArgumentCommand=The command to be executed discordCommandExecuteReply=Executing command: "/{0}" diff --git a/EssentialsDiscord/src/main/java/net/essentialsx/discord/DiscordSettings.java b/EssentialsDiscord/src/main/java/net/essentialsx/discord/DiscordSettings.java index 18b9c702d74..81a91907dc4 100644 --- a/EssentialsDiscord/src/main/java/net/essentialsx/discord/DiscordSettings.java +++ b/EssentialsDiscord/src/main/java/net/essentialsx/discord/DiscordSettings.java @@ -59,6 +59,10 @@ public long getGuildId() { return config.getLong("guild", 0); } + public String getDiscordUrl() { + return config.getString("discord-url", "https://discord.gg/invite-code"); + } + public long getPrimaryChannelId() { return config.getLong("channels.primary", 0); } diff --git a/EssentialsDiscord/src/main/java/net/essentialsx/discord/commands/Commanddiscord.java b/EssentialsDiscord/src/main/java/net/essentialsx/discord/commands/Commanddiscord.java new file mode 100644 index 00000000000..49d2f2bdb07 --- /dev/null +++ b/EssentialsDiscord/src/main/java/net/essentialsx/discord/commands/Commanddiscord.java @@ -0,0 +1,19 @@ +package net.essentialsx.discord.commands; + +import com.earth2me.essentials.CommandSource; +import com.earth2me.essentials.commands.EssentialsCommand; +import net.essentialsx.discord.JDADiscordService; +import org.bukkit.Server; + +import static com.earth2me.essentials.I18n.tl; + +public class Commanddiscord extends EssentialsCommand { + public Commanddiscord() { + super("discord"); + } + + @Override + protected void run(Server server, CommandSource sender, String commandLabel, String[] args) { + sender.sendMessage(tl("discordCommandLink", ((JDADiscordService) module).getSettings().getDiscordUrl())); + } +} diff --git a/EssentialsDiscord/src/main/resources/config.yml b/EssentialsDiscord/src/main/resources/config.yml index badddea7285..1c3072b8770 100644 --- a/EssentialsDiscord/src/main/resources/config.yml +++ b/EssentialsDiscord/src/main/resources/config.yml @@ -17,6 +17,9 @@ token: "INSERT-TOKEN-HERE" # The ID of your server. guild: 000000000000000000 +# The Discord invite URL that will be shown when a player when using the /discord command or in other areas. +discord-url: "https://discord.gg/invite-code" + # Defined text channels # ===================== # diff --git a/EssentialsDiscord/src/main/resources/plugin.yml b/EssentialsDiscord/src/main/resources/plugin.yml index 5f9ed30193c..fad076db5fe 100644 --- a/EssentialsDiscord/src/main/resources/plugin.yml +++ b/EssentialsDiscord/src/main/resources/plugin.yml @@ -12,4 +12,8 @@ commands: discordbroadcast: description: Broadcasts a message to the specified Discord channel. usage: /<command> <channel> <msg> - aliases: [dbroadcast, dbc, dbcast, ediscordbroadcast, edbroadcast, edbc, edbcast] \ No newline at end of file + aliases: [dbroadcast, dbc, dbcast, ediscordbroadcast, edbroadcast, edbc, edbcast] + discord: + description: Sends the discord invite link to the player. + usage: /<command> + aliases: [ediscord] \ No newline at end of file From 5723dac6ba9c64b106c7b0b03f2a36050b0a2f70 Mon Sep 17 00:00:00 2001 From: Lax <LaxWasHere@PoweredByHate.net> Date: Wed, 17 Nov 2021 16:15:02 -0800 Subject: [PATCH 101/120] Send discord config in dump even when plugin is disabled --- .../com/earth2me/essentials/commands/Commandessentials.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Essentials/src/main/java/com/earth2me/essentials/commands/Commandessentials.java b/Essentials/src/main/java/com/earth2me/essentials/commands/Commandessentials.java index 51310d35e1f..d5c55689480 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/commands/Commandessentials.java +++ b/Essentials/src/main/java/com/earth2me/essentials/commands/Commandessentials.java @@ -291,7 +291,7 @@ private void runDump(Server server, CommandSource sender, String commandLabel, S } } - if (discord && essDiscord != null && essDiscord.isEnabled()) { + if (discord && essDiscord != null) { try { files.add(new PasteUtil.PasteFile("discord-config.yml", new String(Files.readAllBytes(essDiscord.getDataFolder().toPath().resolve("config.yml")), StandardCharsets.UTF_8) From 51c49b0de62e36a900b814cc85f3db36ecad45e8 Mon Sep 17 00:00:00 2001 From: nik2143 <44278678+nik2143@users.noreply.github.com> Date: Wed, 24 Nov 2021 15:57:55 +0100 Subject: [PATCH 102/120] Set a metadata value for vanished players (#4646) Co-authored-by: Josh Roy <10731363+JRoy@users.noreply.github.com> --- Essentials/src/main/java/com/earth2me/essentials/User.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Essentials/src/main/java/com/earth2me/essentials/User.java b/Essentials/src/main/java/com/earth2me/essentials/User.java index 9d8140cddba..4d161c5c0a9 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/User.java +++ b/Essentials/src/main/java/com/earth2me/essentials/User.java @@ -28,6 +28,7 @@ import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.PlayerInventory; +import org.bukkit.metadata.FixedMetadataValue; import org.bukkit.potion.PotionEffect; import org.bukkit.potion.PotionEffectType; @@ -893,6 +894,7 @@ public void setVanished(final boolean set) { } setHidden(true); ess.getVanishedPlayersNew().add(getName()); + this.getBase().setMetadata("vanished", new FixedMetadataValue(ess, true)); if (isAuthorized("essentials.vanish.effect")) { this.getBase().addPotionEffect(new PotionEffect(PotionEffectType.INVISIBILITY, Integer.MAX_VALUE, 1, false)); } @@ -905,6 +907,7 @@ public void setVanished(final boolean set) { } setHidden(false); ess.getVanishedPlayersNew().remove(getName()); + this.getBase().setMetadata("vanished", new FixedMetadataValue(ess, false)); if (isAuthorized("essentials.vanish.effect")) { this.getBase().removePotionEffect(PotionEffectType.INVISIBILITY); } From 668c9634cae341cdc06e0fa6e856d482ff8d59bd Mon Sep 17 00:00:00 2001 From: Josh Roy <10731363+JRoy@users.noreply.github.com> Date: Thu, 25 Nov 2021 11:54:14 -0500 Subject: [PATCH 103/120] Ensure JDA is started before allowing calls to the JDA object --- .../main/java/net/essentialsx/discord/JDADiscordService.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/EssentialsDiscord/src/main/java/net/essentialsx/discord/JDADiscordService.java b/EssentialsDiscord/src/main/java/net/essentialsx/discord/JDADiscordService.java index e9b810ec2f7..5a0dfe87d57 100644 --- a/EssentialsDiscord/src/main/java/net/essentialsx/discord/JDADiscordService.java +++ b/EssentialsDiscord/src/main/java/net/essentialsx/discord/JDADiscordService.java @@ -149,9 +149,9 @@ public void sendMessage(DiscordMessageEvent event, String message, boolean group public void startup() throws LoginException, InterruptedException { shutdown(); + invalidStartup = true; logger.log(Level.INFO, tl("discordLoggingIn")); if (plugin.getSettings().getBotToken().replace("INSERT-TOKEN-HERE", "").trim().isEmpty()) { - invalidStartup = true; throw new IllegalArgumentException(tl("discordErrorNoToken")); } @@ -162,6 +162,7 @@ public void startup() throws LoginException, InterruptedException { .setContextEnabled(false) .build() .awaitReady(); + invalidStartup = false; updatePresence(); logger.log(Level.INFO, tl("discordLoggingInDone", jda.getSelfUser().getAsTag())); From 3f857e31837730692648356cd4c543091ec603fd Mon Sep 17 00:00:00 2001 From: Josh Roy <10731363+JRoy@users.noreply.github.com> Date: Thu, 25 Nov 2021 12:24:35 -0500 Subject: [PATCH 104/120] Fix DiscordUtil#getOrCreateWebhook using webhooks without tokens --- .../src/main/java/net/essentialsx/discord/util/DiscordUtil.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/EssentialsDiscord/src/main/java/net/essentialsx/discord/util/DiscordUtil.java b/EssentialsDiscord/src/main/java/net/essentialsx/discord/util/DiscordUtil.java index defb41d45e1..c7cf1782140 100644 --- a/EssentialsDiscord/src/main/java/net/essentialsx/discord/util/DiscordUtil.java +++ b/EssentialsDiscord/src/main/java/net/essentialsx/discord/util/DiscordUtil.java @@ -79,7 +79,7 @@ public static CompletableFuture<Webhook> getOrCreateWebhook(final TextChannel ch final CompletableFuture<Webhook> future = new CompletableFuture<>(); channel.retrieveWebhooks().queue(webhooks -> { for (final Webhook webhook : webhooks) { - if (webhook.getName().equals(webhookName)) { + if (webhook.getName().equals(webhookName) && webhook.getToken() != null) { ACTIVE_WEBHOOKS.addIfAbsent(webhook.getId()); future.complete(webhook); return; From 3c60bcf2de8b916fd1f2cf1ba7da9ec29ae9efb4 Mon Sep 17 00:00:00 2001 From: Josh Roy <10731363+JRoy@users.noreply.github.com> Date: Thu, 25 Nov 2021 14:47:42 -0500 Subject: [PATCH 105/120] Allow unsafe homes when force-disable-teleport-safety is enabled (#4650) --- .../java/com/earth2me/essentials/commands/Commandsethome.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Essentials/src/main/java/com/earth2me/essentials/commands/Commandsethome.java b/Essentials/src/main/java/com/earth2me/essentials/commands/Commandsethome.java index 89cc2bee370..94626cec6f9 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/commands/Commandsethome.java +++ b/Essentials/src/main/java/com/earth2me/essentials/commands/Commandsethome.java @@ -51,7 +51,7 @@ public void run(final Server server, final User user, final String commandLabel, } final Location location = user.getLocation(); - if (!ess.getSettings().isTeleportSafetyEnabled() && LocationUtil.isBlockUnsafeForUser(usersHome, location.getWorld(), location.getBlockX(), location.getBlockY(), location.getBlockZ())) { + if ((!ess.getSettings().isTeleportSafetyEnabled() || !ess.getSettings().isForceDisableTeleportSafety()) && LocationUtil.isBlockUnsafeForUser(usersHome, location.getWorld(), location.getBlockX(), location.getBlockY(), location.getBlockZ())) { throw new Exception(tl("unsafeTeleportDestination", location.getWorld().getName(), location.getBlockX(), location.getBlockY(), location.getBlockZ())); } From f8ca1bae5d342d2dcf2825c7904e95848b769a23 Mon Sep 17 00:00:00 2001 From: Josh Roy <10731363+JRoy@users.noreply.github.com> Date: Thu, 25 Nov 2021 14:50:49 -0500 Subject: [PATCH 106/120] Fix offline player error in /playtime for versions < 1.15.2 (#4649) --- .../com/earth2me/essentials/commands/Commandplaytime.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/Essentials/src/main/java/com/earth2me/essentials/commands/Commandplaytime.java b/Essentials/src/main/java/com/earth2me/essentials/commands/Commandplaytime.java index 70eb470c8f1..6d84c820cf3 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/commands/Commandplaytime.java +++ b/Essentials/src/main/java/com/earth2me/essentials/commands/Commandplaytime.java @@ -3,6 +3,7 @@ import com.earth2me.essentials.CommandSource; import com.earth2me.essentials.utils.DateUtil; import com.earth2me.essentials.utils.EnumUtil; +import com.earth2me.essentials.utils.VersionUtil; import net.ess3.api.IUser; import org.bukkit.Bukkit; import org.bukkit.Server; @@ -33,7 +34,11 @@ protected void run(Server server, CommandSource sender, String commandLabel, Str final IUser user = getPlayer(server, sender, args, 0); displayName = user.getDisplayName(); playtime = user.getBase().getStatistic(PLAY_ONE_TICK); - } catch (PlayerNotFoundException ignored) { + } catch (PlayerNotFoundException e) { + // The ability to get the statistics of offline players is only available in 1.15.2+ + if (VersionUtil.getServerBukkitVersion().isLowerThan(VersionUtil.v1_15_2_R01)) { + throw e; + } final IUser user = getPlayer(server, sender, args, 0, true); displayName = user.getName(); playtime = Bukkit.getOfflinePlayer(user.getBase().getUniqueId()).getStatistic(PLAY_ONE_TICK); From c38dd997d2a6d6655f1fbe387b3bff68655d189f Mon Sep 17 00:00:00 2001 From: Josh Roy <10731363+JRoy@users.noreply.github.com> Date: Sun, 21 Nov 2021 22:10:14 -0500 Subject: [PATCH 107/120] Update Spigot to 1.18 --- .../src/main/kotlin/essentials.base-conventions.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build-logic/src/main/kotlin/essentials.base-conventions.gradle.kts b/build-logic/src/main/kotlin/essentials.base-conventions.gradle.kts index 48c7ce4a5da..f887a4695dd 100644 --- a/build-logic/src/main/kotlin/essentials.base-conventions.gradle.kts +++ b/build-logic/src/main/kotlin/essentials.base-conventions.gradle.kts @@ -10,7 +10,7 @@ plugins { val baseExtension = extensions.create<EssentialsBaseExtension>("essentials", project) val checkstyleVersion = "8.36.2" -val spigotVersion = "1.17.1-R0.1-SNAPSHOT" +val spigotVersion = "1.18-rc3-R0.1-SNAPSHOT" val junit5Version = "5.7.0" val mockitoVersion = "3.2.0" From b6ba1768a1cc0a451107e9d1de19024068dbf6d8 Mon Sep 17 00:00:00 2001 From: Josh Roy <10731363+JRoy@users.noreply.github.com> Date: Sun, 21 Nov 2021 22:10:47 -0500 Subject: [PATCH 108/120] Mark 1.18 as a supported version --- .../essentials/utils/VersionUtil.java | 52 +++++++++++++------ .../com/earth2me/essentials/UtilTest.java | 12 +++++ README.md | 2 +- 3 files changed, 48 insertions(+), 18 deletions(-) diff --git a/Essentials/src/main/java/com/earth2me/essentials/utils/VersionUtil.java b/Essentials/src/main/java/com/earth2me/essentials/utils/VersionUtil.java index e96bcaaae2a..53d5e5168fd 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/utils/VersionUtil.java +++ b/Essentials/src/main/java/com/earth2me/essentials/utils/VersionUtil.java @@ -34,8 +34,9 @@ public final class VersionUtil { public static final BukkitVersion v1_16_5_R01 = BukkitVersion.fromString("1.16.5-R0.1-SNAPSHOT"); public static final BukkitVersion v1_17_R01 = BukkitVersion.fromString("1.17-R0.1-SNAPSHOT"); public static final BukkitVersion v1_17_1_R01 = BukkitVersion.fromString("1.17.1-R0.1-SNAPSHOT"); + public static final BukkitVersion v1_18_rc3_R01 = BukkitVersion.fromString("1.18-rc3-R0.1-SNAPSHOT"); - private static final Set<BukkitVersion> supportedVersions = ImmutableSet.of(v1_8_8_R01, v1_9_4_R01, v1_10_2_R01, v1_11_2_R01, v1_12_2_R01, v1_13_2_R01, v1_14_4_R01, v1_15_2_R01, v1_16_5_R01, v1_17_1_R01); + private static final Set<BukkitVersion> supportedVersions = ImmutableSet.of(v1_8_8_R01, v1_9_4_R01, v1_10_2_R01, v1_11_2_R01, v1_12_2_R01, v1_13_2_R01, v1_14_4_R01, v1_15_2_R01, v1_16_5_R01, v1_17_1_R01, v1_18_rc3_R01); private static final Map<String, SupportStatus> unsupportedServerClasses; @@ -158,20 +159,22 @@ public static boolean isServerSupported() { } public static final class BukkitVersion implements Comparable<BukkitVersion> { - private static final Pattern VERSION_PATTERN = Pattern.compile("^(\\d+)\\.(\\d+)\\.?([0-9]*)?(?:-pre(\\d))?(?:-?R?([\\d.]+))?(?:-SNAPSHOT)?"); + private static final Pattern VERSION_PATTERN = Pattern.compile("^(\\d+)\\.(\\d+)\\.?([0-9]*)?(?:-pre(\\d))?(?:-rc(\\d+))?(?:-?R?([\\d.]+))?(?:-SNAPSHOT)?"); private final int major; private final int minor; - private final int prerelease; + private final int preRelease; + private final int releaseCandidate; private final int patch; private final double revision; - private BukkitVersion(final int major, final int minor, final int patch, final double revision, final int prerelease) { + private BukkitVersion(final int major, final int minor, final int patch, final double revision, final int preRelease, final int releaseCandidate) { this.major = major; this.minor = minor; this.patch = patch; this.revision = revision; - this.prerelease = prerelease; + this.preRelease = preRelease; + this.releaseCandidate = releaseCandidate; } public static BukkitVersion fromString(final String string) { @@ -185,18 +188,20 @@ public static BukkitVersion fromString(final String string) { Preconditions.checkArgument(matcher.matches(), string + " is not in valid version format. e.g. 1.8.8-R0.1"); } - return from(matcher.group(1), matcher.group(2), matcher.group(3), matcher.groupCount() < 5 ? "" : matcher.group(5), matcher.group(4)); + return from(matcher.group(1), matcher.group(2), matcher.group(3), matcher.group(6), matcher.group(4), matcher.group(5)); } - private static BukkitVersion from(final String major, final String minor, String patch, String revision, String prerelease) { + private static BukkitVersion from(final String major, final String minor, String patch, String revision, String preRelease, String releaseCandidate) { if (patch == null || patch.isEmpty()) patch = "0"; if (revision == null || revision.isEmpty()) revision = "0"; - if (prerelease == null || prerelease.isEmpty()) prerelease = "-1"; + if (preRelease == null || preRelease.isEmpty()) preRelease = "-1"; + if (releaseCandidate == null || releaseCandidate.isEmpty()) releaseCandidate = "-1"; return new BukkitVersion(Integer.parseInt(major), Integer.parseInt(minor), Integer.parseInt(patch), Double.parseDouble(revision), - Integer.parseInt(prerelease)); + Integer.parseInt(preRelease), + Integer.parseInt(releaseCandidate)); } public boolean isHigherThan(final BukkitVersion o) { @@ -232,7 +237,11 @@ public double getRevision() { } public int getPrerelease() { - return prerelease; + return preRelease; + } + + public int getReleaseCandidate() { + return releaseCandidate; } @Override @@ -248,12 +257,12 @@ public boolean equals(final Object o) { minor == that.minor && patch == that.patch && revision == that.revision && - prerelease == that.prerelease; + preRelease == that.preRelease; } @Override public int hashCode() { - return Objects.hashCode(major, minor, patch, revision, prerelease); + return Objects.hashCode(major, minor, patch, revision, preRelease, releaseCandidate); } @Override @@ -262,8 +271,11 @@ public String toString() { if (patch != 0) { sb.append(".").append(patch); } - if (prerelease != -1) { - sb.append("-pre").append(prerelease); + if (preRelease != -1) { + sb.append("-pre").append(preRelease); + } + if (releaseCandidate != -1) { + sb.append("-rc").append(releaseCandidate); } return sb.append("-R").append(revision).toString(); } @@ -285,12 +297,18 @@ public int compareTo(final BukkitVersion o) { } else if (patch > o.patch) { return 1; } else { // equal patch - if (prerelease < o.prerelease) { + if (preRelease < o.preRelease) { return -1; - } else if (prerelease > o.prerelease) { + } else if (preRelease > o.preRelease) { return 1; } else { // equal prerelease - return Double.compare(revision, o.revision); + if (releaseCandidate < o.releaseCandidate) { + return -1; + } else if (releaseCandidate > o.releaseCandidate) { + return 1; + } else { // equal release candidate + return Double.compare(revision, o.revision); + } } } } diff --git a/Essentials/src/test/java/com/earth2me/essentials/UtilTest.java b/Essentials/src/test/java/com/earth2me/essentials/UtilTest.java index a46b29eb5dc..350a41d2f4f 100644 --- a/Essentials/src/test/java/com/earth2me/essentials/UtilTest.java +++ b/Essentials/src/test/java/com/earth2me/essentials/UtilTest.java @@ -200,29 +200,41 @@ public void testVer() { assertEquals(v.getPatch(), 2); assertEquals(v.getRevision(), 0.1); assertEquals(v.getPrerelease(), -1); + assertEquals(v.getReleaseCandidate(), -1); v = VersionUtil.BukkitVersion.fromString("1.9-R1.4"); // not real assertEquals(v.getMajor(), 1); assertEquals(v.getMinor(), 9); assertEquals(v.getPatch(), 0); assertEquals(v.getRevision(), 1.4); assertEquals(v.getPrerelease(), -1); + assertEquals(v.getReleaseCandidate(), -1); v = VersionUtil.BukkitVersion.fromString("1.14-pre5"); assertEquals(v.getMajor(), 1); assertEquals(v.getMinor(), 14); assertEquals(v.getPatch(), 0); assertEquals(v.getRevision(), 0.0); assertEquals(v.getPrerelease(), 5); + assertEquals(v.getReleaseCandidate(), -1); v = VersionUtil.BukkitVersion.fromString("1.13.2-pre1-R0.1"); // not real assertEquals(v.getMajor(), 1); assertEquals(v.getMinor(), 13); assertEquals(v.getPatch(), 2); assertEquals(v.getRevision(), 0.1); assertEquals(v.getPrerelease(), 1); + assertEquals(v.getReleaseCandidate(), -1); v = VersionUtil.BukkitVersion.fromString("1.14.3-SNAPSHOT"); assertEquals(v.getMajor(), 1); assertEquals(v.getMinor(), 14); assertEquals(v.getPatch(), 3); assertEquals(v.getRevision(), 0.0); assertEquals(v.getPrerelease(), -1); + assertEquals(v.getReleaseCandidate(), -1); + v = VersionUtil.BukkitVersion.fromString("1.18-rc3-R0.1-SNAPSHOT"); + assertEquals(v.getMajor(), 1); + assertEquals(v.getMinor(), 18); + assertEquals(v.getPatch(), 0); + assertEquals(v.getRevision(), 0.1); + assertEquals(v.getPrerelease(), -1); + assertEquals(v.getReleaseCandidate(), 3); } } diff --git a/README.md b/README.md index 58b0993e1d0..658260cc3e5 100644 --- a/README.md +++ b/README.md @@ -26,7 +26,7 @@ EssentialsX is almost a completely drop-in replacement for Essentials. However, * **EssentialsX requires Java 8 or higher.** On older versions, the plugin may not work properly. -* **EssentialsX supports Minecraft versions 1.8.8, 1.9.4, 1.10.2, 1.11.2, 1.12.2, 1.13.2, 1.14.4, 1.15.2, 1.16.5, and 1.17.1** +* **EssentialsX supports Minecraft versions 1.8.8, 1.9.4, 1.10.2, 1.11.2, 1.12.2, 1.13.2, 1.14.4, 1.15.2, 1.16.5, 1.17.1, and 1.18** Support From 7a1e50d10f60949eaa1ce116c1e4c2763a0a4acb Mon Sep 17 00:00:00 2001 From: Josh Roy <10731363+JRoy@users.noreply.github.com> Date: Sun, 21 Nov 2021 23:20:35 -0500 Subject: [PATCH 109/120] Fix reflection mappings for the ServerStateProvider in 1.18 --- .../src/main/java/net/ess3/nms/refl/ReflUtil.java | 1 + .../net/ess3/nms/refl/providers/ReflServerStateProvider.java | 4 +++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/providers/NMSReflectionProvider/src/main/java/net/ess3/nms/refl/ReflUtil.java b/providers/NMSReflectionProvider/src/main/java/net/ess3/nms/refl/ReflUtil.java index ba3d6a012cf..9bcf1292e36 100644 --- a/providers/NMSReflectionProvider/src/main/java/net/ess3/nms/refl/ReflUtil.java +++ b/providers/NMSReflectionProvider/src/main/java/net/ess3/nms/refl/ReflUtil.java @@ -19,6 +19,7 @@ public final class ReflUtil { public static final NMSVersion V1_12_R1 = NMSVersion.fromString("v1_12_R1"); public static final NMSVersion V1_11_R1 = NMSVersion.fromString("v1_11_R1"); public static final NMSVersion V1_17_R1 = NMSVersion.fromString("v1_17_R1"); + public static final NMSVersion V1_18_R1 = NMSVersion.fromString("v1_18_R1"); private static final Map<String, Class<?>> classCache = new HashMap<>(); private static final Table<Class<?>, String, Method> methodCache = HashBasedTable.create(); private static final Table<Class<?>, MethodParams, Method> methodParamCache = HashBasedTable.create(); diff --git a/providers/NMSReflectionProvider/src/main/java/net/ess3/nms/refl/providers/ReflServerStateProvider.java b/providers/NMSReflectionProvider/src/main/java/net/ess3/nms/refl/providers/ReflServerStateProvider.java index e6a1b4d855c..11493bf33f2 100644 --- a/providers/NMSReflectionProvider/src/main/java/net/ess3/nms/refl/providers/ReflServerStateProvider.java +++ b/providers/NMSReflectionProvider/src/main/java/net/ess3/nms/refl/providers/ReflServerStateProvider.java @@ -17,7 +17,9 @@ public ReflServerStateProvider() { final Class<?> nmsClass = ReflUtil.getNMSClass("MinecraftServer"); try { serverObject = nmsClass.getMethod("getServer").invoke(null); - isRunning = MethodHandles.lookup().findVirtual(nmsClass, "isRunning", MethodType.methodType(boolean.class)); + isRunning = MethodHandles.lookup().findVirtual(nmsClass, + ReflUtil.getNmsVersionObject().isHigherThanOrEqualTo(ReflUtil.V1_18_R1) ? "v" : "isRunning", //TODO jmp said he may make this better + MethodType.methodType(boolean.class)); } catch (final Exception e) { e.printStackTrace(); } From db2ec1b436ac4111376fd15aca2d3fd6cfbbd1e8 Mon Sep 17 00:00:00 2001 From: Flask Bot <67512990+Flask-Bot@users.noreply.github.com> Date: Mon, 22 Nov 2021 09:46:58 +0000 Subject: [PATCH 110/120] Update items.json for Minecraft 1.18 --- Essentials/src/main/resources/items.json | 91 ++++++++++++++++++++++++ 1 file changed, 91 insertions(+) diff --git a/Essentials/src/main/resources/items.json b/Essentials/src/main/resources/items.json index f84a126f738..7f3393732d9 100644 --- a/Essentials/src/main/resources/items.json +++ b/Essentials/src/main/resources/items.json @@ -19293,6 +19293,96 @@ "pinkrecord": "music_disc_mellohi", "pirecord": "music_disc_mellohi", "record7": "music_disc_mellohi", + "music_disc_otherside": { + "material": "MUSIC_DISC_OTHERSIDE" + }, + "15cd": "music_disc_otherside", + "15disc": "music_disc_otherside", + "15disk": "music_disc_otherside", + "15mcd": "music_disc_otherside", + "15mdisc": "music_disc_otherside", + "15mdisk": "music_disc_otherside", + "15mrecord": "music_disc_otherside", + "15musiccd": "music_disc_otherside", + "15musicdisc": "music_disc_otherside", + "15musicdisk": "music_disc_otherside", + "15musicrecord": "music_disc_otherside", + "15record": "music_disc_otherside", + "cavecd": "music_disc_otherside", + "cavedisc": "music_disc_otherside", + "cavedisk": "music_disc_otherside", + "cavemcd": "music_disc_otherside", + "cavemdisc": "music_disc_otherside", + "cavemdisk": "music_disc_otherside", + "cavemrecord": "music_disc_otherside", + "cavemusiccd": "music_disc_otherside", + "cavemusicdisc": "music_disc_otherside", + "cavemusicdisk": "music_disc_otherside", + "cavemusicrecord": "music_disc_otherside", + "caverecord": "music_disc_otherside", + "cd15": "music_disc_otherside", + "deepcd2": "music_disc_otherside", + "deepdisc2": "music_disc_otherside", + "deepdisk2": "music_disc_otherside", + "deepmcd2": "music_disc_otherside", + "deepmdisc2": "music_disc_otherside", + "deepmdisk2": "music_disc_otherside", + "deepmrecord2": "music_disc_otherside", + "deepmusiccd2": "music_disc_otherside", + "deepmusicdisc2": "music_disc_otherside", + "deepmusicdisk2": "music_disc_otherside", + "deepmusicrecord2": "music_disc_otherside", + "deeprecord2": "music_disc_otherside", + "disc15": "music_disc_otherside", + "disk15": "music_disc_otherside", + "lenaraineisstillawesome": "music_disc_otherside", + "mcd15": "music_disc_otherside", + "mdisc15": "music_disc_otherside", + "mdisk15": "music_disc_otherside", + "minecraft:music_disc_otherside": "music_disc_otherside", + "mrecord15": "music_disc_otherside", + "musiccd15": "music_disc_otherside", + "musicdisc15": "music_disc_otherside", + "musicdiscotherside": "music_disc_otherside", + "musicdisk15": "music_disc_otherside", + "musicrecord15": "music_disc_otherside", + "othercd": "music_disc_otherside", + "otherdisc": "music_disc_otherside", + "otherdisk": "music_disc_otherside", + "othermcd": "music_disc_otherside", + "othermdisc": "music_disc_otherside", + "othermdisk": "music_disc_otherside", + "othermrecord": "music_disc_otherside", + "othermusiccd": "music_disc_otherside", + "othermusicdisc": "music_disc_otherside", + "othermusicdisk": "music_disc_otherside", + "othermusicrecord": "music_disc_otherside", + "otherrecord": "music_disc_otherside", + "othersidecd": "music_disc_otherside", + "othersidedisc": "music_disc_otherside", + "othersidedisk": "music_disc_otherside", + "othersidemcd": "music_disc_otherside", + "othersidemdisc": "music_disc_otherside", + "othersidemdisk": "music_disc_otherside", + "othersidemrecord": "music_disc_otherside", + "othersidemusiccd": "music_disc_otherside", + "othersidemusicdisc": "music_disc_otherside", + "othersidemusicdisk": "music_disc_otherside", + "othersidemusicrecord": "music_disc_otherside", + "othersiderecord": "music_disc_otherside", + "record15": "music_disc_otherside", + "undercd": "music_disc_otherside", + "underdisc": "music_disc_otherside", + "underdisk": "music_disc_otherside", + "undermcd": "music_disc_otherside", + "undermdisc": "music_disc_otherside", + "undermdisk": "music_disc_otherside", + "undermrecord": "music_disc_otherside", + "undermusiccd": "music_disc_otherside", + "undermusicdisc": "music_disc_otherside", + "undermusicdisk": "music_disc_otherside", + "undermusicrecord": "music_disc_otherside", + "underrecord": "music_disc_otherside", "music_disc_pigstep": { "material": "MUSIC_DISC_PIGSTEP" }, @@ -19323,6 +19413,7 @@ "darkrecord": "music_disc_pigstep", "disc14": "music_disc_pigstep", "disk14": "music_disc_pigstep", + "lenaraineisawesome": "music_disc_pigstep", "mcd14": "music_disc_pigstep", "mdisc14": "music_disc_pigstep", "mdisk14": "music_disc_pigstep", From c0082ee734a2be6476e9ea5385d17577bb6dbb25 Mon Sep 17 00:00:00 2001 From: MD <1917406+mdcfe@users.noreply.github.com> Date: Mon, 22 Nov 2021 13:18:06 +0000 Subject: [PATCH 111/120] Update to Gradle 7.3 and toolchain to JDK 17 --- .../src/main/kotlin/essentials.base-conventions.gradle.kts | 2 +- gradle/wrapper/gradle-wrapper.properties | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/build-logic/src/main/kotlin/essentials.base-conventions.gradle.kts b/build-logic/src/main/kotlin/essentials.base-conventions.gradle.kts index f887a4695dd..48398a95a6f 100644 --- a/build-logic/src/main/kotlin/essentials.base-conventions.gradle.kts +++ b/build-logic/src/main/kotlin/essentials.base-conventions.gradle.kts @@ -116,7 +116,7 @@ indra { javaVersions { target(8) - minimumToolchain(16) + minimumToolchain(17) } } diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index ffed3a254e9..e750102e092 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.2-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.3-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists From 1509cf8978f187f01f9a090877c019451c168051 Mon Sep 17 00:00:00 2001 From: MD <1917406+mdcfe@users.noreply.github.com> Date: Wed, 24 Nov 2021 04:44:08 +0000 Subject: [PATCH 112/120] Support 0>y>256 for safe/random teleports (#4641) Co-authored-by: pop4959 <pop4959@gmail.com> Co-authored-by: Josh Roy <10731363+JRoy@users.noreply.github.com> --- .../earth2me/essentials/AsyncTeleport.java | 2 +- .../com/earth2me/essentials/Essentials.java | 15 ++++++ .../essentials/EssentialsPlayerListener.java | 4 +- .../com/earth2me/essentials/IEssentials.java | 3 ++ .../earth2me/essentials/RandomTeleport.java | 18 ++++---- .../com/earth2me/essentials/SpawnMob.java | 2 +- .../com/earth2me/essentials/Teleport.java | 2 +- .../essentials/commands/Commandsethome.java | 2 +- .../essentials/commands/Commandtop.java | 7 +-- .../essentials/utils/LocationUtil.java | 46 ++++++++++--------- .../net/ess3/provider/WorldInfoProvider.java | 21 +++++++++ .../FixedHeightWorldInfoProvider.java | 21 +++++++++ .../providers/ModernWorldInfoProvider.java | 21 +++++++++ 13 files changed, 125 insertions(+), 39 deletions(-) create mode 100644 providers/BaseProviders/src/main/java/net/ess3/provider/WorldInfoProvider.java create mode 100644 providers/BaseProviders/src/main/java/net/ess3/provider/providers/FixedHeightWorldInfoProvider.java create mode 100644 providers/BaseProviders/src/main/java/net/ess3/provider/providers/ModernWorldInfoProvider.java diff --git a/Essentials/src/main/java/com/earth2me/essentials/AsyncTeleport.java b/Essentials/src/main/java/com/earth2me/essentials/AsyncTeleport.java index e3026b673d4..d11c130e754 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/AsyncTeleport.java +++ b/Essentials/src/main/java/com/earth2me/essentials/AsyncTeleport.java @@ -189,7 +189,7 @@ protected void nowAsync(final IUser teleportee, final ITarget target, final Tele } PaperLib.getChunkAtAsync(targetLoc.getWorld(), targetLoc.getBlockX() >> 4, targetLoc.getBlockZ() >> 4, true, true).thenAccept(chunk -> { Location loc = targetLoc; - if (LocationUtil.isBlockUnsafeForUser(teleportee, chunk.getWorld(), loc.getBlockX(), loc.getBlockY(), loc.getBlockZ())) { + if (LocationUtil.isBlockUnsafeForUser(ess, teleportee, chunk.getWorld(), loc.getBlockX(), loc.getBlockY(), loc.getBlockZ())) { if (ess.getSettings().isTeleportSafetyEnabled()) { if (ess.getSettings().isForceDisableTeleportSafety()) { //The chunk we're teleporting to is 100% going to be loaded here, no need to teleport async. diff --git a/Essentials/src/main/java/com/earth2me/essentials/Essentials.java b/Essentials/src/main/java/com/earth2me/essentials/Essentials.java index 4305ed6474d..b1e6d0241ae 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/Essentials.java +++ b/Essentials/src/main/java/com/earth2me/essentials/Essentials.java @@ -69,16 +69,19 @@ import net.ess3.provider.SpawnerBlockProvider; import net.ess3.provider.SpawnerItemProvider; import net.ess3.provider.SyncCommandsProvider; +import net.ess3.provider.WorldInfoProvider; import net.ess3.provider.providers.BasePotionDataProvider; import net.ess3.provider.providers.BlockMetaSpawnerItemProvider; import net.ess3.provider.providers.BukkitMaterialTagProvider; import net.ess3.provider.providers.BukkitSpawnerBlockProvider; +import net.ess3.provider.providers.FixedHeightWorldInfoProvider; import net.ess3.provider.providers.FlatSpawnEggProvider; import net.ess3.provider.providers.LegacyItemUnbreakableProvider; import net.ess3.provider.providers.LegacyPotionMetaProvider; import net.ess3.provider.providers.LegacySpawnEggProvider; import net.ess3.provider.providers.ModernItemUnbreakableProvider; import net.ess3.provider.providers.ModernPersistentDataProvider; +import net.ess3.provider.providers.ModernWorldInfoProvider; import net.ess3.provider.providers.PaperContainerProvider; import net.ess3.provider.providers.PaperKnownCommandsProvider; import net.ess3.provider.providers.PaperMaterialTagProvider; @@ -170,6 +173,7 @@ public class Essentials extends JavaPlugin implements net.ess3.api.IEssentials { private transient PersistentDataProvider persistentDataProvider; private transient ReflOnlineModeProvider onlineModeProvider; private transient ItemUnbreakableProvider unbreakableProvider; + private transient WorldInfoProvider worldInfoProvider; private transient Kits kits; private transient RandomTeleport randomTeleport; private transient UpdateChecker updateChecker; @@ -419,6 +423,12 @@ public void onEnable() { unbreakableProvider = new LegacyItemUnbreakableProvider(); } + if (VersionUtil.getServerBukkitVersion().isHigherThanOrEqualTo(VersionUtil.v1_17_1_R01)) { + worldInfoProvider = new ModernWorldInfoProvider(); + } else { + worldInfoProvider = new FixedHeightWorldInfoProvider(); + } + execTimer.mark("Init(Providers)"); reload(); @@ -1284,6 +1294,11 @@ public ItemUnbreakableProvider getItemUnbreakableProvider() { return unbreakableProvider; } + @Override + public WorldInfoProvider getWorldInfoProvider() { + return worldInfoProvider; + } + @Override public PluginCommand getPluginCommand(final String cmd) { return this.getCommand(cmd); diff --git a/Essentials/src/main/java/com/earth2me/essentials/EssentialsPlayerListener.java b/Essentials/src/main/java/com/earth2me/essentials/EssentialsPlayerListener.java index 8e2dac1fcac..0fce2a5bf15 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/EssentialsPlayerListener.java +++ b/Essentials/src/main/java/com/earth2me/essentials/EssentialsPlayerListener.java @@ -217,7 +217,7 @@ public void onPlayerMove(final PlayerMoveEvent event) { to.setY(from.getY()); to.setZ(from.getZ()); try { - event.setTo(LocationUtil.getSafeDestination(to)); + event.setTo(LocationUtil.getSafeDestination(ess, to)); } catch (final Exception ex) { event.setTo(to); } @@ -412,7 +412,7 @@ public void run() { if (user.isAuthorized("essentials.fly.safelogin")) { user.getBase().setFallDistance(0); - if (LocationUtil.shouldFly(user.getLocation())) { + if (LocationUtil.shouldFly(ess, user.getLocation())) { user.getBase().setAllowFlight(true); user.getBase().setFlying(true); if (ess.getSettings().isSendFlyEnableOnJoin()) { diff --git a/Essentials/src/main/java/com/earth2me/essentials/IEssentials.java b/Essentials/src/main/java/com/earth2me/essentials/IEssentials.java index 1852eb9b655..cb3df386f9a 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/IEssentials.java +++ b/Essentials/src/main/java/com/earth2me/essentials/IEssentials.java @@ -19,6 +19,7 @@ import net.ess3.provider.SpawnerBlockProvider; import net.ess3.provider.SpawnerItemProvider; import net.ess3.provider.SyncCommandsProvider; +import net.ess3.provider.WorldInfoProvider; import net.essentialsx.api.v2.services.BalanceTop; import net.essentialsx.api.v2.services.mail.MailService; import org.bukkit.Server; @@ -162,5 +163,7 @@ public interface IEssentials extends Plugin { ItemUnbreakableProvider getItemUnbreakableProvider(); + WorldInfoProvider getWorldInfoProvider(); + PluginCommand getPluginCommand(String cmd); } diff --git a/Essentials/src/main/java/com/earth2me/essentials/RandomTeleport.java b/Essentials/src/main/java/com/earth2me/essentials/RandomTeleport.java index f48eafd3f95..3dfbfd1e0f8 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/RandomTeleport.java +++ b/Essentials/src/main/java/com/earth2me/essentials/RandomTeleport.java @@ -22,12 +22,12 @@ public class RandomTeleport implements IConf { private static final Random RANDOM = new Random(); private static final int HIGHEST_BLOCK_Y_OFFSET = VersionUtil.getServerBukkitVersion().isHigherThanOrEqualTo(VersionUtil.v1_15_R01) ? 1 : 0; - private final IEssentials essentials; + private final IEssentials ess; private final EssentialsConfiguration config; private final ConcurrentLinkedQueue<Location> cachedLocations = new ConcurrentLinkedQueue<>(); public RandomTeleport(final IEssentials essentials) { - this.essentials = essentials; + this.ess = essentials; config = new EssentialsConfiguration(new File(essentials.getDataFolder(), "tpr.yml"), "/tpr.yml", "Configuration for the random teleport command.\nSome settings may be defaulted, and can be changed via the /settpr command in-game."); reloadConfig(); @@ -47,8 +47,8 @@ public Location getCenter() { } } catch (final InvalidWorldException ignored) { } - final Location center = essentials.getServer().getWorlds().get(0).getWorldBorder().getCenter(); - center.setY(center.getWorld().getHighestBlockYAt(center) + 1); + final Location center = ess.getServer().getWorlds().get(0).getWorldBorder().getCenter(); + center.setY(center.getWorld().getHighestBlockYAt(center) + HIGHEST_BLOCK_Y_OFFSET); setCenter(center); return center; } @@ -124,7 +124,7 @@ public CompletableFuture<Location> getRandomLocation(final Location center, fina // Prompts caching random valid locations, up to a maximum number of attempts public void cacheRandomLocations(final Location center, final double minRange, final double maxRange) { - essentials.getServer().getScheduler().scheduleSyncDelayedTask(essentials, () -> { + ess.getServer().getScheduler().scheduleSyncDelayedTask(ess, () -> { for (int i = 0; i < this.getFindAttempts(); ++i) { calculateRandomLocation(center, minRange, maxRange).thenAccept(location -> { if (isValidRandomLocation(location)) { @@ -177,7 +177,7 @@ private CompletableFuture<Location> calculateRandomLocation(final Location cente final Location location = new Location( center.getWorld(), center.getX() + offsetX, - center.getWorld().getMaxHeight(), + ess.getWorldInfoProvider().getMaxSafeHeight(center.getWorld()), center.getZ() + offsetZ, 360 * RANDOM.nextFloat() - 180, 0 @@ -195,8 +195,8 @@ private CompletableFuture<Location> calculateRandomLocation(final Location cente // Returns an appropriate elevation for a given location in the nether, or -1 if none is found private double getNetherYAt(final Location location) { - for (int y = 32; y < location.getWorld().getMaxHeight() / 2; ++y) { - if (!LocationUtil.isBlockUnsafe(location.getWorld(), location.getBlockX(), y, location.getBlockZ())) { + for (int y = 32; y < ess.getWorldInfoProvider().getMaxSafeHeight(location.getWorld()); ++y) { + if (!LocationUtil.isBlockUnsafe(ess, location.getWorld(), location.getBlockX(), y, location.getBlockZ())) { return y; } } @@ -204,6 +204,6 @@ private double getNetherYAt(final Location location) { } private boolean isValidRandomLocation(final Location location) { - return location.getBlockY() > 0 && !this.getExcludedBiomes().contains(location.getBlock().getBiome()); + return location.getBlockY() > ess.getWorldInfoProvider().getMinSafeHeight(location.getWorld()) && !this.getExcludedBiomes().contains(location.getBlock().getBiome()); } } diff --git a/Essentials/src/main/java/com/earth2me/essentials/SpawnMob.java b/Essentials/src/main/java/com/earth2me/essentials/SpawnMob.java index 7fa39ab57fe..a983b016e31 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/SpawnMob.java +++ b/Essentials/src/main/java/com/earth2me/essentials/SpawnMob.java @@ -103,7 +103,7 @@ public static void spawnmob(final IEssentials ess, final Server server, final Co // This method spawns a mob at loc, owned by target public static void spawnmob(final IEssentials ess, final Server server, final CommandSource sender, final User target, final Location loc, final List<String> parts, final List<String> data, int mobCount) throws Exception { - final Location sloc = LocationUtil.getSafeDestination(loc); + final Location sloc = LocationUtil.getSafeDestination(ess, loc); for (final String part : parts) { final Mob mob = Mob.fromName(part); diff --git a/Essentials/src/main/java/com/earth2me/essentials/Teleport.java b/Essentials/src/main/java/com/earth2me/essentials/Teleport.java index d984882103a..6038b2e3578 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/Teleport.java +++ b/Essentials/src/main/java/com/earth2me/essentials/Teleport.java @@ -145,7 +145,7 @@ protected void now(final IUser teleportee, final ITarget target, final TeleportC teleportee.getBase().eject(); } - if (LocationUtil.isBlockUnsafeForUser(teleportee, loc.getWorld(), loc.getBlockX(), loc.getBlockY(), loc.getBlockZ())) { + if (LocationUtil.isBlockUnsafeForUser(ess, teleportee, loc.getWorld(), loc.getBlockX(), loc.getBlockY(), loc.getBlockZ())) { if (ess.getSettings().isTeleportSafetyEnabled()) { if (ess.getSettings().isForceDisableTeleportSafety()) { PaperLib.teleportAsync(teleportee.getBase(), loc, cause); diff --git a/Essentials/src/main/java/com/earth2me/essentials/commands/Commandsethome.java b/Essentials/src/main/java/com/earth2me/essentials/commands/Commandsethome.java index 94626cec6f9..15f29dc0cb7 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/commands/Commandsethome.java +++ b/Essentials/src/main/java/com/earth2me/essentials/commands/Commandsethome.java @@ -51,7 +51,7 @@ public void run(final Server server, final User user, final String commandLabel, } final Location location = user.getLocation(); - if ((!ess.getSettings().isTeleportSafetyEnabled() || !ess.getSettings().isForceDisableTeleportSafety()) && LocationUtil.isBlockUnsafeForUser(usersHome, location.getWorld(), location.getBlockX(), location.getBlockY(), location.getBlockZ())) { + if ((!ess.getSettings().isTeleportSafetyEnabled() || !ess.getSettings().isForceDisableTeleportSafety()) && LocationUtil.isBlockUnsafeForUser(ess, usersHome, location.getWorld(), location.getBlockX(), location.getBlockY(), location.getBlockZ())) { throw new Exception(tl("unsafeTeleportDestination", location.getWorld().getName(), location.getBlockX(), location.getBlockY(), location.getBlockZ())); } diff --git a/Essentials/src/main/java/com/earth2me/essentials/commands/Commandtop.java b/Essentials/src/main/java/com/earth2me/essentials/commands/Commandtop.java index 18b6211708d..60b7f53d952 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/commands/Commandtop.java +++ b/Essentials/src/main/java/com/earth2me/essentials/commands/Commandtop.java @@ -22,13 +22,14 @@ public void run(final Server server, final User user, final String commandLabel, final int topZ = user.getLocation().getBlockZ(); final float pitch = user.getLocation().getPitch(); final float yaw = user.getLocation().getYaw(); - final Location loc = LocationUtil.getSafeDestination(new Location(user.getWorld(), topX, user.getWorld().getMaxHeight(), topZ, yaw, pitch)); + final Location unsafe = new Location(user.getWorld(), topX, ess.getWorldInfoProvider().getMaxSafeHeight(user.getWorld()), topZ, yaw, pitch); + final Location safe = LocationUtil.getSafeDestination(ess, unsafe); final CompletableFuture<Boolean> future = new CompletableFuture<>(); future.thenAccept(success -> { if (success) { - user.sendMessage(tl("teleportTop", loc.getWorld().getName(), loc.getBlockX(), loc.getBlockY(), loc.getBlockZ())); + user.sendMessage(tl("teleportTop", safe.getWorld().getName(), safe.getBlockX(), safe.getBlockY(), safe.getBlockZ())); } }); - user.getAsyncTeleport().teleport(loc, new Trade(this.getName(), ess), TeleportCause.COMMAND, getNewExceptionFuture(user.getSource(), commandLabel)); + user.getAsyncTeleport().teleport(safe, new Trade(this.getName(), ess), TeleportCause.COMMAND, getNewExceptionFuture(user.getSource(), commandLabel)); } } diff --git a/Essentials/src/main/java/com/earth2me/essentials/utils/LocationUtil.java b/Essentials/src/main/java/com/earth2me/essentials/utils/LocationUtil.java index 06ad564f1c1..e9ea7244070 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/utils/LocationUtil.java +++ b/Essentials/src/main/java/com/earth2me/essentials/utils/LocationUtil.java @@ -1,6 +1,7 @@ package com.earth2me.essentials.utils; import com.earth2me.essentials.IEssentials; +import com.google.common.primitives.Ints; import net.ess3.api.IUser; import org.bukkit.GameMode; import org.bukkit.Location; @@ -95,8 +96,8 @@ public static Location getTarget(final LivingEntity entity) throws Exception { return block.getLocation(); } - public static boolean isBlockAboveAir(final World world, final int x, final int y, final int z) { - return y > world.getMaxHeight() || HOLLOW_MATERIALS.contains(world.getBlockAt(x, y - 1, z).getType()); + public static boolean isBlockAboveAir(IEssentials ess, final World world, final int x, final int y, final int z) { + return y > ess.getWorldInfoProvider().getMaxSafeHeight(world) || HOLLOW_MATERIALS.contains(world.getBlockAt(x, y - 1, z).getType()); } public static boolean isBlockOutsideWorldBorder(final World world, final int x, final int z) { @@ -131,7 +132,7 @@ public static int getZInsideWorldBorder(final World world, final int z) { return z; } - public static boolean isBlockUnsafeForUser(final IUser user, final World world, final int x, final int y, final int z) { + public static boolean isBlockUnsafeForUser(IEssentials ess, final IUser user, final World world, final int x, final int y, final int z) { if (user.getBase().isOnline() && world.equals(user.getBase().getWorld()) && (user.getBase().getGameMode() == GameMode.CREATIVE || user.getBase().getGameMode() == GameMode.SPECTATOR || user.isGodModeEnabled()) && user.getBase().getAllowFlight()) { return false; } @@ -139,14 +140,14 @@ public static boolean isBlockUnsafeForUser(final IUser user, final World world, if (isBlockDamaging(world, x, y, z)) { return true; } - if (isBlockAboveAir(world, x, y, z)) { + if (isBlockAboveAir(ess, world, x, y, z)) { return true; } return isBlockOutsideWorldBorder(world, x, z); } - public static boolean isBlockUnsafe(final World world, final int x, final int y, final int z) { - return isBlockDamaging(world, x, y, z) || isBlockAboveAir(world, x, y, z); + public static boolean isBlockUnsafe(IEssentials ess, final World world, final int x, final int y, final int z) { + return isBlockDamaging(world, x, y, z) || isBlockAboveAir(ess, world, x, y, z); } public static boolean isBlockDamaging(final World world, final int x, final int y, final int z) { @@ -184,7 +185,7 @@ public static Location getSafeDestination(final IUser user, final Location loc) public static Location getSafeDestination(final IEssentials ess, final IUser user, final Location loc) throws Exception { if (user.getBase().isOnline() && (ess == null || !ess.getSettings().isAlwaysTeleportSafety()) && (user.getBase().getGameMode() == GameMode.CREATIVE || user.getBase().getGameMode() == GameMode.SPECTATOR || user.isGodModeEnabled())) { - if (shouldFly(loc) && user.getBase().getAllowFlight()) { + if (shouldFly(ess, loc) && user.getBase().getAllowFlight()) { user.getBase().setFlying(true); } // ess can be null if old deprecated method is calling it. @@ -194,14 +195,16 @@ public static Location getSafeDestination(final IEssentials ess, final IUser use return loc; } } - return getSafeDestination(loc); + return getSafeDestination(ess, loc); } - public static Location getSafeDestination(final Location loc) throws Exception { + public static Location getSafeDestination(IEssentials ess, final Location loc) throws Exception { if (loc == null || loc.getWorld() == null) { throw new Exception(tl("destinationNotSet")); } final World world = loc.getWorld(); + final int worldMinY = ess.getWorldInfoProvider().getMinSafeHeight(world); + final int worldMaxY = ess.getWorldInfoProvider().getMaxSafeHeight(world); int x = loc.getBlockX(); int y = (int) Math.round(loc.getY()); int z = loc.getBlockZ(); @@ -212,42 +215,43 @@ public static Location getSafeDestination(final Location loc) throws Exception { final int origX = x; final int origY = y; final int origZ = z; - while (isBlockAboveAir(world, x, y, z)) { + while (isBlockAboveAir(ess, world, x, y, z)) { y -= 1; if (y < 0) { y = origY; break; } } - if (isBlockUnsafe(world, x, y, z)) { + if (isBlockUnsafe(ess, world, x, y, z)) { x = Math.round(loc.getX()) == origX ? x - 1 : x + 1; z = Math.round(loc.getZ()) == origZ ? z - 1 : z + 1; } int i = 0; - while (isBlockUnsafe(world, x, y, z)) { + while (isBlockUnsafe(ess, world, x, y, z)) { i++; if (i >= VOLUME.length) { x = origX; - y = origY + RADIUS; + y = Ints.constrainToRange(origY + RADIUS, worldMinY, worldMaxY); z = origZ; break; } x = origX + VOLUME[i].x; - y = origY + VOLUME[i].y; + y = Ints.constrainToRange(origY + VOLUME[i].y, worldMinY, worldMaxY); z = origZ + VOLUME[i].z; } - while (isBlockUnsafe(world, x, y, z)) { + while (isBlockUnsafe(ess, world, x, y, z)) { y += 1; - if (y >= world.getMaxHeight()) { + if (y >= worldMaxY) { x += 1; break; } } - while (isBlockUnsafe(world, x, y, z)) { + while (isBlockUnsafe(ess, world, x, y, z)) { y -= 1; - if (y <= 1) { + if (y <= worldMinY + 1) { x += 1; - y = world.getHighestBlockYAt(x, z); + // Allow spawning at the top of the world, but not above the nether roof + y = Math.min(world.getHighestBlockYAt(x, z) + 1, worldMaxY); if (x - 48 > loc.getBlockX()) { throw new Exception(tl("holeInFloor")); } @@ -256,13 +260,13 @@ public static Location getSafeDestination(final Location loc) throws Exception { return new Location(world, x + 0.5, y, z + 0.5, loc.getYaw(), loc.getPitch()); } - public static boolean shouldFly(final Location loc) { + public static boolean shouldFly(IEssentials ess, final Location loc) { final World world = loc.getWorld(); final int x = loc.getBlockX(); int y = (int) Math.round(loc.getY()); final int z = loc.getBlockZ(); int count = 0; - while (LocationUtil.isBlockUnsafe(world, x, y, z) && y > -1) { + while (LocationUtil.isBlockUnsafe(ess, world, x, y, z) && y > -1) { y--; count++; if (count > 2) { diff --git a/providers/BaseProviders/src/main/java/net/ess3/provider/WorldInfoProvider.java b/providers/BaseProviders/src/main/java/net/ess3/provider/WorldInfoProvider.java new file mode 100644 index 00000000000..b1f4034d45b --- /dev/null +++ b/providers/BaseProviders/src/main/java/net/ess3/provider/WorldInfoProvider.java @@ -0,0 +1,21 @@ +package net.ess3.provider; + +import org.bukkit.World; + +public interface WorldInfoProvider extends Provider { + /** + * Gets the maximum safe height for teleportation. + * + * @param world The world of which to check the maximum safe height. + * @return The maximum safe height for teleportation + */ + int getMaxSafeHeight(World world); + + /** + * Gets the minimum safe height for teleportation. + * + * @param world The world of which to check the base height. + * @return The minimum safe height for teleportation + */ + int getMinSafeHeight(World world); +} diff --git a/providers/BaseProviders/src/main/java/net/ess3/provider/providers/FixedHeightWorldInfoProvider.java b/providers/BaseProviders/src/main/java/net/ess3/provider/providers/FixedHeightWorldInfoProvider.java new file mode 100644 index 00000000000..80a34f85bfa --- /dev/null +++ b/providers/BaseProviders/src/main/java/net/ess3/provider/providers/FixedHeightWorldInfoProvider.java @@ -0,0 +1,21 @@ +package net.ess3.provider.providers; + +import net.ess3.provider.WorldInfoProvider; +import org.bukkit.World; + +public class FixedHeightWorldInfoProvider implements WorldInfoProvider { + @Override + public String getDescription() { + return "World info provider for fixed world heights"; + } + + @Override + public int getMaxSafeHeight(World world) { + return world.getEnvironment() == World.Environment.NETHER ? 128 : 256; + } + + @Override + public int getMinSafeHeight(World world) { + return 0; + } +} diff --git a/providers/BaseProviders/src/main/java/net/ess3/provider/providers/ModernWorldInfoProvider.java b/providers/BaseProviders/src/main/java/net/ess3/provider/providers/ModernWorldInfoProvider.java new file mode 100644 index 00000000000..634eb83453c --- /dev/null +++ b/providers/BaseProviders/src/main/java/net/ess3/provider/providers/ModernWorldInfoProvider.java @@ -0,0 +1,21 @@ +package net.ess3.provider.providers; + +import net.ess3.provider.WorldInfoProvider; +import org.bukkit.World; + +public class ModernWorldInfoProvider implements WorldInfoProvider { + @Override + public String getDescription() { + return "World info provider for data-driven world generation"; + } + + @Override + public int getMaxSafeHeight(World world) { + return world.getLogicalHeight(); + } + + @Override + public int getMinSafeHeight(World world) { + return world.getMinHeight(); + } +} From 0983167740c2825f472def63574399359a362b61 Mon Sep 17 00:00:00 2001 From: MD <1917406+mdcfe@users.noreply.github.com> Date: Fri, 26 Nov 2021 23:29:34 +0000 Subject: [PATCH 113/120] Port remaining groovy build logic to kotlin Co-authored-by: Jason <11360596+jpenilla@users.noreply.github.com> --- build-logic/build.gradle.kts | 1 - build-logic/src/main/groovy/GitUtil.groovy | 51 ---------------------- build-logic/src/main/kotlin/GitUtil.kt | 46 +++++++++++++++++++ 3 files changed, 46 insertions(+), 52 deletions(-) delete mode 100644 build-logic/src/main/groovy/GitUtil.groovy create mode 100644 build-logic/src/main/kotlin/GitUtil.kt diff --git a/build-logic/build.gradle.kts b/build-logic/build.gradle.kts index 0c57299878a..74af717ecb3 100644 --- a/build-logic/build.gradle.kts +++ b/build-logic/build.gradle.kts @@ -1,6 +1,5 @@ plugins { `kotlin-dsl` - `groovy-gradle-plugin` } repositories { diff --git a/build-logic/src/main/groovy/GitUtil.groovy b/build-logic/src/main/groovy/GitUtil.groovy deleted file mode 100644 index faf193c0779..00000000000 --- a/build-logic/src/main/groovy/GitUtil.groovy +++ /dev/null @@ -1,51 +0,0 @@ -import net.kyori.indra.git.IndraGitExtension -import org.eclipse.jgit.lib.Ref -import org.eclipse.jgit.lib.Repository -import org.eclipse.jgit.revwalk.RevWalk -import org.gradle.api.Project - -final class GitUtil { - private GitUtil() { - } - - static int commitsSinceLastTag(Project project) { - def indraGit = project.extensions.findByType(IndraGitExtension.class) - if (indraGit == null || !indraGit.isPresent() || indraGit.tags().isEmpty()) { - return -1 - } - def tags = indraGit.tags() - def depth = 0 - def walk = new RevWalk(indraGit.git().getRepository()) - def commit = walk.parseCommit(indraGit.commit()) - while (true) { - for (tag in tags) { - if (walk.parseCommit(tag.getLeaf().getObjectId()) == commit) { - walk.dispose() - return depth - } - } - depth++ - commit = walk.parseCommit(commit.getParents()[0]) - } - } - - static String headBranchName(Project project) { - if (System.getenv("GITHUB_HEAD_REF") != null && !System.getenv("GITHUB_HEAD_REF").isEmpty()) { - return System.getenv("GITHUB_HEAD_REF") - } else if (System.getenv("GITHUB_REF") != null && !System.getenv("GITHUB_REF").isEmpty()) { - return System.getenv("GITHUB_REF").replaceFirst("refs/heads/", "") - } - - def indraGit = project.extensions.findByType(IndraGitExtension.class) - if (!indraGit.isPresent()) { - return "detached-head" - } - - Ref ref = indraGit.git().getRepository().exactRef('HEAD')?.target - if (ref == null) { - return "detached-head" - } - - return Repository.shortenRefName(ref.name) - } -} diff --git a/build-logic/src/main/kotlin/GitUtil.kt b/build-logic/src/main/kotlin/GitUtil.kt new file mode 100644 index 00000000000..2bd841ae1f0 --- /dev/null +++ b/build-logic/src/main/kotlin/GitUtil.kt @@ -0,0 +1,46 @@ +import net.kyori.indra.git.IndraGitExtension +import org.eclipse.jgit.lib.Repository +import org.eclipse.jgit.revwalk.RevWalk +import org.gradle.api.Project +import org.gradle.kotlin.dsl.findByType + +object GitUtil { + @JvmStatic + fun commitsSinceLastTag(project: Project): Int? { + val indraGit = project.extensions.findByType(IndraGitExtension::class)?.takeIf { + it.isPresent && it.tags().isNotEmpty() + } ?: return null + val git = indraGit.git() ?: return null + + val tags = indraGit.tags() + var depth = 0 + val walk = RevWalk(git.repository) + var commit = walk.parseCommit(indraGit.commit()) + while (true) { + for (tag in tags) { + if (walk.parseCommit(tag.leaf.objectId) == commit) { + walk.dispose() + return depth + } + } + depth++ + commit = walk.parseCommit(commit.parents[0]) + } + } + + @JvmStatic + fun headBranchName(project: Project): String { + System.getenv("GITHUB_HEAD_REF")?.takeIf { it.isNotEmpty() } + ?.let { return it } + System.getenv("GITHUB_REF")?.takeIf { it.isNotEmpty() } + ?.let { return it.replaceFirst("refs/heads/", "") } + + val indraGit = project.extensions.findByType(IndraGitExtension::class) + ?.takeIf { it.isPresent } + + val ref = indraGit?.git()?.repository?.exactRef("HEAD")?.target + ?: return "detached-head" + + return Repository.shortenRefName(ref.name) + } +} \ No newline at end of file From e35c65b9767f2f5652b97be7244bf66551f9261d Mon Sep 17 00:00:00 2001 From: MD <1917406+mdcfe@users.noreply.github.com> Date: Tue, 30 Nov 2021 16:02:49 +0000 Subject: [PATCH 114/120] Refactor world info provider; only clamp to logical height when already below Fixes #4657. --- .../com/earth2me/essentials/Essentials.java | 7 +++-- .../earth2me/essentials/RandomTeleport.java | 6 ++-- .../essentials/commands/Commandtop.java | 2 +- .../essentials/utils/LocationUtil.java | 7 +++-- .../net/ess3/provider/WorldInfoProvider.java | 23 +++++++++----- .../FixedHeightWorldInfoProvider.java | 14 +++++++-- .../ModernDataWorldInfoProvider.java | 26 ++++++++++++++++ .../providers/ModernWorldInfoProvider.java | 21 ------------- .../providers/ReflDataWorldInfoProvider.java | 31 +++++++++++++++++++ 9 files changed, 97 insertions(+), 40 deletions(-) create mode 100644 providers/BaseProviders/src/main/java/net/ess3/provider/providers/ModernDataWorldInfoProvider.java delete mode 100644 providers/BaseProviders/src/main/java/net/ess3/provider/providers/ModernWorldInfoProvider.java create mode 100644 providers/NMSReflectionProvider/src/main/java/net/ess3/nms/refl/providers/ReflDataWorldInfoProvider.java diff --git a/Essentials/src/main/java/com/earth2me/essentials/Essentials.java b/Essentials/src/main/java/com/earth2me/essentials/Essentials.java index b1e6d0241ae..c85a58fb545 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/Essentials.java +++ b/Essentials/src/main/java/com/earth2me/essentials/Essentials.java @@ -47,6 +47,7 @@ import net.ess3.api.IItemDb; import net.ess3.api.IJails; import net.ess3.api.ISettings; +import net.ess3.nms.refl.providers.ReflDataWorldInfoProvider; import net.ess3.nms.refl.providers.ReflFormattedCommandAliasProvider; import net.ess3.nms.refl.providers.ReflKnownCommandsProvider; import net.ess3.nms.refl.providers.ReflOnlineModeProvider; @@ -81,7 +82,7 @@ import net.ess3.provider.providers.LegacySpawnEggProvider; import net.ess3.provider.providers.ModernItemUnbreakableProvider; import net.ess3.provider.providers.ModernPersistentDataProvider; -import net.ess3.provider.providers.ModernWorldInfoProvider; +import net.ess3.provider.providers.ModernDataWorldInfoProvider; import net.ess3.provider.providers.PaperContainerProvider; import net.ess3.provider.providers.PaperKnownCommandsProvider; import net.ess3.provider.providers.PaperMaterialTagProvider; @@ -424,7 +425,9 @@ public void onEnable() { } if (VersionUtil.getServerBukkitVersion().isHigherThanOrEqualTo(VersionUtil.v1_17_1_R01)) { - worldInfoProvider = new ModernWorldInfoProvider(); + worldInfoProvider = new ModernDataWorldInfoProvider(); + } else if (VersionUtil.getServerBukkitVersion().isHigherThanOrEqualTo(VersionUtil.v1_16_5_R01)) { + worldInfoProvider = new ReflDataWorldInfoProvider(); } else { worldInfoProvider = new FixedHeightWorldInfoProvider(); } diff --git a/Essentials/src/main/java/com/earth2me/essentials/RandomTeleport.java b/Essentials/src/main/java/com/earth2me/essentials/RandomTeleport.java index 3dfbfd1e0f8..b1c1cb41722 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/RandomTeleport.java +++ b/Essentials/src/main/java/com/earth2me/essentials/RandomTeleport.java @@ -177,7 +177,7 @@ private CompletableFuture<Location> calculateRandomLocation(final Location cente final Location location = new Location( center.getWorld(), center.getX() + offsetX, - ess.getWorldInfoProvider().getMaxSafeHeight(center.getWorld()), + ess.getWorldInfoProvider().getMaxHeight(center.getWorld()), center.getZ() + offsetZ, 360 * RANDOM.nextFloat() - 180, 0 @@ -195,7 +195,7 @@ private CompletableFuture<Location> calculateRandomLocation(final Location cente // Returns an appropriate elevation for a given location in the nether, or -1 if none is found private double getNetherYAt(final Location location) { - for (int y = 32; y < ess.getWorldInfoProvider().getMaxSafeHeight(location.getWorld()); ++y) { + for (int y = 32; y < ess.getWorldInfoProvider().getMaxHeight(location.getWorld()); ++y) { if (!LocationUtil.isBlockUnsafe(ess, location.getWorld(), location.getBlockX(), y, location.getBlockZ())) { return y; } @@ -204,6 +204,6 @@ private double getNetherYAt(final Location location) { } private boolean isValidRandomLocation(final Location location) { - return location.getBlockY() > ess.getWorldInfoProvider().getMinSafeHeight(location.getWorld()) && !this.getExcludedBiomes().contains(location.getBlock().getBiome()); + return location.getBlockY() > ess.getWorldInfoProvider().getMinHeight(location.getWorld()) && !this.getExcludedBiomes().contains(location.getBlock().getBiome()); } } diff --git a/Essentials/src/main/java/com/earth2me/essentials/commands/Commandtop.java b/Essentials/src/main/java/com/earth2me/essentials/commands/Commandtop.java index 60b7f53d952..f39b127896d 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/commands/Commandtop.java +++ b/Essentials/src/main/java/com/earth2me/essentials/commands/Commandtop.java @@ -22,7 +22,7 @@ public void run(final Server server, final User user, final String commandLabel, final int topZ = user.getLocation().getBlockZ(); final float pitch = user.getLocation().getPitch(); final float yaw = user.getLocation().getYaw(); - final Location unsafe = new Location(user.getWorld(), topX, ess.getWorldInfoProvider().getMaxSafeHeight(user.getWorld()), topZ, yaw, pitch); + final Location unsafe = new Location(user.getWorld(), topX, ess.getWorldInfoProvider().getMaxHeight(user.getWorld()), topZ, yaw, pitch); final Location safe = LocationUtil.getSafeDestination(ess, unsafe); final CompletableFuture<Boolean> future = new CompletableFuture<>(); future.thenAccept(success -> { diff --git a/Essentials/src/main/java/com/earth2me/essentials/utils/LocationUtil.java b/Essentials/src/main/java/com/earth2me/essentials/utils/LocationUtil.java index e9ea7244070..1a9b5c5f732 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/utils/LocationUtil.java +++ b/Essentials/src/main/java/com/earth2me/essentials/utils/LocationUtil.java @@ -97,7 +97,7 @@ public static Location getTarget(final LivingEntity entity) throws Exception { } public static boolean isBlockAboveAir(IEssentials ess, final World world, final int x, final int y, final int z) { - return y > ess.getWorldInfoProvider().getMaxSafeHeight(world) || HOLLOW_MATERIALS.contains(world.getBlockAt(x, y - 1, z).getType()); + return y > ess.getWorldInfoProvider().getMaxHeight(world) || HOLLOW_MATERIALS.contains(world.getBlockAt(x, y - 1, z).getType()); } public static boolean isBlockOutsideWorldBorder(final World world, final int x, final int z) { @@ -203,8 +203,9 @@ public static Location getSafeDestination(IEssentials ess, final Location loc) t throw new Exception(tl("destinationNotSet")); } final World world = loc.getWorld(); - final int worldMinY = ess.getWorldInfoProvider().getMinSafeHeight(world); - final int worldMaxY = ess.getWorldInfoProvider().getMaxSafeHeight(world); + final int worldMinY = ess.getWorldInfoProvider().getMinHeight(world); + final int worldLogicalY = ess.getWorldInfoProvider().getLogicalHeight(world); + final int worldMaxY = loc.getBlockY() < worldLogicalY ? worldLogicalY : ess.getWorldInfoProvider().getMaxHeight(world); int x = loc.getBlockX(); int y = (int) Math.round(loc.getY()); int z = loc.getBlockZ(); diff --git a/providers/BaseProviders/src/main/java/net/ess3/provider/WorldInfoProvider.java b/providers/BaseProviders/src/main/java/net/ess3/provider/WorldInfoProvider.java index b1f4034d45b..39b2b1bf111 100644 --- a/providers/BaseProviders/src/main/java/net/ess3/provider/WorldInfoProvider.java +++ b/providers/BaseProviders/src/main/java/net/ess3/provider/WorldInfoProvider.java @@ -4,18 +4,27 @@ public interface WorldInfoProvider extends Provider { /** - * Gets the maximum safe height for teleportation. + * Gets the maximum height of the world. * - * @param world The world of which to check the maximum safe height. - * @return The maximum safe height for teleportation + * @param world The world of which to check the maximum height. + * @return The maximum height of the world. */ - int getMaxSafeHeight(World world); + int getMaxHeight(World world); /** - * Gets the minimum safe height for teleportation. + * Gets the "logical" height of the world, which is the highest Y level at which vanilla spawns Nether portals and + * performs chorus fruit teleports. * - * @param world The world of which to check the base height. + * @param world The world of which to check the logical height. + * @return The logical height of the world. + */ + int getLogicalHeight(World world); + + /** + * Gets the minimum height of the world. + * + * @param world The world of which to check the minimum height. * @return The minimum safe height for teleportation */ - int getMinSafeHeight(World world); + int getMinHeight(World world); } diff --git a/providers/BaseProviders/src/main/java/net/ess3/provider/providers/FixedHeightWorldInfoProvider.java b/providers/BaseProviders/src/main/java/net/ess3/provider/providers/FixedHeightWorldInfoProvider.java index 80a34f85bfa..b4d4ffda6b6 100644 --- a/providers/BaseProviders/src/main/java/net/ess3/provider/providers/FixedHeightWorldInfoProvider.java +++ b/providers/BaseProviders/src/main/java/net/ess3/provider/providers/FixedHeightWorldInfoProvider.java @@ -6,16 +6,24 @@ public class FixedHeightWorldInfoProvider implements WorldInfoProvider { @Override public String getDescription() { - return "World info provider for fixed world heights"; + return "Fixed world info provider for pre-1.16"; } @Override - public int getMaxSafeHeight(World world) { + public int getMaxHeight(World world) { + // Method has existed since Beta 1.7 (yes, *beta*) + return world.getMaxHeight(); + } + + @Override + public int getLogicalHeight(World world) { + // This mirrors the vanilla behaviour up until Minecraft 1.16 return world.getEnvironment() == World.Environment.NETHER ? 128 : 256; } @Override - public int getMinSafeHeight(World world) { + public int getMinHeight(World world) { + // Worlds could not go below 0 until Minecraft 1.16 return 0; } } diff --git a/providers/BaseProviders/src/main/java/net/ess3/provider/providers/ModernDataWorldInfoProvider.java b/providers/BaseProviders/src/main/java/net/ess3/provider/providers/ModernDataWorldInfoProvider.java new file mode 100644 index 00000000000..55e10f253aa --- /dev/null +++ b/providers/BaseProviders/src/main/java/net/ess3/provider/providers/ModernDataWorldInfoProvider.java @@ -0,0 +1,26 @@ +package net.ess3.provider.providers; + +import net.ess3.provider.WorldInfoProvider; +import org.bukkit.World; + +public class ModernDataWorldInfoProvider implements WorldInfoProvider { + @Override + public String getDescription() { + return "API world info provider for data-driven worldgen for 1.17.1+"; + } + + @Override + public int getMaxHeight(World world) { + return world.getMaxHeight(); + } + + @Override + public int getLogicalHeight(World world) { + return world.getLogicalHeight(); + } + + @Override + public int getMinHeight(World world) { + return world.getMinHeight(); + } +} diff --git a/providers/BaseProviders/src/main/java/net/ess3/provider/providers/ModernWorldInfoProvider.java b/providers/BaseProviders/src/main/java/net/ess3/provider/providers/ModernWorldInfoProvider.java deleted file mode 100644 index 634eb83453c..00000000000 --- a/providers/BaseProviders/src/main/java/net/ess3/provider/providers/ModernWorldInfoProvider.java +++ /dev/null @@ -1,21 +0,0 @@ -package net.ess3.provider.providers; - -import net.ess3.provider.WorldInfoProvider; -import org.bukkit.World; - -public class ModernWorldInfoProvider implements WorldInfoProvider { - @Override - public String getDescription() { - return "World info provider for data-driven world generation"; - } - - @Override - public int getMaxSafeHeight(World world) { - return world.getLogicalHeight(); - } - - @Override - public int getMinSafeHeight(World world) { - return world.getMinHeight(); - } -} diff --git a/providers/NMSReflectionProvider/src/main/java/net/ess3/nms/refl/providers/ReflDataWorldInfoProvider.java b/providers/NMSReflectionProvider/src/main/java/net/ess3/nms/refl/providers/ReflDataWorldInfoProvider.java new file mode 100644 index 00000000000..f9ac85c8cc9 --- /dev/null +++ b/providers/NMSReflectionProvider/src/main/java/net/ess3/nms/refl/providers/ReflDataWorldInfoProvider.java @@ -0,0 +1,31 @@ +package net.ess3.nms.refl.providers; + +import net.ess3.provider.WorldInfoProvider; +import org.bukkit.World; + +public class ReflDataWorldInfoProvider implements WorldInfoProvider { + @Override + public String getDescription() { + return "NMS world info provider for data-driven worldgen for 1.16.x"; + } + + @Override + public int getMaxHeight(World world) { + // Method has existed since Beta 1.7 (yes, *beta*) + return world.getMaxHeight(); + } + + @Override + public int getLogicalHeight(World world) { + // TODO: THIS IS INCORRECT + // This mirrors the vanilla behaviour up until Minecraft 1.16 + return world.getEnvironment() == World.Environment.NETHER ? 128 : 256; + } + + @Override + public int getMinHeight(World world) { + // TODO: THIS IS INCORRECT + // Worlds could not go below 0 until Minecraft 1.16 + return 0; + } +} From c45c7412100f52be094df8f4cfaf0aa5b7e72330 Mon Sep 17 00:00:00 2001 From: MD <1917406+mdcfe@users.noreply.github.com> Date: Tue, 30 Nov 2021 16:07:15 +0000 Subject: [PATCH 115/120] Bump supported version to 1.18 release --- .../main/java/com/earth2me/essentials/utils/VersionUtil.java | 4 ++-- .../src/main/kotlin/essentials.base-conventions.gradle.kts | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Essentials/src/main/java/com/earth2me/essentials/utils/VersionUtil.java b/Essentials/src/main/java/com/earth2me/essentials/utils/VersionUtil.java index 53d5e5168fd..5983f5838e8 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/utils/VersionUtil.java +++ b/Essentials/src/main/java/com/earth2me/essentials/utils/VersionUtil.java @@ -34,9 +34,9 @@ public final class VersionUtil { public static final BukkitVersion v1_16_5_R01 = BukkitVersion.fromString("1.16.5-R0.1-SNAPSHOT"); public static final BukkitVersion v1_17_R01 = BukkitVersion.fromString("1.17-R0.1-SNAPSHOT"); public static final BukkitVersion v1_17_1_R01 = BukkitVersion.fromString("1.17.1-R0.1-SNAPSHOT"); - public static final BukkitVersion v1_18_rc3_R01 = BukkitVersion.fromString("1.18-rc3-R0.1-SNAPSHOT"); + public static final BukkitVersion v1_18_R01 = BukkitVersion.fromString("1.18-R0.1-SNAPSHOT"); - private static final Set<BukkitVersion> supportedVersions = ImmutableSet.of(v1_8_8_R01, v1_9_4_R01, v1_10_2_R01, v1_11_2_R01, v1_12_2_R01, v1_13_2_R01, v1_14_4_R01, v1_15_2_R01, v1_16_5_R01, v1_17_1_R01, v1_18_rc3_R01); + private static final Set<BukkitVersion> supportedVersions = ImmutableSet.of(v1_8_8_R01, v1_9_4_R01, v1_10_2_R01, v1_11_2_R01, v1_12_2_R01, v1_13_2_R01, v1_14_4_R01, v1_15_2_R01, v1_16_5_R01, v1_17_1_R01, v1_18_R01); private static final Map<String, SupportStatus> unsupportedServerClasses; diff --git a/build-logic/src/main/kotlin/essentials.base-conventions.gradle.kts b/build-logic/src/main/kotlin/essentials.base-conventions.gradle.kts index 48398a95a6f..2ab0139c38c 100644 --- a/build-logic/src/main/kotlin/essentials.base-conventions.gradle.kts +++ b/build-logic/src/main/kotlin/essentials.base-conventions.gradle.kts @@ -10,7 +10,7 @@ plugins { val baseExtension = extensions.create<EssentialsBaseExtension>("essentials", project) val checkstyleVersion = "8.36.2" -val spigotVersion = "1.18-rc3-R0.1-SNAPSHOT" +val spigotVersion = "1.18-R0.1-SNAPSHOT" val junit5Version = "5.7.0" val mockitoVersion = "3.2.0" From d091d6902cb28c3625e963284ab23ce1f0c87f3f Mon Sep 17 00:00:00 2001 From: Josh Roy <10731363+JRoy@users.noreply.github.com> Date: Fri, 3 Dec 2021 15:31:36 -0500 Subject: [PATCH 116/120] Fix safelogin support with 1.18 world heights (#4667) Fixes #4665. --- .../main/java/com/earth2me/essentials/utils/LocationUtil.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Essentials/src/main/java/com/earth2me/essentials/utils/LocationUtil.java b/Essentials/src/main/java/com/earth2me/essentials/utils/LocationUtil.java index 1a9b5c5f732..f25d6277e63 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/utils/LocationUtil.java +++ b/Essentials/src/main/java/com/earth2me/essentials/utils/LocationUtil.java @@ -267,7 +267,7 @@ public static boolean shouldFly(IEssentials ess, final Location loc) { int y = (int) Math.round(loc.getY()); final int z = loc.getBlockZ(); int count = 0; - while (LocationUtil.isBlockUnsafe(ess, world, x, y, z) && y > -1) { + while (LocationUtil.isBlockUnsafe(ess, world, x, y, z) && y >= ess.getWorldInfoProvider().getMinHeight(world)) { y--; count++; if (count > 2) { From 7794634d37898f0a5775f252e5dc08483e1ee014 Mon Sep 17 00:00:00 2001 From: Josh Roy <10731363+JRoy@users.noreply.github.com> Date: Sat, 4 Dec 2021 09:40:06 -0500 Subject: [PATCH 117/120] Add support for multiple queued TPA requests (#3801) This PR adds support for players to receive multiple teleport requests, which are queued and can be managed independently of one another. All commands should retain their current behavior but have some new additions; * `/tpaccept`: now allows you to specify a player or `*` to accept a specific player's or all players' teleport request(s) respectively. - Using a wildcard will only accept all tpahere requests, as players can't teleport to multiple places simultaneously. * `/tpdeny`: now allows you to specify a player or `*` to deny a specific player's or all players' teleport request(s) respectively. This PR also adds a new setting for the maximum amount of pending TPA requests a user can have at once. ```yml # The maximum amount of simultaneous tpa requests that can be pending for any given user. # Once at this threshold, any new tpa requests will bump the oldest tpa requests out of queue. # Defaults to 5. tpa-max-amount: 5 ``` Closes #3769 Closes #1550 Co-authored-by: Mariell Hoversholm <proximyst@proximy.st> Co-authored-by: MD <1917406+mdcfe@users.noreply.github.com> --- .../com/earth2me/essentials/ISettings.java | 2 + .../java/com/earth2me/essentials/IUser.java | 83 ++++++++++ .../com/earth2me/essentials/Settings.java | 5 + .../java/com/earth2me/essentials/User.java | 147 +++++++++++++----- .../essentials/commands/Commandtpa.java | 6 +- .../essentials/commands/Commandtpaall.java | 7 +- .../essentials/commands/Commandtpacancel.java | 17 +- .../essentials/commands/Commandtpaccept.java | 91 ++++++++--- .../essentials/commands/Commandtpahere.java | 5 +- .../essentials/commands/Commandtpdeny.java | 83 +++++++++- .../events/TeleportRequestResponseEvent.java | 90 +++++++++++ Essentials/src/main/resources/config.yml | 5 + .../src/main/resources/messages.properties | 19 ++- Essentials/src/main/resources/plugin.yml | 8 +- 14 files changed, 478 insertions(+), 90 deletions(-) create mode 100644 Essentials/src/main/java/net/essentialsx/api/v2/events/TeleportRequestResponseEvent.java diff --git a/Essentials/src/main/java/com/earth2me/essentials/ISettings.java b/Essentials/src/main/java/com/earth2me/essentials/ISettings.java index c4f40911454..405fe5dc0de 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/ISettings.java +++ b/Essentials/src/main/java/com/earth2me/essentials/ISettings.java @@ -238,6 +238,8 @@ public interface ISettings extends IConf { long getTpaAcceptCancellation(); + int getTpaMaxRequests(); + long getTeleportInvulnerability(); boolean isTeleportInvulnerability(); diff --git a/Essentials/src/main/java/com/earth2me/essentials/IUser.java b/Essentials/src/main/java/com/earth2me/essentials/IUser.java index c78e18407ab..797df13e439 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/IUser.java +++ b/Essentials/src/main/java/com/earth2me/essentials/IUser.java @@ -12,13 +12,16 @@ import org.bukkit.Material; import org.bukkit.block.Block; import org.bukkit.entity.Player; +import org.checkerframework.checker.nullness.qual.Nullable; import java.math.BigDecimal; + import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Map; import java.util.Set; +import java.util.UUID; import java.util.regex.Pattern; /** @@ -61,8 +64,11 @@ public interface IUser { /** * Returns whether this user has an outstanding teleport request to deal with. * + * @deprecated The teleport request system has been moved into a multi-user teleport request queue. + * @see IUser#hasPendingTpaRequests(boolean, boolean) * @return whether there is a teleport request */ + @Deprecated boolean hasOutstandingTeleportRequest(); /** @@ -98,6 +104,11 @@ public interface IUser { boolean canBuild(); + /** + * @deprecated The teleport request system has been moved into a multi-user teleport request queue. + * @see IUser#getNextTpaRequest(boolean, boolean, boolean) + */ + @Deprecated long getTeleportRequestTime(); void enableInvulnerabilityAfterTeleport(); @@ -205,6 +216,8 @@ public interface IUser { String getName(); + UUID getUUID(); + String getDisplayName(); String getFormattedNickname(); @@ -238,4 +251,74 @@ public interface IUser { void setToggleShout(boolean toggleShout); boolean isToggleShout(); + + /** + * Gets information about the most-recently-made, non-expired TPA request in the tpa queue of this {@link IUser}. + * <p> + * The TPA Queue is Last-In-First-Out queue which stores all the active pending teleport + * requests of this {@link IUser}. Timeout calculations are also done during the + * iteration process of this method, ensuring that teleport requests made past the timeout + * period are removed from queue and therefore not returned here. The maximum size of this + * queue is determined by {@link ISettings#getTpaMaxRequests()}. + * + * @param inform true if the underlying {@link IUser} should be informed if a request expires during iteration. + * @param performExpirations true if this method should not spend time validating time for all items in the queue and just return the first item in the queue. + * @param excludeHere true if /tphere requests should be ignored in fetching the next tpa request. + * @return A {@link TpaRequest} corresponding to the next available request or null if no valid request is present. + */ + @Nullable TpaRequest getNextTpaRequest(boolean inform, boolean performExpirations, boolean excludeHere); + + /** + * Whether or not this {@link IUser} has any valid TPA requests in queue. + * + * @param inform true if the user should be informed if a request expires during iteration. + * @param excludeHere true if /tpahere requests should be ignored in checking if a tpa request is available. + * @return true if the user has an available pending request in queue. + */ + boolean hasPendingTpaRequests(boolean inform, boolean excludeHere); + + class TpaRequest { + private final String name; + private final UUID requesterUuid; + private boolean here; + private Location location; + private long time; + + public TpaRequest(String name, UUID requesterUuid) { + this.name = name; + this.requesterUuid = requesterUuid; + } + + public String getName() { + return name; + } + + public UUID getRequesterUuid() { + return requesterUuid; + } + + public boolean isHere() { + return here; + } + + public void setHere(boolean here) { + this.here = here; + } + + public Location getLocation() { + return location; + } + + public void setLocation(Location location) { + this.location = location; + } + + public long getTime() { + return time; + } + + public void setTime(long time) { + this.time = time; + } + } } diff --git a/Essentials/src/main/java/com/earth2me/essentials/Settings.java b/Essentials/src/main/java/com/earth2me/essentials/Settings.java index 20ad33b6222..47eecc98568 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/Settings.java +++ b/Essentials/src/main/java/com/earth2me/essentials/Settings.java @@ -1264,6 +1264,11 @@ public long getTpaAcceptCancellation() { return config.getLong("tpa-accept-cancellation", 120); } + @Override + public int getTpaMaxRequests() { + return config.getInt("tpa-max-requests", 5); + } + private long _getTeleportInvulnerability() { return config.getLong("teleport-invulnerability", 0) * 1000; } diff --git a/Essentials/src/main/java/com/earth2me/essentials/User.java b/Essentials/src/main/java/com/earth2me/essentials/User.java index 4d161c5c0a9..039747ad133 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/User.java +++ b/Essentials/src/main/java/com/earth2me/essentials/User.java @@ -31,16 +31,21 @@ import org.bukkit.metadata.FixedMetadataValue; import org.bukkit.potion.PotionEffect; import org.bukkit.potion.PotionEffectType; +import org.checkerframework.checker.nullness.qual.Nullable; import java.math.BigDecimal; import java.util.Calendar; +import java.util.Collection; import java.util.GregorianCalendar; +import java.util.Iterator; +import java.util.LinkedHashMap; import java.util.List; import java.util.Locale; import java.util.Map; import java.util.UUID; import java.util.WeakHashMap; import java.util.concurrent.CompletableFuture; +import java.util.concurrent.TimeUnit; import java.util.logging.Level; import java.util.logging.Logger; @@ -49,28 +54,37 @@ public class User extends UserData implements Comparable<User>, IMessageRecipient, net.ess3.api.IUser { private static final Statistic PLAY_ONE_TICK = EnumUtil.getStatistic("PLAY_ONE_MINUTE", "PLAY_ONE_TICK"); private static final Logger logger = Logger.getLogger("Essentials"); + + // User modules private final IMessageRecipient messageRecipient; private transient final AsyncTeleport teleport; private transient final Teleport legacyTeleport; + + // User command confirmation strings private final Map<User, BigDecimal> confirmingPayments = new WeakHashMap<>(); - private transient UUID teleportRequester; - private transient boolean teleportRequestHere; - private transient Location teleportLocation; + + // User teleport variables + private final transient LinkedHashMap<String, TpaRequest> teleportRequestQueue = new LinkedHashMap<>(); + + // User properties private transient boolean vanished; - private transient long teleportRequestTime; - private transient long lastOnlineActivity; - private transient long lastThrottledAction; - private transient long lastActivity = System.currentTimeMillis(); private boolean hidden = false; private boolean rightClickJump = false; - private transient Location afkPosition = null; private boolean invSee = false; private boolean recipeSee = false; private boolean enderSee = false; - private transient long teleportInvulnerabilityTimestamp = 0; private boolean ignoreMsg = false; + + // User afk variables private String afkMessage; private long afkSince; + private transient Location afkPosition = null; + + // Misc + private transient long lastOnlineActivity; + private transient long lastThrottledAction; + private transient long lastActivity = System.currentTimeMillis(); + private transient long teleportInvulnerabilityTimestamp = 0; private String confirmingClearCommand; private long lastNotifiedAboutMailsMs; private String lastHomeConfirmation; @@ -91,9 +105,8 @@ public User(final Player base, final IEssentials ess) { this.messageRecipient = new SimpleMessageRecipient(ess, this); } - User update(final Player base) { + void update(final Player base) { setBase(base); - return this; } @Override @@ -328,44 +341,95 @@ public void setLogoutLocation() { @Override public void requestTeleport(final User player, final boolean here) { - teleportRequestTime = System.currentTimeMillis(); - teleportRequester = player == null ? null : player.getBase().getUniqueId(); - teleportRequestHere = here; - if (player == null) { - teleportLocation = null; - } else { - teleportLocation = here ? player.getLocation() : this.getLocation(); + final TpaRequest request = teleportRequestQueue.getOrDefault(player.getName(), new TpaRequest(player.getName(), player.getUUID())); + request.setTime(System.currentTimeMillis()); + request.setHere(here); + request.setLocation(here ? player.getLocation() : this.getLocation()); + + // Handle max queue size + teleportRequestQueue.remove(request.getName()); + if (teleportRequestQueue.size() >= ess.getSettings().getTpaMaxRequests()) { + String lastKey = null; + for (Map.Entry<String, TpaRequest> entry : teleportRequestQueue.entrySet()) { + lastKey = entry.getKey(); + } + teleportRequestQueue.remove(lastKey); } + + // Add request to queue + teleportRequestQueue.put(request.getName(), request); } @Override + @Deprecated public boolean hasOutstandingTeleportRequest() { - if (getTeleportRequest() != null) { // Player has outstanding teleport request. - final long timeout = ess.getSettings().getTpaAcceptCancellation(); - if (timeout != 0) { - if ((System.currentTimeMillis() - getTeleportRequestTime()) / 1000 <= timeout) { // Player has outstanding request - return true; - } else { // outstanding request expired. - requestTeleport(null, false); - return false; - } - } else { // outstanding request does not expire - return true; - } - } - return false; + return getNextTpaRequest(false, false, false) != null; + } + + public Collection<String> getPendingTpaKeys() { + return teleportRequestQueue.keySet(); } - public UUID getTeleportRequest() { - return teleportRequester; + @Override + public boolean hasPendingTpaRequests(boolean inform, boolean excludeHere) { + return getNextTpaRequest(inform, false, excludeHere) != null; + } + + public boolean hasOutstandingTpaRequest(String playerUsername, boolean here) { + final TpaRequest request = getOutstandingTpaRequest(playerUsername, false); + return request != null && request.isHere() == here; + } + + public @Nullable TpaRequest getOutstandingTpaRequest(String playerUsername, boolean inform) { + if (!teleportRequestQueue.containsKey(playerUsername)) { + return null; + } + + final long timeout = ess.getSettings().getTpaAcceptCancellation(); + final TpaRequest request = teleportRequestQueue.get(playerUsername); + if (timeout < 1 || System.currentTimeMillis() - request.getTime() <= timeout * 1000) { + return request; + } + teleportRequestQueue.remove(playerUsername); + if (inform) { + sendMessage(tl("requestTimedOutFrom", ess.getUser(request.getRequesterUuid()).getDisplayName())); + } + return null; } - public boolean isTpRequestHere() { - return teleportRequestHere; + public TpaRequest removeTpaRequest(String playerUsername) { + return teleportRequestQueue.remove(playerUsername); } - public Location getTpRequestLocation() { - return teleportLocation; + @Override + public TpaRequest getNextTpaRequest(boolean inform, boolean performExpirations, boolean excludeHere) { + if (teleportRequestQueue.isEmpty()) { + return null; + } + + final long timeout = ess.getSettings().getTpaAcceptCancellation(); + final Iterator<Map.Entry<String, TpaRequest>> iterator = teleportRequestQueue.entrySet().iterator(); + TpaRequest nextRequest = null; + while (iterator.hasNext()) { + final TpaRequest request = iterator.next().getValue(); + if (timeout < 1 || (System.currentTimeMillis() - request.getTime()) <= TimeUnit.SECONDS.toMillis(timeout)) { + if (excludeHere && request.isHere()) { + continue; + } + + if (performExpirations) { + return request; + } else if (nextRequest == null) { + nextRequest = request; + } + } else { + if (inform) { + sendMessage(tl("requestTimedOutFrom", ess.getUser(request.getRequesterUuid()).getDisplayName())); + } + iterator.remove(); + } + } + return nextRequest; } public String getNick() { @@ -824,8 +888,11 @@ public boolean canBuild() { return ess.getPermissionsHandler().canBuild(base, getGroup()); } + @Override + @Deprecated public long getTeleportRequestTime() { - return teleportRequestTime; + final TpaRequest request = getNextTpaRequest(false, false, false); + return request == null ? 0L : request.getTime(); } public boolean isInvSee() { @@ -993,7 +1060,7 @@ public String getName() { @Override public UUID getUUID() { - return getBase().getUniqueId(); + return this.getBase().getUniqueId(); } @Override diff --git a/Essentials/src/main/java/com/earth2me/essentials/commands/Commandtpa.java b/Essentials/src/main/java/com/earth2me/essentials/commands/Commandtpa.java index 6233349e628..877e0b1f6a6 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/commands/Commandtpa.java +++ b/Essentials/src/main/java/com/earth2me/essentials/commands/Commandtpa.java @@ -37,11 +37,12 @@ public void run(final Server server, final User user, final String commandLabel, if (user.getWorld() != player.getWorld() && ess.getSettings().isWorldTeleportPermissions() && !user.isAuthorized("essentials.worlds." + player.getWorld().getName())) { throw new Exception(tl("noPerm", "essentials.worlds." + player.getWorld().getName())); } + // Don't let sender request teleport twice to the same player. - if (user.getConfigUUID().equals(player.getTeleportRequest()) && player.hasOutstandingTeleportRequest() // Check timeout - && !player.isTpRequestHere()) { // Make sure the last teleport request was actually tpa and not tpahere + if (player.hasOutstandingTpaRequest(user.getName(), false)) { throw new Exception(tl("requestSentAlready", player.getDisplayName())); } + if (player.isAutoTeleportEnabled() && !player.isIgnoredPlayer(user)) { final Trade charge = new Trade(this.getName(), ess); final AsyncTeleport teleport = user.getAsyncTeleport(); @@ -71,6 +72,7 @@ public void run(final Server server, final User user, final String commandLabel, player.sendMessage(tl("teleportRequestTimeoutInfo", ess.getSettings().getTpaAcceptCancellation())); } } + user.sendMessage(tl("requestSent", player.getDisplayName())); if (user.isAuthorized("essentials.tpacancel")) { user.sendMessage(tl("typeTpacancel")); diff --git a/Essentials/src/main/java/com/earth2me/essentials/commands/Commandtpaall.java b/Essentials/src/main/java/com/earth2me/essentials/commands/Commandtpaall.java index ca3b72896f9..5b0ec1b8a88 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/commands/Commandtpaall.java +++ b/Essentials/src/main/java/com/earth2me/essentials/commands/Commandtpaall.java @@ -19,17 +19,17 @@ public Commandtpaall() { public void run(final Server server, final CommandSource sender, final String commandLabel, final String[] args) throws Exception { if (args.length < 1) { if (sender.isPlayer()) { - teleportAAllPlayers(server, sender, ess.getUser(sender.getPlayer())); + tpaAll(sender, ess.getUser(sender.getPlayer())); return; } throw new NotEnoughArgumentsException(); } final User target = getPlayer(server, sender, args, 0); - teleportAAllPlayers(server, sender, target); + tpaAll(sender, target); } - private void teleportAAllPlayers(final Server server, final CommandSource sender, final User target) { + private void tpaAll(final CommandSource sender, final User target) { sender.sendMessage(tl("teleportAAll")); for (final User player : ess.getOnlineUsers()) { if (target == player) { @@ -41,6 +41,7 @@ private void teleportAAllPlayers(final Server server, final CommandSource sender if (sender.getSender().equals(target.getBase()) && target.getWorld() != player.getWorld() && ess.getSettings().isWorldTeleportPermissions() && !target.isAuthorized("essentials.worlds." + target.getWorld().getName())) { continue; } + try { final TPARequestEvent tpaEvent = new TPARequestEvent(sender, player, true); ess.getServer().getPluginManager().callEvent(tpaEvent); diff --git a/Essentials/src/main/java/com/earth2me/essentials/commands/Commandtpacancel.java b/Essentials/src/main/java/com/earth2me/essentials/commands/Commandtpacancel.java index 2531b27999f..c73e3b7b6db 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/commands/Commandtpacancel.java +++ b/Essentials/src/main/java/com/earth2me/essentials/commands/Commandtpacancel.java @@ -1,7 +1,6 @@ package com.earth2me.essentials.commands; import com.earth2me.essentials.User; -import net.ess3.api.IEssentials; import org.bukkit.Server; import static com.earth2me.essentials.I18n.tl; @@ -15,20 +14,12 @@ public Commandtpacancel() { /** * Cancel {@link User}'s tp request if its {@code requester} is equal to the given {@code requester}. * - * @param ess ess instance * @param user user holding tp request * @param requester tp requester * @return whether tp was cancelled */ - public static boolean cancelTeleportRequest(final IEssentials ess, final User user, final User requester) throws Exception { - if (user.getTeleportRequest() != null) { - final User userRequester = ess.getUser(user.getTeleportRequest()); - if (requester.equals(userRequester)) { - user.requestTeleport(null, false); - return true; - } - } - return false; + public static boolean cancelTeleportRequest(final User user, final User requester) { + return user.removeTpaRequest(requester.getName()) != null; } @Override @@ -37,7 +28,7 @@ public void run(final Server server, final User user, final String commandLabel, int cancellations = 0; for (final User onlineUser : ess.getOnlineUsers()) { if (onlineUser == user) continue; - if (cancelTeleportRequest(ess, onlineUser, user)) { + if (cancelTeleportRequest(onlineUser, user)) { cancellations++; } } @@ -48,7 +39,7 @@ public void run(final Server server, final User user, final String commandLabel, } } else { final User targetPlayer = getPlayer(server, user, args, 0); - if (cancelTeleportRequest(ess, targetPlayer, user)) { + if (cancelTeleportRequest(targetPlayer, user)) { user.sendMessage(tl("teleportRequestSpecificCancelled", targetPlayer.getName())); } } diff --git a/Essentials/src/main/java/com/earth2me/essentials/commands/Commandtpaccept.java b/Essentials/src/main/java/com/earth2me/essentials/commands/Commandtpaccept.java index 77c5ecfc5cf..cabdeb8cae9 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/commands/Commandtpaccept.java +++ b/Essentials/src/main/java/com/earth2me/essentials/commands/Commandtpaccept.java @@ -1,12 +1,18 @@ package com.earth2me.essentials.commands; import com.earth2me.essentials.AsyncTeleport; +import com.earth2me.essentials.IUser; import com.earth2me.essentials.Trade; import com.earth2me.essentials.User; +import net.essentialsx.api.v2.events.TeleportRequestResponseEvent; +import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.Server; import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; import java.util.concurrent.CompletableFuture; import static com.earth2me.essentials.I18n.tl; @@ -18,36 +24,87 @@ public Commandtpaccept() { @Override public void run(final Server server, final User user, final String commandLabel, final String[] args) throws Exception { - final User requester; - try { - requester = ess.getUser(user.getTeleportRequest()); - } catch (final Exception ex) { + final boolean acceptAll; + if (args.length > 0) { + acceptAll = args[0].equals("*") || args[0].equalsIgnoreCase("all"); + } else { + acceptAll = false; + } + + if (!user.hasPendingTpaRequests(true, acceptAll)) { throw new Exception(tl("noPendingRequest")); } - if (!requester.getBase().isOnline()) { + if (args.length > 0) { + if (acceptAll) { + acceptAllRequests(user, commandLabel); + throw new NoChargeException(); + } + user.sendMessage(tl("requestAccepted")); + handleTeleport(user, user.getOutstandingTpaRequest(getPlayer(server, user, args, 0).getName(), true), commandLabel); + } else { + user.sendMessage(tl("requestAccepted")); + handleTeleport(user, user.getNextTpaRequest(true, false, false), commandLabel); + } + throw new NoChargeException(); + } + + private void acceptAllRequests(final User user, final String commandLabel) throws Exception { + IUser.TpaRequest request; + int count = 0; + while ((request = user.getNextTpaRequest(true, true, true)) != null) { + try { + handleTeleport(user, request, commandLabel); + count++; + } catch (Exception e) { + ess.showError(user.getSource(), e, commandLabel); + } finally { + user.removeTpaRequest(request.getName()); + } + } + user.sendMessage(tl("requestAcceptedAll", count)); + } + + @Override + protected List<String> getTabCompleteOptions(Server server, User user, String commandLabel, String[] args) { + if (args.length == 1) { + final List<String> options = new ArrayList<>(user.getPendingTpaKeys()); + options.add("*"); + return options; + } else { + return Collections.emptyList(); + } + } + + private void handleTeleport(final User user, final IUser.TpaRequest request, String commandLabel) throws Exception { + if (request == null) { throw new Exception(tl("noPendingRequest")); } + final User requester = ess.getUser(request.getRequesterUuid()); - if (user.isTpRequestHere() && ((!requester.isAuthorized("essentials.tpahere") && !requester.isAuthorized("essentials.tpaall")) || (user.getWorld() != requester.getWorld() && ess.getSettings().isWorldTeleportPermissions() && !user.isAuthorized("essentials.worlds." + user.getWorld().getName())))) { + if (!requester.getBase().isOnline()) { + user.removeTpaRequest(request.getName()); throw new Exception(tl("noPendingRequest")); } - if (!user.isTpRequestHere() && (!requester.isAuthorized("essentials.tpa") || (user.getWorld() != requester.getWorld() && ess.getSettings().isWorldTeleportPermissions() && !user.isAuthorized("essentials.worlds." + requester.getWorld().getName())))) { + if (request.isHere() && ((!requester.isAuthorized("essentials.tpahere") && !requester.isAuthorized("essentials.tpaall")) || (user.getWorld() != requester.getWorld() && ess.getSettings().isWorldTeleportPermissions() && !user.isAuthorized("essentials.worlds." + user.getWorld().getName())))) { throw new Exception(tl("noPendingRequest")); } - if (args.length > 0 && !requester.getName().contains(args[0])) { + if (!request.isHere() && (!requester.isAuthorized("essentials.tpa") || (user.getWorld() != requester.getWorld() && ess.getSettings().isWorldTeleportPermissions() && !user.isAuthorized("essentials.worlds." + requester.getWorld().getName())))) { throw new Exception(tl("noPendingRequest")); } - if (!user.hasOutstandingTeleportRequest()) { - user.requestTeleport(null, false); - throw new Exception(tl("requestTimedOut")); + final TeleportRequestResponseEvent event = new TeleportRequestResponseEvent(user, requester, request, true); + Bukkit.getPluginManager().callEvent(event); + if (event.isCancelled()) { + if (ess.getSettings().isDebug()) { + logger.info("TPA accept cancelled by API for " + user.getName() + " (requested by " + requester.getName() + ")"); + } + return; } final Trade charge = new Trade(this.getName(), ess); - user.sendMessage(tl("requestAccepted")); requester.sendMessage(tl("requestAcceptedFrom", user.getDisplayName())); final CompletableFuture<Boolean> future = getNewExceptionFuture(requester.getSource(), commandLabel); @@ -55,8 +112,8 @@ public void run(final Server server, final User user, final String commandLabel, user.sendMessage(tl("pendingTeleportCancelled")); return false; }); - if (user.isTpRequestHere()) { - final Location loc = user.getTpRequestLocation(); + if (request.isHere()) { + final Location loc = request.getLocation(); final AsyncTeleport teleport = requester.getAsyncTeleport(); teleport.setTpType(AsyncTeleport.TeleportType.TPA); future.thenAccept(success -> { @@ -64,14 +121,12 @@ public void run(final Server server, final User user, final String commandLabel, requester.sendMessage(tl("teleporting", loc.getWorld().getName(), loc.getBlockX(), loc.getBlockY(), loc.getBlockZ())); } }); - teleport.teleportPlayer(user, user.getTpRequestLocation(), charge, TeleportCause.COMMAND, future); + teleport.teleportPlayer(user, loc, charge, TeleportCause.COMMAND, future); } else { final AsyncTeleport teleport = requester.getAsyncTeleport(); teleport.setTpType(AsyncTeleport.TeleportType.TPA); teleport.teleport(user.getBase(), charge, TeleportCause.COMMAND, future); } - user.requestTeleport(null, false); - throw new NoChargeException(); + user.removeTpaRequest(request.getName()); } - } diff --git a/Essentials/src/main/java/com/earth2me/essentials/commands/Commandtpahere.java b/Essentials/src/main/java/com/earth2me/essentials/commands/Commandtpahere.java index 5a1a3e474f6..7d1c95cce83 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/commands/Commandtpahere.java +++ b/Essentials/src/main/java/com/earth2me/essentials/commands/Commandtpahere.java @@ -33,11 +33,12 @@ public void run(final Server server, final User user, final String commandLabel, if (user.getWorld() != player.getWorld() && ess.getSettings().isWorldTeleportPermissions() && !user.isAuthorized("essentials.worlds." + user.getWorld().getName())) { throw new Exception(tl("noPerm", "essentials.worlds." + user.getWorld().getName())); } + // Don't let sender request teleport twice to the same player. - if (user.getConfigUUID().equals(player.getTeleportRequest()) && player.hasOutstandingTeleportRequest() // Check timeout - && player.isTpRequestHere()) { // Make sure the last teleport request was actually tpahere and not tpa + if (player.hasOutstandingTpaRequest(user.getName(), true)) { throw new Exception(tl("requestSentAlready", player.getDisplayName())); } + if (!player.isIgnoredPlayer(user)) { final TPARequestEvent tpaEvent = new TPARequestEvent(user.getSource(), player, true); ess.getServer().getPluginManager().callEvent(tpaEvent); diff --git a/Essentials/src/main/java/com/earth2me/essentials/commands/Commandtpdeny.java b/Essentials/src/main/java/com/earth2me/essentials/commands/Commandtpdeny.java index d9c23a791d7..b5c10de5109 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/commands/Commandtpdeny.java +++ b/Essentials/src/main/java/com/earth2me/essentials/commands/Commandtpdeny.java @@ -1,8 +1,15 @@ package com.earth2me.essentials.commands; +import com.earth2me.essentials.IUser; import com.earth2me.essentials.User; +import net.essentialsx.api.v2.events.TeleportRequestResponseEvent; +import org.bukkit.Bukkit; import org.bukkit.Server; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + import static com.earth2me.essentials.I18n.tl; public class Commandtpdeny extends EssentialsCommand { @@ -12,16 +19,84 @@ public Commandtpdeny() { @Override public void run(final Server server, final User user, final String commandLabel, final String[] args) throws Exception { - if (user.getTeleportRequest() == null) { + final boolean denyAll; + if (args.length > 0) { + denyAll = args[0].equals("*") || args[0].equalsIgnoreCase("all"); + } else { + denyAll = false; + } + + if (!user.hasPendingTpaRequests(false, false)) { + throw new Exception(tl("noPendingRequest")); + } + + final IUser.TpaRequest denyRequest; + if (args.length > 0) { + if (denyAll) { + denyAllRequests(user); + return; + } + denyRequest = user.getOutstandingTpaRequest(getPlayer(server, user, args, 0).getName(), false); + } else { + denyRequest = user.getNextTpaRequest(false, true, false); + } + + if (denyRequest == null) { throw new Exception(tl("noPendingRequest")); } - final User player = ess.getUser(user.getTeleportRequest()); - if (player == null) { + + final User player = ess.getUser(denyRequest.getRequesterUuid()); + if (player == null || !player.getBase().isOnline()) { throw new Exception(tl("noPendingRequest")); } + if (sendEvent(user, player, denyRequest)) { + return; + } + user.sendMessage(tl("requestDenied")); player.sendMessage(tl("requestDeniedFrom", user.getDisplayName())); - user.requestTeleport(null, false); + user.removeTpaRequest(denyRequest.getName()); + } + + private void denyAllRequests(User user) { + IUser.TpaRequest request; + int count = 0; + while ((request = user.getNextTpaRequest(false, true, false)) != null) { + final User player = ess.getUser(request.getRequesterUuid()); + + if (sendEvent(user, player, request)) { + continue; + } + + if (player != null && player.getBase().isOnline()) { + player.sendMessage(tl("requestDeniedFrom", user.getDisplayName())); + } + + user.removeTpaRequest(request.getName()); + count++; + } + user.sendMessage(tl("requestDeniedAll", count)); + } + + private boolean sendEvent(User user, User player, IUser.TpaRequest request) { + final TeleportRequestResponseEvent event = new TeleportRequestResponseEvent(user, player, request, false); + Bukkit.getPluginManager().callEvent(event); + final boolean cancelled = event.isCancelled(); + if (cancelled && ess.getSettings().isDebug()) { + logger.info("TPA deny cancelled by API for " + user.getName() + " (requested by " + player.getName() + ")"); + } + return event.isCancelled(); + } + + @Override + protected List<String> getTabCompleteOptions(Server server, User user, String commandLabel, String[] args) { + if (args.length == 1) { + final List<String> options = new ArrayList<>(user.getPendingTpaKeys()); + options.add("*"); + return options; + } else { + return Collections.emptyList(); + } } } diff --git a/Essentials/src/main/java/net/essentialsx/api/v2/events/TeleportRequestResponseEvent.java b/Essentials/src/main/java/net/essentialsx/api/v2/events/TeleportRequestResponseEvent.java new file mode 100644 index 00000000000..66bd2cd81bc --- /dev/null +++ b/Essentials/src/main/java/net/essentialsx/api/v2/events/TeleportRequestResponseEvent.java @@ -0,0 +1,90 @@ +package net.essentialsx.api.v2.events; + +import com.earth2me.essentials.IUser; +import org.bukkit.event.Cancellable; +import org.bukkit.event.Event; +import org.bukkit.event.HandlerList; + +/** + * Called when a player accepts or denies a teleport. + */ +public class TeleportRequestResponseEvent extends Event implements Cancellable { + private static final HandlerList handlers = new HandlerList(); + + private final net.ess3.api.IUser requestee; + private final net.ess3.api.IUser requester; + private final IUser.TpaRequest tpaRequest; + private final boolean accept; + private boolean canceled = false; + + public TeleportRequestResponseEvent(net.ess3.api.IUser requestee, net.ess3.api.IUser requester, IUser.TpaRequest tpaRequest, boolean accept) { + this.requestee = requestee; + this.requester = requester; + this.tpaRequest = tpaRequest; + this.accept = accept; + } + + /** + * Gets the user who is accepting/denying this teleport request. + * @return the user accepting/denying the request. + */ + public net.ess3.api.IUser getRequestee() { + return requestee; + } + + /** + * Gets the user who submitted this teleport request. + * @return the user who sent the request. + */ + public net.ess3.api.IUser getRequester() { + return requester; + } + + /** + * Gets information about this teleport request. + * @return the {@link com.earth2me.essentials.IUser.TpaRequest} object of this event. + */ + public IUser.TpaRequest getTpaRequest() { + return tpaRequest; + } + + /** + * Whether or not the request has been accepted. + * @return true if accepted, false if denied. + */ + public boolean isAccept() { + return accept; + } + + /** + * Whether or not the request has been denied. + * @return true if denied, false if accepted. + */ + public boolean isDeny() { + return !isAccept(); + } + + @Override + public boolean isCancelled() { + return canceled; + } + + /** + * Sets whether or not to cancel this teleport request. + * Note that cancelling this event will not show a message to users about the cancellation. + * @param cancel whether or not to cancel this teleport request. + */ + @Override + public void setCancelled(boolean cancel) { + this.canceled = cancel; + } + + @Override + public HandlerList getHandlers() { + return handlers; + } + + public static HandlerList getHandlerList() { + return handlers; + } +} diff --git a/Essentials/src/main/resources/config.yml b/Essentials/src/main/resources/config.yml index 58c925e2064..bd96fcaf48e 100644 --- a/Essentials/src/main/resources/config.yml +++ b/Essentials/src/main/resources/config.yml @@ -698,6 +698,11 @@ jail-online-time: false # Set to 0 for no timeout. tpa-accept-cancellation: 120 +# The maximum number of simultaneous tpa requests that can be pending for any player. +# Once past this threshold, old requests will instantly time out. +# Defaults to 5. +tpa-max-requests: 5 + # Allow players to set hats by clicking on their helmet slot. allow-direct-hat: true diff --git a/Essentials/src/main/resources/messages.properties b/Essentials/src/main/resources/messages.properties index 33275ba5912..526dc22db3c 100644 --- a/Essentials/src/main/resources/messages.properties +++ b/Essentials/src/main/resources/messages.properties @@ -1023,14 +1023,17 @@ replyLastRecipientDisabledFor=\u00a76Replying to last message recipient \u00a7cd replyLastRecipientEnabled=\u00a76Replying to last message recipient \u00a7cenabled\u00a76. replyLastRecipientEnabledFor=\u00a76Replying to last message recipient \u00a7cenabled \u00a76for \u00a7c{0}\u00a76. requestAccepted=\u00a76Teleport request accepted. +requestAcceptedAll=\u00a76Accepted \u00a7c{0} \u00a76pending teleport request(s). requestAcceptedAuto=\u00a76Automatically accepted a teleport request from {0}. requestAcceptedFrom=\u00a7c{0} \u00a76accepted your teleport request. requestAcceptedFromAuto=\u00a7c{0} \u00a76accepted your teleport request automatically. requestDenied=\u00a76Teleport request denied. +requestDeniedAll=\u00a76Denied \u00a7c{0} \u00a76pending teleport request(s). requestDeniedFrom=\u00a7c{0} \u00a76denied your teleport request. requestSent=\u00a76Request sent to\u00a7c {0}\u00a76. requestSentAlready=\u00a74You have already sent {0}\u00a74 a teleport request. requestTimedOut=\u00a74Teleport request has timed out. +requestTimedOutFrom=\u00a74Teleport request from \u00a7c{0} \u00a74has timed out. resetBal=\u00a76Balance has been reset to \u00a7c{0} \u00a76for all online players. resetBalAll=\u00a76Balance has been reset to \u00a7c{0} \u00a76for all players. rest=\u00a76You feel well rested. @@ -1290,10 +1293,14 @@ tpacancelCommandUsage1=/<command> tpacancelCommandUsage1Description=Cancels all your outstanding teleport requests tpacancelCommandUsage2=/<command> <player> tpacancelCommandUsage2Description=Cancels all your outstanding teleport request with the specified player -tpacceptCommandDescription=Accepts a teleport request. +tpacceptCommandDescription=Accepts teleport requests. tpacceptCommandUsage=/<command> [otherplayer] tpacceptCommandUsage1=/<command> -tpacceptCommandUsage1Description=Accepts an incoming teleport request +tpacceptCommandUsage1Description=Accepts the most recent teleport request +tpacceptCommandUsage2=/<command> <player> +tpacceptCommandUsage2Description=Accepts a teleport request from the specified player +tpacceptCommandUsage3=/<command> * +tpacceptCommandUsage3Description=Accepts all teleport requests tpahereCommandDescription=Request that the specified player teleport to you. tpahereCommandUsage=/<command> <player> tpahereCommandUsage1=/<command> <player> @@ -1306,10 +1313,14 @@ tpautoCommandDescription=Automatically accept teleportation requests. tpautoCommandUsage=/<command> [player] tpautoCommandUsage1=/<command> [player] tpautoCommandUsage1Description=Toggles if tpa requests are auto accepted for yourself or another player if specified -tpdenyCommandDescription=Reject a teleport request. +tpdenyCommandDescription=Rejects teleport requests. tpdenyCommandUsage=/<command> tpdenyCommandUsage1=/<command> -tpdenyCommandUsage1Description=Rejects an incoming teleport request +tpdenyCommandUsage1Description=Rejects the most recent teleport request +tpdenyCommandUsage2=/<command> <player> +tpdenyCommandUsage2Description=Rejects a teleport request from the specified player +tpdenyCommandUsage3=/<command> * +tpdenyCommandUsage3Description=Rejects all teleport requests tphereCommandDescription=Teleport a player to you. tphereCommandUsage=/<command> <player> tphereCommandUsage1=/<command> <player> diff --git a/Essentials/src/main/resources/plugin.yml b/Essentials/src/main/resources/plugin.yml index 45f2607fc77..8e60aa7b83f 100644 --- a/Essentials/src/main/resources/plugin.yml +++ b/Essentials/src/main/resources/plugin.yml @@ -509,8 +509,8 @@ commands: usage: /<command> <player> aliases: [etpaall] tpaccept: - description: Accepts a teleport request. - usage: /<command> [otherplayer] + description: Accepts teleport requests. + usage: /<command> [player|*] aliases: [etpaccept,tpyes,etpyes] tpahere: description: Request that the specified player teleport to you. @@ -529,8 +529,8 @@ commands: usage: /<command> [player] aliases: [etpacancel] tpdeny: - description: Reject a teleport request. - usage: /<command> + description: Rejects teleport requests. + usage: /<command> [player|*] aliases: [etpdeny,tpno,etpno] tphere: description: Teleport a player to you. From 9b629e42d8ea20e605c16cea16b555e2adaa0926 Mon Sep 17 00:00:00 2001 From: Josh Roy <10731363+JRoy@users.noreply.github.com> Date: Sat, 4 Dec 2021 09:47:40 -0500 Subject: [PATCH 118/120] Bump JDA + discord-webhooks dependencies (#4655) --- EssentialsDiscord/build.gradle | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/EssentialsDiscord/build.gradle b/EssentialsDiscord/build.gradle index ec03a93e60d..43495dfb8cf 100644 --- a/EssentialsDiscord/build.gradle +++ b/EssentialsDiscord/build.gradle @@ -4,12 +4,11 @@ plugins { dependencies { compileOnly project(':EssentialsX') - implementation('net.dv8tion:JDA:4.3.0_293') { - //noinspection GroovyAssignabilityCheck - exclude module: 'opus-java' + implementation('net.dv8tion:JDA:4.4.0_350') { + exclude(module: 'opus-java') } implementation 'com.vdurmont:emoji-java:5.1.1' - implementation 'club.minnced:discord-webhooks:0.5.6' + implementation 'club.minnced:discord-webhooks:0.7.2' compileOnly 'org.apache.logging.log4j:log4j-core:2.0-beta9' compileOnly 'me.clip:placeholderapi:2.10.9' } From 41861a8551588c76634f58cbcf714e4375200818 Mon Sep 17 00:00:00 2001 From: Flask Bot <67512990+Flask-Bot@users.noreply.github.com> Date: Sat, 4 Dec 2021 14:53:26 +0000 Subject: [PATCH 119/120] New Crowdin updates (#4467) --- .../src/main/resources/messages_bg.properties | 135 +++- .../src/main/resources/messages_cs.properties | 296 ++++++-- .../src/main/resources/messages_de.properties | 26 +- .../src/main/resources/messages_el.properties | 4 + .../src/main/resources/messages_en.properties | 14 +- .../main/resources/messages_en_GB.properties | 21 +- .../src/main/resources/messages_es.properties | 103 ++- .../src/main/resources/messages_et.properties | 14 +- .../src/main/resources/messages_fi.properties | 9 +- .../main/resources/messages_fil_PH.properties | 7 + .../src/main/resources/messages_fr.properties | 64 +- .../src/main/resources/messages_he.properties | 16 +- .../src/main/resources/messages_hr.properties | 3 + .../src/main/resources/messages_hu.properties | 58 +- .../src/main/resources/messages_it.properties | 45 +- .../src/main/resources/messages_ja.properties | 36 +- .../src/main/resources/messages_ko.properties | 126 +++- .../src/main/resources/messages_lt.properties | 4 + .../main/resources/messages_lv_LV.properties | 9 +- .../src/main/resources/messages_nl.properties | 109 ++- .../src/main/resources/messages_no.properties | 32 +- .../src/main/resources/messages_pl.properties | 44 +- .../src/main/resources/messages_pt.properties | 21 +- .../main/resources/messages_pt_BR.properties | 198 ++++-- .../src/main/resources/messages_ro.properties | 4 + .../src/main/resources/messages_ru.properties | 163 +++-- .../main/resources/messages_si_LK.properties | 4 + .../src/main/resources/messages_sk.properties | 46 +- .../main/resources/messages_sr_CS.properties | 231 +++++++ .../src/main/resources/messages_sv.properties | 632 ++++++++++++++++-- .../src/main/resources/messages_th.properties | 142 ++++ .../src/main/resources/messages_tr.properties | 9 +- .../src/main/resources/messages_uk.properties | 77 ++- .../src/main/resources/messages_vi.properties | 9 + .../src/main/resources/messages_zh.properties | 45 +- .../main/resources/messages_zh_TW.properties | 55 +- 36 files changed, 2474 insertions(+), 337 deletions(-) diff --git a/Essentials/src/main/resources/messages_bg.properties b/Essentials/src/main/resources/messages_bg.properties index 663ddfe24dc..6c5a713c8c2 100644 --- a/Essentials/src/main/resources/messages_bg.properties +++ b/Essentials/src/main/resources/messages_bg.properties @@ -6,9 +6,12 @@ action=§5* {0} §5{1} addedToAccount=§a{0} бяха добавени към вашият акаунт. addedToOthersAccount=§a{0} бяха добавени към акаунта на {1}. Нов баланс\: {2} adventure=приключенски -afkCommandDescription=Маркира ви като далеч-от-клавиятурата. +afkCommandDescription=Маркира ви като далеч-от-клавиатурата. afkCommandUsage=/<command> [player/message...] afkCommandUsage1=/<command> [message] +afkCommandUsage1Description=Активира вашия афк статус с опционална причина +afkCommandUsage2=/<command> <player> [message] +afkCommandUsage2Description=Активира афк статуса на специфичен играч с опционална причина alertBroke=счупени\: alertFormat=§3[{0}] §r {1} §6 {2} at\: {3} alertPlaced=поставени\: @@ -22,6 +25,7 @@ antiBuildPlace=§4Нямате право да поставяте§c {0} §4ту antiBuildUse=§4Нямате право да използвате§c {0}§4. antiochCommandDescription=Малка изненада за операторите. antiochCommandUsage=/<command> [message] +anvilCommandDescription=Отваря наковалня. anvilCommandUsage=/<command> autoAfkKickReason=Вие бяхте изгонени поради повече от {0} минути бездействие. autoTeleportDisabled=§6Вече не приемате заявки за телепортиране автоматично. @@ -32,7 +36,9 @@ backAfterDeath=§6Използвайте командата /back, за да с backCommandDescription=Телепортира ви до вашата локация преди tp/spawn/warp. backCommandUsage=/<command> [player] backCommandUsage1=/<command> +backCommandUsage1Description=Телепортира Ви до предишната локация backCommandUsage2=/<command> <player> +backCommandUsage2Description=Телепортира специфичен играч до тяхната предишна локация backOther=§6Върнахте§c {0}§6 до предишното им местоположение. backupCommandDescription=Прави резервно копие, ако е конфигурирано. backupCommandUsage=/<command> @@ -45,22 +51,33 @@ balance=§aБаланс\:§c {0} balanceCommandDescription=Показва текущия баланс на играч. balanceCommandUsage=/<command> [player] balanceCommandUsage1=/<command> +balanceCommandUsage1Description=Показва вашия текущ баланс balanceCommandUsage2=/<command> <player> +balanceCommandUsage2Description=Показва баланса на специфичен играч balanceOther=§aБалансът на {0}§a\:§c {1} balanceTop=§6Топ богаташи ({0}) +balanceTopLine={0}. {1}, {2} +balancetopCommandDescription=Показва топ играчите по баланс. +balancetopCommandUsage=/<command> [page] +balancetopCommandUsage1=/<command> [page] +balancetopCommandUsage1Description=Показва първата (или специфична) страница на играчите с най-висок баланс banCommandDescription=Ограничава играч. banCommandUsage=/<command> <player> [reason] banCommandUsage1=/<command> <player> [reason] +banCommandUsage1Description=Ограничава специфичен играч с опционална причина banExempt=§4Не можете да ограничите този играч. banExemptOffline=§4Не можете да ограничавате офлайн играчи. banFormat=§cВие бяхте ограничени\:\n§r{0} banIpJoin=Вашият IP адрес е ограничен от този сървър. Причина\: {0} banJoin=Вие сте ограничени от този сървър. Причина\: {0} banipCommandDescription=Ограничава IP адрес. +banipCommandUsage=/<command> <address> [reason] +banipCommandUsage1=/<command> <address> [reason] +banipCommandUsage1Description=Ограничава специфичен ИП адрес с опционална причина bed=§oлегло§r bedMissing=§4Вашето легло е незададено, липсващо или блокирано. bedNull=§mлегло§r -bedOffline=§4Не може да се телепортирате до леглата на офлйан играчи. +bedOffline=§4Не може да се телепортирате до леглата на офлайн играчи. bedSet=§6Локация на легло е зададена\! beezookaCommandDescription=Хвърля експлодираща пчела към твоя опонент. beezookaCommandUsage=/<command> @@ -69,12 +86,18 @@ bigTreeSuccess=§6Създадено е голямо дърво. bigtreeCommandDescription=Създава голямо дърво към мястото, което гледате. bigtreeCommandUsage=/<command> <tree|redwood|jungle|darkoak> bigtreeCommandUsage1=/<command> <tree|redwood|jungle|darkoak> +bigtreeCommandUsage1Description=Създава голямо дърво със специфичен тип blockList=§6EssentialsX предаде следните команди на други плъгини\: blockListEmpty=§6EssentialsX не предава никакви команди на други плъгини. bookAuthorSet=§6Авторът на книгата е зададен на {0}. bookCommandDescription=Позволява отварянето и редактирането на запечатани книги. bookCommandUsage=/<command> [title|author [name]] bookCommandUsage1=/<command> +bookCommandUsage1Description=Заключва/Отключва книга с перо/подписана книга +bookCommandUsage2=/<command> author <author> +bookCommandUsage2Description=Задава автора на подписана книга +bookCommandUsage3=/<command> title <title> +bookCommandUsage3Description=Задава заглавието на подписана книга bookLocked=§6Книгата е заключена. bookTitleSet=§6Заглавието на книгата е зададено на {0}. breakCommandDescription=Чупи блока към, който гледате. @@ -83,12 +106,15 @@ broadcast=§r§6[§4Съобщение§6]§a {0} broadcastCommandDescription=Изпраща съобщения до всички в сървъра. broadcastCommandUsage=/<command> <msg> broadcastCommandUsage1=/<command> <message> +broadcastCommandUsage1Description=Изпраща съобщение до всички в сървър broadcastworldCommandDescription=Изпраща съобщение до всички в определен свят. broadcastworldCommandUsage=/<command> <world> <msg> broadcastworldCommandUsage1=/<command> <world> <msg> +broadcastworldCommandUsage1Description=Изпраща съобщение до всички в специфичния свят burnCommandDescription=Запалва играч. burnCommandUsage=/<command> <player> <seconds> burnCommandUsage1=/<command> <player> <seconds> +burnCommandUsage1Description=Запалва специфициран играч за определено време секунди burnMsg=§6Подпалихте§c {0} §6за§c {1} секунди§6. cannotSellNamedItem=§6Не може да продавате надписани предмети. cannotSellTheseNamedItems=§6Не може да продавате тези надписани предмети\: §4{0} @@ -98,6 +124,7 @@ cantFindGeoIpDB=Няма намерена GeoIP база данни\! cantGamemode=§4Нямате право да променяте режима си на {0} cantReadGeoIpDB=Грешка при прочитането на GeoIP базата данни\! cantSpawnItem=§4Нямате право да създадете предмета§c {0}§4. +cartographytableCommandDescription=Отваря картографска маса. cartographytableCommandUsage=/<command> chatTypeLocal=[L] chatTypeSpy=[Шпионин] @@ -108,25 +135,41 @@ clearInventoryConfirmToggleOn=§6Вече ще да бъдете помолен clearinventoryCommandDescription=Изчиства всички предмети от инвентара ви. clearinventoryCommandUsage=/<command> [player|*] [item[\:<data>]|*|**] [amount] clearinventoryCommandUsage1=/<command> +clearinventoryCommandUsage1Description=Изчиства всички предмети от вашия инвентар clearinventoryCommandUsage2=/<command> <player> +clearinventoryCommandUsage2Description=Изчиства всички предмети от инвентара на специфичен играч +clearinventoryCommandUsage3=/<command> <player> <item> [amount] +clearinventoryCommandUsage3Description=Изчиства всички (или специфичен брой) от даден предмет от инвентара на специфичен играч clearinventoryconfirmtoggleCommandDescription=Включва дали да бъдете питани преди изтриването на ивентар. clearinventoryconfirmtoggleCommandUsage=/<command> +commandArgumentOptional=§7 +commandArgumentOr=§c +commandArgumentRequired=§e commandCooldown=§cНе можете да пишете тази команда за {0}. commandDisabled=§cКомандата§6 {0}§c е изключена. commandFailed=Командата {0} беше неуспешна\: commandHelpFailedForPlugin=Грешка при получаването на помощ за плъгина\: {0} +commandHelpLine1=§6Командна Помощ\: §f/{0} +commandHelpLine2=§6Описание\: §f{0} +commandHelpLine3=§6Употреба(и); +commandHelpLine4=§6Алиас(и)\: §f{0} +commandHelpLineUsage={0} §6- {1} commandNotLoaded=§4Командата {0} е грешно заредена. compassBearing=§6Посока\: {0} ({1} градуса). compassCommandDescription=Описва текущото ви държание. compassCommandUsage=/<command> condenseCommandDescription=Кондензира предметите в по-компактни блокове. +condenseCommandUsage=/<command> [item] condenseCommandUsage1=/<command> +condenseCommandUsage1Description=Кондензира всички предмети от вашия инвентар +condenseCommandUsage2Description=Кондензира специфицирания предмет от вашия инвентар configFileMoveError=Грешка при прехвърлянето на config.yml в архива. configFileRenameError=Грешка при преименуването на временния файл към config.yml. confirmClear=§7За да §lпотвърдите§7 изчистването на инвентара, повторете командата\: §6{0} confirmPayment=§7За да §lПОТВЪРДИТЕ§7 заплащането на §6{0}§7, моля повторете командата\: §6{1} connectedPlayers=§6Свързани играчи§r connectionFailed=Неуспешно отваряне на връзка. +consoleName=Конзола cooldownWithMessage=§4Изчакване\: {0} coordsKeyword={0}, {1}, {2} couldNotFindTemplate=§4Не може да се намери шаблон {0} @@ -134,9 +177,11 @@ createdKit=§6Създадохте kit §c{0} §6с §c{1} §6употреби createkitCommandDescription=Създава кит от играта\! createkitCommandUsage=/<command> <kitname> <delay> createkitCommandUsage1=/<command> <kitname> <delay> +createkitCommandUsage1Description=Създава кит с дадено име и интервал createKitFailed=§4Грешка при създаването на kit {0}. createKitSeparator=§m----------------------- createKitSuccess=§6Създаден кит\: §f{0}\n§6Интервал\: §f{1}\n§6Връзка\: §f{2}\n§6Копирайте съдържанието от връзката отгоре във вашият kits.yml. +createKitUnsupported=§4Предметна NBT сериализация е включена, но този сървър не използва Paper 1.15.2+. Връщане към стандартна предметна сериализация. creatingConfigFromTemplate=Създаване на конфигурация от шаблон\: {0} creatingEmptyConfig=Създаване на празна конфигурация\: {0} creative=творчески @@ -147,22 +192,33 @@ customtextCommandUsage=/<alias> - Определете в bukkit.yml day=ден days=дни defaultBanReason=Вие бяхте ограничени от този сървър\! +deletedHomes=Всички домове са изтрити. +deletedHomesWorld=Всички домове в {0} са изтрити. deleteFileError=Не може да бъде изтрит файлът\: {0} deleteHome=§6Домът§c {0} §6беше премахнат. deleteJail=§6Затворът§c {0} §6беше премахнат. deleteKit=§6Комплектът§c {0} §6беше премахнат. deleteWarp=§6Точката за телепортиране§c {0} §6беше премахната. +deletingHomes=Изтриване на всички домове... +deletingHomesWorld=Изтриване на всички домове в {0}... delhomeCommandDescription=Премахва дом. delhomeCommandUsage=/<command> [player\:]<name> +delhomeCommandUsage1=/<command> <name> +delhomeCommandUsage1Description=Изтрива ваш дом с определено име +delhomeCommandUsage2=/<command> <player>\:<name> +delhomeCommandUsage2Description=Изтрива дом с определено име на специфичен играч deljailCommandDescription=Премахва затвор. deljailCommandUsage=/<command> <jailname> deljailCommandUsage1=/<command> <jailname> +deljailCommandUsage1Description=Изтрива затвор с дадено име delkitCommandDescription=Изтрива посочен кит. delkitCommandUsage=/<command> <kit> delkitCommandUsage1=/<command> <kit> +delkitCommandUsage1Description=Изтрива кит с дадено име delwarpCommandDescription=Изтрива посочен warp. delwarpCommandUsage=/<command> <warp> delwarpCommandUsage1=/<command> <warp> +delwarpCommandUsage1Description=Изтрива уарп с дадено име deniedAccessCommand=§c{0} §4беше отказан достъп до командата. denyBookEdit=§4Не можете да отключите тази книга. denyChangeAuthor=§4Не можете да промените авторът на тази книга. @@ -176,6 +232,24 @@ destinationNotSet=Дестинацията не е зададена\! disabled=изключен disabledToSpawnMob=§4Размножаването на това същество е изключено в конфигурационния файл. disableUnlimited=§6Изключихте безбройното слагане на §c {0} §6за {1}. +discordbroadcastCommandDescription=Изпраща съобщение до посочен канал в Дискорд. +discordbroadcastCommandUsage=/<command> <channel> <msg> +discordbroadcastCommandUsage1=/<command> <channel> <msg> +discordbroadcastCommandUsage1Description=Изпраща дадено съобщение до посочен канал в Дискорд +discordbroadcastInvalidChannel=§4Дискорд канала §c{0}§4 не съществува. +discordbroadcastPermission=§4Нямаш право да изпраща съобщения до канала §c{0}§4. +discordbroadcastSent=§6Съобщението е изпратно до §c{0}§6\! +discordCommandUsage=/<command> +discordCommandUsage1=/<command> +discordCommandExecuteDescription=Изпълнява конзолна команда в Minecraft сървъра. +discordCommandExecuteArgumentCommand=Командата, която трябва да бъде изпълнена +discordCommandExecuteReply=Изпълнява се команда\: "/{0}" +discordCommandListDescription=Показва списък с онлайн потребителите. +discordCommandListArgumentGroup=Конкретна група, чрез която да се намали лимита на търсенето +discordCommandMessageDescription=Изпраща съобщение до играч в Minecraft сървъра. +discordCommandMessageArgumentUsername=Играча, до който да се изпрати съобщението +discordErrorCommandDisabled=Тази команда е изключена\! +discordLoggingInDone=Успешно сте влезли като {0} disposal=Кошче disposalCommandDescription=Отваря преносимо меню за изхвърляне. disposalCommandUsage=/<command> @@ -205,14 +279,28 @@ errorCallingCommand=Грешка при изпълняването на кома errorWithMessage=§cГрешка\:§4 {0} essentialsCommandDescription=Презарежда essentials. essentialsCommandUsage=/<command> +essentialsCommandUsage7=/<command> homes +essentialsCommandUsage7Description=Управлява домовете на потребители +essentialsCommandUsage8=/<command> dump [all] [config] [discord] [kits] [log] +essentialsCommandUsage8Description=Генерира сървърен дъмп с поисканата информация essentialsHelp1=Файлът е повреден и Essentials не може да го отвори. Essentials се изключва. Ако не можете да поправите сами, отидете на http\://tiny.cc/EssentialsChat essentialsHelp2=Файлът е повреден и Essentials не може да го отвори. Essentials се изключва. Ако не можете да поправите сами или напишете /essentialshelp в играта, или отидете на http\://tiny.cc/EssentialsChat essentialsReload=§6Essentials е презареден§c {0}. exp=§c{0} §6има§c {1} §6опит (ниво§c {2}§6) и им трябва§c {3} §6опит за да вдигнат ниво. +expCommandDescription=Дай, сложи, ресетни, или виж опита на определен играч. +expCommandUsage=/<command> [reset|show|set|give] [playername [amount]] +expCommandUsage1Description=Дава на определен играч специфичен брой опит +expCommandUsage2=/<command> set <playername> <amount> +expCommandUsage2Description=Задава опита на определен играч до специфичен брой +expCommandUsage3=/<command> show <playername> +expCommandUsage4Description=Показва броя опит на определен играч +expCommandUsage5=/<command> reset <playername> +expCommandUsage5Description=Ресетва опита на определен играч на 0 expSet=§c{0} §6сега има§c {1} §6опит. extCommandDescription=Изгасява играчи. extCommandUsage=/<command> [player] extCommandUsage1=/<command> [player] +extCommandUsage1Description=Угасете се (от огън) или друг специфичен играч extinguish=§6Вие се изгасихте. extinguishOthers=§6Изгасихте {0}§6. failedToCloseConfig=Грешка при затварянето на конфигурация {0}. @@ -223,14 +311,23 @@ feed=§6Вашият апетит беше заситен. feedCommandDescription=Засища глада. feedCommandUsage=/<command> [player] feedCommandUsage1=/<command> [player] +feedCommandUsage1Description=Напълно засища апетита ви или този на друг специфичен играч feedOther=§6Заситихте апетита на §c{0}§6. fileRenameError=Грешка при реименуването на файла {0}\! fireballCommandDescription=Хвърля огнено кълбо или друг снаряд. fireballCommandUsage=/<command> [fireball|small|large|arrow|skull|egg|snowball|expbottle|dragon|splashpotion|lingeringpotion|trident] [speed] fireballCommandUsage1=/<command> +fireballCommandUsage1Description=Хвърля нормално огнено кълбо от вашата локация +fireballCommandUsage2=/<command> <fireball|small|large|arrow|skull|egg|snowball|expbottle|dragon|splashpotion|lingeringpotion|trident> [speed] +fireballCommandUsage2Description=Хвърля специфичен снаряд от вашата локация, с опционална скорост fireworkColor=§4Бяха въведени невалидни параметри на заряд, първо трябва да се въведе цвят. fireworkCommandDescription=Позволява ви да модифицирате стак от фойерверки. fireworkCommandUsage=/<command> <<meta param>|power [amount]|clear|fire [amount]> +fireworkCommandUsage1=/<command> clear +fireworkCommandUsage1Description=Изчиства всички ефекти от фойерверката, която държите +fireworkCommandUsage2=/<command> power <amount> +fireworkCommandUsage2Description=Задава силата на фойерверката, която държите +fireworkCommandUsage3=/<command> fire [amount] fireworkEffectsCleared=§6Бяха премахнати всички ефекти от това което държите. fireworkSyntax=§6Параметри за фойерверк\:§c color\:<color> [fade\:<цвят>] [shape\:<форма>] [effect\:<ефект>]\n§6За да използвате няколко цвята/ефекта, разделете стойностите със запетая\: §cred,blue,pink\n§6Форми\:§c star, ball, large, creeper, burst §6Ефекти\:§c trail, twinkle. flyCommandUsage=/<command> [player] [on|off] @@ -257,6 +354,7 @@ getposCommandUsage=/<command> [player] getposCommandUsage1=/<command> [player] giveCommandDescription=Дава предмет на играч. giveCommandUsage=/<command> <player> <item|numeric> [amount [itemmeta...]] +giveCommandUsage1=/<command> <player> <item> [amount] geoipCantFind=§6Играчът §c{0} §6идва от §aнеизвестна държава§6. geoIpUrlEmpty=Линкът за изтегляне на GeoIP е празен. geoIpUrlInvalid=Линкът за изтегляне на GeoIP е невалиден. @@ -302,16 +400,20 @@ holdBook=§4Не държите книга в която може да се пи holdFirework=§4Трябва да държите фойерверк, за да му добавите ефект. holdPotion=§4Трябва да държите отвара, за да и приложите ефект. holeInFloor=§4Има дупка в пода\! -homeCommandDescription=Телепортира ви до вашият дом. +homeCommandDescription=Телепортира ви до вашия дом. homeCommandUsage=/<command> [player\:][name] +homeCommandUsage1=/<command> <name> +homeCommandUsage2=/<command> <player>\:<name> homes=§6Домове\:§r {0} -homeConfirmation=§6Вече имате дом на име §c{0}§6\!\nЗа да пренапишете вашият съществуващ дом, моля напишете командата отново. +homeConfirmation=§6Вече имате дом на име §c{0}§6\!\nЗа да пренапишете вашия съществуващ дом, моля напишете командата отново. homeSet=§6Вече имате дом на тази локация. hour=час hours=часа iceCommandUsage=/<command> [player] iceCommandUsage1=/<command> +iceCommandUsage1Description=Изтудява ви iceCommandUsage2=/<command> <player> +iceCommandUsage3Description=Изтудява всички онлайн играчи ignoreCommandDescription=Игнорирайте или не игнорирайте други играчи. ignoreCommandUsage=/<command> <player> ignoreCommandUsage1=/<command> <player> @@ -357,6 +459,7 @@ itemId=§6Номер\:§c {0} itemloreClear=§6Изчистихте значението на този предмет. itemloreCommandDescription=Редактирайте значението на предмет. itemloreCommandUsage=/<command> <add/set/clear> [text/line] [text] +itemloreCommandUsage3=/<command> clear itemloreInvalidItem=§4Трябва да държите предмет, за да редактирате неговото значение. itemloreNoLine=§4Предмета, който държите няма текст със значение на линия §c{0}§4. itemloreNoLore=§4Предмета, който държите няма никакви тестове със значение. @@ -364,6 +467,7 @@ itemMustBeStacked=§4Предметите трябва да бъдат търг itemNames=§6Кратки имена на предметите\:§r {0} itemnameClear=§6Изчистихте името на предмета, който държите. itemnameCommandUsage1=/<command> +itemnameCommandUsage2=/<command> <name> itemnameInvalidItem=§cТрябва да държите предмет, за да го преименувате. itemnameSuccess=§6Преименувахте предмета, който държите на "§c{0}§6". itemNotEnough1=§4Нямате достатъчно от този предмет, за да продавате. @@ -420,6 +524,7 @@ lightningUse=§6Ударихте§c {0}§6 с мълния. listAfkTag=§7[Неактивен]§r listAmount=§6Има §c{0}§6 от максимум §c{1}§6 играчи онлайн. listAmountHidden=§6Има §c{0}§6/§c{1}§6 от максимум §c{2}§6 онлайн играча. +listCommandDescription=Показва всички онлайн играчи. listGroupTag=§6{0}§r\: listHiddenTag=§7[СКРИТ]§r loadWarpError=§4Грешка при зареждането на уарп {0}. @@ -439,6 +544,9 @@ maxHomes=§4Не можете да имате повече от§c {0} §4дом maxMoney=§4Тази транзакция ще надвиши лимитът на сметката за този акаунт. mayNotJail=§4Не можете да затворите този играч\! mayNotJailOffline=§4Не може да затворите играчи извън линия. +meCommandUsage1Description=Описва действие +meSender=мен +meRecipient=мен minimumPayAmount=§cМинималната сума която може да платите е {0}. minute=минута minutes=минути @@ -477,7 +585,9 @@ muteNotify=§c{0} §6заглуши §c{1}§6. muteNotifyFor=§c{0} §6заглуши §c{1}§6 за§c {2}§6. muteNotifyForReason=§c{0} §6заглуши играча §c{1}§6 за§c {2}§6. §6Причина\: §c{3} muteNotifyReason=§c{0} §6заглуши играча§c{1}§6. §6Причина\: §c{2} +nearCommandDescription=Показва играчите наблизко или около играчът. nearCommandUsage1=/<command> +nearCommandUsage2Description=Показва всички играчи с даденият радиус от вас nearCommandUsage3=/<command> <player> nearbyPlayers=§6Играчи наблизо\:§r {0} negativeBalanceError=§4Играчът няма право да има негативен баланс. @@ -567,9 +677,13 @@ playerTempBanned=§6Играчът §c{0}§6 беше временно банн playerUnbanIpAddress=§6Играчът§c {0} §6премахна ограничението на IP адрес\: {1} playerUnbanned=§6Играчът§c {0} §6премахна ограничението на§c {1} playerUnmuted=§6Вие бяхте отглушени. +playtimeCommandUsage=/<command> [player] +playtimeCommandUsage1=/<command> +playtimeCommandUsage2=/<command> <player> pong=Понг\! posPitch=§6Височина\: {0} (Посока на главата) possibleWorlds=§6Възможни светове са номерата §c0§6 през §c{0}§6. +potionCommandUsage1=/<command> clear posX=§6X\: {0} (+Изток <-> -Запад) posY=§6Y\: {0} (+Нагоре <-> -Надолу) posYaw=§6Yaw\: {0} (Въртене) @@ -623,6 +737,7 @@ removed=§6Премахнати§c {0} §6същества. repair=§6Вие успешно поправихте вашите\: §c{0}§6. repairAlreadyFixed=§4Не е нужна поправка за този предмет. repairCommandUsage1=/<command> +repairCommandUsage1Description=Поправя държаният предмет repairEnchanted=§4Не можете да поправяте енчантати предмети. repairInvalidType=§4Този предмет не може да бъде поправен. repairNone=§4Няма предмети които се нуждаят от поправка. @@ -660,6 +775,8 @@ serverUnsupported=Имате неподдържана версия на сърв setBal=§aВашият баланс беше зададен на {0}. setBalOthers=§aЗададохте баланса на {0}§a на {1}. setSpawner=§6Променихте вида на размножителя на§c {0}§6. +sethomeCommandUsage1=/<command> <name> +sethomeCommandUsage2=/<command> <player>\:<name> setjailCommandUsage=/<command> <jailname> setjailCommandUsage1=/<command> <jailname> setwarpCommandUsage=/<command> <warp> @@ -676,6 +793,7 @@ south=Ю southWest=ЮЗ skullChanged=§6Черепът е променен на §c{0}§6. skullCommandUsage1=/<command> +skullCommandUsage1Description=Вземи собствената си глава skullCommandUsage2=/<command> <player> slimeMalformedSize=§4Неправилна големина. smithingtableCommandUsage=/<command> @@ -751,6 +869,7 @@ tpacancelCommandUsage=/<command> [player] tpacancelCommandUsage1=/<command> tpacancelCommandUsage2=/<command> <player> tpacceptCommandUsage1=/<command> +tpacceptCommandUsage2=/<command> <player> tpahereCommandUsage=/<command> <player> tpahereCommandUsage1=/<command> <player> tpallCommandUsage=/<command> [player] @@ -759,6 +878,7 @@ tpautoCommandUsage=/<command> [player] tpautoCommandUsage1=/<command> [player] tpdenyCommandUsage=/<command> tpdenyCommandUsage1=/<command> +tpdenyCommandUsage2=/<command> <player> tphereCommandUsage=/<command> <player> tphereCommandUsage1=/<command> <player> tpoCommandUsage1=/<command> <player> @@ -814,6 +934,7 @@ userJailed=§6Вие бяхте затворени\! userUnknown=§4Внимание\: Играчът ''§c{0}§4'' никога не е влизал в сървъра. usingTempFolderForTesting=Използване на временна папка за тестване\: vanish=§6Невидимост за {0}§6\: {1} +vanishCommandDescription=Скрий себе си от другите играчи. vanishCommandUsage=/<command> [player] [on|off] vanishCommandUsage1=/<command> [player] vanished=§6Сега сте напълно невидим за нормалните играчи и скрит от командите в сървъра. @@ -824,10 +945,14 @@ versionOutputUnsupported=§d{0} §6версия\: §d{1} versionOutputUnsupportedPlugins=§6Имате §dнеподдържани плъгини§6\! versionMismatch=§4Несъвпадение на версията\! Моля обновете {0} на същата версия. versionMismatchAll=§4Несъвпадение на версията\! Моля обновете всички Essentials.jar файлове {0} на същата версия. +versionReleaseNewLink=§4Свали го от тук\:§c {0} voiceSilenced=§6Вие бяхте заглушени\! +voiceSilencedTime=§6Вие бяхте заглушени за {0}\! voiceSilencedReason=§6Вие бяхте заглушени\! §6Причина\: §c{0} +voiceSilencedReasonTime=§6Вие бяхте заглушени за {0}\! Причина\: §c{1} walking=вървене warpCommandUsage=/<command> <pagenumber|warp> [player] +warpCommandUsage1=/<command> [page] warpDeleteError=§4Проблем при изтриването на файла на уарпа. warpinfoCommandUsage=/<command> <warp> warpinfoCommandUsage1=/<command> <warp> @@ -853,6 +978,7 @@ whoisAFKSince=§6 - Неактивен/на\:§r {0} (От {1}) whoisBanned=§6 - Ограничен/а\:§r {0} whoisCommandDescription=Определя потребителското име зад псевдоним. whoisCommandUsage1=/<command> <player> +whoisCommandUsage1Description=Дава основна информация за указаният потребител whoisExp=§6 - Опит\:§r {0} (Ниво {1}) whoisFly=§6 - Летателен режим\:§r {0} ({1}) whoisSpeed=Скорост @@ -878,6 +1004,7 @@ workbenchCommandUsage=/<command> worldCommandDescription=Превключвате между светове. worldCommandUsage=/<command> [world] worldCommandUsage1=/<command> +worldCommandUsage2Description=Телепортира на твойта локация в даден свят worth=§aСтак от {0} струва §c{1}§a ({2} предмет(а) по {3} всеки) worthMeta=§aСтак от {0} с метаданни на {1} струва §c{2}§a ({3} предмет(а) по {4} всеки) worthSet=§6Цената е зададена diff --git a/Essentials/src/main/resources/messages_cs.properties b/Essentials/src/main/resources/messages_cs.properties index 1a70fb58bc0..47d1e4335ed 100644 --- a/Essentials/src/main/resources/messages_cs.properties +++ b/Essentials/src/main/resources/messages_cs.properties @@ -143,6 +143,7 @@ clearinventoryCommandUsage3Description=Vymaže všechny zadané předměty (nebo clearinventoryconfirmtoggleCommandDescription=Přepíná, zda je třeba potvrzovat vyprázdnění inventáře. clearinventoryconfirmtoggleCommandUsage=/<command> commandArgumentOptional=§7 +commandArgumentOr=§c commandArgumentRequired=§e commandCooldown=§cTento příkaz můžete použít až za {0}. commandDisabled=§cPříkaz§6 {0}§cje vypnut. @@ -160,7 +161,7 @@ compassCommandUsage=/<command> condenseCommandDescription=Zhustí předměty do kompaktnějších bloků. condenseCommandUsage=/<command> [předmět] condenseCommandUsage1=/<command> -condenseCommandUsage1Description=Vymaže všechny předměty ve tvém inventáři +condenseCommandUsage1Description=Nahňácá všechny předměty ve tvém inventáři condenseCommandUsage2=/<command> <předmět> condenseCommandUsage2Description=Zhustí zadaný předmět ve tvém inventáři configFileMoveError=Nepodařilo se přesunout config.yml do zálohy. @@ -205,7 +206,7 @@ delhomeCommandDescription=Odstraní domov. delhomeCommandUsage=/<command> [hráč\:]<název> delhomeCommandUsage1=/<command> <název> delhomeCommandUsage1Description=Odstraní domov se zadaným jménem -delhomeCommandUsage2=/<command> <player>\:<name> +delhomeCommandUsage2=/<command> <hráč>\:<název> delhomeCommandUsage2Description=Odstraní uvedený domov zadaného hráče deljailCommandDescription=Odstraní vězení. deljailCommandUsage=/<command> <název_vězení> @@ -214,11 +215,11 @@ deljailCommandUsage1Description=Odstraní vězení se zadaným jménem delkitCommandDescription=Odstraní zadanou sadu. delkitCommandUsage=/<command> <sada> delkitCommandUsage1=/<command> <sada> -delkitCommandUsage1Description=Smaže kit s daným názvem +delkitCommandUsage1Description=Smaže sadu se zadaným názvem delwarpCommandDescription=Odstraní zadaný warp. delwarpCommandUsage=/<command> <warp> delwarpCommandUsage1=/<command> <warp> -delwarpCommandUsage1Description=Smaže warp s daným názvem +delwarpCommandUsage1Description=Smaže warp se zadaným názvem deniedAccessCommand=§4Hráči§c {0} §4byl odepřen přístup k příkazu. denyBookEdit=§4Tuto knihu nemůžeš odemknout. denyChangeAuthor=§4Autora této knihy nemůžeš změnit. @@ -232,6 +233,18 @@ destinationNotSet=Cíl není nastaven\! disabled=vypnuto disabledToSpawnMob=§4Vyvolání tohoto stvoření je zakázáno v konfiguračním souboru. disableUnlimited=§6Neomezené pokládání§c {0} §6bylo vypnuto pro hráče §c{1}§6. +discordbroadcastCommandDescription=Vyšle oznámení na zadaný kanál Discordu. +discordbroadcastCommandUsage=/<command> <kanál> <zpráva> +discordbroadcastCommandUsage1=/<command> <kanál> <zpráva> +discordbroadcastCommandUsage1Description=Odešle zprávu na zadaný kanál na Discordu +discordbroadcastInvalidChannel=§4Kanál na Discordu§c{0}§4 neexistuje. +discordbroadcastPermission=§4Nemáš oprávnění posílat zprávy na kanál §c{0}§4. +discordbroadcastSent=§6Zpráva odeslána na kanál §c{0}§6\! +discordCommandDescription=Zašle hráči pozvánku na Discord. +discordCommandLink=§6Připoj se k našemu Discord serveru na §c{0}§6\! +discordCommandUsage=/<command> +discordCommandUsage1=/<command> +discordCommandUsage1Description=Zašle hráči odkaz s pozvánkou na Discord discordCommandExecuteDescription=Provede příkaz konzole na Minecraft serveru. discordCommandExecuteArgumentCommand=Příkaz, který se má provést discordCommandExecuteReply=Provádění příkazu\: „/{0}“ @@ -248,6 +261,8 @@ discordErrorLoggerNoPerms=Protokolování konzole na Discord bylo zakázáno z d discordErrorNoGuild=Neplatné nebo chybějící ID serveru\! Při nastavení zásuvného modulu postupujte podle návodu v konfiguraci. discordErrorNoGuildSize=Tvůj bot není na žádném serveru\! Při nastavení zásuvného modulu postupujte dle návodu v konfiguraci. discordErrorNoPerms=Váš bot nemůže vidět žádný kanál ani na žádném kanálu mluvit\! Ujistěte se, že váš bot má oprávnění ke čtení a zápisu ve všech kanálech, které chcete používat. +discordErrorNoPrimary=Nedefinovali jste primární kanál nebo definovaný primární kanál je neplatný. Návrat zpět na výchozí kanál\: \#{0}. +discordErrorNoPrimaryPerms=Váš bot nemůže mluvit ve vašem primárním kanálu \#{0}. Ujistěte se, že váš bot má oprávnění ke čtení a zápisu ve všech kanálech, které chcete používat. discordErrorNoToken=Nebyl zadán žádný token\! Chcete-li nastavit zásuvný modul, postupujte podle návodu v konfiguraci. discordErrorWebhook=Došlo k chybě při odesílání zpráv do kanálu konzole\! To bylo pravděpodobně způsobeno omylem smazáným webovým háčkem konzole. To lze obvykle opravit tak, že zajistíte, aby váš bot měl oprávnění „Správa háčků webhook“ a pak proveďte „/ess reload“. discordLoggingIn=Pokouším se přihlásit do Discordu... @@ -260,25 +275,31 @@ disposalCommandUsage=/<command> distance=§6Vzdálenost\: {0} dontMoveMessage=§6Teleport bude zahájen za§c {0}§6. Nehýbej se. downloadingGeoIp=Stahuje se GeoIP databáze... může to chvilku trvat (země\: 1,7 MB, město\: 30 MB) +dumpConsoleUrl=Byl vytvořen výpis serveru\: §c{0} +dumpCreating=§6Vytváří se výpis serveru... +dumpDeleteKey=§6Pokud chceš odstranit tento výpis později, použij pro odstranění následující klíč\: §c{0} +dumpError=§4Chyba při vytváření výpisu §c{0}§4. +dumpErrorUpload=§4Chyba při nahrávání §c{0}§4\: §c{1} +dumpUrl=§6Vytvořen výpis serveru\: §c{0} duplicatedUserdata=Duplicitní uživatelská data\: {0} a {1}. durability=§6U tohoto nástroje zbývá ještě §c{0}§6 použití. east=V ecoCommandDescription=Spravuje ekonomiku serveru. ecoCommandUsage=/<command> <give|take|set|reset> <hráč> <částka> -ecoCommandUsage1=/<command> give <player> <amount> -ecoCommandUsage1Description=Dá specifikovanému hráči daný počet peněz -ecoCommandUsage2=/<command> take <player> <amount> -ecoCommandUsage2Description=Vezme specifikovanému hráči daný počet peněz -ecoCommandUsage3=/<command> set <player> <amount> -ecoCommandUsage3Description=Nastaví specifikovanému hráči daný počet peněz -ecoCommandUsage4=/<command> reset <player> <amount> -ecoCommandUsage4Description=Resetuje specifikovanému hráči peníze na startovní částku +ecoCommandUsage1=/<command> give <hráč> <množství> +ecoCommandUsage1Description=Dá zadanému hráči uvedený počet peněz +ecoCommandUsage2=/<command> take <hráč> <množství> +ecoCommandUsage2Description=Vezme zadanému hráči uvedený počet peněz +ecoCommandUsage3=/<command> set <hráč> <množství> +ecoCommandUsage3Description=Nastaví zadanému hráči uvedený počet peněz +ecoCommandUsage4=/<command> reset <hráč> <množství> +ecoCommandUsage4Description=Nastaví zadanému hráči zůstatek na počáteční částku editBookContents=§eNyní můžeš upravovat obsah této knihy. enabled=povoleno enchantCommandDescription=Očaruje předmět, který uživatel drží. enchantCommandUsage=/<command> <název_očarování> [úroveň] -enchantCommandUsage1=/<command> <enchantment name> [level] -enchantCommandUsage1Description=Očaruje předmět držený v ruce s daným očarováním na volitelnou úroveň +enchantCommandUsage1=/<command> <název_očarování> [úroveň] +enchantCommandUsage1Description=Očaruje předmět držený v ruce daným očarováním na volitelnou úroveň enableUnlimited=§6Hráč §c{1}§6 dostává neomezené množství §c{0}§6. enchantmentApplied=§6Na předmět, který držíš v ruce, bylo sesláno očarování§c {0}§6. enchantmentNotFound=§4Očarování nebylo nalezeno\! @@ -288,46 +309,48 @@ enchantments=§6Očarováni\:§r {0} enderchestCommandDescription=Otevře enderitovou truhlu. enderchestCommandUsage=/<command> [hráč] enderchestCommandUsage1=/<command> -enderchestCommandUsage1Description=Otevře vaši ender chestu +enderchestCommandUsage1Description=Otevře tvou enderitovou truhlu enderchestCommandUsage2=/<command> <hráč> -enderchestCommandUsage2Description=Otevře ender chestu daného hráče +enderchestCommandUsage2Description=Otevře enderitovou truhlu daného hráče errorCallingCommand=Chyba příkazu /{0} errorWithMessage=§cChyba\:§4 {0} essentialsCommandDescription=Znovu načte EssentialsX. essentialsCommandUsage=/<command> essentialsCommandUsage1=/<command> reload -essentialsCommandUsage1Description=Obnoví config Essentials +essentialsCommandUsage1Description=Znovu načte konfiguraci Essentials essentialsCommandUsage2=/<command> version -essentialsCommandUsage2Description=Dá informace o verzi Essentials +essentialsCommandUsage2Description=Poskytuje informace o verzi Essentials essentialsCommandUsage3=/<command> commands -essentialsCommandUsage3Description=Dá informace o příkazech, které Essentials ovlivňuje +essentialsCommandUsage3Description=Informuje, které příkazy Essentials předává dál essentialsCommandUsage4=/<command> debug -essentialsCommandUsage4Description=Zapne Essentials "debug mod" -essentialsCommandUsage5=/<command> reset <player> +essentialsCommandUsage4Description=Přepíná Essentials do režimu ladění +essentialsCommandUsage5=/<command> reset <hráč> essentialsCommandUsage5Description=Resetuje hráčská data daného hráče essentialsCommandUsage6=/<command> cleanup essentialsCommandUsage6Description=Vyčistí stará uživatelská data essentialsCommandUsage7=/<command> homes essentialsCommandUsage7Description=Spravuje uživatelské domovy +essentialsCommandUsage8=/<command> dump [all] [config] [discord] [kits] [log] +essentialsCommandUsage8Description=Vygeneruje výpis serveru s požadovanými informacemi essentialsHelp1=Soubor je poškozen a Essentials jej nemůže otevřít. Essentials byl vypnut. Pokud nedokážete soubor opravit sami, navštivte http\://tiny.cc/EssentialsChat essentialsHelp2=Soubor je poškozen a Essentials jej nemůže otevřít. Essentials byl vypnut. Pokud nedokážete soubor opravit sami, napište ve hře /essentialshelp nebo navštivte http\://tiny.cc/EssentialsChat essentialsReload=§6Essentials byl znovu načten§c {0}. exp=§c{0} §6má§c {1} §6zkušeností (úroveň§c {2}§6) a potřebuje ještě§c {3} §6 zkušeností na další úroveň. expCommandDescription=Přidává, nastavuje, obnovuje nebo zobrazuje hráčovy zkušenosti. expCommandUsage=/<command> [reset|show|set|give] [jméno_hráče [množství]] -expCommandUsage1=/<command> give <player> <amount> -expCommandUsage1Description=Dá danému hráči specifikovaný počet zkušeností -expCommandUsage2=/<command> set <playername> <amount> -expCommandUsage2Description=Nastaví danému hráči specifikovaný počet -expCommandUsage3=/<command> show <playername> +expCommandUsage1=/<command> give <hráč> <množství> +expCommandUsage1Description=Dá zadanému hráči uvedené množství zkušeností +expCommandUsage2=/<command> set <název_hráče> <množství> +expCommandUsage2Description=Nastaví danému hráči uvedené množství zkušeností +expCommandUsage3=/<command> show <hráč> expCommandUsage4Description=Zobrazí počet zkušeností daného hráče -expCommandUsage5=/<command> reset <playername> -expCommandUsage5Description=Resetuje zkušenosti daného hráče na 0 +expCommandUsage5=/<command> reset <hráč> +expCommandUsage5Description=Vynuluje zkušenosti daného hráče expSet=§c{0} §6má nyní§c {1} §6zkušeností. extCommandDescription=Uhasit hráče. extCommandUsage=/<command> [hráč] extCommandUsage1=/<command> [hráč] -extCommandUsage1Description=Uhasí vás či jiného hráče, pokud je zadáno jméno +extCommandUsage1Description=Uhasí tebe či jiného hráče, je-li zadán extinguish=§6Uhasil ses. extinguishOthers=§6Uhasil jsi hráče {0}§6. failedToCloseConfig=Nepodařilo se uzavřít konfiguraci {0}. @@ -338,7 +361,7 @@ feed=§6Tvůj hlad byl zahnán. feedCommandDescription=Zažene hlad. feedCommandUsage=/<command> [hráč] feedCommandUsage1=/<command> [hráč] -feedCommandUsage1Description=Nakrmí vás či jiného hráče, pokud je zadáno jméno +feedCommandUsage1Description=Nakrmí tebe či jiného hráče, je-li zadán feedOther=§6Nasytil jsi hráče§c{0}§6. fileRenameError=Přejmenováni souboru {0} selhalo\! fireballCommandDescription=Vrhá ohnivou kouli nebo jiné rozmanité projektily. @@ -419,8 +442,8 @@ hatCommandDescription=Získej nějaké nové úžasné pokrývky hlavy. hatCommandUsage=/<command> [remove] hatCommandUsage1=/<command> hatCommandUsage1Description=Předmět v ruce se použije jako klobouk -hatCommandUsage2=/<command> [remove] -hatCommandUsage2Description=Odstraní tvůj aktuální klobouk +hatCommandUsage2=/<command> remove +hatCommandUsage2Description=Odstraní tvůj momentální klobouk hatCurse=§4Nemůžeš odstranit klobouk s kletbou spoutání\! hatEmpty=§4Momentálně nemáš nasazen žádný klobouk. hatFail=§4Co chceš mít nasazeno na hlavě, musíš držet v ruce. @@ -454,7 +477,7 @@ homeCommandDescription=Teleportace k tobě domů. homeCommandUsage=/<command> [hráč\:]<název> homeCommandUsage1=/<command> <název> homeCommandUsage1Description=Teleportuje do domova se zadaným jménem -homeCommandUsage2=/<command> <player>\:<name> +homeCommandUsage2=/<command> <hráč>\:<název> homeCommandUsage2Description=Teleportuje tě do domova zadaného hráče se zadaným jménem homes=§6Domovy\:§r {0} homeConfirmation=§6Již máš domov s názvem §c{0}§6\!\nChceš-li přepsat svůj existující domov, napiš příkaz znovu. @@ -517,7 +540,7 @@ itemCannotBeSold=§4Tento předmět nelze prodat serveru. itemCommandDescription=Vyvolá předmět. itemCommandUsage=/<command> <předmět|číselně> [počet [meta_předmětu...]] itemCommandUsage1=/<command> <předmět> [počet] -itemCommandUsage1Description=Dá cílovému hráči celý stack (nebo uvedené množství) zadaného předmětu +itemCommandUsage1Description=Dá hráči celý stack (nebo uvedené množství) zadaného předmětu itemCommandUsage2=/<command> <předmět> <počet> <meta> itemCommandUsage2Description=Dá ti zadané množství určitého předmětu s uvedenými metadaty itemId=§6ID\:§c {0} @@ -525,10 +548,11 @@ itemloreClear=§6Odstranil jsi moudro tohoto předmětu. itemloreCommandDescription=Upravit moudro předmětu. itemloreCommandUsage=/<command> <add/set/clear> [text/řádek] [text] itemloreCommandUsage1=/<command> add [text] -itemloreCommandUsage1Description=Přidá zadaný text na konec moudra předmětu v ruce -itemloreCommandUsage2Description=Nastaví zadaný řádek moudra drženého předmětu na daný text +itemloreCommandUsage1Description=Přidá daný text na konec lore předmětu drženého v ruce +itemloreCommandUsage2=/<command> set <číslo řádku> <text> +itemloreCommandUsage2Description=Nastaví daný řádek lore předmětu v ruce na daný text itemloreCommandUsage3=/<command> clear -itemloreCommandUsage3Description=Vymaže moudro drženého předmětu +itemloreCommandUsage3Description=Vymaže lore předmětu v ruce itemloreInvalidItem=§4Předmět, u něhož chceš upravit moudro, musíš držet v ruce. itemloreNoLine=§4Předmět ve tvé ruce nemá žádné moudro na řádce §c{0}§4. itemloreNoLore=§4Předmět ve tvé ruce nemá žádné moudro. @@ -564,6 +588,9 @@ jailAlreadyIncarcerated=§4Tento hráč již úpí ve vězení\:§c {0} jailList=§6Vězení\:§r {0} jailMessage=§4Provinil ses, tak teď musíš pykat. jailNotExist=§4Toto vězení neexistuje. +jailNotifyJailed=§6Hráč§c{0} §6uvězněn hráčem §c{1}§6. +jailNotifyJailedFor=§6Hráč§c {0} §6uvězněn za§c {1}§6hráčem §c{2}§6. +jailNotifySentenceExtended=§6Uvěznění hráče§c{0} §6bylo hráčem §c{2}§6 prodlouženo na §c{1} §6. jailReleased=§6Hráč §c{0}§6 byl propuštěn na svobodu. jailReleasedPlayerNotify=§6Byl jsi propuštěn na svobodu\! jailSentenceExtended=§6Uvěznění bylo prodlouženo na §c{0}§6. @@ -640,12 +667,14 @@ listCommandUsage1=/<command> [skupina] listCommandUsage1Description=Zobrazí seznam všech hráčů na serveru nebo v dané skupině, byla-li zadána listGroupTag=§6/{0}§r\: listHiddenTag=§7[SKRYTÝ]§r +listRealName=({0}) loadWarpError=§4Nepodařilo se načíst warp {0}. localFormat=[L]<{0}> {1} loomCommandDescription=Otevře tkalcovský stav. loomCommandUsage=/<command> mailClear=§6Zprávy vymažeš příkazem §c/mail clear§6. mailCleared=§6Zpráva smazána\! +mailClearIndex=§4Musíš zadat číslo mezi 1 a {0}. mailCommandDescription=Spravuje vnitroserverovou poštu mezi hráči. mailCommandUsage=/<command> [read|clear|clear [počet]|send [adresát] [zpráva]|sendtemp [adresát] [čas vypršení] [zpráva]|sendall [zpráva]] mailCommandUsage1=/<command> read [strana] @@ -657,11 +686,19 @@ mailCommandUsage3Description=Odešle zadanému hráči danou zprávu mailCommandUsage4=/<command> sendall <zpráva> mailCommandUsage4Description=Odešle všem hráčům danou zprávu mailCommandUsage5=/<command> sendtemp <hráč> <čas vypršení> <zpráva> +mailCommandUsage5Description=Odešle uvedenému hráči zprávu, která vyprší v zadaném čase +mailCommandUsage6=/<command> sendtempall <čas vypršení> <zpráva> +mailCommandUsage6Description=Zašle všem hráčům danou zprávu, jejíž platnost vyprší za zadanou dobu mailDelay=Za poslední minutu bylo odesláno příliš mnoho zpráv. Maximum\: {0} +mailFormatNew=§6[§r{0}§6] §6[§r{1}§6] §r{2} +mailFormatNewTimed=§6[§e⚠§6] §6[§r{0}§6] §6[§r{1}§6] §r{2} +mailFormatNewRead=§6[§r{0}§6] §6[§r{1}§6] §7§o{2} +mailFormatNewReadTimed=§6[§e⚠§6] §6[§r{0}§6] §6[§r{1}§6] §7§o{2} mailFormat=§6[§r{0}§6] §r{1} mailMessage={0} mailSent=§6Zpráva odeslána\! mailSentTo=§6Hráči §c{0}§6 byla odeslána tato zpráva\: +mailSentToExpire=§6Hráči §c{0}§6 byl odeslán následující e-mail, který vyprší za §c{1}§6\: mailTooLong=§4Zpráva je příliš dlouhá, může obsahovat nejvýše 1000 znaků. markMailAsRead=§6Příkazem§c /mail clear§6 označíš poštu jako přečtenou. matchingIPAddress=§6Z této IP adresy se v minulosti připojili následující hráči\: @@ -692,6 +729,7 @@ months=měsíců moreCommandDescription=Vyplní stack v ruce na stanovené množství nebo na maximum, není-li množství uvedeno. moreCommandUsage=/<command> [množství] moreCommandUsage1=/<command> [množství] +moreCommandUsage1Description=Změní množství předmětu v ruce na uvedené množství, nebo pokud není uvedeno, na maximální množství moreThanZero=§4Množtví musí být větší než 0. motdCommandDescription=Zobrazí zprávu dne. motdCommandUsage=/<command> [kapitola] [strana] @@ -699,6 +737,7 @@ moveSpeed=§6Hráči §c{2}§6 byla nastavena rychlost §c{0} na §c{1}§6. msgCommandDescription=Pošle soukromou zprávu zadanému hráči. msgCommandUsage=/<command> <komu> [zpráva] msgCommandUsage1=/<command> <komu> [zpráva] +msgCommandUsage1Description=Soukromě pošle danou zprávu určitému hráči msgDisabled=§6Přijímání zpráv §cvypnuto§6. msgDisabledFor=§6Přijímání zpráv §cvypnuto §6pro §c{0}§6. msgEnabled=§6Přijímání zpráv §cpovoleno§6. @@ -714,6 +753,9 @@ multiplePotionEffects=§4Na tento lektvar nelze použít více než jeden efekt. muteCommandDescription=Umlčí hráče nebo mu povolí mluvit. muteCommandUsage=/<command> <hráč> [trvání] [důvod] muteCommandUsage1=/<command> <hráč> +muteCommandUsage1Description=Trvale umlčí specifického hráče, nebo ho odmlčí, pokud už byl umlčen +muteCommandUsage2=/<command> <hráč> <trvání> [důvod] +muteCommandUsage2Description=Umlčí specifického hráče na danou dobu s volitelným důvodem mutedPlayer=§6Hráč§c {0} §6byl umlčen. mutedPlayerFor=§6Hráč§c {0} §6byl umlčen na§c {1}§6. mutedPlayerForReason=§6Hráč§c {0} §6byl umlčen na §c{1}§6. Důvod\: §c{2} @@ -728,13 +770,26 @@ muteNotifyReason=§c{0} §6umlčel hráče §c{1}§6. Důvod\: §c{2} nearCommandDescription=Vypíše hráče v okolí hráče. nearCommandUsage=/<command> [jméno_hráče] [vzdálenost] nearCommandUsage1=/<command> +nearCommandUsage1Description=Vypíše všechny hráče kolem tebe ve výchozím poloměru +nearCommandUsage2=/<command> <poloměr> +nearCommandUsage2Description=Vypíše všechny hráče kolem tebe v daném poloměru nearCommandUsage3=/<command> <hráč> +nearCommandUsage3Description=Vypíše všechny hráče nebo specifického hráče kolem tebe ve výchozím poloměru +nearCommandUsage4=/<command> <hráč> <poloměr> +nearCommandUsage4Description=Vypíše všechny hráče nebo specifického hráče kolem tebe v daném poloměru nearbyPlayers=§6Hráči v okolí\:§r {0} negativeBalanceError=§4Hráč nemůže mít záporný zůstatek. nickChanged=§6Přezdívka změněna. nickCommandDescription=Změní tvou přezdívku nebo přezdívku jiného hráče. nickCommandUsage=/<command> [hráč] <přezdívka|off> nickCommandUsage1=/<command> <přezdívka> +nickCommandUsage1Description=Změní tvou přezdívku na daný text +nickCommandUsage2=/<command> off +nickCommandUsage2Description=Odstraní tvou přezdívku +nickCommandUsage3=/<command> <hráč> <přezdívka> +nickCommandUsage3Description=Změní přezdívku specifikovaného hráče na daný text +nickCommandUsage4=/<command> <hráč> off +nickCommandUsage4Description=Odstraní přezdívku daného hráče nickDisplayName=§4V konfiguraci Essentials musíš povolit change-displayname. nickInUse=§4Toto jméno již někdo používá. nickNameBlacklist=§4Tato přezdívka není dovolena. @@ -787,6 +842,8 @@ noWarpsDefined=§6Žádné warpy nejsou nastaveny. nuke=§5Nechť oheň a síra pohltí svět. nukeCommandDescription=Nechť oheň a síra pohltí svět. nukeCommandUsage=/<command> [hráč] +nukeCommandUsage1=/<command> [hráči...] +nukeCommandUsage1Description=Pošle atomovku na všechny hráče, nebo na určité(ho) hráče, pokud je specifikováno numberRequired=Tam přece musí být číslo. onlyDayNight=/time podporuje pouze day/night. onlyPlayers=§4Pouze hráči ve hře mohou použít §c{0}§4. @@ -800,6 +857,7 @@ passengerTeleportFail=§4Nemůžeš být teleportován během přepravy cestují payCommandDescription=Převede peníze jinému hráči z tvého zůstatku. payCommandUsage=/<command> <hráč> [částka] payCommandUsage1=/<command> <hráč> [částka] +payCommandUsage1Description=Zaplatí zadanému hráči uvedený počet peněz payConfirmToggleOff=§6Od této chvíle se nebude požadovat potvrzení platby. payConfirmToggleOn=§6Od této chvíle se bude požadovat potvrzení platby. payDisabledFor=§6Přijímání plateb bylo pro §c{0}§6 vypnuto. @@ -813,6 +871,7 @@ payconfirmtoggleCommandUsage=/<command> paytoggleCommandDescription=Přepíná, zda přijímáš platby. paytoggleCommandUsage=/<command> [hráč] paytoggleCommandUsage1=/<command> [hráč] +paytoggleCommandUsage1Description=Přepíná, zda ty nebo případný zadaný hráč, přijímáte platby pendingTeleportCancelled=§4Nevyřízená žádost o teleportování byla zrušena. pingCommandDescription=Pong\! pingCommandUsage=/<command> @@ -832,12 +891,25 @@ playerTempBanned=§6Hráč §c{0}§6 dočasně zablokoval hráče §c{1}§6 na playerUnbanIpAddress=§6Hráč§c {0} §6odblokoval IP adresu\:§c {1} playerUnbanned=§6Hráč§c {0} §6odblokoval hráče§c {1} playerUnmuted=§6Můžeš opět hovořit. +playtimeCommandDescription=Zobrazí hráčův čas strávený ve hře +playtimeCommandUsage=/<command> [hráč] +playtimeCommandUsage1=/<command> +playtimeCommandUsage1Description=Zobrazí tvůj čas strávený ve hře +playtimeCommandUsage2=/<command> <hráč> +playtimeCommandUsage2Description=Zobrazí pro zadaného hráče čas strávený ve hře +playtime=§6Odehráno\:§c {0} +playtimeOther=§6Hráč {1} odehrál§6\:§c {0} pong=Pong\! posPitch=§6Sklon\: {0} (Úhel náklonu hlavy) possibleWorlds=§6Možné světy jsou očíslované v rozmezí §c0§6 až §c{0}§6. potionCommandDescription=Přidá do lektvaru vlastní účinky. potionCommandUsage=/<command> <clear|apply|effect\:<účinek> power\:<síla> duration\:<trvání>> potionCommandUsage1=/<command> clear +potionCommandUsage1Description=Odstraní z lektvaru v ruce všechny efekty +potionCommandUsage2=/<command> apply +potionCommandUsage2Description=Aplikuje na tebe všechny efekty lektvaru v ruce, aniž by jsi lektvar vypil +potionCommandUsage3=/<command> effect\:<efekt> power\:<síla> duration\:<trvání> +potionCommandUsage3Description=Aplikuje metadata daného lektvaru na lektvar v ruce posX=§6X\: {0} (+Východ <-> -Západ) posY=§6Y\: {0} (+Nahoru <-> -Dolů) posYaw=§6Odchýlení\: {0} (Natočení) @@ -856,12 +928,34 @@ powerToolsDisabled=§6Všechny tvé výkonné nástroje byly vypnuty. powerToolsEnabled=§6Věechny tvé výkonné nástroje byly povoleny. powertoolCommandDescription=Přiřadí příkaz k předmětu v ruce. powertoolCommandUsage=/<command> [l\:|a\:|r\:|c\:|d\:][příkaz] [parametry] - {hráč} může být nahrazeno jménem kliknutého hráče. +powertoolCommandUsage1=/<command> l\: +powertoolCommandUsage1Description=Vypíše všechny příkazy, které budou vykonány po kliknutí předmětem v ruce +powertoolCommandUsage2=/<command> d\: +powertoolCommandUsage2Description=Smaže z předmětu v ruce všechny příkazy, které budou vykonány po kliknutí s ním +powertoolCommandUsage3=/<command> r\:<vykonaný příkaz> +powertoolCommandUsage3Description=Odstraní daný příkaz z předmětu v ruce +powertoolCommandUsage4=/<command> <vykonaný příkaz> +powertoolCommandUsage4Description=Nastaví příkaz předmětu v ruce, který bude vykonán po kliknutí s ním na daný příkaz +powertoolCommandUsage5=/<command> a\:<vykonaný příkaz> +powertoolCommandUsage5Description=Přidá na předmět v ruce příkaz, který bude vykonán po kliknutí s ním powertooltoggleCommandDescription=Povolí nebo zakáže všechny aktuální mocné nástroje. powertooltoggleCommandUsage=/<command> ptimeCommandDescription=Upraví čas klienta hráče. Přidej @ prefix pro opravu. ptimeCommandUsage=/<command> [list|reset|day|night|dawn|17\:30|4pm|4000ticks] [hráč|*] +ptimeCommandUsage1=/<command> list [hráč|*] +ptimeCommandUsage1Description=Vypíše buď tvůj čas, nebo čas jiného hráče(ů), pokud je specifikováno +ptimeCommandUsage2=/<command> <čas> [hráč|*] +ptimeCommandUsage2Description=Nastaví tvůj čas nebo čas jiného hráče(ů), pokud je specifikováno, na daný čas +ptimeCommandUsage3=/<command> reset [hráč|*] +ptimeCommandUsage3Description=Resetuje tvůj čas, nebo čas jiného hráče(ů), pokud je specifikováno pweatherCommandDescription=Upraví počasí hráče pweatherCommandUsage=/<command> [list|reset|storm|sun|clear] [hráč|*] +pweatherCommandUsage1=/<command> list [hráč|*] +pweatherCommandUsage1Description=Uvede počasí, které vidíš ty, nebo jiný(í) hráč(i), pokud je specifikován +pweatherCommandUsage2=/<command> <storm|sun> [hráč|*] +pweatherCommandUsage2Description=Nastaví počasí, které vidíš ty, nebo jiný(í) hráč(i), pokud je specifikován(i), na dané počasí +pweatherCommandUsage3=/<command> reset [hráč|*] +pweatherCommandUsage3Description=Resetuje počasí, které vidíš ty, nebo jiný(í) hráč(i), pokud je specifikováno pTimeCurrent=§6Čas hráče §c{0}§6 je §c{1}§6. pTimeCurrentFixed=§6Čas hráče §c{0}§6 byl zastaven na §c{1}§6. pTimeNormal=§6Čas hráče §c{0}§6 souhlasí s časem serveru. @@ -881,17 +975,21 @@ questionFormat=§2[Otázka]§r {0} rCommandDescription=Rychle odpovědět poslednímu hráči, který ti poslal zprávu. rCommandUsage=/<command> <zpráva> rCommandUsage1=/<command> <zpráva> +rCommandUsage1Description=Odpoví daným textem poslednímu hráči, který ti poslal zprávu radiusTooBig=§4Poloměr je příliš veliký\! Maximální poloměr je§c {0}§4. readNextPage=§6Další stránku zobrazíš příkazem§c /{0} {1}§6. realName=§f{0}§r§6 je §f{1} realnameCommandDescription=Zobrazí uživatelské jméno uživatele na základě přezdívky. realnameCommandUsage=/<command> <přezdívka> realnameCommandUsage1=/<command> <přezdívka> +realnameCommandUsage1Description=Ukáže pravé jméno hráče s danou přezdívkou recentlyForeverAlone=§4{0} se nedávno odpojil. recipe=§6Recept pro §c{0}§6 (§c{1}§6 x §c{2}§6) recipeBadIndex=Recept s takovýmto číslem neexistuje. recipeCommandDescription=Zobrazuje, jak vyrábět předměty. recipeCommandUsage=/<command> <předmět> [počet] +recipeCommandUsage1=/<příkaz> <předmět> [strana] +recipeCommandUsage1Description=Ukáže, jak vyrobit daný předmět recipeFurnace=§6Vypal\: §c{0}§6. recipeGrid=§c{0}X §6| §{1}X §6| §{2}X recipeGridItem=§c{0}X §6je §c{1} @@ -902,12 +1000,19 @@ recipeShapeless=§6Zkombinuj §c{0} recipeWhere=§6Kde\: {0} removeCommandDescription=Odstraní entity v aktuálním světě. removeCommandUsage=/<command> <all|tamed|named|drops|arrows|boats|minecarts|xp|paintings|itemframes|endercrystals|monsters|animals|ambient|mobs|[typ_stvoření]> [vzdálenost|svět] +removeCommandUsage1=/<příkaz> <mob> [svět] +removeCommandUsage1Description=Odstraní všechny dané moby ze současného světa, nebo z jiného, pokud je specifikován +removeCommandUsage2=/<příkaz> <mob> <poloměr> [svět] +removeCommandUsage2Description=Odstraní všechny dané moby v daném poloměru ze současného světa, nebo z jiného, pokud je specifikován removed=§6Odstraněno§c {0} §6entit. repair=§6Úspěšně jsi opravil §c{0}§6. repairAlreadyFixed=§4Tento předmět nepotřebuje opravu. repairCommandDescription=Opraví životnost jednoho nebo všech předmětů. repairCommandUsage=/<command> [hand|all] repairCommandUsage1=/<command> +repairCommandUsage1Description=Opraví předmět v ruce +repairCommandUsage2=/<příkaz> all +repairCommandUsage2Description=Opraví všechny předměty v inventáři repairEnchanted=§4Nemáš oprávnění opravovat očarované předměty. repairInvalidType=§4Tento předmět nelze opravit. repairNone=§4Nemáš žádné předměty, které potřebují opravit. @@ -931,6 +1036,7 @@ rest=§6Cítíš se dobře odpočatý. restCommandDescription=Poskytne odpočinek tobě nebo zadanému hráči. restCommandUsage=/<command> [hráč] restCommandUsage1=/<command> [hráč] +restCommandUsage1Description=Resetuje čas od vás ostatních nebo jiného hráče, pokud je uveden restOther=§6Poskytnutí odpočinku hráči§c {0}§6. returnPlayerToJailError=§4Při pokusu vrátit hráče §c{0}§4 do vězení došlo k chybě\: §c{1}§4\! rtoggleCommandDescription=Změní, zda je příjemcem odpovědi poslední příjemce, nebo poslední odesílatel @@ -944,10 +1050,20 @@ seenAccounts=§6Hráč je známý také jako\:§c {0} seenCommandDescription=Zobrazí čas posledního odhlášení hráče. seenCommandUsage=/<command> <hráč> seenCommandUsage1=/<command> <hráč> +seenCommandUsage1Description=Ukáže informace o času odpojení, banu, umlčení a UUID specifikovaného hráče seenOffline=§6Hráč §c{0} §6je §4odpojen§6 od §c{1}§6. seenOnline=§6Hráč §c{0} §6je §apřipojen§6 od §c{1}§6. sellBulkPermission=§6Nemáš oprávnění prodávat ve velkém. sellCommandDescription=Prodá předmět, který je právě v ruce. +sellCommandUsage=/<příkaz> <<jméno předmětu>|<id>|hand|inventory|blocks> [množství] +sellCommandUsage1=/<command> <jméno předmětu> [množství] +sellCommandUsage1Description=Prodá všechny (nebo daný počet, pokud je specifikován) dané předměty z tvého inventáře +sellCommandUsage2=/<command> hand [množství] +sellCommandUsage2Description=Prodá všechny (nebo daný počet, pokud je specifikován) předměty, které máš v ruce +sellCommandUsage3=/<příkaz> all +sellCommandUsage3Description=Prodá úplně všechny předměty ve tvém inventáři +sellCommandUsage4=/<command> blocks [množství] +sellCommandUsage4Description=Prodá všechny (nebo daný počet, pokud je specifikován) bloky z tvého inventáře sellHandPermission=§6Nemáš oprávnění prodávat z ruky. serverFull=Server je plný\! serverReloading=Je zde značná pravděpodobnost, že právě opětovně načítáte server. Pokud je tomu tak, tak proč se nenávidíte? Při používání /reload neočekávejte od týmu EssentialsX žádnou podporu. @@ -964,19 +1080,33 @@ setSpawner=§6Typ líhně změněn na§c {0}§6. sethomeCommandDescription=Nastaví tvůj domov na aktuální polohu. sethomeCommandUsage=/<command> [[hráč\:]název] sethomeCommandUsage1=/<command> <název> -sethomeCommandUsage2=/<command> <player>\:<name> +sethomeCommandUsage1Description=Nastaví domov s daným jménem na místo, kde stojíš +sethomeCommandUsage2=/<command> <hráč>\:<název> +sethomeCommandUsage2Description=Nastaví domov určitého hráče s daným jménem na místo, kde stojíš setjailCommandDescription=Vytvoří vězení se zadaným názvem [název_vězení]. setjailCommandUsage=/<command> <název_vězení> setjailCommandUsage1=/<command> <název_vězení> +setjailCommandUsage1Description=Nastaví vězení s určitým jménem tam, kde stojíš settprCommandDescription=Nastaví teleportaci na náhodné místo a parametry. settprCommandUsage=/<command> [center|minrange|maxrange] [hodnota] +settprCommandUsage1=/<command> center +settprCommandUsage1Description=Nastaví střed náhodného teleportu tam, kde stojíš +settprCommandUsage2=/<command> minrange <poloměr> +settprCommandUsage2Description=Nastaví minimální poloměr náhodného teleportu na danou hodnotu +settprCommandUsage3=/<command> maxrange <poloměr> +settprCommandUsage3Description=Nastaví maximální poloměr náhodného teleportu na danou hodnotu settpr=§6Nastaven střed náhodné teleportace. settprValue=§6Nastavena náhodná teleportace §c{0}§6 na §c{1}§6. setwarpCommandDescription=Vytvoří nový warp. setwarpCommandUsage=/<command> <warp> setwarpCommandUsage1=/<command> <warp> +setwarpCommandUsage1Description=Vytvoří warp s určitým jménem tam, kde stojíš setworthCommandDescription=Nastaví prodejní cenu předmětu. setworthCommandUsage=/<command> [předmět|id] <cena> +setworthCommandUsage1=/<command> <cena> +setworthCommandUsage1Description=Nastaví hodnotu předmětu, který máš v ruce na danou cenu +setworthCommandUsage2=/<command> <jméno předmětu> <cena> +setworthCommandUsage2Description=Nastaví hodnotu určitého předmětu na danou cenu sheepMalformedColor=§4Neplatná barva. shoutDisabled=§6Hlučný mód §cvypnut§6. shoutDisabledFor=§6Hlučný mód §cvypnut §6 pro hráče §c{0}§6. @@ -988,6 +1118,7 @@ editsignCommandClearLine=§6Vymazán řádek§c {0}§6. showkitCommandDescription=Zobrazí obsah sady. showkitCommandUsage=/<command> <sada> showkitCommandUsage1=/<command> <sada> +showkitCommandUsage1Description=Vypíše seznam všech předmětů v určitém kitu editsignCommandDescription=Upravuje danou ceduli. editsignCommandLimit=§4Zadaný text je příliš dlouhý, než aby se vešel na ceduli. editsignCommandNoLine=§4Musíš zadat číslo řádku §c1 až 4§4. @@ -998,6 +1129,14 @@ editsignCopyLine=§6Řádek §c{0} §6cedule zkopírován\! Vlož jej příkazem editsignPaste=§6Cedule vložena\! editsignPasteLine=§6Řádka §c{0} §6cedule vložena\! editsignCommandUsage=/<command> <set/clear/copy/paste> [číslo řádku] [text] +editsignCommandUsage1=/<command> set <číslo řádku> <text> +editsignCommandUsage1Description=Nastaví určitý řádek cílené cedule na daný text +editsignCommandUsage2=/<command> clear <číslo řádku> +editsignCommandUsage2Description=Vymaže určitý řádek cílené cedule +editsignCommandUsage3=/<command> copy [číslo řádku] +editsignCommandUsage3Description=Zkopíruje do schránky všechny (nebo uvedený řádek) cílené cedule +editsignCommandUsage4=/<command> paste [číslo řádku] +editsignCommandUsage4Description=Vloží tvojí schránku na celou (nebo na určitý řádek) cílené cedule signFormatFail=§4[{0}] signFormatSuccess=§1[{0}] signFormatTemplate=[{0}] @@ -1010,7 +1149,9 @@ skullChanged=§6Hlava změněna na §c{0}§6. skullCommandDescription=Nastaví vlastníka lebky hráče skullCommandUsage=/<command> [vlastník] skullCommandUsage1=/<command> +skullCommandUsage1Description=Dá ti tvojí hlavu skullCommandUsage2=/<command> <hráč> +skullCommandUsage2Description=Dá ti hlavu určitého hráče slimeMalformedSize=§4Neplatná velikost. smithingtableCommandDescription=Otevře kovářský stůl. smithingtableCommandUsage=/<command> @@ -1020,22 +1161,34 @@ socialSpyMutedPrefix=§f[§6SS§f] §7(umlčený) §r socialspyCommandDescription=Přepíná, zda můžeš v chatu vidět příkazy msg/mail. socialspyCommandUsage=/<command> [hráč] [on|off] socialspyCommandUsage1=/<command> [hráč] +socialspyCommandUsage1Description=Přepíná Social Spy pro tebe nebo pro jiného hráče, pokud je uveden socialSpyPrefix=§f[§6SS§f] §r soloMob=§4Toto stvoření je rádo samo. spawned=vyvolán spawnerCommandDescription=Změní typ stvoření v líhni. spawnerCommandUsage=/<command> <stvoření> [prodlení] spawnerCommandUsage1=/<command> <stvoření> [prodlení] +spawnerCommandUsage1Description=Mění, jakého moba spawnuje spawner, na který se díváš (a volitelně dobu, jak dlouho trvá, než se mobové spawnou) spawnmobCommandDescription=Vylíhne stvoření. spawnmobCommandUsage=/<command> <stvoření>[\:data][,<mount>[\:data]] [počet] [hráč] +spawnmobCommandUsage1=/<command> <mob>[\:data] [množství] [hráč] +spawnmobCommandUsage1Description=Spawne jednoho (nebo určité množství) daných mobů tam, kde stojíš (nebo kde stojí jiný hráč, pokud je uveden) +spawnmobCommandUsage2=/<command> <mob>[\:data],<mount>[\:data] [množství] [hráč] +spawnmobCommandUsage2Description=Spawne tam, kde stojíš (nebo kde stojí jiný hráč, pokud je uveden) jednoho (nebo určitý počet) daného moba jedoucího na daném mobovi spawnSet=§6Poloha výchozího místa pro skupinu§c {0}§6 byla nastavena. spectator=divák speedCommandDescription=Změní tvou rychlost, typ může být walk (chůze), nebo fly (létání). speedCommandUsage=/<command> [typ] <rychlost> [hráč] +speedCommandUsage1=/<command> <rychlost> +speedCommandUsage1Description=Nastaví rychlost tvého létání, nebo chození na danou rychlost +speedCommandUsage2=/<command> <typ> <rychlost> [hráč] +speedCommandUsage2Description=Nastaví určitý typ rychlosti dané rychlosti buď pro tebe, nebo pro určitého hráče, pokud je uveden stonecutterCommandDescription=Otevře řezačku kamene. stonecutterCommandUsage=/<command> sudoCommandDescription=Provede příkaz jménem jiného uživatele. sudoCommandUsage=/<command> <hráč> <příkaz [parametry]> +sudoCommandUsage1=/<command> <hráč> <příkaz> [argumenty] +sudoCommandUsage1Description=Udělá, aby určitý hráč použil daný příkaz sudoExempt=§4Nemůžeš použít sudo na hráče §c{0}§4. sudoRun=§6Vynucení spuštění§r /{1} §6hráčem§c {0} suicideCommandDescription=Způsobí tvou smrt. @@ -1074,16 +1227,29 @@ tempbanExemptOffline=§4Nemůžeš dočasně zablokovat nepřipojeného hráče. tempbanJoin=Na tomto serveru jsi zablokován na {0}. Důvod\: {1} tempBanned=§cByl jsi dočasně zablokován na§r {0}\: \n§r{2} tempbanCommandDescription=Dočasně zablokuje hráče. +tempbanCommandUsage=/<command> <jméno_hráče> <trvání> [důvod] +tempbanCommandUsage1=/<command> <hráč> <trvání> [důvod] +tempbanCommandUsage1Description=Zabanuje daného hráče na určitou dobu s nepovinným důvodem tempbanipCommandDescription=Dočasně zablokuje IP adresu. +tempbanipCommandUsage=/<command> <jméno_hráče> <trvání> [důvod] +tempbanipCommandUsage1=/<command> <player|ip-address> <trvání> [důvod] +tempbanipCommandUsage1Description=Zabanuje danou IP adresu na určitý čas s nepovinným důvodem thunder=§6Nastavil jsi bouřku v tomto světě na §c{0}§6. thunderCommandDescription=Zapne/vypne bouřku. thunderCommandUsage=/<command> <true/false> [trvání] +thunderCommandUsage1=/<command> <true|false> [trvání] +thunderCommandUsage1Description=Zapne/vypne bouřku na nepovinnou dobu thunderDuration=§6Nastavil jsi bouřku v tomto světě na §c{0}§6 na §c{1}§6 sekund. timeBeforeHeal=§4Čas do dalšího uzdravení\:§c {0}§4. timeBeforeTeleport=§4Čas do dalšího teleportování\:§c {0}§4. timeCommandDescription=Zobrazí/změní čas světa. Bez specifikace platí pro aktuální svět. timeCommandUsage=/<command> [set|add] [day|night|dawn|17\:30|4pm|4000ticks] [svět|all] timeCommandUsage1=/<command> +timeCommandUsage1Description=Ukáže čas ve všech světech +timeCommandUsage2=/<command> set <čas> [world|all] +timeCommandUsage2Description=Nastaví čas v současném (nebo určitém) světě na daný čas +timeCommandUsage3=/<command> add <čas> [world|all] +timeCommandUsage3Description=Přidá daný čas k času současného (nebo určitého) světa timeFormat=§c{0}§6 nebo §c{1}§6 nebo §c{2}§6 timeSetPermission=§4Nemáš oprávnění nastavovat čas. timeSetWorldPermission=§4Nemáš oprávnění nastavovat čas ve světě §c{0}§4. @@ -1096,6 +1262,7 @@ togglejailCommandUsage=/<command> <hráč> <název_vězení> [trvání] toggleshoutCommandDescription=Určuje, zda mluvíš v hlučném módu toggleshoutCommandUsage=/<command> [hráč] [on|off] toggleshoutCommandUsage1=/<command> [hráč] +toggleshoutCommandUsage1Description=Přepne hlučný mód tobě, nebo jinému hráči, pokud je uveden topCommandDescription=Teleportuje na nejvyšší blok na tvé aktuální pozici. topCommandUsage=/<command> totalSellableAll=§aCelková cena všech prodejných předmětů a bloků je §c{1}§a. @@ -1105,59 +1272,81 @@ totalWorthBlocks=§aProdány všechny bloky za celkovou částku §c{1}§a. tpCommandDescription=Teleportace k hráči. tpCommandUsage=/<command> <hráč> [jiný_hráč] tpCommandUsage1=/<command> <hráč> +tpCommandUsage1Description=Teleportuje tě na určitého hráče +tpCommandUsage2=/<command> <hráč> <jiný hráč> +tpCommandUsage2Description=Teleportuje prvního uvedeného hráče k druhému tpaCommandDescription=Požádá o teleportaci k danému hráči. tpaCommandUsage=/<command> <hráč> tpaCommandUsage1=/<command> <hráč> +tpaCommandUsage1Description=Požádá o teleportaci na určitého hráče tpaallCommandDescription=Požádá všechny připojené hráče, aby se teleportovali k tobě. tpaallCommandUsage=/<command> <hráč> tpaallCommandUsage1=/<command> <hráč> +tpaallCommandUsage1Description=Požádá všechny hráče, aby se na tebe teleportovali tpacancelCommandDescription=Zruší všechny nevyřízené žádosti o teleportování. Při zadání [hráč] se zruší jeho požadavky. tpacancelCommandUsage=/<command> [hráč] tpacancelCommandUsage1=/<command> +tpacancelCommandUsage1Description=Zruší všechny tvoje nevyřízené žádosti o teleportaci tpacancelCommandUsage2=/<command> <hráč> -tpacceptCommandDescription=Přijímá žádost o teleportování. +tpacancelCommandUsage2Description=Zruší všechny tvoje nevyřízené žádosti o teleportaci na určitého hráče tpacceptCommandUsage=/<command> [jiný_hráč] tpacceptCommandUsage1=/<command> +tpacceptCommandUsage2=/<command> <hráč> +tpacceptCommandUsage3=/<command> * tpahereCommandDescription=Požádej, aby se hráč teleportoval k tobě. tpahereCommandUsage=/<command> <hráč> tpahereCommandUsage1=/<command> <hráč> +tpahereCommandUsage1Description=Požádá určitého hráče, aby se na tebe teleportoval tpallCommandDescription=Teleportuje všechny připojené hráče k jinému hráči. tpallCommandUsage=/<command> [hráč] tpallCommandUsage1=/<command> [hráč] +tpallCommandUsage1Description=Teleportuje na tebe všechny hráče, nebo jiného hráče, pokud je uveden tpautoCommandDescription=Automaticky přijímat žádosti o teleportaci. tpautoCommandUsage=/<command> [hráč] tpautoCommandUsage1=/<command> [hráč] -tpdenyCommandDescription=Odmítnout žádost o teleportování. +tpautoCommandUsage1Description=Přepne automatický příjem tpa žádostí pro tebe nebo jiného hráče, pokud je uveden tpdenyCommandUsage=/<command> tpdenyCommandUsage1=/<command> +tpdenyCommandUsage2=/<command> <hráč> +tpdenyCommandUsage3=/<command> * tphereCommandDescription=Teleportuje hráče k tobě. tphereCommandUsage=/<command> <hráč> tphereCommandUsage1=/<command> <hráč> +tphereCommandUsage1Description=Teleportuje na tebe určitého hráče tpoCommandDescription=Teleportovat a přitom nebrat ohled na tptoggle. tpoCommandUsage=/<command> <hráč> [jiný_hráč] tpoCommandUsage1=/<command> <hráč> +tpoCommandUsage1Description=Teleportuje na tebe určitého hráče a ignoruje jeho předvolby +tpoCommandUsage2=/<command> <hráč> <jiný hráč> +tpoCommandUsage2Description=Teleportuje prvního určitého hráče na druhého a ignoruje jeho předvolby tpofflineCommandDescription=Teleportovat na poslední známé místo odhlášení hráče tpofflineCommandUsage=/<command> <hráč> tpofflineCommandUsage1=/<command> <hráč> +tpofflineCommandUsage1Description=Teleportuje tě na místo, kde se určitý hráč odpojil tpohereCommandDescription=Teleportovat sem bez ohledu na tptoggle. tpohereCommandUsage=/<command> <hráč> tpohereCommandUsage1=/<command> <hráč> +tpohereCommandUsage1Description=Teleportuje na tebe určitého hráče a ignoruje jeho předvolby tpposCommandDescription=Teleportace na souřadnice. tpposCommandUsage=/<command> <x> <y> <z> [natočení] [náklon_hlavy] [svět] tpposCommandUsage1=/<command> <x> <y> <z> [natočení] [náklon_hlavy] [svět] +tpposCommandUsage1Description=Teleportuje tě na určité místo a na nepovinné otočení, výšku pohledu a/nebo svět tprCommandDescription=Náhodná teleportace. tprCommandUsage=/<command> tprCommandUsage1=/<command> +tprCommandUsage1Description=Teleportuje tě na náhodné místo tprSuccess=§6Teleportace na náhodnou polohu... tps=§6Aktuální TPS \= {0} tptoggleCommandDescription=Blokuje všechny druhy teleportace. tptoggleCommandUsage=/<command> [hráč] [on|off] tptoggleCommandUsage1=/<command> [hráč] +tptoggleCommandUsageDescription=Přepne, jestli jsou pro tebe, nebo pro jiného hráče, pokud je uveden, povoleny teleporty tradeSignEmpty=§4Tato obchodní cedule již nemá pro tebe nic dostupného. tradeSignEmptyOwner=§4Z této obchodní cedule už není co brát. treeCommandDescription=Vytvoří strom na místě, kam se díváš. treeCommandUsage=/<command> <tree|birch|redwood|redmushroom|brownmushroom|jungle|junglebush|swamp> treeCommandUsage1=/<command> <tree|birch|redwood|redmushroom|brownmushroom|jungle|junglebush|swamp> +treeCommandUsage1Description=Vytvoří strom určitého typu na bloku, na který se díváš treeFailure=§4Vytváření stromu selhalo. Zkus to znovu na trávě nebo na hlíně. treeSpawned=§6Strom vytvořen. true=§aano§r @@ -1170,15 +1359,23 @@ unableToSpawnMob=§4Nelze vyvolat stvoření. unbanCommandDescription=Odblokuje daného hráče. unbanCommandUsage=/<command> <hráč> unbanCommandUsage1=/<command> <hráč> +unbanCommandUsage1Description=Odbanuje určitého hráče unbanipCommandDescription=Odblokuje danou IP adresu. unbanipCommandUsage=/<command> [adresa] unbanipCommandUsage1=/<command> [adresa] +unbanipCommandUsage1Description=Odbanuje určitou IP adresu unignorePlayer=§6Přestal jsi ignorovat hráče§c {0}§6. unknownItemId=§4Neznámé ID předmětu\:§r {0}§4. unknownItemInList=§4Neznámý předmět {0} v seznamu {1}. unknownItemName=§4Neznámý název předmětu\:§r {0}§4. unlimitedCommandDescription=Umožňuje neomezené umisťování předmětů. unlimitedCommandUsage=/<command> <list|item|clear> [hráč] +unlimitedCommandUsage1=/<command> list [hráč] +unlimitedCommandUsage1Description=Zobrazí seznam neomezených předmětů pro tebe nebo jiného hráče, pokud je uveden +unlimitedCommandUsage2=/<command> <předmět> [hráč] +unlimitedCommandUsage2Description=Přepíná, jestli je daný předmět pro tebe nebo jiného hráče, pokud je uveden, neomezený +unlimitedCommandUsage3=/<command> clear [hráč] +unlimitedCommandUsage3Description=Vymaže všechny neomezené předměty pro tebe, nebo jiného hráče, pokud je uveden unlimitedItemPermission=§4Nemáš oprávnění na neomezené množství předmětu §c{0}§4. unlimitedItems=§6Neomezené předměty\:§r unmutedPlayer=§6Hráč §c{0}§6 může znovu hovořit. @@ -1207,6 +1404,7 @@ vanish=§6Neviditelnost pro hráče §c{0}§6\: {1} vanishCommandDescription=Skrýt se před ostatními hráči. vanishCommandUsage=/<command> [hráč] [on|off] vanishCommandUsage1=/<command> [hráč] +vanishCommandUsage1Description=Přepne vanish tobě, nebo jinému hráči, pokud je uveden vanished=§6Nyní jsi zcela neviditelný pro běžné hráče a skrytý z herních příkazů. versionCheckDisabled=§6Kontrola aktualizací je v konfiguračním souboru vypnuta. versionCustom=§6Nelze zkontrolovat tvou verzi\! Vlastní sestavení? Informace o sestavení\: §c{0}§6. @@ -1237,11 +1435,15 @@ walking=chůze warpCommandDescription=Seznam všech warpů nebo warp na zadané místo. warpCommandUsage=/<command> <číslo_stránky|warp> [hráč] warpCommandUsage1=/<command> [strana] +warpCommandUsage1Description=Vypíše seznam všech warpů na první, nebo uvedené stránce +warpCommandUsage2=/<command> <warp> [hráč] +warpCommandUsage2Description=Teleportuje na warp tebe, nebo určitého hráče warpDeleteError=§4Vyskytl se problém s mazáním souboru warpu. warpInfo=§6Informace o warpu§c {0}§6\: warpinfoCommandDescription=Najde informace o poloze pro zadaný warp. warpinfoCommandUsage=/<command> <warp> warpinfoCommandUsage1=/<command> <warp> +warpinfoCommandUsage1Description=Poskytne informace o daném warpu warpingTo=§6Přenášení na§c {0}§6. warpList={0} warpListPermission=§4Nemáš oprávnění vypsat seznam warpů. @@ -1251,6 +1453,8 @@ warps=§6Warpy\:§r {0} warpsCount=§6Existuje §c{0} §6warpů. Zobrazuje se strana §c{1} §6z §c{2}§6. weatherCommandDescription=Nastaví počasí. weatherCommandUsage=/<command> <storm/sun> [trvání] +weatherCommandUsage1=/<command> <storm|sun> [trvání] +weatherCommandUsage1Description=Nastaví daný typ počasí na nepovinnou dobu warpSet=§6Warp§c {0} §6vytvořen. warpUsePermission=§4Nemáš oprávnění používat tento warp. weatherInvalidWorld=Svět s názvem {0} nebyl nalezen\! @@ -1267,6 +1471,7 @@ whoisBanned=§6 - Zablokován\:§r {0} whoisCommandDescription=Zjistí uživatelské jméno ukryté pod přezdívkou. whoisCommandUsage=/<command> <přezdívka> whoisCommandUsage1=/<command> <hráč> +whoisCommandUsage1Description=Poskytne základní informace o určitém hráči whoisExp=§6 - Zkušenosti\:§r {0} (Úroveň {1}) whoisFly=§6 - Létání\:§r {0} ({1}) whoisSpeed=§6 - Rychlost\:§r {0} @@ -1292,9 +1497,20 @@ workbenchCommandUsage=/<command> worldCommandDescription=Přepínání mezi světy. worldCommandUsage=/<command> <svět> worldCommandUsage1=/<command> +worldCommandUsage1Description=Teleportuje tě na odpovídající umístění v netheru nebo v overworldu +worldCommandUsage2=/<command> <svět> +worldCommandUsage2Description=Teleportuje tě na umístění v daném světě worth=§aStack {0} ceny §c{1}§a ({2} kus(u) za {3} kus) worthCommandDescription=Vypočte hodnotu předmětů v ruce nebo předmětů zadaných. worthCommandUsage=/<command> <<název_předmětu>|<id>|hand|inventory|blocks> [-][počet] +worthCommandUsage1=/<command> <jméno předmětu> [množství] +worthCommandUsage1Description=Spočítá hodnotu všech (nebo daného množství, pokud je uvedeno) daných předmětů ve tvém inventáři +worthCommandUsage2=/<command> hand [množství] +worthCommandUsage2Description=Spočítá hodnotu všech (nebo daného množství, pokud je uvedeno) držených předmětů +worthCommandUsage3=/<příkaz> all +worthCommandUsage3Description=Spočítá hodnotu úplně všech předmětů ve tvém inventáři +worthCommandUsage4=/<command> blocks [množství] +worthCommandUsage4Description=Spočítá hodnotu všech (nebo daného množství, pokud je uvedeno) bloků ve tvém inventáři worthMeta=§aStack {0} s metadaty {1} ceny §c{2}§a ({3} kus(u) za {4} kus) worthSet=§6Cena nastavena year=rok diff --git a/Essentials/src/main/resources/messages_de.properties b/Essentials/src/main/resources/messages_de.properties index 137c7970376..e8581b33c6d 100644 --- a/Essentials/src/main/resources/messages_de.properties +++ b/Essentials/src/main/resources/messages_de.properties @@ -11,7 +11,7 @@ afkCommandUsage=/<command> [spieler/nachricht...] afkCommandUsage1=/<command> [nachricht] afkCommandUsage1Description=Schaltet deinen AFK Status mit einem optionalen Grund ein afkCommandUsage2=/<command> <player> [message] -afkCommandUsage2Description=Schaltet den AFK Status eines angegebenen Spieler mit einem optionalen Grund ein +afkCommandUsage2Description=Schaltet den AFK Status des angegebenen Spielers mit einem optionalen Grund ein alertBroke=zerstört\: alertFormat=§3[{0}] §r {1} §6 {2} bei\: {3} alertPlaced=platziert\: @@ -143,6 +143,7 @@ clearinventoryCommandUsage3Description=Löscht alles (oder die angegebene Anzahl clearinventoryconfirmtoggleCommandDescription=Bestimmt, ob du Inventarleerungen bestätigen musst. clearinventoryconfirmtoggleCommandUsage=/<command> commandArgumentOptional=§7 +commandArgumentOr=§c commandArgumentRequired=§e commandCooldown=§cDu kannst diesen Command nicht ausführen für {0}. commandDisabled=§cDer Befehl§6 {0}§c ist deaktiviert. @@ -181,6 +182,7 @@ createkitCommandUsage1Description=Erstellt ein Kit mit angegebenen Namen und Abk createKitFailed=§4Beim Erstellen des Kits ist ein Fehler aufgetreten {0}. createKitSeparator=§m----------------------- createKitSuccess=§6Kit erstellt\: §f{0}\n§6Verzögerung\: §f{1}\n§6Link\: §f{2}\n§6Es werden Inhalte aus dem oben stehenden Link in deine kits.yml kopiert. +createKitUnsupported=§4NBT-Item-Serialisierung wurde aktiviert, aber dieser Server läuft nicht unter Paper 1.15.2+. Gehe zurück zur Standardserialisierung. creatingConfigFromTemplate=Erstelle Konfiguration aus der Vorlage\: {0} creatingEmptyConfig=Erstelle eine leere Konfiguration\: {0} creative=Kreativmodus @@ -231,6 +233,9 @@ destinationNotSet=Ziel nicht gesetzt\! disabled=deaktiviert disabledToSpawnMob=§4Das Spawnen dieses Mobs ist in der Config deaktiviert. disableUnlimited=Unbegrenztes Platzieren von§c {0}§6 für§c {1}§6 deaktiviert. +discordbroadcastCommandDescription=Sendet eine Nachricht an den angegebenen Discord-Kanal. +discordCommandUsage=/<command> +discordCommandUsage1=/<command> discordCommandExecuteDescription=Führt einen Konsolen-Befehl auf dem Minecraft-Server aus. discordCommandExecuteArgumentCommand=Der auszuführende Befehl discordCommandExecuteReply=Führe Befehl aus\: "/{0}" @@ -243,7 +248,16 @@ discordErrorCommand=Du hast deinen Bot falsch zu deinem Server hinzugefügt. Bit discordErrorCommandDisabled=Dieser Befehl ist deaktiviert\! discordErrorLogin=Beim Anmelden in Discord ist ein Fehler aufgetreten, was dazu geführt hat, dass das Plugin sich selbst deaktiviert hat\: \n{0} discordErrorLoggerInvalidChannel=Discord Konsolen-Protokollierung wurde aufgrund einer ungültigen Kanaldbeschreibung deaktiviert\! Wenn du vorhast sie zu deaktivieren, setze die Kanal-ID auf "none". Andernfalls überprüfe, ob deine Kanal-ID korrekt ist. +discordErrorLoggerNoPerms=Discord Konsolen-Logger wurde aufgrund unzureichenden Berechtigungen deaktiviert\! Bitte stelle sicher, dass dein Bot die "Manage Webhooks"-Berechtigung auf dem Server hat. Nach dem Beheben führen Sie "/ess reload" aus. +discordErrorNoGuild=Ungültige oder fehlende Server-ID\! Bitte folgen Sie dem Tutorial in der Konfiguration, um das Plugin einzurichten. +discordErrorNoGuildSize=Ihr Bot ist in keinem Server\! Bitte folgen Sie dem Tutorial in der Konfiguration, um das Plugin einzurichten. +discordErrorNoPerms=Dein Bot kann in keinem Kanal sehen oder sprechen\! Bitte stelle sicher, dass dein Bot Lese- und Schreibrechte in allen Kanälen besitzt, die du verwenden möchtest. +discordErrorNoToken=Kein Token bereitgestellt\! Bitte folgen Sie dem Tutorial in der Konfiguration, um das Plugin einzurichten. +discordErrorWebhook=Beim Senden von Nachrichten an Ihren Konsolenkanal ist ein Fehler aufgetreten\! Dies wurde wahrscheinlich durch das versehentliche Löschen Ihres Webhook der Konsole verursacht. Dies kann üblicherweise durch das Überprüfen der "Manage Webhooks"-Berechtigung und dem Ausführen von "/ess reload" behoben werden. +discordLoggingIn=Versuche sich bei Discord anzumelden... discordLoggingInDone=Erfolgreich angemeldet als {0} +discordNoSendPermission=Kann keine Nachricht im Kanal senden\: \#{0} Bitte stellen Sie sicher, dass der Bot die Berechtigung "Send Messages" in diesem Kanal hat\! +discordReloadInvalid=Versucht die EssentialsX Discord Konfiguration neu zu laden, während das Plugin in einem ungültigen Zustand ist\! Wenn du deine Konfiguration geändert hast, starte deinen Server neu. disposal=Beseitigung disposalCommandDescription=Öffnet ein portables Entsorgungsmenü. disposalCommandUsage=/<command> @@ -255,6 +269,7 @@ durability=§6Dieses Werkzeug kann noch §c{0}§6 mal benutzt werden. east=O ecoCommandDescription=Verwaltet die Sever-Wirtschaft. ecoCommandUsage=/<command> <give|take|set|reset> <spieler> <anzahl> +ecoCommandUsage1Description=Gibt dem angegebenen Spieler den angegebenen Betrag an Geld editBookContents=§eDu darfst den Inhalt dieses Buches jetzt bearbeiten. enabled=aktiviert enchantCommandDescription=Verzaubert den Gegenstand, den ein Benutzer hält. @@ -709,7 +724,7 @@ pingCommandDescription=§b..\:\:§4Pông§b\:\:..\! pingCommandUsage=/<command> playerBanIpAddress=§6Spieler§c {0} §6hat die IP-Adresse§c {1} §6für\: §c{2} §6gesperrt. playerTempBanIpAddress=§6Spieler§c {0} §6sperrte IP-Adresse §c{1}§6 temporär für §c{2}§6\: §c{3}§6. -playerBanned=\\u00a76Spieler\\u00a7c {0}\\u00a76 hat\\u00a7c {1}\\u00a76 wegen\\u00a7c {2}\\u00a76 gebannt. +playerBanned=§6Spieler§c {0} §6hat§c {1} §6wegen§c {2} §6gebannt. playerJailed=§6Spieler§c {0} §6eingesperrt. playerJailedFor=§6Spieler§c {0}§6für§c {1}§6 eingesperrt. playerKicked=§6Spieler§c {0}§6 hat§c {1}§6 für§c {2}§6 gekickt. @@ -723,6 +738,9 @@ playerTempBanned=§6Spieler§c {0}§6 hat§c {1}§6 temporär für§c {2}§6 ges playerUnbanIpAddress=§6Spieler§c {0}§6 hat IP entsperrt\:§c {1} playerUnbanned=§6Spieler§c {0} §6hat§c {1}§6 entsperrt playerUnmuted=§6Du bist nicht mehr gemutet. +playtimeCommandUsage=/<command> [spieler] +playtimeCommandUsage1=/<command> +playtimeCommandUsage2=/<command> <spieler> pong=§b..\:\:§4Pông§b\:\:..\! posPitch=§6Pitch\: {0} (Neigewinkel) possibleWorlds=§6Mögliche Welten sind die Nummern §c0§6 bis §c{0}§6. @@ -999,9 +1017,9 @@ tpacancelCommandDescription=Alle ausstehenden Teleportierungsanfragen abbrechen. tpacancelCommandUsage=/<command> [spieler] tpacancelCommandUsage1=/<command> tpacancelCommandUsage2=/<command> <spieler> -tpacceptCommandDescription=Anzeptiert eine Teleportationsanfrage. tpacceptCommandUsage=/<command> [andererspieler] tpacceptCommandUsage1=/<command> +tpacceptCommandUsage2=/<command> <spieler> tpahereCommandDescription=Bittet den angegebenen Spieler, sich zu dir zu teleportieren. tpahereCommandUsage=/<command> <spieler> tpahereCommandUsage1=/<command> <spieler> @@ -1011,9 +1029,9 @@ tpallCommandUsage1=/<command> [spieler] tpautoCommandDescription=Akzeptiere Teleportationsanfragen automatisch. tpautoCommandUsage=/<command> [spieler] tpautoCommandUsage1=/<command> [spieler] -tpdenyCommandDescription=Eine Teleportationsanfrage ablehnen. tpdenyCommandUsage=/<command> tpdenyCommandUsage1=/<command> +tpdenyCommandUsage2=/<command> <spieler> tphereCommandDescription=Teleportiere einen Spieler zu dir. tphereCommandUsage=/<command> <spieler> tphereCommandUsage1=/<command> <spieler> diff --git a/Essentials/src/main/resources/messages_el.properties b/Essentials/src/main/resources/messages_el.properties index 6b6dde24e68..29a144c25bf 100644 --- a/Essentials/src/main/resources/messages_el.properties +++ b/Essentials/src/main/resources/messages_el.properties @@ -168,6 +168,8 @@ depthAboveSea=§6Βρίσκεσται§c {0} §6κύβο(ους) πάνω από depthBelowSea=§6Βρίσκεσται§c {0} §6κύβο(ους) κάτω από το επίπεδο της θάλασσας. destinationNotSet=Προορισμός δεν ορίστηκε\! disabled=απενεργοποιημένο +discordCommandUsage=/<command> +discordCommandUsage1=/<command> disposalCommandUsage=/<command> distance=§6Απόσταση\: {0} dontMoveMessage=§6Η τηλεμεταφορά θα ξεκινήσει σε§c {0}§6. Μην κουνηθείτε. @@ -289,6 +291,8 @@ payconfirmtoggleCommandUsage=/<command> paytoggleCommandUsage=/<command> [παίκτης] paytoggleCommandUsage1=/<command> [παίκτης] pingCommandUsage=/<command> +playtimeCommandUsage=/<command> [παίκτης] +playtimeCommandUsage1=/<command> powertooltoggleCommandUsage=/<command> recipeNothing=τίποτα repairCommandUsage1=/<command> diff --git a/Essentials/src/main/resources/messages_en.properties b/Essentials/src/main/resources/messages_en.properties index 364e2ff70da..5113fa75829 100644 --- a/Essentials/src/main/resources/messages_en.properties +++ b/Essentials/src/main/resources/messages_en.properties @@ -143,6 +143,7 @@ clearinventoryCommandUsage3Description=Clears all (or the specified amount) of t clearinventoryconfirmtoggleCommandDescription=Toggles whether you are prompted to confirm inventory clears. clearinventoryconfirmtoggleCommandUsage=/<command> commandArgumentOptional=§7 +commandArgumentOr=§c commandArgumentRequired=§e commandCooldown=§cYou cannot type that command for {0}. commandDisabled=§cThe command§6 {0}§c is disabled. @@ -232,6 +233,8 @@ destinationNotSet=Destination not set\! disabled=disabled disabledToSpawnMob=§4Spawning this mob was disabled in the config file. disableUnlimited=§6Disabled unlimited placing of§c {0} §6for§c {1}§6. +discordCommandUsage=/<command> +discordCommandUsage1=/<command> discordCommandExecuteDescription=Executes a console command on the Minecraft server. discordCommandExecuteArgumentCommand=The command to be executed discordCommandExecuteReply=Executing command\: "/{0}" @@ -862,6 +865,9 @@ playerTempBanned=§6Player §c{0}§6 temporarily banned §c{1}§6 for §c{2}§6\ playerUnbanIpAddress=§6Player§c {0} §6unbanned IP\:§c {1} playerUnbanned=§6Player§c {0} §6unbanned§c {1} playerUnmuted=§6You have been unmuted. +playtimeCommandUsage=/<command> [player] +playtimeCommandUsage1=/<command> +playtimeCommandUsage2=/<command> <player> pong=Pong\! posPitch=§6Pitch\: {0} (Head angle) possibleWorlds=§6Possible worlds are the numbers §c0§6 through §c{0}§6. @@ -1252,10 +1258,10 @@ tpacancelCommandUsage1=/<command> tpacancelCommandUsage1Description=Cancels all your outstanding teleport requests tpacancelCommandUsage2=/<command> <player> tpacancelCommandUsage2Description=Cancels all your outstanding teleport request with the specified player -tpacceptCommandDescription=Accepts a teleport request. tpacceptCommandUsage=/<command> [otherplayer] tpacceptCommandUsage1=/<command> -tpacceptCommandUsage1Description=Accepts an incoming teleport request +tpacceptCommandUsage2=/<command> <player> +tpacceptCommandUsage3=/<command> * tpahereCommandDescription=Request that the specified player teleport to you. tpahereCommandUsage=/<command> <player> tpahereCommandUsage1=/<command> <player> @@ -1268,10 +1274,10 @@ tpautoCommandDescription=Automatically accept teleportation requests. tpautoCommandUsage=/<command> [player] tpautoCommandUsage1=/<command> [player] tpautoCommandUsage1Description=Toggles if tpa requests are auto accepted for yourself or another player if specified -tpdenyCommandDescription=Reject a teleport request. tpdenyCommandUsage=/<command> tpdenyCommandUsage1=/<command> -tpdenyCommandUsage1Description=Rejects an incoming teleport request +tpdenyCommandUsage2=/<command> <player> +tpdenyCommandUsage3=/<command> * tphereCommandDescription=Teleport a player to you. tphereCommandUsage=/<command> <player> tphereCommandUsage1=/<command> <player> diff --git a/Essentials/src/main/resources/messages_en_GB.properties b/Essentials/src/main/resources/messages_en_GB.properties index a14a4fe85c2..7a9fa1a50a7 100644 --- a/Essentials/src/main/resources/messages_en_GB.properties +++ b/Essentials/src/main/resources/messages_en_GB.properties @@ -143,6 +143,7 @@ clearinventoryCommandUsage3Description=Clears all (or the specified amount) of t clearinventoryconfirmtoggleCommandDescription=Toggles whether you are prompted to confirm inventory clears. clearinventoryconfirmtoggleCommandUsage=/<command> commandArgumentOptional=§7 +commandArgumentOr=§c commandArgumentRequired=§e commandCooldown=§cYou cannot type that command for {0}. commandDisabled=§cThe command§6 {0}§c is disabled. @@ -232,6 +233,8 @@ destinationNotSet=Destination not set\! disabled=disabled disabledToSpawnMob=§4Spawning this mob was disabled in the config file. disableUnlimited=§6Disabled unlimited placing of§c {0} §6for§c {1}§6. +discordCommandUsage=/<command> +discordCommandUsage1=/<command> discordCommandExecuteDescription=Executes a console command on the Minecraft server. discordCommandExecuteArgumentCommand=The command to be executed discordCommandExecuteReply=Executing command\: "/{0}" @@ -260,6 +263,12 @@ disposalCommandUsage=/<command> distance=§6Distance\: {0} dontMoveMessage=§6Teleportation will commence in§c {0}§6. Don''t move. downloadingGeoIp=Downloading GeoIP database... this might take a while (country\: 1.7 MB, city\: 30MB) +dumpConsoleUrl=A server dump was created\: §c{0} +dumpCreating=§6Creating server dump... +dumpDeleteKey=§6If you want to delete this dump at a later date, use the following deletion key\: §c{0} +dumpError=§4Error while creating dump §c{0}§4. +dumpErrorUpload=§4Error while uploading §c{0}§4\: §c{1} +dumpUrl=§6Created server dump\: §c{0} duplicatedUserdata=Duplicated userdata\: {0} and {1}. durability=§6This tool has §c{0}§6 uses left. east=E @@ -309,6 +318,7 @@ essentialsCommandUsage6=/<command> cleanup essentialsCommandUsage6Description=Cleans up old userdata essentialsCommandUsage7=/<command> homes essentialsCommandUsage7Description=Manages user homes +essentialsCommandUsage8Description=Generates a server dump with the requested information essentialsHelp1=The file is broken and Essentials can''t open it. Essentials is now disabled. If you can''t fix the file yourself, go to http\://tiny.cc/EssentialsChat essentialsHelp2=The file is broken and Essentials can''t open it. Essentials is now disabled. If you can''t fix the file yourself, either type /essentialshelp in game or go to http\://tiny.cc/EssentialsChat essentialsReload=§6Essentials reloaded§c {0}. @@ -862,6 +872,9 @@ playerTempBanned=§6Player §c{0}§6 temporarily banned §c{1}§6 for §c{2}§6\ playerUnbanIpAddress=§6Player§c {0} §6unbanned IP\:§c {1} playerUnbanned=§6Player§c {0} §6unbanned§c {1} playerUnmuted=§6You have been unmuted. +playtimeCommandUsage=/<command> [player] +playtimeCommandUsage1=/<command> +playtimeCommandUsage2=/<command> <player> pong=Pong\! posPitch=§6Pitch\: {0} (Head angle) possibleWorlds=§6Possible worlds are the numbers §c0§6 through §c{0}§6. @@ -1252,10 +1265,10 @@ tpacancelCommandUsage1=/<command> tpacancelCommandUsage1Description=Cancels all your outstanding teleport requests tpacancelCommandUsage2=/<command> <player> tpacancelCommandUsage2Description=Cancels all your outstanding teleport request with the specified player -tpacceptCommandDescription=Accepts a teleport request. tpacceptCommandUsage=/<command> [otherplayer] tpacceptCommandUsage1=/<command> -tpacceptCommandUsage1Description=Accepts an incoming teleport request +tpacceptCommandUsage2=/<command> <player> +tpacceptCommandUsage3=/<command> * tpahereCommandDescription=Request that the specified player teleport to you. tpahereCommandUsage=/<command> <player> tpahereCommandUsage1=/<command> <player> @@ -1268,10 +1281,10 @@ tpautoCommandDescription=Automatically accept teleportation requests. tpautoCommandUsage=/<command> [player] tpautoCommandUsage1=/<command> [player] tpautoCommandUsage1Description=Toggles if tpa requests are auto accepted for yourself or another player if specified -tpdenyCommandDescription=Reject a teleport request. tpdenyCommandUsage=/<command> tpdenyCommandUsage1=/<command> -tpdenyCommandUsage1Description=Rejects an incoming teleport request +tpdenyCommandUsage2=/<command> <player> +tpdenyCommandUsage3=/<command> * tphereCommandDescription=Teleport a player to you. tphereCommandUsage=/<command> <player> tphereCommandUsage1=/<command> <player> diff --git a/Essentials/src/main/resources/messages_es.properties b/Essentials/src/main/resources/messages_es.properties index 3b3d9c8aa84..daf0dfb9428 100644 --- a/Essentials/src/main/resources/messages_es.properties +++ b/Essentials/src/main/resources/messages_es.properties @@ -135,11 +135,15 @@ clearInventoryConfirmToggleOn=§6You will now be prompted to confirm inventory c clearinventoryCommandDescription=Desecha todos los objetos de tu inventario. clearinventoryCommandUsage=/<command> [jugador|*] [item[\:<data>]|*|**] [cantidad] clearinventoryCommandUsage1=/<command> +clearinventoryCommandUsage1Description=Elimina todos los objetos de tu inventario clearinventoryCommandUsage2=/<command> <jugador> +clearinventoryCommandUsage2Description=Elimina todo los objetos del inventario del jugador especificado clearinventoryCommandUsage3=/<comando> <jugador> <objeto> [cantidad] +clearinventoryCommandUsage3Description=Elimina todos (o la cantidad especificada) los objetos del inventario especificado del jugador clearinventoryconfirmtoggleCommandDescription=Alterna la configuración de confirmación al eliminar el inventario. clearinventoryconfirmtoggleCommandUsage=/<command> commandArgumentOptional=§7 +commandArgumentOr=§c commandArgumentRequired=§e commandCooldown=§cNo puedes usar ese comando durante {0}. commandDisabled=§cEl comando§6 {0}§c está desactivado. @@ -157,7 +161,9 @@ compassCommandUsage=/<command> condenseCommandDescription=Condensa ítems en bloques más compactos. condenseCommandUsage=/<comando> [objeto] condenseCommandUsage1=/<command> +condenseCommandUsage1Description=Condensa todos los objetos en tu inventario condenseCommandUsage2=/<command> <item> +condenseCommandUsage2Description=Condensa el objeto especificado en tu inventario configFileMoveError=Error al mover config.yml a la carpeta de la copia de seguridad. configFileRenameError=Error al renombrar archivo temp a config.yml. confirmClear=§7To §lCONFIRM§7 inventory clear, please repeat command\: §6{0} @@ -176,6 +182,7 @@ createkitCommandUsage1Description=Crea un kit con el nombre y tiempo de espera d createKitFailed=§4Ocurrio un error durante la creacion del kit {0}. createKitSeparator=§m----------------------- createKitSuccess=§6Kit creado\: §f{0}\n§6Tiempo de espera\: §f{1}\n§6Link\: §f{2}\n§6Copia el contenido del link de arriba en tu archivo kits.yml. +createKitUnsupported=§4La serialización de objetos NBT ha sido activada, pero este servidor no está ejecutando Paper 1.15.2+. Regresando a la serialización estándar. creatingConfigFromTemplate=Creando configuración desde la plantilla\: {0} creatingEmptyConfig=Creando configuración vacía\: {0} creative=creativo @@ -226,6 +233,18 @@ destinationNotSet=¡Destino no establecido\! disabled=desactivado disabledToSpawnMob=§4El spawn de este mob está deshabilitado en la configuración. disableUnlimited=Desactivada colocación ilimitada de §c {0} §6para§c {1}§6. +discordbroadcastCommandDescription=Anuncia un mensaje al canal especificado de Discord. +discordbroadcastCommandUsage=/<command> <channel> <msg> +discordbroadcastCommandUsage1=/<command> <channel> <msg> +discordbroadcastCommandUsage1Description=Envía el mensaje dado al canal de Discord especificado +discordbroadcastInvalidChannel=§4El canal de Discord §c{0}§4 no existe. +discordbroadcastPermission=§4No tienes permiso para enviar mensajes al canal §c{0}§4. +discordbroadcastSent=§6Mensaje enviado a §c{0}§6 +discordCommandDescription=Envía el enlace de invitación a Discord al jugador. +discordCommandLink=§6¡Únete a nuestro servidor de Discord en §c{0}§6\! +discordCommandUsage=/<command> +discordCommandUsage1=/<command> +discordCommandUsage1Description=Envía el enlace de invitación a Discord al jugador discordCommandExecuteDescription=Ejecuta un comando de consola en el servidor de Minecraft. discordCommandExecuteArgumentCommand=El comando a ejecutar discordCommandExecuteReply=Ejecutando comando\: «/{0}» @@ -242,6 +261,8 @@ discordErrorLoggerNoPerms=¡El identificador de la consola de Discord se ha desa discordErrorNoGuild=¡La id. del servidor no se encuentra o no es válida\! Sigue el tutorial de configuración para poner en marcha el plugin. discordErrorNoGuildSize=¡Tu bot no está en ningún servidor\! Sigue el tutorial de configuración para poner en marcha el plugin. discordErrorNoPerms=¡Tu bot no puede ver ni hablar en ningún canal\! Asegúrate de que tu bot tiene permisos de lectura y escritura en todos los canales que quieras usar. +discordErrorNoPrimary=No has definido un canal principal o el que has definido no es válido. Volviendo al canal por defecto\: \#{0}. +discordErrorNoPrimaryPerms=Tu bot no puede hablar en tu canal principal, \#{0}. Asegúrate de que tu bot tiene permisos de lectura y escritura en todos los canales que quieras que use. discordErrorNoToken=¡No hay token\! Sigue el tutorial de configuración para poner en marcha el plugin. discordErrorWebhook=¡Se ha producido un error al enviar mensajes al canal de la consola\! Esto puede deberse a que se haya eliminado accidentalmente tu webhook de consola. Esto se puede corregir asegurándote de que tu bot tiene permiso para «Administrar webhooks» y ejecutar «/ess reload». discordLoggingIn=Intentando iniciar sesión en Discord... @@ -254,6 +275,12 @@ disposalCommandUsage=/<command> distance=§6Distancia\: {0} dontMoveMessage=§6El teletransporte comenzará en§c {0}§6. Por favor, no te muevas. downloadingGeoIp=Descargando base de datos de GeoIP... Puede tardar unos minutos (países\: 1.7 MB, ciudades\: 30 MB) +dumpConsoleUrl=Se ha creado un volcado del servidor\: §c{0} +dumpCreating=§6Creando volcado del servidor... +dumpDeleteKey=§6Si quieres eliminar este volcado más adelante, usa la siguiente tecla de eliminación\: §c{0} +dumpError=§4Error al crear el volcado §c{0}§4. +dumpErrorUpload=§4Error al subir §c{0}§4\: §c{1} +dumpUrl=§6Se ha creado el volcado del servidor\: §c{0} duplicatedUserdata=Datos de usuario duplicados\: {0} y {1} durability=§7Esta herramienta tiene §c{0}§7 usos restantes. east=E @@ -303,6 +330,8 @@ essentialsCommandUsage6=/<comando> cleanup essentialsCommandUsage6Description=Limpia los datos de usuario antiguos essentialsCommandUsage7=/<comando> homes essentialsCommandUsage7Description=Administra casas de usuarios +essentialsCommandUsage8=/<command> dump [all] [config] [discord] [kits] [log] +essentialsCommandUsage8Description=Genera un volcado del servidor con la información solicitada essentialsHelp1=Archivo corrupto, no es posible abrirlo. Essentials está ahora desactivado. Si no puedes arreglar el archivo, ve a http\://tiny.cc/EssentialsChat essentialsHelp2=Archivo corrupto, no es posible abrirlo. Essentials está ahora desactivado. Si no puedes arreglar el archivo, escribe /essentialshelp dentro del juego o ve a http\://tiny.cc/EssentialsChat essentialsReload=§6Essentials ha sido recargado. La versión es§c {0}. @@ -316,10 +345,12 @@ expCommandUsage2Description=Establece el xp del jugador mencionado a la cantidad expCommandUsage3=/<command> show <jugador> expCommandUsage4Description=Muestra la cantidad de xp que el jugador mencionado tiene expCommandUsage5=/<command> reset <jugador> +expCommandUsage5Description=Restablece la experiencia del jugador a 0 expSet=§c{0} §6ahora tiene§c {1} §6de exp. extCommandDescription=Extingue el fuego de un jugador. extCommandUsage=/<command> [jugador] extCommandUsage1=/<command> [jugador] +extCommandUsage1Description=Extingue el fuego de ti mismo o de otro jugador si se especifica extinguish=§6Te has suicidado. extinguishOthers=§7Has matado a {0}. failedToCloseConfig=Error al cerrar configuración {0}. @@ -330,6 +361,7 @@ feed=§6Tu apetito está satisfecho. feedCommandDescription=Satisface el hambre. feedCommandUsage=/<command> [jugador] feedCommandUsage1=/<command> [jugador] +feedCommandUsage1Description=Completamente te alimentas a ti mismo o a otro jugador si se especifica feedOther=§6Satisficiste el apetito de §c{0}§6. fileRenameError=Error al renombrar el archivo {0} fireballCommandDescription=Lanza una bola de fuego u otros proyectiles variados. @@ -342,9 +374,13 @@ fireworkColor=§4Parámetros inválidos. Inserta primero el color. fireworkCommandDescription=Te permite modificar un stack de fuegos artificiales. fireworkCommandUsage=/<command> <<meta param>|power [cantidad]|clear|fire [cantidad]> fireworkCommandUsage1=/<command> clear +fireworkCommandUsage1Description=Limpia todos los efectos de tus fuegos artificiales fireworkCommandUsage2=/<command> power <cantidad> +fireworkCommandUsage2Description=Establece el poder de los fuegos artificiales fireworkCommandUsage3=/<command> fire [cantidad] +fireworkCommandUsage3Description=Lanza una, o la cantidad especificada, copias de los fuegos artificiales fireworkCommandUsage4=/<command> <meta> +fireworkCommandUsage4Description=Añade el efecto dado a los fuegos artificiales fireworkEffectsCleared=§7Borrados todos los efectos. fireworkSyntax=§7Parametros de firework\:§c color\:<color> [color\:<color>] [forma\:<shape>] [efecto de explosión\:<effect>]\n§7Para usar múltiples colores/efectos, separa los nombres mediante comas\: §cred,blue,pink\n§7Formas\:§c star, ball, large, creeper, burst §6Efectos\:§c trail, twinkle. fixedHomes=Se han eliminado las casas no válidas. @@ -352,6 +388,7 @@ fixingHomes=Eliminando casas no válidas... flyCommandDescription=¡Despega, y a volar\! flyCommandUsage=/<command> [jugador] [on|off] flyCommandUsage1=/<command> [jugador] +flyCommandUsage1Description=Alterna el vuelo de ti mismo o de otro jugador si se especifica flying=volando flyMode=§6Modo de vuelo§c {0} §6para§c {1}§6. foreverAlone=§cNo tienes nadie a quien puedas responder. @@ -363,6 +400,7 @@ gameModeInvalid=§4Necesitas especificar un jugador/modo válido. gamemodeCommandDescription=Cambia el modo de juego de un jugador. gamemodeCommandUsage=/<command> <survival|creative|adventure|spectator> [jugador] gamemodeCommandUsage1=/<command> <survival|creative|adventure|spectator> [jugador] +gamemodeCommandUsage1Description=Establece el modo de juego de ti mismo o de otro jugador si se especifica gcCommandDescription=Reporta memoria, tiempo de actividad e información de tick. gcCommandUsage=/<command> gcfree=§6Memoria libre\:§c {0} MB. @@ -373,18 +411,23 @@ geoipJoinFormat=§6El jugador §c{0} §6viene de §c{1}§6. getposCommandDescription=Obtiene tus coordenadas actuales o las de un jugador. getposCommandUsage=/<command> [jugador] getposCommandUsage1=/<command> [jugador] +getposCommandUsage1Description=Obtiene las coordenadas de ti mismo o de otro jugador si se especifica giveCommandDescription=Da un item a un jugador. giveCommandUsage=/<command> <jugador> <item|numeric> [cantidad [itemmeta...]] giveCommandUsage1=/<comando> <jugador> <objeto> [cantidad] +giveCommandUsage1Description=Da al jugador mencionado 64 (o la cantidad especificada) del objeto especificado +giveCommandUsage2=/<comando> <jugador> <objeto> <cantidad> <metadatos> +giveCommandUsage2Description=Da al jugador mencionado la cantidad especificada del item especificado con los metadatos especificados geoipCantFind=§c{0} §6viene de §aun país desconocido§6. geoIpErrorOnJoin=No se pudo obtener información GeoIP de {0}. Por favor, asegúrese que su llave de licencia y configuración son correctos. geoIpLicenseMissing=No se encontró una llave de licencia\! Por favor, visita https\://essentialsx.net/geoip para instrucciones de configuración. geoIpUrlEmpty=El link para descargar GeoIP esta vacio. geoIpUrlInvalid=El link para descargar GeoIP es inválido. givenSkull=§6Se te ha dado el cráneo de §c{0}§6. -godCommandDescription=Activa tus poderes místicos. +godCommandDescription=Activa tus poderes de Dios. godCommandUsage=/<command> [jugador] [on|off] godCommandUsage1=/<command> [jugador] +godCommandUsage1Description=Activa el modo dios para ti o a otro jugador si se especifica giveSpawn=§6Entregado§c {0} §6de§c {1} §6a§c {2}§6. giveSpawnFailure=§4Sin espacio, §c{0} {1} §4se perdieron. godDisabledFor=§cdeshabilitado§6 para§c {0} @@ -398,6 +441,9 @@ hatArmor=§c¡No puedes usar este ítem como sombrero\! hatCommandDescription=Obtén un nuevo y genial accesorio de cabeza. hatCommandUsage=/<command> [remove] hatCommandUsage1=/<command> +hatCommandUsage1Description=Coloca como sombrero el objeto que estés sosteniendo +hatCommandUsage2=/<command> remove +hatCommandUsage2Description=Elimina tu sombrero actual hatCurse=§4No puedes quitar un sombrero con maldición de ligamento\! hatEmpty=§4No estás usando sombrero. hatFail=§4Necesitas tener un ítem en tu mano para poder usarlo de sombrero. @@ -408,6 +454,7 @@ heal=§6Has sido curado. healCommandDescription=Te cura o al jugador especificado. healCommandUsage=/<command> [jugador] healCommandUsage1=/<command> [jugador] +healCommandUsage1Description=Te curas a ti o a otro jugador si se especifica healDead=§4¡Está muerto, no puedes curarlo\! healOther=§7Has curado a {0}. helpCommandDescription=Mira la lista de comandos disponibles. @@ -421,6 +468,7 @@ helpPlugin=§4{0}§r\: Ayuda para el plugin\: /help {1} helpopCommandDescription=Contacta administradores conectados. helpopCommandUsage=/<command> <mensaje> helpopCommandUsage1=/<command> <mensaje> +helpopCommandUsage1Description=Envía el mensaje a todos los administradores en línea holdBook=§4No tienes un libro para escribir. holdFirework=§4No tienes algun cohete al que agregar efectos. holdPotion=§4No tienes pociones a las que agregar efectos. @@ -428,7 +476,9 @@ holeInFloor=§4¡No hay suelo en el punto de aparición\! homeCommandDescription=Teletransportarte a tu casa. homeCommandUsage=/<command> [player\:][nombre] homeCommandUsage1=/<comando> <nombre> +homeCommandUsage1Description=Te teletransporta a tu casa con el nombre dado homeCommandUsage2=/<comando> <jugador>\:<nombre> +homeCommandUsage2Description=Te teletransporta a la casa del jugador especificado con el nombre dado homes=§6Hogares\:§r {0} homeConfirmation=§6Ya tienes una casa llamada §c{0}§6\!\nPara sobrescribir tu casa existente, escribe el comando de nuevo. homeSet=§7Hogar establecido. @@ -440,10 +490,14 @@ iceCommandUsage=/<command> [jugador] iceCommandUsage1=/<command> iceCommandUsage1Description=Te enfría iceCommandUsage2=/<command> <jugador> +iceCommandUsage2Description=Congela al jugador seleccionado iceCommandUsage3=/<comando> * +iceCommandUsage3Description=Congela a todos los jugadores en línea +iceOther=§6De tranquis§c {0}§6. ignoreCommandDescription=Ignorar o dejar de ignorar a otros jugadores. ignoreCommandUsage=/<command> <jugador> ignoreCommandUsage1=/<command> <jugador> +ignoreCommandUsage1Description=Desactiva o activa al jugador dado ignoredList=§6Ignorado\:§r {0} ignoreExempt=§4No puedes ignorar a este jugador. ignorePlayer=A partir de ahora ignoras al jugador {0}. @@ -478,18 +532,25 @@ inventoryClearingStack=§6Eliminado§c {0} §6de§c {1} §6de {2}§6. invseeCommandDescription=Ver el inventario de otros jugadores. invseeCommandUsage=/<command> <jugador> invseeCommandUsage1=/<command> <jugador> +invseeCommandUsage1Description=Abre el inventario del jugador especificado is=es isIpBanned=§6IP §c{0} §6está baneada. internalError=§cAn internal error occurred while attempting to perform this command. itemCannotBeSold=§4¡Ese objeto no puede ser vendido al servidor\! itemCommandDescription=Generar un elemento. itemCommandUsage=/<command> <item|numeric> [cantidad [itemmeta...]] +itemCommandUsage1=/<command> <item> [cantidad] +itemCommandUsage1Description=Te da un stack completo (o una cantidad especificada) del item especificado +itemCommandUsage2Description=Te da la cantidad especificada del item especificado con los metadatos especificados itemId=§6ID\:§c {0} itemloreClear=§6Has eliminado el lore de este objeto. itemloreCommandDescription=Editar el lore de un elemento. itemloreCommandUsage=/<command> <add/set/clear> [texto/línea] [texto] itemloreCommandUsage1=/<comando> add [texto] +itemloreCommandUsage1Description=Añade el texto dado al final del lore del objeto sostenido +itemloreCommandUsage2Description=Establece la línea especificada del lore del item sostenido al texto dado itemloreCommandUsage3=/<command> clear +itemloreCommandUsage3Description=Elimina el lore del item sostenido itemloreInvalidItem=§4Necesitas un item en la mano para editar su lore. itemloreNoLine=§4El objeto sostenido no tiene un texto de lore en línea §c{0}§4. itemloreNoLore=§4El item sostenido no contiene ningún lore. @@ -501,7 +562,9 @@ itemnameClear=§6Has eliminado el nombre de este objeto. itemnameCommandDescription=Nombra un item. itemnameCommandUsage=/<command> [nombre] itemnameCommandUsage1=/<command> +itemnameCommandUsage1Description=Elimina el nombre del item sostenido itemnameCommandUsage2=/<comando> <nombre> +itemnameCommandUsage2Description=Establece el nombre del item sostenido al texto dado itemnameInvalidItem=§cNecesitas tener un objeto en la mano para renombrarlo. itemnameSuccess=§6Has renombrado el objeto de tu mano a "§c{0}§6". itemNotEnough1=§4No tienes la suficiente cantidad del ítem para venderlo. @@ -518,10 +581,14 @@ itemType=§6Objeto\:§c {0} itemdbCommandDescription=Busca un item. itemdbCommandUsage=/<command> <item> itemdbCommandUsage1=/<command> <item> +itemdbCommandUsage1Description=Busca el item dado en la base de datos de items jailAlreadyIncarcerated=§4Ese jugador ya está en la cárcel\:§c {0} jailList=§6Jails\:§r {0} jailMessage=§c¡Por el crimen hacer, a la cárcel irás\! jailNotExist=§4Esa cárcel no existe. +jailNotifyJailed=§6El jugador§c {0} §6ha sido encarcelado por §c{1}. +jailNotifyJailedFor=§6El jugador§c {0} §6ha sido encarcelado por§c {1}§6por §c{2}§6. +jailNotifySentenceExtended=§6El tiempo en cárcel §6del jugador§c{0} §6ha sido extendido a §c{1} §6por §c{2}§6. jailReleased=§6El jugador §c{0}§6 ha salido de la cárcel. jailReleasedPlayerNotify=§7¡Has sido liberado\! jailSentenceExtended=Tiempo en la cárcel extendido a {0} @@ -537,21 +604,26 @@ jumpError=§4Eso dañaría el cerebro de tu ordenador. kickCommandDescription=Expulsa al jugador especificado con una razón. kickCommandUsage=/<command> <jugador> [razón] kickCommandUsage1=/<command> <jugador> [razón] +kickCommandUsage1Description=Expulsa al jugador especificado con una razón opcional kickDefault=Has sido expulsado del servidor\! Nota\: Revisa tu comportamiento kickedAll=§4Todos los jugadores han sido expulsados. kickExempt=§4No puedes expulsar a ese jugador. kickallCommandDescription=Expulsa a todos los jugadores del servidor excepto al emisor. kickallCommandUsage=/<command> [razón] kickallCommandUsage1=/<command> [razón] +kickallCommandUsage1Description=Expulsa a todos los jugadores con una razón opcional kill=§7Has matado a§c {0}§7. killCommandDescription=Mata al jugador especificado. killCommandUsage=/<command> <jugador> killCommandUsage1=/<command> <jugador> +killCommandUsage1Description=Mata al jugador especificado killExempt=§4No puedes matar a §c{0}§4. kitCommandDescription=Obtiene el kit especificado o ve todos los kits disponibles. kitCommandUsage=/<command> [kit] [jugador] kitCommandUsage1=/<command> +kitCommandUsage1Description=Lista de todos los kits disponibles kitCommandUsage2=/<command> <kit> [jugador] +kitCommandUsage2Description=Entrega el kit especificado a ti o a otro jugador si se especifica kitContains=§6El kit §c{0} §6contiene\: kitCost=\ §7§o({0})§r kitDelay=§m{0}§r @@ -577,6 +649,7 @@ leatherSyntax=§6Sintaxis color del cuero\:§c color\:<red>,<green>,<blue> ejemp lightningCommandDescription=El poder de Thor. Lanza un rayo al cursor o al jugador. lightningCommandUsage=/<command> [jugador] [poder] lightningCommandUsage1=/<command> [jugador] +lightningCommandUsage2=/<command> <jugador> <poder> lightningSmited=§6¡Has sido golpeado mágicamente\! lightningUse=§6Golpeando al jugador§c {0} listAfkTag=§8[Ausente]§r @@ -585,8 +658,10 @@ listAmountHidden=§6Hay§c{0}§6/§c{1}§6 de un máximo de §c{2}§6 jugadondo listCommandDescription=Lista todos los jugadores en línea. listCommandUsage=/<command> [grupo] listCommandUsage1=/<command> [grupo] +listCommandUsage1Description=Lista todos los jugadores del servvidor, o del grupo si se ha especificado listGroupTag=§6{0}§r\: listHiddenTag=§8[Oculto]§r +listRealName=({0}) loadWarpError=§4Error al cargar el Warp {0}. localFormat=[L]<{0}> {1} loomCommandDescription=Abre un telar. @@ -596,10 +671,18 @@ mailCleared=§6¡El correo ha sido limpiado\! mailClearIndex=§Debes especificar un número entre 1 y {0}. mailCommandDescription=Administra el correo inter-jugador e intra-servidor. mailCommandUsage=/<comando> [read|clear|clear [número]|send [to] [mensaje]|sendtemp [to] [fecha de caducidad] [mensaje]|sendall [mensaje]] +mailCommandUsage1=/<command> read [página] +mailCommandUsage1Description=Lee la primera (o especificada) página de tu correo mailCommandUsage2=/<comando> clear [número] mailCommandUsage2Description=Limpia todos los correos especificados +mailCommandUsage3=/<command> send <jugador> <mensaje> +mailCommandUsage3Description=Envía al jugador especificado el mensaje dado +mailCommandUsage4=/<command> sendall <mensaje> +mailCommandUsage4Description=Envía a todos los jugadores el mensaje proporcionado mailCommandUsage5=/<comando> sendtemp <jugador> <fecha de caducidad> <mensaje> mailCommandUsage5Description=Envía al jugador especificado el mensaje, el cual expirará en el tiempo de caducidad establecido +mailCommandUsage6=/<comando> sendtempall <caducidad> <mensaje> +mailCommandUsage6Description=Envía a todos los jugadores el mensaje escrito y caducará cuando se especifique. mailDelay=Demasiados correos han sido enviados en el último minuto. Máximo\: {0} mailFormatNew=§6[§r{0}§6] §6[§r{1}§6] §r{2} mailFormatNewTimed=§6[§e⚠§6] §6[§r{0}§6] §6[§r{1}§6] §r{2} @@ -620,6 +703,7 @@ mayNotJailOffline=§4No puedes encarcelar a jugadores que no están conectados. meCommandDescription=Describe una acción en el contexto del jugador. meCommandUsage=/<command> <descripción> meCommandUsage1=/<command> <descripción> +meCommandUsage1Description=Describe una acción meSender=yo meRecipient=mi minimumBalanceError=§4El balance mínimo que un jugador puede tener es {0}. @@ -655,6 +739,7 @@ msgIgnore=§c{0} §4has messages disabled. msgtoggleCommandDescription=Bloquea la recepción de mensajes privados. msgtoggleCommandUsage=/<command> [jugador] [on|off] msgtoggleCommandUsage1=/<command> [jugador] +msgtoggleCommandUsage1Description=Alterna el vuelo de ti mismo o de otro jugador si se especifica multipleCharges=§4Solo puedes aplicar una carga a este cohete. multiplePotionEffects=§4No puedes aplicarle más de un efecto a esta poción. muteCommandDescription=Silencia o deja de silenciar a un jugador. @@ -681,6 +766,8 @@ nickChanged=§6Nick cambiado. nickCommandDescription=Cambia tu apodo o el de otro jugador. nickCommandUsage=/<command> [jugador] <apodo|off> nickCommandUsage1=/<command> <apodo> +nickCommandUsage2Description=Elimina tu nick +nickCommandUsage4Description=Elimina el nick del jugador proporcionado nickDisplayName=§4Tienes que activar el cambio de nick en la configuración del plugin Essentials. nickInUse=§4Ese nick ya está en uso. Prueba a usar otro. nickNameBlacklist=§4Ese apodo no está permitido. @@ -778,6 +865,14 @@ playerTempBanned=§6El jugador §c{0}§6 ha baneado temporalmente a §c{1}§6 po playerUnbanIpAddress=§6La IP {1} ha sido desbaneada por§c {0} playerUnbanned=§c{0} §6ha desbaneado a§c {1} playerUnmuted=§6Ya no estás silenciado. +playtimeCommandDescription=Muestra el tiempo jugado de alguien +playtimeCommandUsage=/<command> [jugador] +playtimeCommandUsage1=/<command> +playtimeCommandUsage1Description=Muestra tu tiempo jugado +playtimeCommandUsage2=/<command> <jugador> +playtimeCommandUsage2Description=Muestra el tiempo jugado del jugador específico +playtime=§6Tiempo de juego\:§c {0} +playtimeOther=§6Tiempo de juego de {1}§6\:§c {0} pong=¡PONG\! posPitch=§7Giro\: {0} (Ángulo de cabeza) possibleWorlds=§6Posibles mundos son los números desde el §c0§6 hasta el §c{0}§6. @@ -1061,9 +1156,10 @@ tpacancelCommandDescription=Cancela todas las solicitudes de teletransporte pend tpacancelCommandUsage=/<command> [jugador] tpacancelCommandUsage1=/<command> tpacancelCommandUsage2=/<command> <jugador> -tpacceptCommandDescription=Acepta una solicitud de teletransporte. tpacceptCommandUsage=/<command> [otrojugador] tpacceptCommandUsage1=/<command> +tpacceptCommandUsage2=/<command> <jugador> +tpacceptCommandUsage3=/<comando> * tpahereCommandDescription=Solicita que el jugador especificado se teletransporte hacia ti. tpahereCommandUsage=/<command> <jugador> tpahereCommandUsage1=/<command> <jugador> @@ -1073,9 +1169,10 @@ tpallCommandUsage1=/<command> [jugador] tpautoCommandDescription=Automáticamente acepta solicitudes de teletransporte. tpautoCommandUsage=/<command> [jugador] tpautoCommandUsage1=/<command> [jugador] -tpdenyCommandDescription=Rechaza una solicitud de teletransporte. tpdenyCommandUsage=/<command> tpdenyCommandUsage1=/<command> +tpdenyCommandUsage2=/<command> <jugador> +tpdenyCommandUsage3=/<comando> * tphereCommandDescription=Teletransporta un jugador hacia ti. tphereCommandUsage=/<command> <jugador> tphereCommandUsage1=/<command> <jugador> diff --git a/Essentials/src/main/resources/messages_et.properties b/Essentials/src/main/resources/messages_et.properties index 5f57eaff3c1..1cb943ffebb 100644 --- a/Essentials/src/main/resources/messages_et.properties +++ b/Essentials/src/main/resources/messages_et.properties @@ -143,6 +143,7 @@ clearinventoryCommandUsage3Description=Tühjendab kõik (või määratud koguse) clearinventoryconfirmtoggleCommandDescription=Lülitab seljakoti puhastamise kinnituse küsimise sisse/välja. clearinventoryconfirmtoggleCommandUsage=/<käsklus> commandArgumentOptional=§7 +commandArgumentOr=§c commandArgumentRequired=§e commandCooldown=§cSa ei saa veel {0} seda käsklust kirjutada. commandDisabled=§cKäsklus§6 {0}§c on keelatud. @@ -232,6 +233,8 @@ destinationNotSet=Sihtkoht on määramata\! disabled=keelatud disabledToSpawnMob=§4Selle eluka tekitamine on seadistustes keelatud. disableUnlimited=§6Mängijale§c {1}§6 on keelatud ploki§c {0} §6lõpmatu asetamine. +discordCommandUsage=/<käsklus> +discordCommandUsage1=/<käsklus> disposal=Prügišaht disposalCommandDescription=Avab kaasaskantava hävitusmenüü. disposalCommandUsage=/<käsklus> @@ -828,6 +831,9 @@ playerTempBanned=§6Mängija §c{0}§6 blokeeris ajutiselt mängija §c{1}§6 p playerUnbanIpAddress=§6Mängija§c {0} §6eemaldas IP§c {1} §6blokeeringu playerUnbanned=§6Mängija§c {0} §6eemaldas mängija§c {1} §6blokeeringu playerUnmuted=§6Sa ei ole enam vaigistatud. +playtimeCommandUsage=/<käsklus> [mängija] +playtimeCommandUsage1=/<käsklus> +playtimeCommandUsage2=/<käsklus> <mängija> pong=Pong\! posPitch=§6Vert. pööre\: {0} (pea nurk) possibleWorlds=§6Võimalikud maailmad on arvud vahemikus §c0§6-§c{0}§6. @@ -1183,10 +1189,10 @@ tpacancelCommandDescription=Tühista kõik käimasolevad teleporteerumiskutsed. tpacancelCommandUsage=/<käsklus> [mängija] tpacancelCommandUsage1=/<käsklus> tpacancelCommandUsage2=/<käsklus> <mängija> -tpacceptCommandDescription=Võtab teleporteerumiskutse vastu. tpacceptCommandUsage=/<käsklus> [teinemängija] tpacceptCommandUsage1=/<käsklus> -tpacceptCommandUsage1Description=Võtab teleporteerumiskutse vastu +tpacceptCommandUsage2=/<käsklus> <mängija> +tpacceptCommandUsage3=/<käsklus> * tpahereCommandDescription=Taotle valitud mängijal sinu juurde teleporteerumist. tpahereCommandUsage=/<käsklus> <mängija> tpahereCommandUsage1=/<käsklus> <mängija> @@ -1199,10 +1205,10 @@ tpautoCommandDescription=Võta automaatselt teleporteerumiskutsed vastu. tpautoCommandUsage=/<käsklus> [mängija] tpautoCommandUsage1=/<käsklus> [mängija] tpautoCommandUsage1Description=Lülitab teleporteerumise kutsete automaatse vastuvõtmise sinule või teisele mängijale, kui on täpsustatud -tpdenyCommandDescription=Keeldub teleporteerumiskutsest. tpdenyCommandUsage=/<käsklus> tpdenyCommandUsage1=/<käsklus> -tpdenyCommandUsage1Description=Eirab teleporteerumiskutset +tpdenyCommandUsage2=/<käsklus> <mängija> +tpdenyCommandUsage3=/<käsklus> * tphereCommandDescription=Teleporteeri mängija enda juurde. tphereCommandUsage=/<käsklus> <mängija> tphereCommandUsage1=/<käsklus> <mängija> diff --git a/Essentials/src/main/resources/messages_fi.properties b/Essentials/src/main/resources/messages_fi.properties index a377b1d6752..03013c8698a 100644 --- a/Essentials/src/main/resources/messages_fi.properties +++ b/Essentials/src/main/resources/messages_fi.properties @@ -214,6 +214,8 @@ destinationNotSet=Sijaintia ei ole määritetty\! disabled=poistettu käytöstä disabledToSpawnMob=§4Tämän mobin luominen on poistettu käytöstä config tiedostossa. disableUnlimited=§6Poistettiin käytöstä loputon asettaminen tavaralle§c {0} §6pelaajalta§c {1}§6. +discordCommandUsage=/<command> +discordCommandUsage1=/<command> discordCommandExecuteReply=Suoritetaan komento\: "/{0}" disposal=Hävittäminen disposalCommandDescription=Avaa kannettavan hävitysvalikon. @@ -682,6 +684,9 @@ playerTempBanned=§6Pelaaja §c{0}§6 bannasi väliaikaisesti pelaajan §c{1}§6 playerUnbanIpAddress=§6Pelaaja§c {0} §6poisti porttikiellon IP-osoitteelta\:§c {1} playerUnbanned=§6Pelaaja§c {0} §6poisti pelaajan§c {1}§6 porttikiellon playerUnmuted=§6Sinulta poistettiin mykistys. +playtimeCommandUsage=/<command> [pelaaja] +playtimeCommandUsage1=/<command> +playtimeCommandUsage2=/<command> <player> pong=Pong\! posPitch=§6Kaltevuus\: {0} (Pään kulma) possibleWorlds=§6Mahdolliset maailmat ovat numeroiden §c0§6 ja §c{0}§6 välillä. @@ -960,9 +965,9 @@ tpacancelCommandDescription=Peruuttaa kaikki avoimet teleporttipyynnöt. Kirjoit tpacancelCommandUsage=/<command> [pelaaja] tpacancelCommandUsage1=/<command> tpacancelCommandUsage2=/<command> <player> -tpacceptCommandDescription=Hyväksyy teleporttauspyynnnön. tpacceptCommandUsage=/<command> [otherplayer] tpacceptCommandUsage1=/<command> +tpacceptCommandUsage2=/<command> <player> tpahereCommandDescription=Pyytää tiettyä pelaajaa teleporttaamaan luoksesi. tpahereCommandUsage=/<command> <player> tpahereCommandUsage1=/<command> <player> @@ -972,9 +977,9 @@ tpallCommandUsage1=/<command> [pelaaja] tpautoCommandDescription=Hyväksyy automaattisesti teleporttipyynnöt. tpautoCommandUsage=/<command> [pelaaja] tpautoCommandUsage1=/<command> [pelaaja] -tpdenyCommandDescription=Hylkää teleporttauspyynnön. tpdenyCommandUsage=/<command> tpdenyCommandUsage1=/<command> +tpdenyCommandUsage2=/<command> <player> tphereCommandDescription=Teleporttaa pelaajan luoksesi. tphereCommandUsage=/<command> <player> tphereCommandUsage1=/<command> <player> diff --git a/Essentials/src/main/resources/messages_fil_PH.properties b/Essentials/src/main/resources/messages_fil_PH.properties index 19c84090ad3..7aae6110519 100644 --- a/Essentials/src/main/resources/messages_fil_PH.properties +++ b/Essentials/src/main/resources/messages_fil_PH.properties @@ -179,6 +179,8 @@ destinationNotSet=Hindi nakatakda ang destinasyon\! disabled=di-pinagana disabledToSpawnMob=§4Di-pinagana ang pagka-likha ng itong mob sa config file. disableUnlimited=§6Di-pinagana ang pagkalagay na walang-limitasyon ng§c {0} §6para§c {1}§6. +discordCommandUsage=/<command> +discordCommandUsage1=/<command> disposal=Basura disposalCommandDescription=Magbubukas ng pwedeng-galawin na basurang lalagyan. disposalCommandUsage=/<command> @@ -545,6 +547,9 @@ payconfirmtoggleCommandUsage=/<command> paytoggleCommandUsage=/<command> [manlalaro] paytoggleCommandUsage1=/<command> [manlalaro] pingCommandUsage=/<command> +playtimeCommandUsage=/<command> [manlalaro] +playtimeCommandUsage1=/<command> +playtimeCommandUsage2=/<command> <manlalaro> potionCommandUsage=/<command> <clear|apply|effect\:<epekto> power\:<lakas> duration\:<durasyon>> powertoolCommandUsage=/<command> [l\:|a\:|r\:|c\:|d\:][utos] [mga argumento] - {player} maaaring palitan ng pangalan ng manlalarong pumindot powertooltoggleCommandUsage=/<command> @@ -614,6 +619,7 @@ tpacancelCommandUsage1=/<command> tpacancelCommandUsage2=/<command> <manlalaro> tpacceptCommandUsage=/<command> [iba-pang-manlalaro] tpacceptCommandUsage1=/<command> +tpacceptCommandUsage2=/<command> <manlalaro> tpahereCommandUsage=/<command> <manlalaro> tpahereCommandUsage1=/<command> <manlalaro> tpallCommandUsage=/<command> [manlalaro] @@ -622,6 +628,7 @@ tpautoCommandUsage=/<command> [manlalaro] tpautoCommandUsage1=/<command> [manlalaro] tpdenyCommandUsage=/<command> tpdenyCommandUsage1=/<command> +tpdenyCommandUsage2=/<command> <manlalaro> tphereCommandUsage=/<command> <manlalaro> tphereCommandUsage1=/<command> <manlalaro> tpoCommandUsage=/<command> <manlalaro> [iba-pang-manlalaro] diff --git a/Essentials/src/main/resources/messages_fr.properties b/Essentials/src/main/resources/messages_fr.properties index cadb1d51217..606974932e3 100644 --- a/Essentials/src/main/resources/messages_fr.properties +++ b/Essentials/src/main/resources/messages_fr.properties @@ -143,6 +143,7 @@ clearinventoryCommandUsage3Description=Supprime tous les objets (ou la quantité clearinventoryconfirmtoggleCommandDescription=Activer/désactiver la confirmation pour le nettoyage de l''inventaire. clearinventoryconfirmtoggleCommandUsage=/<command> commandArgumentOptional=§7 +commandArgumentOr=§c commandArgumentRequired=§e commandCooldown=§cVous ne pouvez pas exécuter cette commande pendant {0}. commandDisabled=§cLa commande§6 {0}§c est désactivée. @@ -181,6 +182,7 @@ createkitCommandUsage1Description=Crée un kit avec le nom donné et le délai i createKitFailed=§4Erreur lors de la création du kit {0}. createKitSeparator=§m----------------------- createKitSuccess=§6Kit créé \: §f{0}\n§6Délai \: §f{1}\n§6Lien \: §f{2}\n§6Copiez le contenu du lien ci-dessus dans votre fichier kits.yml. +createKitUnsupported=§4La sérialisation d''item NBT a été activée, mais ce serveur n''exécute pas Paper 1.15.2+. Retour à la sérialisation d''item standard. creatingConfigFromTemplate=Création de la configuration à partir du modèle \: {0} creatingEmptyConfig=Création d''une configuration vierge \: {0} creative=créatif @@ -231,12 +233,42 @@ destinationNotSet=Destination non définie \! disabled=désactivé disabledToSpawnMob=L''invocation de ce monstre a été désactivée depuis le fichier de configuration. disableUnlimited=§6Le placement illimité de§c {0} §6pour§c {1} §6a été désactivé. +discordCommandUsage=/<command> +discordCommandUsage1=/<command> +discordCommandExecuteDescription=Exécute une commande console depuis le serveur Minecraft. +discordCommandExecuteArgumentCommand=La commande qui doit être exécutée +discordCommandExecuteReply=Exécution de la commande\: "/{0}" +discordCommandListDescription=Obtenir la liste des joueurs connectés. +discordCommandListArgumentGroup=Un groupe spécifique auquel limiter vos recherches +discordCommandMessageDescription=Envoie un message à un joueur sur le serveur Minecraft. +discordCommandMessageArgumentUsername=Le joueur à qui envoyer le message +discordCommandMessageArgumentMessage=Le message à envoyer au joueur +discordErrorCommand=Vous avez incorrectement ajouté votre bot à votre serveur. Veuillez suivre le tutoriel dans la configuration et ajouter votre bot en utilisant https\://essentialsx.net/discord.html \! +discordErrorCommandDisabled=Cette commande est désactivée \! +discordErrorLogin=Une erreur s''est produite lors de la connexion à Discord, ce qui a causé la désactivation du plugin \: \n{0} +discordErrorLoggerInvalidChannel=La connexion à la console Discord a été désactivée en raison d''une définition de canal invalide \! Si vous avez l''intention de le désactiver, définissez l''ID du canal à "none", sinon vérifiez que votre ID de canal est correct. +discordErrorLoggerNoPerms=L''enregistreur de console Discord a été désactivé en raison de permissions insuffisantes \! Assurez-vous que votre bot a les permissions "Gérer les Webhooks" sur le serveur. Après avoir corrigé cela, exécutez "/ess reload". +discordErrorNoGuild=ID de serveur invalide ou manquant\! Veuillez suivre le tutoriel dans la configuration afin de configurer le plugin. +discordErrorNoGuildSize=Votre bot n''est dans aucun serveur\! Veuillez suivre le tutoriel dans la configuration afin de configurer le plugin. +discordErrorNoPerms=Votre bot ne peut voir ou parler dans aucun canal \! Assurez-vous que votre bot a les permissions en lecture et en écriture dans tous les canaux que vous souhaitez utiliser. +discordErrorNoToken=Aucun jeton fourni\! Veuillez suivre le tutoriel dans la configuration afin de configurer le plugin. +discordErrorWebhook=Une erreur s''est produite lors de l''envoi de messages à votre canal console \! Cela a probablement été causé par la suppression accidentelle de votre webhook console. Cela peut généralement être corrigé en s''assurant que votre bot a la permission "Gérer les Webhooks" et en exécutant "/ess reload". +discordLoggingIn=Tentative de connexion à Discord... +discordLoggingInDone=Connexion réussie en tant que {0} +discordNoSendPermission=Impossible d''envoyer un message dans le salon \: \#{0} Veuillez vous assurer que le bot a la permission "Envoyer des Messages" dans ce salon \! +discordReloadInvalid=Tentative de recharger la configuration de Discord EssentialsX alors que le plugin est en état invalide \! Si vous avez modifié votre configuration, redémarrez votre serveur. disposal=Poubelle disposalCommandDescription=Ouvrir une poubelle portative. disposalCommandUsage=/<command> distance=§6Distance \: {0} dontMoveMessage=§6La téléportation commence dans§c {0}§6. Ne bougez pas. downloadingGeoIp=Téléchargement de la base de données GeoIP... Cela peut prendre un moment (pays \: 1.7 Mo, villes \: 30 Mo) +dumpConsoleUrl=Un dump de serveur a été créé \: §c{0} +dumpCreating=§7Création de la sauvegarde du serveur... +dumpDeleteKey=§6Si vous voulez supprimer ce dump à une date ultérieure, utilisez la clé de suppression suivante \: §c{0} +dumpError=§4Erreur lors de la création du dump §c{0}§4. +dumpErrorUpload=§4Erreur lors du téléchargement de §c{0}§4 \: §c{1} +dumpUrl=§7Création d''un dump de serveur \: §c{0} duplicatedUserdata=Données utilisateurs dupliquées \: {0} et {1} durability=§6Cet outil a §c{0}§6 utilisation(s) restante(s). east=E @@ -286,6 +318,7 @@ essentialsCommandUsage6=/<command> cleanup essentialsCommandUsage6Description=Nettoie les anciennes données de joueur essentialsCommandUsage7=/<command> homes essentialsCommandUsage7Description=Gère les résidences de joueurs +essentialsCommandUsage8Description=Génère un dump serveur avec les informations demandées essentialsHelp1=Le fichier est corrompu et Essentials ne peut l''ouvrir. Essentials est désormais désactivé. Si vous ne pouvez corriger vous-même le problème, rendez-vous sur https\://essentialsx.net/community.html essentialsHelp2=Le fichier est corrompu et Essentials ne peut pas l''ouvrir. Essentials est maintenant désactivé. Si vous ne pouvez pas réparer le fichier vous-même, tapez /essentialshelp dans le jeu ou rendez-vous sur http\://tiny.cc/EssentialsChat essentialsReload=§6Essentials§c {0} §6a été rechargé. @@ -441,6 +474,7 @@ hours=heures iceCommandUsage=/<command> [joueur] iceCommandUsage1=/<command> iceCommandUsage2=/<command> <joueur> +iceCommandUsage3=/<command> * ignoreCommandDescription=Ignorer ou ne pas ignorer les autres joueurs. ignoreCommandUsage=/<command> <joueur> ignoreCommandUsage1=/<command> <joueur> @@ -494,6 +528,7 @@ itemId=§6ID \:§c {0} itemloreClear=§7Vous avez effacé la description de cet objet. itemloreCommandDescription=Modifie la description d''un objet. itemloreCommandUsage=/<command> <add|set|clear> [texte|ligne] [texte] +itemloreCommandUsage1=/<command> add [text] itemloreCommandUsage1Description=Ajoute le texte donné à la fin de la description de l''objet tenu en main itemloreCommandUsage2=/<command> set <numéro de ligne> <texte> itemloreCommandUsage2Description=Définit la ligne spécifiée de la description de l''objet tenu en main au texte donné @@ -574,6 +609,7 @@ kitCost=\ §7§o({0})§r kitDelay=§m{0}§r kitError=§cIl n''y a pas de kits valides. kitError2=§4Ce kit est mal défini. Contactez un administrateur. +kitError3=Impossible de donner l''article du kit dans le kit "{0}" à l''utilisateur {1} car l''élément du kit nécessite Paper 1.15.2+ pour la désérialiser. kitGiveTo=§6Don du kit§c {0}§6 à §c{1}§6. kitInvFull=§cVotre inventaire était plein, le kit est par terre. kitInvFullNoDrop=§4Il n''y a pas assez de place dans votre inventaire pour ce kit. @@ -615,14 +651,24 @@ loomCommandDescription=Ouvre un métier à tisser. loomCommandUsage=/<command> mailClear=§6Pour supprimer votre courrier, tapez§c /mail clear§6. mailCleared=§6Courrier supprimé \! +mailClearIndex=§4Vous devez spécifier un nombre entre 1 et {0}. mailCommandDescription=Gère le courrier inter-joueur, intra-serveur. +mailCommandUsage=/<command> [read|clear|clear [number]|send [to] [message]|sendtemp [to] [expire time] [message]|sendall [message]] mailCommandUsage1=/<command> read [page] mailCommandUsage1Description=Lit la première page (ou la page spécifiée) de votre courrier +mailCommandUsage2=/<command> clear [number] +mailCommandUsage2Description=Efface tous les mails ou ceux spécifiés mailCommandUsage3=/<command> send <joueur> <message> mailCommandUsage3Description=Envoie le message donné au joueur spécifié mailCommandUsage4=/<command> sendall <message> mailCommandUsage4Description=Envoie le message donné à tous les joueurs +mailCommandUsage5=/<command> sendtemp <player> <expire time> <message> +mailCommandUsage5Description=Envoie au joueur spécifié le message qui expirera dans la période spécifiée mailDelay=Trop de courriers ont été envoyés au cours de la dernière minute. Maximum \: {0} +mailFormatNew=§6[§r{0}§6] §6[§r{1}§6] §r{2} +mailFormatNewTimed=§6[§e⚠§6] §6[§r{0}§6] §6[§r{1}§6] §r{2} +mailFormatNewRead=§6[§r{0}§6] §6[§r{1}§6] §7§o{2} +mailFormatNewReadTimed=§6[§e⚠§6] §6[§r{0}§6] §6[§r{1}§6] §7§o{2} mailFormat=§6[§r{0}§6] §r{1} mailMessage={0} mailSent=§6Courrier envoyé \! @@ -771,6 +817,7 @@ nuke=§5Que la mort s''abatte sur eux \! nukeCommandDescription=Que la mort s''abatte sur ce joueur. nukeCommandUsage=/<command> [joueur] nukeCommandUsage1=/<command> [joueurs...] +nukeCommandUsage1Description=Envoie une nuke sur tous les joueurs ou un autre joueur, si spécifié numberRequired=Un nombre est requis ici. onlyDayNight=/time ne supporte que day/night (jour/nuit). onlyPlayers=§4Seul les joueurs en jeu peuvent utiliser §c{0}§4. @@ -818,6 +865,9 @@ playerTempBanned=§6Le joueur §c{0}§6 a banni temporairement §c{1}§6 pendant playerUnbanIpAddress=§6Le joueur§c {0} §6a débanni l''adresse IP \:§c {1} playerUnbanned=§6Le joueur§c {0} §6a débanni§c {1} playerUnmuted=§6Vous avez de nouveau la parole. +playtimeCommandUsage=/<command> [joueur] +playtimeCommandUsage1=/<command> +playtimeCommandUsage2=/<command> <joueur> pong=Pong \! posPitch=§6Pitch \: {0} (Angle de tête) possibleWorlds=§6Les mondes possibles sont les nombres de §c0§6 à §c{0}§6. @@ -848,11 +898,15 @@ powerToolsEnabled=§6Toutes vos commandes assignées sur des outils macros ont powertoolCommandDescription=Assigne une commande à l''objet en main. powertoolCommandUsage=/<command> [l\:|a\:|r\:|c\:|d\:][commande] [arguments] - {player} peut être remplacé par le pseudo du joueur sur lequel vous cliquez. powertoolCommandUsage1=/<command> l\: +powertoolCommandUsage1Description=Liste tous les powertools sur l''élément tenu powertoolCommandUsage2=/<command> d\: +powertoolCommandUsage2Description=Supprime tous les powertools de l''élément tenu powertoolCommandUsage3=/<command> r\:<cmd> powertoolCommandUsage3Description=Supprime la commande donnée de l''objet tenu en main powertoolCommandUsage4=/<command> <cmd> +powertoolCommandUsage4Description=Définit la commande powertool de l''élément tenu à la commande donnée powertoolCommandUsage5=/<command> a\:<cmd> +powertoolCommandUsage5Description=Ajoute la commande powertool donnée à l''élément conservé powertooltoggleCommandDescription=Active ou désactive tous les outils macros actuels. powertooltoggleCommandUsage=/<command> ptimeCommandDescription=Ajuster le temps personnel du joueur. Ajouter le préfixe @ pour corriger. @@ -931,6 +985,7 @@ repairCommandUsage2Description=Répare tous les objets dans votre inventaire repairEnchanted=§7Vous n''êtes pas autorisé à réparer les objets enchantés. repairInvalidType=§4Cet objet ne peut pas être réparé. repairNone=§4Aucun objet ne nécessite de réparation. +replyFromDiscord=**Réponse de {0}\:** `{1}` replyLastRecipientDisabled=§6Répondre au dernier destinataire du message \: §cdésactivé§6. replyLastRecipientDisabledFor=§6Répondre au dernier destinataire du message §cdésactivé §6pour §c{0}§6. replyLastRecipientEnabled=§6Répondre au dernier destinataire du message \: §cactivé§6. @@ -1203,10 +1258,10 @@ tpacancelCommandUsage1=/<command> tpacancelCommandUsage1Description=Annule toutes vos demandes de téléportation en attente tpacancelCommandUsage2=/<command> <joueur> tpacancelCommandUsage2Description=Annule toutes vos demandes de téléportation en attente avec le joueur spécifié -tpacceptCommandDescription=Accepte une requête de téléportation. tpacceptCommandUsage=/<command> [autre joueur] tpacceptCommandUsage1=/<command> -tpacceptCommandUsage1Description=Accepte une demande de téléportation entrante +tpacceptCommandUsage2=/<command> <joueur> +tpacceptCommandUsage3=/<command> * tpahereCommandDescription=Envoie une requête au joueur spécifié pour qu''il se téléporte à vous. tpahereCommandUsage=/<command> <joueur> tpahereCommandUsage1=/<command> <joueur> @@ -1219,10 +1274,10 @@ tpautoCommandDescription=Accepte automatiquement les requêtes de téléportatio tpautoCommandUsage=/<command> [joueur] tpautoCommandUsage1=/<command> [joueur] tpautoCommandUsage1Description=Active/désactive l''acceptation automatique des requêtes tpa pour vous ou pour un autre joueur si spécifié -tpdenyCommandDescription=Rejette une requête de téléportation. tpdenyCommandUsage=/<command> tpdenyCommandUsage1=/<command> -tpdenyCommandUsage1Description=Rejette une demande de téléportation entrante +tpdenyCommandUsage2=/<command> <joueur> +tpdenyCommandUsage3=/<command> * tphereCommandDescription=Téléporte un joueur à votre position. tphereCommandUsage=/<command> <joueur> tphereCommandUsage1=/<command> <joueur> @@ -1334,6 +1389,7 @@ versionOutputFine=§6Version {0} \: §a{1} versionOutputWarn=§6Version {0} \: §c{1} versionOutputUnsupported=§6Version §d{0} \: §d{1} versionOutputUnsupportedPlugins=§6Vous utilisez des §dplugins non pris en charge§6 \! +versionOutputEconLayer=§6Économie \: §r{0} versionMismatch=Versions différentes \! Veuillez mettre {0} à la même version. versionMismatchAll=§4Versions différentes \! Veuillez mettre à jour tous les jars Essentials à la même version. versionReleaseLatest=§6Vous utilisez la dernière version stable d''EssentialsX \! diff --git a/Essentials/src/main/resources/messages_he.properties b/Essentials/src/main/resources/messages_he.properties index 073bd9e4696..251b94e1dd7 100644 --- a/Essentials/src/main/resources/messages_he.properties +++ b/Essentials/src/main/resources/messages_he.properties @@ -75,6 +75,7 @@ cleaning=מנקה את פרטי המשתמש. clearinventoryCommandUsage1=/<command> clearinventoryconfirmtoggleCommandUsage=/<command> commandArgumentOptional=§7 +commandArgumentOr=§c commandArgumentRequired=§e commandFailed=פקודה {0} נכשלה\: commandHelpFailedForPlugin=שגיאה בקבלת עזרה לפלאגין\: {0} @@ -87,6 +88,7 @@ connectedPlayers=§6 התחברו שחקנים §r connectionFailed=נכשל פתיחת חיבור. cooldownWithMessage=§4 הפסקה\: {0} couldNotFindTemplate=§4 לא הצליח למצוא template {0} +createKitSeparator=§m----------------------- creatingConfigFromTemplate=יוצר קונפינג מ template\: {0} creatingEmptyConfig=יוצר קונפינג ריק\: {0} creative=יצירתי @@ -103,8 +105,11 @@ denyBookEdit=\n§4אינך יכול לבטל את הנעילה מספר זה.\n denyChangeAuthor=\n§4אינך יכול לשנות את מחבר ספר זה.\n denyChangeTitle=\n§4אינך יכול לשנות את שם ספר זה.\n depth=§6אתה בגובה הים. +depthCommandUsage=/depth disabled=מופסק disabledToSpawnMob=\n§4שיגור mob זה בוטל בקובץ הקונפיג.\n +discordCommandUsage=/<command> +discordCommandUsage1=/<command> disposalCommandUsage=/<command> dontMoveMessage=\n§6שיגור יתבצע בעוד§c {0}§6. אל תזוז.\n durability=\n§6לחפץ זה יש §c{0}§6 שימושים שנותרו.\n @@ -170,6 +175,7 @@ hour=שעה hours=שעות iceCommandUsage=שחקן iceCommandUsage1=/<command> +iceCommandUsage3=/<command> * illegalDate=תבנית תאריך לא חוקית. infoChapter=§6בחר פרק\: infoUnknownChapter=\n§4נתון לא ידוע.\n @@ -229,6 +235,7 @@ listHiddenTag=\n§7[מוסתר]§r\n loadWarpError=\n§4שגיאה בניסיון לטעון שיגור {0}.\n loomCommandUsage=/<command> mailCleared=\n§6דואר נוקה\!\n +mailMessage={0} mailSent=\n§6דואר נשלח\!\n markMailAsRead=\n§6בשביל לסמן את כל הדואר כנקרא , רשום§c /mail clear§6.\n matchingIPAddress=\n§6השחקנים הבאים התחברו בפעמים קודמות מכתובת האייפי הבאה\:\n @@ -276,7 +283,7 @@ noWarpsDefined=\n§6אין שיגורים.\n nuke=\n§5גשם מוות הופעל.\n nukeCommandUsage=שחקן numberRequired=מספר הולך לשם, טיפשי -onlyDayNight=\n/זמן תומך רק יום/לילה.\n +onlyDayNight=/time תומך רק יום/לילה. onlyPlayers=\n§4רק שחקנים במשחק יכולים להשתמש ב §c{0}§4.\n onlyPlayerSkulls=\n§4אתה יכול רק להגדיר את הבעלים של הראש (§c397\:3§4).\n onlySunStorm=\n§4/מזג אוויר תומך רק שמש/סופה.\n @@ -294,6 +301,8 @@ playerJailed=\n§6השחקן§c {0} §6נכנס לכלא.\n playerMuted=\n§6כעת אתה מושתק\!\n playerNeverOnServer=\n§4השחקן§c {0} §4אף פעם לא התחבר לשרת זה.\n playerNotFound=§4שחקן לא נמצא. +playtimeCommandUsage=שחקן +playtimeCommandUsage1=/<command> pong=פונג\! powerToolAir=§4פקודה לא יכולה להיות מצורפת לאוויר. powerToolAlreadySet=§4הפקודה §c{0}§4 כבר רשומה ב §c{1}§4. @@ -338,6 +347,8 @@ setBalOthers=\n§aשינית לשחקן {0}§a''s את כמות הכסף ל {1}. setSpawner=\n§6סוג המשגר שונה ל §c {0}§6.\n sheepMalformedColor=\n§4צבע פגום.\n shoutFormat=§6[הכרזה]§r {0} +signFormatFail=§4[{0}] +signFormatSuccess=§1[{0}] signFormatTemplate=[{0}] signProtectInvalidLocation=\n§4אינך יכול ליצור שלט כאן.\n similarWarpExist=\n§4השיגור בשם זה כבר קיים.\n @@ -375,17 +386,20 @@ topCommandUsage=/<command> tpacancelCommandUsage=שחקן tpacancelCommandUsage1=/<command> tpacceptCommandUsage1=/<command> +tpacceptCommandUsage3=/<command> * tpallCommandUsage=שחקן tpallCommandUsage1=שחקן tpautoCommandUsage=שחקן tpautoCommandUsage1=שחקן tpdenyCommandUsage=/<command> tpdenyCommandUsage1=/<command> +tpdenyCommandUsage3=/<command> * tprCommandUsage=/<command> tprCommandUsage1=/<command> tptoggleCommandUsage1=שחקן treeSpawned=§6עץ זומן. vanishCommandUsage1=שחקן +warpList={0} west=מערב whoisTop=§6 \=\=\=\=\=\= מי זה\:§c {0} §6\=\=\=\=\=\= workbenchCommandUsage=/<command> diff --git a/Essentials/src/main/resources/messages_hr.properties b/Essentials/src/main/resources/messages_hr.properties index 7e1d52ed558..f316c5995a9 100644 --- a/Essentials/src/main/resources/messages_hr.properties +++ b/Essentials/src/main/resources/messages_hr.properties @@ -109,6 +109,8 @@ depthBelowSea=§6Vi ste§c {0} §6blok(ova) ispod razine mora. destinationNotSet=Destinacija nije postavljena\! disabled=isključen disabledToSpawnMob=§4Stvaranje ovoga moba je iskljuceno u konfiguraciji. +discordCommandUsage=/<command> +discordCommandUsage1=/<command> disposalCommandUsage=/<command> distance=§6Udaljenost\: {0} dontMoveMessage=Teleportacija ce zapoceti za {0} sekundi. @@ -336,6 +338,7 @@ playerMuted=§6Mutan si\! playerNeverOnServer=&7Igrac &3{0} &7nikad nije bio na ovom serveru. playerNotFound=§4Igrac nije pronađen. playerUnmuted=§6Unmutan si. +playtimeCommandUsage1=/<command> pong=&3Strong-Pvperzzz &7<333\! posPitch=Nagib\: {0} (Kut glave) possibleWorlds=§6Mogući svjetovi su brojevi §c0§6 kroz §c{0}§6. diff --git a/Essentials/src/main/resources/messages_hu.properties b/Essentials/src/main/resources/messages_hu.properties index d936155d45d..60446d19ae5 100644 --- a/Essentials/src/main/resources/messages_hu.properties +++ b/Essentials/src/main/resources/messages_hu.properties @@ -143,6 +143,7 @@ clearinventoryCommandUsage3Description=Törli az összes (vagy a meghatározott clearinventoryconfirmtoggleCommandDescription=Megváltoztatja, hogy kérjen-e megerősítést az eszköztár törlésekhez. clearinventoryconfirmtoggleCommandUsage=/<command> commandArgumentOptional=§7 +commandArgumentOr=§c commandArgumentRequired=§e commandCooldown=§cEzt a parancsot nem lehet beírni\: {0}. commandDisabled=§cA(z)§6 {0}§c parancs letiltva. @@ -181,6 +182,7 @@ createkitCommandUsage1Description=Készít egy csomagot egy megadott névvel és createKitFailed=§4Hiba történt a csomag létrehozásakor {0}. createKitSeparator=§m----------------------- createKitSuccess=§6Csomag létrehozva\: §f{0}\n§6Késleltetés\: §f{1}\n§6Link\: §f{2}\n§6A fenti hivatkozás tartalmának másolása a kits.yml-be. +createKitUnsupported=§4 Az NBT -elemek sorosítása engedélyezve van, de ez a szerver nem futtatja az 1.15.2+ PAPER-t. Visszatérés a szabványos tételek sorba állításához. creatingConfigFromTemplate=Konfig létrehozása sablonból\: {0} creatingEmptyConfig=Üres konfig létrehozása\: {0} creative=kreatív @@ -231,10 +233,36 @@ destinationNotSet=A cél nem lett beállítva\! disabled=letiltva disabledToSpawnMob=§4Ennek az élőlénynek a lehívása jelenleg le van tiltva a konfig fájlban. disableUnlimited=§6Letiltva korlátlan számú lerakás§c {0} {1}§6. +discordbroadcastCommandDescription=Üzenetet küld a megadott Discord csatornára. +discordbroadcastCommandUsage=/<command> <channel> <msg> +discordbroadcastCommandUsage1=/<command> <channel> <msg> +discordbroadcastCommandUsage1Description=A megadott üzenetet a megadott Discord csatornára küldi +discordbroadcastInvalidChannel=§4Discord csatorna §c{0}§4 nem létezik. +discordbroadcastPermission=§4 Nincs jogod üzenetek küldésére a §c{0}§4 csatornára. +discordbroadcastSent=6. §6Üzenet küldve a §c{0}§6-nak/nek\! +discordCommandUsage=/<command> +discordCommandUsage1=/<command> discordCommandExecuteDescription=Végrehajt egy konzol parancsot a Minecraft szerveren. discordCommandExecuteArgumentCommand=A parancs végrehajtva discordCommandExecuteReply=Parancs végrehajtása\: "/{0}" discordCommandListDescription=Lekér egy listát az online játékosokról. +discordCommandListArgumentGroup=Egy adott csoport, amelyre korlátozza a keresést +discordCommandMessageDescription=Üzenetet küld egy játékosnak a Minecraft szerveren. +discordCommandMessageArgumentUsername=A játékos, akinek az üzenetet küldi +discordCommandMessageArgumentMessage=Az üzenet amit a játékosnak küld +discordErrorCommand=Helytelenül adta hozzá BOTját a szerveréhez. Kérjük, kövesse a konfigurációs útmutatót, és adja hozzá BOTját a https\://essentialsx.net/discord.html használatával\! +discordErrorCommandDisabled=Ez a parancs le van tiltva\! +discordErrorLogin=Hiba történt a Discordba való bejelentkezéskor, ami miatt a plugin letiltotta magát\:\n{0} +discordErrorLoggerInvalidChannel=A Discord konzol naplózása érvénytelen csatorna -definíció miatt le van tiltva\! Ha letiltani kívánja, állítsa a csatornaazonosítót "nincs" értékre; Ellenkező esetben ellenőrizze, hogy a csatornaazonosító helyes -e. +discordErrorLoggerNoPerms=A Discord konzol logger le van tiltva elégtelen engedélyek miatt\! Kérjük, győződjön meg arról, hogy BOTja rendelkezik a "Webhooks kezelése" jogosultságokkal a szerveren. A javítás után futtassa az "/ess reload" parancsot. +discordErrorNoGuild=Érvénytelen vagy hiányzó szerver -azonosító\! Kérjük, kövesse a konfigurációs útmutatót a Plugin beállításához. +discordErrorNoGuildSize=A BOTja nincs a szervereken\! Kérjük, kövesse a konfigurációs útmutatót a Plugin beállításához.\n\n +discordErrorNoPerms=A BOTja nem látja vagy nem tud beszélni egyetlen csatornán sem\! Kérjük, győződjön meg arról, hogy a BOT olvasási és írási jogosultsággal rendelkezik minden használni kívánt csatornán. +discordErrorNoToken=Token nincs megadva\! Kérjük, kövesse a konfigurációs útmutatót a Plugin beállításához. +discordErrorWebhook=Hiba történt üzenetek küldése közben a konzol csatornájára\! Ezt valószínűleg a konzol webhookjának véletlen törlése okozta. Ez általában javítható úgy, hogy a BOT rendelkezik a "Webhooks kezelése" jogosultsággal és ez után futtassa le a "/ess reload" parancsot. +discordLoggingIn=Belépés a Discordba... +discordLoggingInDone=Sikeresen belépve mint {0} +discordNoSendPermission=Nem lehet üzenetet küldeni a csatornán\: \#{0} Győződjön meg arról, hogy a BOT rendelkezik az "Üzenetek küldése" engedéllyel az adott csatornán\! discordReloadInvalid=Megpróbálta újratölteni az EssentialsX Discord konfigurációt, amíg a plugin érvénytelen állapotban van\! Ha módosította a konfigurációt, indítsa újra a szervert. disposal=Szemetes disposalCommandDescription=Megnyit egy hordozható szemetes menüt. @@ -242,6 +270,12 @@ disposalCommandUsage=/<command> distance=§6Távolság\: {0} dontMoveMessage=§6A teleportálás elkezdődik§c {0}en§6 belül. Ne mozogj. downloadingGeoIp=GeoIP adatbázis letöltése folyamatban... Eltarthat egy kis ideig (ország\: 1.7 MB, város\: 30MB) +dumpConsoleUrl=Létrejött egy szerver dump\: §c {0} +dumpCreating=6. §Szerver dump létrehozása ... +dumpDeleteKey=§6Ha később szeretné törölni ezt a dump-ot, használja a következő törlési kulcsot\: §c {0} +dumpError=§4Hiba a dump létrehozásakor §c {0} §4. +dumpErrorUpload=§4Hiba a feltöltés közben\: §c{0}§4\: §c{1} +dumpUrl=§6Létrehozott szerver dump\: §c {0} duplicatedUserdata=Duplikált felhasználói adatok\: {0} és {1}. durability=§6Ez az eszköz még §c{0}§6 használatig bírja. east=K @@ -277,10 +311,22 @@ errorCallingCommand=Hiba a parancs meghívásakor /{0} errorWithMessage=§cHiba\:§4 {0} essentialsCommandDescription=Essentials újratöltése. essentialsCommandUsage=/<command> +essentialsCommandUsage1=/<command> újratöltés essentialsCommandUsage1Description=Essentials konfig újratöltve +essentialsCommandUsage2=/<command> verzió essentialsCommandUsage2Description=Információt ad az Essentials verziójáról +essentialsCommandUsage3=/<command> parancsok +essentialsCommandUsage3Description=Információt ad arról, hogy az Essentials milyen parancsokat továbbít +essentialsCommandUsage4=/<command> debug essentialsCommandUsage4Description=Átválltja az Essentials'' "debug mode"-ját +essentialsCommandUsage5=/<command> reset <player> essentialsCommandUsage5Description=Visszaállítja a megadott játékos felhasználói adatait +essentialsCommandUsage6=/<command> cleanup +essentialsCommandUsage6Description=Törli a régi felhasználói adatokat +essentialsCommandUsage7=/<command> homes +essentialsCommandUsage7Description=A felhasználói HOME-ok kezelése +essentialsCommandUsage8=/<command> dump [all] [config] [discord] [kits] [log] +essentialsCommandUsage8Description=Szerver dump-ot generál a kért információkkal essentialsHelp1=A fájl sérült, és az Essentials nem tudja megnyitni. Az Essentials most le van tiltva. Ha nem tudja megjavítani a fájlt, akkor látogasson el a http\://tiny.cc/EssentialsChat webhelyre essentialsHelp2=A fájl sérült, és az Essentials nem tudja megnyitni. Az Essentials most le van tiltva. Ha nem tudja megjavítani a fájlt, írja be a /essentialshelp parancsot a játékban, vagy látogassan el a http\://tiny.cc/EssentialsChat webhelyre essentialsReload=§6Essentials újratöltve§c {0}. @@ -289,8 +335,11 @@ expCommandDescription=Adj hozzá, állítsd be, állítsd vissza, vagy nézd meg expCommandUsage=/<command> [reset|show|set|give] [játékosnév [mennyiség]] expCommandUsage1=/<command> give <játékos> <mennyiség> expCommandUsage1Description=Ad a megadott játékosnak egy megadott mennyiségű xp-t +expCommandUsage2=/<command> set <playername> <amount> expCommandUsage2Description=Beállítja a megadott játékosnak a megadott mennyiségű xp-t +expCommandUsage3=/<command> show <playername> expCommandUsage4Description=Megjeleníti a megadott játékos xp szintjét +expCommandUsage5=/<command> reset <playername> expCommandUsage5Description=Visszaállítja a megadott játékos xp-jét 0-ra expSet=§c{0}-nak/nek §6most van§c {1} §6xp-je. extCommandDescription=Játékosok eloltása. @@ -314,12 +363,14 @@ fireballCommandDescription=Egy tűzlabdát vagy más válogatott lövedéket dob fireballCommandUsage=/<command> [fireball|small|large|arrow|skull|egg|snowball|expbottle|dragon|splashpotion|lingeringpotion|trident] [sebesség] fireballCommandUsage1=/<command> fireballCommandUsage1Description=Kilősz egy normál tűzgolyót a helyzetedről +fireballCommandUsage2=/<command> <fireball|small|large|arrow|skull|egg|snowball|expbottle|dragon|splashpotion|lingeringpotion|trident> [speed] fireworkColor=§4Érvénytelen tűzijáték-töltési paramétereket adtál meg, először a színt kell beállítani. fireworkCommandDescription=Lehetővé teszi a tűzijáték-halom módosítását. fireworkCommandUsage=/<command> <<meta param>|power [mennyiség]|clear|fire [mennyiség]> fireworkCommandUsage4Description=A kezedben tartott tüzijátékhoz hozzáadja a megadott effektet fireworkEffectsCleared=§6Az összes effekt eltávolítva a tartott halomról. fireworkSyntax=§6Tűzijáték paraméterek\:§c color\:<color> [fade\:<color>] [shape\:<shape>] [effect\:<effect>]\n§6Több szín/effektus használatához vesszővel kell elválasztani az értékeket. pl.\: §cred,blue,pink\n§6Alakzatok\:§c star, ball, large, creeper, burst §6Effektek\:§c trail, twinkle. +fixedHomes=Érvénytelen HOME-ok törölve flyCommandDescription=Szállj fel, és repülj\! flyCommandUsage=/<command> [játékos] [on|off] flyCommandUsage1=/<command> [játékos] @@ -740,6 +791,9 @@ playerTempBanned=§c{0}§6 ideiglenesen kitiltva §c{1} {2}§6-ra/-re\: §c{3}§ playerUnbanIpAddress=§c{0} §6feloldotta a következő IP cím tiltását\:§c {1} playerUnbanned=§c{0} §6feloldotta§c {1}§6 tiltását playerUnmuted=§6Fel lett oldva a lenémításod. +playtimeCommandUsage=/<command> [játékos] +playtimeCommandUsage1=/<command> +playtimeCommandUsage2=/<command> <játékos> pong=Pong\! posPitch=§6Szög\: {0} (Fej szöge) possibleWorlds=§6Lehetséges világok a száma §c0§6 keresztül §6§c{0}. @@ -1021,9 +1075,9 @@ tpacancelCommandDescription=Törölje az összes fennálló teleport-kérést. A tpacancelCommandUsage=/<command> [játékos] tpacancelCommandUsage1=/<command> tpacancelCommandUsage2=/<command> <játékos> -tpacceptCommandDescription=Egy teleport kérés elfogadása. tpacceptCommandUsage=/<command> [másikjátékos] tpacceptCommandUsage1=/<command> +tpacceptCommandUsage2=/<command> <játékos> tpahereCommandDescription=Kérj meg egy megadott játékost, hogy teleportáljon hozzád. tpahereCommandUsage=/<command> <játékos> tpahereCommandUsage1=/<command> <játékos> @@ -1033,9 +1087,9 @@ tpallCommandUsage1=/<command> [játékos] tpautoCommandDescription=A teleportálás kérelmek automatikus elfogadása. tpautoCommandUsage=/<command> [játékos] tpautoCommandUsage1=/<command> [játékos] -tpdenyCommandDescription=Egy teleport kérés elutasítása. tpdenyCommandUsage=/<command> tpdenyCommandUsage1=/<command> +tpdenyCommandUsage2=/<command> <játékos> tphereCommandDescription=Teleportálj egy játékost magadhoz. tphereCommandUsage=/<command> <játékos> tphereCommandUsage1=/<command> <játékos> diff --git a/Essentials/src/main/resources/messages_it.properties b/Essentials/src/main/resources/messages_it.properties index 79cc17808f7..99f28ee92b1 100644 --- a/Essentials/src/main/resources/messages_it.properties +++ b/Essentials/src/main/resources/messages_it.properties @@ -143,6 +143,7 @@ clearinventoryCommandUsage3Description=Cancella tutto (o l''importo specificato) clearinventoryconfirmtoggleCommandDescription=Determina se ti viene chiesto di confermare la cancellazione dell''inventario. clearinventoryconfirmtoggleCommandUsage=/<command> commandArgumentOptional=§7 +commandArgumentOr=§c commandArgumentRequired=§e commandCooldown=§cNon puoi digitare questo comando per {0}. commandDisabled=§cIl comando§6 {0}§c è disabilitato. @@ -232,6 +233,18 @@ destinationNotSet=Destinazione non impostata\! disabled=disabilitato disabledToSpawnMob=§4La creazione di questo mob è stata disabilitata nel file configurazione. disableUnlimited=§6Disabilitato il posizionamento illimitato di §c {0} §6per§c {1}§6. +discordbroadcastCommandDescription=Trasmette un messaggio al canale Discord specificato. +discordbroadcastCommandUsage=/<command> <channel> <msg> +discordbroadcastCommandUsage1=/<command> <channel> <msg> +discordbroadcastCommandUsage1Description=Invia il messaggio dato al canale Discord specificato +discordbroadcastInvalidChannel=§4Il canale Discord §c{0}§4 non esiste. +discordbroadcastPermission=§4Non hai il permesso di inviare messaggi al canale §c{0}§4. +discordbroadcastSent=§6Messaggio inviato a §c{0}§6\! +discordCommandDescription=Invia link di invito per Discord al giocatore. +discordCommandLink=§6Unisciti al nostro server Discord a §c{0}§6\! +discordCommandUsage=/<command> +discordCommandUsage1=/<command> +discordCommandUsage1Description=Invia link di invito per Discord al giocatore discordCommandExecuteDescription=Esegue un comando console sul server di Minecraft. discordCommandExecuteArgumentCommand=Il comando da eseguire discordCommandExecuteReply=Esecuzione comando\: "/{0}" @@ -248,6 +261,8 @@ discordErrorLoggerNoPerms=Il logger della console Discord è stato disabilitato discordErrorNoGuild=ID server non valido o mancante\! Si prega di seguire il tutorial nella configurazione per configurare il plugin. discordErrorNoGuildSize=Il tuo bot non è presente in nessun server\! Segui il tutorial nella configurazione per configurare il plugin. discordErrorNoPerms=Il tuo bot non può vedere o parlare in alcun canale\! Assicurati che il tuo bot abbia i permessi di lettura e scrittura in tutti i canali che desideri utilizzare. +discordErrorNoPrimary=Non hai definito un canale primario o il canale primario definito non è valido. Rientro al canale predefinito\: \#{0}. +discordErrorNoPrimaryPerms=Il tuo bot non può parlare nel tuo canale principale, \#{0}. Assicurati che il tuo bot abbia i permessi di lettura e scrittura in tutti i canali che desideri utilizzare. discordErrorNoToken=Nessun token fornito\! Si prega di seguire il tutorial nella configurazione per configurare il plugin. discordErrorWebhook=Si è verificato un errore durante l''invio dei messaggi al canale della console\! Probabilmente è stato causato dall''eliminazione accidentale del webhook della console. Questo di solito può essere risolto assicurando che il tuo bot abbia il permesso "Gestisci Webhooks" ed eseguendo "/ess reload". discordLoggingIn=Tentativo di accedere a Discord... @@ -260,6 +275,12 @@ disposalCommandUsage=/<command> distance=§6Distanza\: {0} dontMoveMessage=§7Il teletrasporto inizierà tra {0}. Non muoverti. downloadingGeoIp=Download del database GeoIP... potrebbe richiedere del tempo (nazione\: 1.7 MB, città\: 30MB) +dumpConsoleUrl=È stato creato un dump del server\: §c{0} +dumpCreating=§6Creazione di un backup server... +dumpDeleteKey=§6Se vuoi eliminare questo dump in una data successiva, usa la seguente chiave di eliminazione\: §c{0} +dumpError=§4Errore durante la creazione del dump §c{0}§4. +dumpErrorUpload=§4Errore durante il caricamento di §c{0}§4\: §c{1} +dumpUrl=§6Creato server dump\: §c{0} duplicatedUserdata=Dati dell''utente duplicati\: {0} e {1} durability=§6Questo attrezzo ha §c{0}§6 utilizzi rimasti east=E @@ -309,6 +330,8 @@ essentialsCommandUsage6=/<command> ripulire essentialsCommandUsage6Description=Pulisce vecchi dati utente essentialsCommandUsage7=/<command> case essentialsCommandUsage7Description=Gestisce le case utente +essentialsCommandUsage8=/<command> dump [all] [config] [discord] [kits] [log] +essentialsCommandUsage8Description=Genera un dump server con le informazioni richieste essentialsHelp1=Il file è corrotto ed Essentials non lo può aprire. Essentials è ora disabilitato. Se non riesci a riparare il file, vai su http\://tiny.cc/EssentialsChat essentialsHelp2=Il file è corrotto ed Essentials non lo può aprire. Essentials è ora disabilitato. Se non riesci a riparare il file, scrivi /essentialshelp in gioco o vai su http\://tiny.cc/EssentialsChat essentialsReload=§6Essentials ricaricato§c {0}. @@ -565,6 +588,9 @@ jailAlreadyIncarcerated=§4Giocatore già in prigione\:§c {0} jailList=§6Jails\:§r {0} jailMessage=§4Avrai tempo per riflettere... in prigione. jailNotExist=§4Quella prigione non esiste. +jailNotifyJailed=§6Giocatore§c {0} §6imprigionato da §c{1}. +jailNotifyJailedFor=§6Giocatore§c {0} §6imprigionato per§c {1}§6da §c{2}§6. +jailNotifySentenceExtended=§6Il giocatore§c{0} §6tempo di prigione esteso a §c{1} §6di §c{2}§6. jailReleased=§6Il giocatore §c{0}§6 è stato scarcerato. jailReleasedPlayerNotify=§6Sei stato scarcerato\! jailSentenceExtended=§6Tempo di prigionia esteso a §c{0}§6. @@ -641,6 +667,7 @@ listCommandUsage1=/<command> [group] listCommandUsage1Description=Elenca tutti i giocatori sul server, o il gruppo indicato se specificato listGroupTag=§6{0}§r\: listHiddenTag=§7[NASCOSTO]§r +listRealName=({0}) loadWarpError=Fallito il caricamento del warp {0} localFormat=[L]<{0}> {1} loomCommandDescription=Apre un telaio. @@ -660,6 +687,8 @@ mailCommandUsage4=/<command> invia <message> mailCommandUsage4Description=Invia a tutti i giocatori il messaggio dato mailCommandUsage5=/<command> sendtemp <player> <expire time> <message> mailCommandUsage5Description=Invia al giocatore specificato il messaggio dato che scadrà nell''ora specificata +mailCommandUsage6=/<command> Invio a tempo <expire time> <message> +mailCommandUsage6Description=Invia a tutti i giocatori il messaggio dato che scadrà nell''ora specificata mailDelay=Hai mandato troppe mail nell''ultimo minuto. Massimo\: {0} mailFormatNew=§6[§r{0}§6] §6[§r{1}§6] §r{2} mailFormatNewTimed=§6[§e\: attenzione\:§6] §6[§r{0}§6] §6[§r{1}§6] §r{2} @@ -862,6 +891,14 @@ playerTempBanned=§6Il giocatore §c{0}§6 ha temporaneamente bannato §c{1}§6 playerUnbanIpAddress=§6Il giocatore§c {0} §6ha rimosso il ban dall''IP\:§c {1} playerUnbanned=§6Il giocatore§c {0} §6ha rimosso il ban da§c {1} playerUnmuted=§7Ti è stato rimosso il muteè. +playtimeCommandDescription=Mostra il tempo di un giocatore giocato in partita +playtimeCommandUsage=/<command> [player] +playtimeCommandUsage1=/<command> +playtimeCommandUsage1Description=Mostra il tuo tempo giocato in partita +playtimeCommandUsage2=/<command> <player> +playtimeCommandUsage2Description=Mostra il tempo del giocatore specificato giocato nella partita +playtime=§6Tempo di gioco\:§c {0} +playtimeOther=§6Tempo di gioco di {1}§6\:§c {0} pong=Pong\! posPitch=§6Inclinazione\: {0} (Angolo testa) possibleWorlds=§6I mondi possibili sono i numeri§c0§6 tra §c{0}§6. @@ -1252,10 +1289,10 @@ tpacancelCommandUsage1=/<command> tpacancelCommandUsage1Description=Annulla tutte le tue richieste di teletrasporto in sospeso tpacancelCommandUsage2=/<command> <player> tpacancelCommandUsage2Description=Annulla tutta la tua richiesta di teletrasporto con il giocatore specificato -tpacceptCommandDescription=Rifiuta una richiesta di teletrasporto. tpacceptCommandUsage=/<command> [otherplayer] tpacceptCommandUsage1=/<command> -tpacceptCommandUsage1Description=Accetta una richiesta di teletrasporto in arrivo +tpacceptCommandUsage2=/<command> <player> +tpacceptCommandUsage3=/<command> * tpahereCommandDescription=Richiedi che il giocatore specificato ti teletrasporti. tpahereCommandUsage=/<command> <player> tpahereCommandUsage1=/<command> <player> @@ -1268,10 +1305,10 @@ tpautoCommandDescription=Accetta automaticamente le richieste di teletrasporto. tpautoCommandUsage=/<command> [player] tpautoCommandUsage1=/<command> [player] tpautoCommandUsage1Description=Commuta se le richieste di tpa sono accettate automaticamente per te o per un altro giocatore se specificato -tpdenyCommandDescription=Rifiuta una richiesta di teletrasporto. tpdenyCommandUsage=/<command> tpdenyCommandUsage1=/<command> -tpdenyCommandUsage1Description=Rifiuta una richiesta di teletrasporto in arrivo +tpdenyCommandUsage2=/<command> <player> +tpdenyCommandUsage3=/<command> * tphereCommandDescription=Teletrasporta il player verso un warp. tphereCommandUsage=/<command> <player> tphereCommandUsage1=/<command> <player> diff --git a/Essentials/src/main/resources/messages_ja.properties b/Essentials/src/main/resources/messages_ja.properties index dae9fa986ba..4120e63f9d2 100644 --- a/Essentials/src/main/resources/messages_ja.properties +++ b/Essentials/src/main/resources/messages_ja.properties @@ -34,6 +34,7 @@ backCommandDescription=tp/spawn/warpの前の位置にテレポートします backCommandUsage=/<command> [player] backCommandUsage1=/<command> backCommandUsage2=/<command> <player> +backCommandUsage2Description=指定したプレイヤーを指定した場所にテレポートします。 backOther=§6Returned§c {0} §6以前の場所に。 backupCommandDescription=設定されている場合はバックアップを実行します。 backupCommandUsage=/<command> @@ -46,7 +47,9 @@ balance=§a所持金\: §c{0} balanceCommandDescription=プレイヤーの現在の所持金を設定します。 balanceCommandUsage=/<command> [player] balanceCommandUsage1=/<command> +balanceCommandUsage1Description=現在の残高を確認する balanceCommandUsage2=/<command> <player> +balanceCommandUsage2Description=指定したプレイヤーの残高を表示します balanceOther={0}§aの所持金\: §c {1} balanceTop=§6所持金ランキング ({0}) balanceTopLine={0}. {1}, {2} @@ -61,6 +64,7 @@ banFormat=§cあなたはBANされました\:\n§r{0} banIpJoin=あなたのIPアドレスはこのサーバーからBANされています。理由:{0} banJoin=あなたはこのサーバーからBANされています。理由:{0} banipCommandDescription=IP アドレスをBANします。 +banipCommandUsage1Description=指定したプレイヤーを理由別でBANします bed=§oベッド§r bedMissing=§4あなたのベットが設定されていないか、存在しません。 bedNull=§mベッド§r @@ -73,12 +77,14 @@ bigTreeSuccess=§6大木が生成されました。 bigtreeCommandDescription=見ている場所に大きな木を作成します。 bigtreeCommandUsage=/<command> <tree|redwood|jungle|darkoak> bigtreeCommandUsage1=/<command> <tree|redwood|jungle|darkoak> +bigtreeCommandUsage1Description=指定された型の大きな木をスポーンさせます。 blockList=§6EssentialsXは、次のコマンドを他のプラグインに中継しています: blockListEmpty=§6EssentialsXはコマンドを他のプラグインに中継していません。 bookAuthorSet=§6本の作者が{0}に設定されました。 bookCommandDescription=署名された本の再開と編集を可能にします。 bookCommandUsage=/<command> [title|author [name]] bookCommandUsage1=/<command> +bookCommandUsage3Description=署名された本のタイトルを設定します bookLocked=§6この本をロックしました。 bookTitleSet=§6本のタイトルが{0}に設定されました。 breakCommandDescription=見ているブロックを壊します。 @@ -87,12 +93,15 @@ broadcast=§6[§4Broadcast§6]§a {0} broadcastCommandDescription=サーバー全体にメッセージを送信します。 broadcastCommandUsage=/<command> <msg> broadcastCommandUsage1=/<command> <message> +broadcastCommandUsage1Description=サーバー全体にメッセージを送信します。 broadcastworldCommandDescription=ワールド全体にメッセージを配信します。 broadcastworldCommandUsage=/<command> <world> <msg> broadcastworldCommandUsage1=/<command> <world> <msg> +broadcastworldCommandUsage1Description=指定したワールドに指定したメッセージを送信します。 burnCommandDescription=プレイヤーに火をつけます。 burnCommandUsage=/<command> <player> <seconds> burnCommandUsage1=/<command> <player> <seconds> +burnCommandUsage1Description=指定した秒数で指定したプレイヤーを発射させます。 burnMsg=§c{0}§6を§c{1}秒後§6に点火します。 cannotSellNamedItem=§4エンチャントされたアイテムを修理することはできません。 cannotSellTheseNamedItems=§6エンチャントされたアイテム §4{0} §6を修理することはできません。 @@ -126,6 +135,7 @@ compassCommandDescription=現在の方角について説明します。 compassCommandUsage=/<command> condenseCommandDescription=アイテムをよりコンパクトなブロックにまとめます。 condenseCommandUsage1=/<command> +condenseCommandUsage1Description=インベントリ内のすべてのアイテムを消去します。 condenseCommandUsage2=/<command> <item> configFileMoveError=Config.ymlのバックアップフォルダへの移動が失敗しました。 configFileRenameError=一時ファイルのconfig.ymlへの名前変更をすることが出来ませんでした。 @@ -141,6 +151,7 @@ createdKit=§6Createdキット§c {0} §6with §c {1} §6entries及び遅延§c createkitCommandDescription=ゲーム内でキットを作成しましょう! createkitCommandUsage=/<command> <kitname> <delay> createkitCommandUsage1=/<command> <kitname> <delay> +createkitCommandUsage1Description=指定された名前と遅延を持つキットを作成します createKitFailed=§4キット{0}を作成する時にエラーが発生しました。 createKitSeparator=§m----------------------- createKitSuccess=§6作成されたキット:§f {0} \n§6遅延:§f {1} \n§6リンク:§f {2} \n§6上のリンクの内容をkits.ymlにコピーします。 @@ -154,13 +165,18 @@ customtextCommandUsage=/<alias> - bukkit.ymlにて設定 day=日 days=日 defaultBanReason=あなたはBANされました。 +deletedHomes=すべての家が削除されました。 +deletedHomesWorld={0} のすべての家が削除されました。 deleteFileError=ファイルを削除することができませんでした\: {0} deleteHome=§6ホーム§c {0} §6は削除されました。 deleteJail=§6牢獄§c {0} §6が削除されました。 deleteKit=§6Kit§c {0} §6は削除されました。 deleteWarp=§6ワープ§c {0} §6が削除されました。 +deletingHomes=すべての家を削除しています... +deletingHomesWorld={0} ですべての家を削除しています... delhomeCommandDescription=ホームを削除します。 delhomeCommandUsage=/<command> [player\:]<name> +delhomeCommandUsage1Description=指定された名前で家を削除します deljailCommandDescription=刑務所を削除します。 deljailCommandUsage=/<command> <jailname> deljailCommandUsage1=/<command> <jailname> @@ -170,6 +186,7 @@ delkitCommandUsage1=/<command> <kit> delwarpCommandDescription=指定したワープを削除します。 delwarpCommandUsage=/<command> <warp> delwarpCommandUsage1=/<command> <warp> +delwarpCommandUsage1Description=指定された名前のワープを削除します deniedAccessCommand=§{0} のコマンドのアクセスが拒否されました。 denyBookEdit=§4この本のロックを解除することはできません。 denyChangeAuthor=§4この本の著者を変更することはできません。 @@ -183,17 +200,30 @@ destinationNotSet=目的地が設定されていません\! disabled=無効 disabledToSpawnMob=§4このMobのスポーンはconfigによって無効になっています。 disableUnlimited=§6§c {0} §6for§c {1} §6の無制限配置を無効にしました。 +discordCommandUsage=/<command> +discordCommandUsage1=/<command> +discordCommandExecuteArgumentCommand=実行されるコマンド +discordNoSendPermission=チャンネルにメッセージを送信できません\: \#{0} ボットがそのチャンネルに「メッセージを送信」権限を持っていることを確認してください\! +discordReloadInvalid=プラグインが無効な状態の場合、EssentialsX Discordの設定をリロードしようとしました!設定を変更した場合は、サーバーを再起動してください。 disposal=処罰 disposalCommandDescription=ポータブル廃棄メニューを開きます。 disposalCommandUsage=/<command> distance=§6距離\: {0} dontMoveMessage=§6テレポートを§c{0}§6後に開始します。動かないで下さい。 downloadingGeoIp=GeoIPデータベースをダウンロードしています... これは少し時間がかかる可能性があります(国データ\: 1.7MB、町のデータ\: 30MB) +dumpConsoleUrl=サーバダンプが作成されました\: §c{0} +dumpCreating=§6サーバーのダンプを作成しています... +dumpDeleteKey=§6後でダンプを削除したい場合は、以下の削除キーを使用してください\: §c{0} +dumpError=§4ダンプ§c{0}§4の作成中にエラーが発生しました。 +dumpErrorUpload=§4§c{0}§4のアップロード中にエラーが発生しました\: §c{1} +dumpUrl=§6サーバーダンプを作成しました\: §c{0} duplicatedUserdata=重複したユーザーデータ\: {0} と {1} durability=§6このツールは §c{0}§6 を利用しています。 east=東 ecoCommandDescription=サーバーの経済を管理します。 ecoCommandUsage=/<command> <give|take|set|reset> <player> <amount> +ecoCommandUsage1Description=指定したプレイヤーに一定量のアイテムを与えます +ecoCommandUsage3Description=指定したプレイヤーの残高を指定した金額に設定します。 editBookContents=§eあなたは、この本の内容を編集することが出来ます。 enabled=有効 enchantCommandDescription=持っているアイテムをエンチャントします。 @@ -612,6 +642,9 @@ playerTempBanned=§c{0}§6は§c{1}§6を§c{2}§6まで期限BANしました\: playerUnbanIpAddress=§c{0}§6はIPBANを解除しました\:§c {1} playerUnbanned=§c{0}§6は§c{1}§6のBANを解除しました playerUnmuted=§6あなたは発言をする事が出来るようになりました。 +playtimeCommandUsage=/<command> [player] +playtimeCommandUsage1=/<command> +playtimeCommandUsage2=/<command> <player> pong=Pong\! posPitch=§6角度\: {0} (頭の角度) potionCommandUsage=/<command> <clear|apply|effect\:<effect> power\:<power> duration\:<duration>> @@ -818,15 +851,16 @@ tpacancelCommandUsage1=/<command> tpacancelCommandUsage2=/<command> <player> tpacceptCommandUsage=/<command> [otherplayer] tpacceptCommandUsage1=/<command> +tpacceptCommandUsage2=/<command> <player> tpahereCommandUsage=/<command> <player> tpahereCommandUsage1=/<command> <player> tpallCommandUsage=/<command> [player] tpallCommandUsage1=/<command> [player] tpautoCommandUsage=/<command> [player] tpautoCommandUsage1=/<command> [player] -tpdenyCommandDescription=テレポートリクエストを拒否します。 tpdenyCommandUsage=/<command> tpdenyCommandUsage1=/<command> +tpdenyCommandUsage2=/<command> <player> tphereCommandDescription=プレイヤーをテレポートします。 tphereCommandUsage=/<command> <player> tphereCommandUsage1=/<command> <player> diff --git a/Essentials/src/main/resources/messages_ko.properties b/Essentials/src/main/resources/messages_ko.properties index 402091ba93a..bdd9a427577 100644 --- a/Essentials/src/main/resources/messages_ko.properties +++ b/Essentials/src/main/resources/messages_ko.properties @@ -7,7 +7,7 @@ addedToAccount=§a{0}가 당신의 계좌에 추가되었습니다. addedToOthersAccount=§a{0}가 {1}§a님의 계정에 추가되었습니다. 새 잔고\: {2} adventure=모험 afkCommandDescription=자리비움 상태로 전환합니다. -afkCommandUsage=/<command> [플레이어/메시지] +afkCommandUsage=/<command> [player/message...] afkCommandUsage1=/<command> [메시지] afkCommandUsage1Description=당신의 자리비움 상태를 추가적 사유와 함께 전환합니다. afkCommandUsage2=/<command> <플레이어> [메시지] @@ -143,6 +143,7 @@ clearinventoryCommandUsage3Description=해당 플레이어의 인벤토리에서 clearinventoryconfirmtoggleCommandDescription=인벤토리를 비울 때 확인을 받을지 정합니다. clearinventoryconfirmtoggleCommandUsage=/<command> commandArgumentOptional=§7 +commandArgumentOr=§c commandArgumentRequired=§e commandCooldown=§c해당 명령어를 사용할 수 없습니다. 사유\: {0}. commandDisabled=§c명령어§6 {0}§c (은)는 비활성화되었습니다. @@ -232,6 +233,18 @@ destinationNotSet=목적지가 설정되지 않았습니다. disabled=비활성화됨 disabledToSpawnMob=§4이 몬스터의 스폰은 설정 파일에서 해제되었습니다. disableUnlimited=§c{1} §6의 §c{0} §6무한 배치 비활성화됨. +discordbroadcastCommandDescription=설정한 Discord 채널에 메세지를 보냅니다. +discordbroadcastCommandUsage=올바른 사용법\: /<command> <channel> <msg> +discordbroadcastCommandUsage1=올바른 사용법\: /<command> <channel> <msg> +discordbroadcastCommandUsage1Description=메세지를 보낼시 설정한 디스코드 채널로 전송됩니다. +discordbroadcastInvalidChannel=§4 §c{0}§4 라는 디스코드 채널이 없습니다. +discordbroadcastPermission=§4§c{0}§4 채널에 메시지를 보낼 수 있는 권한이 없습니다. +discordbroadcastSent=§6 §c{0}§6로 메세지를 보냅니다. +discordCommandDescription=플레이어에게 Discord 초대 링크를 보냅니다. +discordCommandLink=§c{0}§6에서 저희 Discord 서버에 참여하세요\! +discordCommandUsage=/<command> +discordCommandUsage1=/<command> +discordCommandUsage1Description=플레이어에게 Discord 초대 링크를 보냅니다 discordCommandExecuteDescription=마인크래프트 서버에서 명령어를 실행합니다. discordCommandExecuteArgumentCommand=실행할 명령어 discordCommandExecuteReply=명령어를 실행합니다\: "/{0}" @@ -248,6 +261,8 @@ discordErrorLoggerNoPerms=필요한 권한이 부여되지 않아 디스코드 discordErrorNoGuild=서버 ID가 유효하지 않거나 존재하지 않습니다\! 설정 파일에 명시된 튜토리얼대로 플러그인을 올바르게 설치해주세요. discordErrorNoGuildSize=디스코드 봇이 그 어떠한 서버에도 참여하고 있지 않습니다\! 설정 파일에 명시된 튜토리얼대로 플러그인을 올바르게 설치해주세요. discordErrorNoPerms=디스코드 봇이 채널을 보거나 채널에서 대화할 수 없습니다\! 디스코드 봇에게 당신이 사용하고자 하는 채널에서 읽거나 쓸 수 있는 권한을 주었는지 확인하세요. +discordErrorNoPrimary=우선 채널을 정하지 않았거나 정한 우선 채널이 유효하지 않습니다. 기본값인 \#{0} 채널로 설정됩니다. +discordErrorNoPrimaryPerms=디스코드 봇이 우선 채널(\#{0})을 보거나 우선 채널에서 대화할 수 없습니다. 디스코드 봇에게 당신이 사용하고자 하는 채널에서 읽거나 쓸 수 있는 권한을 주었는지 확인하세요. discordErrorNoToken=디스코드 봇 토큰이 설정되지 않았습니다\! 설정 파일에 명시된 튜토리얼대로 플러그인을 올바르게 설치해주세요. discordErrorWebhook=콘솔 채널에 메세지를 보내는데 실패했습니다. 이러한 오류는 보통 콘솔 채널에서 웹후크를 삭제한 경우 발생합니다. 이러한 경우, 봇이 "웹후크 관리하기" 권한이 있는지 확인한 후, "/ess reload" 명령어를 실행함으로서 오류를 해결할 수 있습니다. discordLoggingIn=디스코드에 로그인 하는 중... @@ -260,6 +275,12 @@ disposalCommandUsage=/<command> distance=§6거리\: {0} dontMoveMessage=§6{0}초 뒤에 이동됩니다. 움직이면 이동이 취소됩니다. downloadingGeoIp=GeoIP 데이터베이스를 다운받는 중입니다.... 약간의 시간이 걸릴 수 있습니다. (국가\: 1.7 MB, 도시\: 30MB) +dumpConsoleUrl=서버 덤프가 생성되었습니다\: §c{0} +dumpCreating=§6서버 덤프를 생성하는 중입니다... +dumpDeleteKey=§6나중에 덤프를 삭제하고 싶으시면 다음 삭제 키를 사용하세요\: §c{0} +dumpError=§4덤프를 생성하는 중 오류가 발생했습니다 §c{0}§4. +dumpErrorUpload=§4업로드 중 오류가 발생했습니다 §c{0}§4\: §c{1} +dumpUrl=§6서버 덤프를 생성했습니다\: §c{0} duplicatedUserdata=중복된 유저데이터 \: {0} 와/과 {1} durability=§6이 도구는 사용 가능 횟수가 s §c{0}§6번 남았습니다 east=E @@ -309,6 +330,8 @@ essentialsCommandUsage6=/<command> cleanup essentialsCommandUsage6Description=오래된 userdata를 정리합니다 essentialsCommandUsage7=/<command> homes essentialsCommandUsage7Description=유저의 집을 관리합니다 +essentialsCommandUsage8=/<command> dump [*] [config] [discord] [kits] [log] +essentialsCommandUsage8Description=요청된 정보로 서버 덤프를 생성합니다 essentialsHelp1=파일이 망가져서 Essentials에서 열 수 없습니다. Essentials은 비활성화 되었습니다. 만약 해결하지 어려우시다면, 다음으로 가세요 http\://tiny.cc/EssentialsChat essentialsHelp2=파일이 망가져서 Essentials에서 열 수 없습니다. Essentials은 비활성화 되었습니다. 만약 스스로 해결하지 못하겠다면, /essentialshelp 명령어나 다음으로 가세요. http\://tiny.cc/EssentialsChat essentialsReload=§6에센셜§c {0}§6리로드가 완료되었습니다. @@ -327,6 +350,7 @@ expSet=§c{0} §6은 이제§c {1} §6경험치 입니다. extCommandDescription=플레이어 불 끄기 extCommandUsage=/<command> [플레이어] extCommandUsage1=/<command> [플레이어] +extCommandUsage1Description=해당되는 경우 자신과 다른 플레이어를 구분합니다 extinguish=§7몸에 붙은 불을 껐습니다. extinguishOthers=§7당신은 {0}의 불을 껐습니다. failedToCloseConfig={0} 설정을 닫지 못하였습니다. @@ -337,18 +361,24 @@ feed=§6배고픔을 모두 채웠습니다. feedCommandDescription=배고픔을 채웁니다. feedCommandUsage=/<command> [플레이어] feedCommandUsage1=/<command> [플레이어] +feedCommandUsage1Description=해당되는 경우 자신 또는 다른 플레이어의 배고픔을 회복합니다 feedOther=§6당신은 §c{0} §6에게 배고픔을 모두 채워줬습니다. fileRenameError={0} 파일의 이름 변경을 실패하였습니다. fireballCommandDescription=화염구나 다른 던질 수 있는 것들을 던집니다. fireballCommandUsage=/<command> [fireball|small|large|arrow|skull|egg|snowball|expbottle|dragon|splashpotion|lingeringpotion|trident] [속도] fireballCommandUsage1=/<command> +fireballCommandUsage1Description=현재 위치에서 일반 화염구를 날립니다 fireballCommandUsage2=/<command> <fireball|small|large|arrow|skull|egg|snowball|expbottle|dragon|splashpotion|lingeringpotion|trident> [속도] +fireballCommandUsage2Description=당신의 위치에서 선택적인 속도로 지정된 화염구를 던집니다. fireworkColor=§4불꽃놀이 매게수가 알맞지 않습니다. 불꽃놀이 매게 변수 삽입, 색상을 먼저 설정해주세요. fireworkCommandDescription=폭죽의 스택을 수정합니다. fireworkCommandUsage=/<command> <<meta 변수>|power [수량]|clear|fire [수량]> fireworkCommandUsage1=/<command> clear +fireworkCommandUsage1Description=들고 있는 폭죽의 모든 효과를 제거합니다 fireworkCommandUsage2=/<command> power <수량> +fireworkCommandUsage2Description=들고 있는 폭죽의 세기를 설정합니다 fireworkCommandUsage3=/<command> fire [수량] +fireworkCommandUsage3Description=들고 있는 폭죽의 복사본을 일정 수량 만큼 발사합니다 fireworkCommandUsage4=/<command> <meta> fireworkCommandUsage4Description=들고 있는 폭죽에 효과를 추가합니다. fireworkEffectsCleared=§6들고있는 폭죽의 효과를 모두 제거했습니다. @@ -358,6 +388,7 @@ fixingHomes=잘못된 집을 삭제하는 중... flyCommandDescription=이륙하고, 비상하라\! flyCommandUsage=/<command> [닉네임] [on|off] flyCommandUsage1=/<command> [플레이어] +flyCommandUsage1Description=해당되는 경우 자신 또는 다른 플레이어의 플라이를 설정 또는 해제합니다 flying=비행중 flyMode=§6플레이어 {1}§6의 비행 모드를 §c{0}§6시켰습니다. foreverAlone=§4답장할 상대가 없습니다. @@ -369,6 +400,7 @@ gameModeInvalid=§4당신은 §c {0}§4을(를) 떨어뜨릴 권한이 없습니 gamemodeCommandDescription=플레이어의 게임 모드를 바꿉니다. gamemodeCommandUsage=/<command> <survival|creative|adventure|spectator> [닉네임] gamemodeCommandUsage1=/<command> <survival|creative|adventure|spectator> [닉네임] +gamemodeCommandUsage1Description=해당되는 경우 당신 또는 다른 플레이어 중 하나의 게임모드를 설정합니다 gcCommandDescription=메모리,업타임,틱 정보를 봅니다. gcCommandUsage=/<command> gcfree=§6남은 메모리 \: §c{0}MB. @@ -379,10 +411,13 @@ geoipJoinFormat=플레이어 {0}님은 {1}에서 왔습니다. getposCommandDescription=플레이어의 현재 좌표를 봅니다. getposCommandUsage=/<command> [플레이어] getposCommandUsage1=/<command> [플레이어] +getposCommandUsage1Description=해당되는 경우 당신 또는 다른 플레이어의 좌표를 가져옵니다 giveCommandDescription=플레이어에게 아이템을 줍니다. giveCommandUsage=/<command> <닉네임> <item|numeric> [수량 [아이템 meta...]] giveCommandUsage1=/<command> <플레이어> <아이템> [수량] +giveCommandUsage1Description=지정된 플레이어에게 64개 (또는 정해진 양) 의 해당 아이템을 지급합니다 giveCommandUsage2=/<command> <닉네임> <아이템> <수량> <meta> +giveCommandUsage2Description=지정된 메타데이터와 함께 지정된 항목의 지정된 양을 플레이어에게 제공합니다. geoipCantFind=§6플레이어 §c{0} §6(이)가 §a알 수 없는 국가§6에서 왔습니다. geoIpErrorOnJoin={0} 에 대한 GeoIP 데이터를 가져올 수 없습니다. 라이센스 키와 설정이 올바른지 확인하세요. geoIpLicenseMissing=라이센스 키를 찾을 수 없습니다\! https\://essentialsx.net/geoip 를 방문해 설정 방법을 알아보세요. @@ -405,7 +440,9 @@ hatArmor=§4이 아이템을 모자로 사용할 수 없습니다\! hatCommandDescription=멋진 새 모자를 구합니다. hatCommandUsage=/<command> [remove] hatCommandUsage1=/<command> +hatCommandUsage1Description=현재 들고 있는 아이템을 모자로 설정합니다 hatCommandUsage2=/<command> remove +hatCommandUsage2Description=현재 모자를 제거합니다 hatCurse=§4귀속 저주가 걸린 모자는 벗을 수 없습니다\! hatEmpty=§4당신은 모자를 쓰고있지 않습니다. hatFail=§4반드시 머리에 쓰기 위해서는 무언가를 들고 있어야 합니다. @@ -416,6 +453,7 @@ heal=§6당신은 회복되었습니다. healCommandDescription=플레이어를 회복합니다. healCommandUsage=/<command> [플레이어] healCommandUsage1=/<command> [플레이어] +healCommandUsage1Description=해당되는 경우 당신 또는 다른 플레이어의 체력을 회복합니다 healDead=죽은 사람을 회복시킬 수는 없습니다\! healOther=§6{0}님이 회복되었습니다. helpCommandDescription=사용 가능한 명령어 목록을 봅니다. @@ -429,6 +467,7 @@ helpPlugin=§4{0}§r\: 플러그인 도움말\: /help {1} helpopCommandDescription=접속중인 관리자에게 메시지를 보냅니다. helpopCommandUsage=/<command> <메시지> helpopCommandUsage1=/<command> <메시지> +helpopCommandUsage1Description=정해진 메세지를 모든 온라인 관리자에게 전송합니다 holdBook=§4쓸 수 있는 책을 가지고 있지 않습니다. holdFirework=§4효과를 추가하기 위해서는 폭죽을 들고있어야 합니다. holdPotion=§4효과를 적용하려면 포션을 손에 들고있어야 합니다. @@ -436,12 +475,15 @@ holeInFloor=바닥에 아무 블럭이 없으므로, 이동이 불가합니다. homeCommandDescription=집으로 텔레포트합니다. homeCommandUsage=/<command> [player\:][닉네임] homeCommandUsage1=/<command> <이름> +homeCommandUsage1Description=해당 이름을 가진 홈으로 당신을 텔레포트합니다 homeCommandUsage2=/<command> <플레이어>\:<이름> +homeCommandUsage2Description=당신을 해당 플레이어의 지정된 홈으로 텔레포트합니다 homes=§6집들\:§r {0} homeConfirmation=§6집 §c{0} §6(이)가 이미 있습니다\!\n이미 있는 집을 덮어씌우려면, 명령어를 다시 입력하세요. homeSet=§6이곳을 집으로 설정하였습니다. hour=시간 hours=시(시간) +ice=§6당신은 더 추워짐을 느낍니다.. iceCommandUsage=/<command> [플레이어] iceCommandUsage1=/<command> iceCommandUsage2=/<command> <플레이어> @@ -500,6 +542,7 @@ itemloreCommandDescription=아이템의 설명을 수정합니다. itemloreCommandUsage=/<command> <add/set/clear> [text/line] [텍스트] itemloreCommandUsage1=/<command> add [텍스트] itemloreCommandUsage1Description=들고 있는 아이템의 설명에 주어진 텍스트를 추가합니다. +itemloreCommandUsage2=/<command> set <line number> <text> itemloreCommandUsage2Description=들고 있는 아이템의 설명을 주어진 줄과 설명으로 설정합니다. itemloreCommandUsage3=/<command> clear itemloreCommandUsage3Description=들고 있는 아이템의 설명을 초기화합니다 @@ -609,6 +652,7 @@ listCommandUsage=/<command> [그룹] listCommandUsage1=/<command> [그룹] listGroupTag=§6{0}§r\: listHiddenTag=§7[숨김]§r +listRealName=({0}) loadWarpError=§4워프 데이터 {0}를 불러오는데 실패하였습니다. localFormat=[L]<{0}> {1} loomCommandDescription=베틀을 엽니다. @@ -616,9 +660,19 @@ loomCommandUsage=/<command> mailClear=§6메일을 읽음으로 표시하려면, §c /mail clear§6를 입력하세요. mailCleared=§6메일함을 비웠습니다\! mailCommandDescription=플레이어에게 서버 내 메일을 보냅니다. +mailCommandUsage=/<command> [read|clear|clear [number]|send [to] [message]|sendtemp [to] [expire time] [message]|sendall [message]] +mailCommandUsage1=/<command> read [페이지] +mailCommandUsage2=/<command> clear [숫자] +mailCommandUsage3=/<command> send <플레이어> <메시지> mailCommandUsage3Description=주어진 메시지를 해당 플레이어에게 보냅니다 +mailCommandUsage4=/<command> sendall <message> mailCommandUsage4Description=주어진 메시지를 모든 플레이어에게 보냅니다 +mailCommandUsage5=/<command> sendtemp <player> <expire time> <message> mailDelay=너무 많은 양의 이메일을 보냈습니다. 최대\: {0} +mailFormatNew=§6[§r{0}§6] §6[§r{1}§6] §r{2} +mailFormatNewTimed=§6[§e⚠§6] §6[§r{0}§6] §6[§r{1}§6] §r{2} +mailFormatNewRead=§6[§r{0}§6] §6[§r{1}§6] §7§o{2} +mailFormatNewReadTimed=§6[§e⚠§6] §6[§r{0}§6] §6[§r{1}§6] §7§o{2} mailFormat=§6[§r{0}§6] §r{1} mailMessage={0} mailSent=§6메일을 보냈습니다\! @@ -631,6 +685,8 @@ maxMoney=§4 이 트랜잭션이 계정에 대한 균형 제한을 초과할 것 mayNotJail=§4이 플레이어는 감옥에 가둘 수 없습니다\! mayNotJailOffline=§4당신은 접속중이지 않은 플레이어를 감옥에 보낼 수 없습니다. meCommandDescription=플레이어의 현재 상황을 설명합니다. +meCommandUsage=/<command> <description> +meCommandUsage1=/<command> <description> meCommandUsage1Description=상황을 설명합니다 meSender=나 meRecipient=나 @@ -649,11 +705,15 @@ moneySentTo=§a{0}가 {1}에게 보내졌습니다. month=월(달) months=월(달) moreCommandDescription=들고있는 아이템의 스택을 해당하는 만큼 채우거나,지정되지 않을 경우 최대 크기로 설정합니다. +moreCommandUsage=/<command> [amount] +moreCommandUsage1=/<command> [amount] moreThanZero=수량이 0보다 커야합니다. motdCommandDescription=오늘의 메시지를 봅니다. motdCommandUsage=/<command> [챕터] [쪽] moveSpeed=§c{2} §6의 §c{0}§6 속도를§c {1} §6(으)로 설정했습니다. msgCommandDescription=해당 플레이어에게 귓속말을 보냅니다. +msgCommandUsage=/<command> <to> <message> +msgCommandUsage1=/<command> <to> <message> msgDisabled=§6메시지 수신이 §c비활성화§6되었습니다. msgDisabledFor=§c{0} §6의 메시지 수신이 §c비활성화§6되었습니다. msgEnabled=§6메시지 수신이 §c활성화§6되었습니다. @@ -663,10 +723,13 @@ msgIgnore=§c{0} §4(이)가 메시지를 비활성화했습니다. msgtoggleCommandDescription=모든 귓속말을 받지 않습니다. msgtoggleCommandUsage=/<command> [닉네임] [on|off] msgtoggleCommandUsage1=/<command> [플레이어] +msgtoggleCommandUsage1Description=해당되는 경우 자신 또는 다른 플레이어의 플라이를 설정 또는 해제합니다 multipleCharges=§4이 폭죽에는 한개의 효과만 적용할 수 있습니다. multiplePotionEffects=§4한가지 포션에 하나의 효과만 적용할 수 있습니다. muteCommandDescription=플레이어를 채금합니다. +muteCommandUsage=/<command> <player> [datediff] [reason] muteCommandUsage1=/<command> <플레이어> +muteCommandUsage2=/<command> <player> <datediff> [reason] mutedPlayer=§6플레이어§c {0}§6님이 벙어리가 되었습니다. mutedPlayerFor=§6플레이어§c {0} §6(이)가§c {1}§6동안 채금되었습니다. mutedPlayerForReason=§6플레이어§c {0} §6(이)가§c {1}§6동안 채금되었습니다. 사유\: §c{2} @@ -679,15 +742,24 @@ muteNotifyFor=§c{0} §6(이)가 §c{1}§6(을)를§c {2}§6동안 채금했습 muteNotifyForReason=§c{0} §6(이)가 §c{1}§6(을)를§c {2}§6동안 채금했습니다. 사유\: §c{3} muteNotifyReason=§c{0} §6(이)가 §c{1}§6(을)를 채금했습니다. 사유\: §c{2} nearCommandDescription=주변에 있는 플레이어 목록을 봅니다. +nearCommandUsage=/<command> [playername] [radius] nearCommandUsage1=/<command> +nearCommandUsage2=/<command> <radius> nearCommandUsage3=/<command> <플레이어> +nearCommandUsage4=/<command> <player> <radius> nearbyPlayers=§6주변 플레이어\:§r {0} negativeBalanceError=§4잔고가 음수가 되면 안됩니다. nickChanged=§6닉네임이 변경되었습니다. nickCommandDescription=본인이나 다른 플레이어의 닉네임을 바꿉니다. +nickCommandUsage=/<command> [player] <nickname|off> +nickCommandUsage1=/<command> <nickname> +nickCommandUsage1Description=해당 텍스트로 닉네임을 변경합니다 nickCommandUsage2=/<command> off +nickCommandUsage2Description=닉네임을 제거합니다 nickCommandUsage3=/<command> <플레이어> <닉네임> +nickCommandUsage3Description=해당 플레이어의 닉네임을 주어진 텍스트로 변경합니다. nickCommandUsage4=/<command> <플레이어> off +nickCommandUsage4Description=해당 플레이어의 닉네임을 삭제합니다 nickDisplayName=§4Essentials 설정에서 change-displayname 를 활성화 해야합니다. nickInUse=§4이미 사용중인 이름입니다. nickNameBlacklist=§4허용되지 않는 닉네임 입니다. @@ -786,11 +858,17 @@ playerTempBanned=§6플레이어§c {0} §6(이)가 Ip주소 §c {1} §6(을)를 playerUnbanIpAddress=§6플레이어 §c{0} §6(이)가 IP\: §c{1} §6의 차단을 해제했습니다. playerUnbanned=§6플레이어 §c{0} §6(이)가 §c{1} §6의 차단을 해제했습니다. playerUnmuted=§6뮤트 상태가 해제되었습니다. +playtimeCommandUsage=/<command> [플레이어] +playtimeCommandUsage1=/<command> +playtimeCommandUsage2=/<command> <플레이어> pong=Pong\! posPitch=§6Pitch\: {0} (머리 각도) possibleWorlds=마인팜 서버에 오심? potionCommandDescription=포션에 사용자 지정 포션 효과를 추가합니다. +potionCommandUsage=/<command> <clear|apply|effect\:<effect> power\:<power> duration\:<duration>> potionCommandUsage1=/<command> clear +potionCommandUsage2=/<command> apply +potionCommandUsage3=/<command> effect\:<effect> power\:<power> duration\:<duration> posX=§6X\: {0} (+동 <-> -서) posY=§6Y\: {0} (+위 <-> -아래) posYaw=§6Yaw\: {0} (회전) @@ -808,10 +886,24 @@ powerToolRemoveAll=§c{0}§6 에 대한 모든 명령어가 삭제되었습니 powerToolsDisabled=§6모든 파워툴이 비활성화되었습니다. powerToolsEnabled=§6모든 파워툴이 활성화되었습니다. powertoolCommandDescription=손에 들고있는 아이템에 명령어를 할당합니다. +powertoolCommandUsage=/<command> [l\:|a\:|r\:|c\:|d\:][command] [arguments] - {player} can be replaced by name of a clicked player. +powertoolCommandUsage1=/<command> l\: +powertoolCommandUsage2=/<command> d\: +powertoolCommandUsage3=/<command> r\:<cmd> +powertoolCommandUsage4=/<command> <cmd> +powertoolCommandUsage5=/<command> a\:<cmd> powertooltoggleCommandDescription=모든 현재 파워툴을 활성화하거나 비활성화합니다. powertooltoggleCommandUsage=/<command> ptimeCommandDescription=플레이어의 클라이언트 시간을 조절합니다. @ 접두사를 추가해 수정합니다. +ptimeCommandUsage=/<command> [list|reset|day|night|dawn|17\:30|4pm|4000ticks] [player|*] +ptimeCommandUsage1=/<command> list [player|*] +ptimeCommandUsage2=/<command> <time> [player|*] +ptimeCommandUsage3=/<command> reset [player|*] pweatherCommandDescription=플레이어의 날씨를 조절합니다. +pweatherCommandUsage=/<command> [list|reset|storm|sun|clear] [player|*] +pweatherCommandUsage1=/<command> list [player|*] +pweatherCommandUsage2=/<command> <storm|sun> [player|*] +pweatherCommandUsage3=/<command> reset [player|*] pTimeCurrent=§c{0} §6의 시간은 §c {1} §6입니다. pTimeCurrentFixed=§c{0} §6의 시간이 §c{1} §6(으)로 고정되었습니다. pTimeNormal=§c{0} §6의 시간은 정상이며 서버와 같습니다. @@ -835,10 +927,14 @@ radiusTooBig=§4범위가 너무 큽니다\! 최대 범위는 §c {0}§4입니 readNextPage=§c/{0} {1} §6를 입력하여 다음 페이지를 읽으세요. realName=§f{0}§r§6 (은)는 §f{1} realnameCommandDescription=진짜 이름을 표시합니다. +realnameCommandUsage=/<command> <nickname> +realnameCommandUsage1=/<command> <nickname> recentlyForeverAlone=§4{0} (은)는 최근 접속을 종료했습니다. recipe=§c{0}§6 (§c{2}§6의 §c{1}§6) 의 조합법 recipeBadIndex=그 번호에 대한 레시피가 존재하지 않습니다. recipeCommandDescription=아이템 조합 방법을 표시합니다. +recipeCommandUsage=/<command> <item> [number] +recipeCommandUsage1=/<command> <item> [page] recipeFurnace=§6제련\: §c{0}§6. recipeGrid=§c{0}X §6| §{1}X §6| §{2}X recipeGridItem=§c{0}X §6는 §c{1}입니다 @@ -848,6 +944,9 @@ recipeNothing=없음 recipeShapeless=§6결합 §c{0} recipeWhere=§6위치\: {0} removeCommandDescription=월드에 있는 엔티티를 제거합니다. +removeCommandUsage=/<command> <all|tamed|named|drops|arrows|boats|minecarts|xp|paintings|itemframes|endercrystals|monsters|animals|ambient|mobs|[mobType]> [radius|world] +removeCommandUsage1=/<command> <mob type> [world] +removeCommandUsage2=/<command> <mob type> <radius> [world] removed=§c{0}§6개의 엔티티가 제거되었습니다. repair=§c{0}§6를 성공적으로 수리하였습니다. repairAlreadyFixed=§4이 아이템은 수리가 필요하지 않습니다. @@ -896,6 +995,7 @@ seenOffline=§6플레이어§c {0} §6이/가 §c{1}§6 전부터 §4오프라 seenOnline=§6플레이어§c {0} §6이/가 §c{1}§6 전부터 §a온라인§6상태였습니다. sellBulkPermission=§6여러개를 한꺼번에 판매할 수 있는 권한이 없습니다. sellCommandDescription=손에 든 아이템을 판매합니다. +sellCommandUsage=/<command> <<itemname>|<id>|hand|inventory|blocks> [amount] sellCommandUsage1=/<command> <아이템> [수량] sellCommandUsage2=/<command> hand [수량] sellCommandUsage3=/<command> all @@ -934,6 +1034,7 @@ setwarpCommandUsage1=/<command> <워프 이름> setworthCommandDescription=아이템의 판매 가격을 설정합니다. setworthCommandUsage=/<command> [itemname|id] <가격> setworthCommandUsage1=/<command> <가격> +setworthCommandUsage2=/<command> <itemname> <price> sheepMalformedColor=§4잘못된 색상입니다. shoutDisabled=§6외치기 모드 §c비활성화§6됨. shoutDisabledFor=§c{0} §6의 외치기 모드를 §c비활성화§6했습니다. @@ -943,6 +1044,8 @@ shoutFormat=§6[외치기]§r {0} editsignCommandClear=§6표지판 지워짐. editsignCommandClearLine=§c{0} §6줄 지워짐. showkitCommandDescription=키트의 내용물을 봅니다. +showkitCommandUsage=/<command> <kitname> +showkitCommandUsage1=/<command> <kitname> editsignCommandDescription=월드에 있는 표지판을 수정합니다. editsignCommandLimit=§4입력한 텍스트는 너무 길어 표지판에 맞지 않습니다. editsignCommandNoLine=§4줄 번호는 §c1~4 §4사이로 입력해야 합니다. @@ -952,6 +1055,11 @@ editsignCopy=§6표지판이 복사되었습니다\! §c/{0} paste§6로 붙여 editsignCopyLine=§6표지판의 §c{0} §6번째 줄을 복사했습니다\! §c/{1} paste {0}§6로 붙여넣을 수 있습니다. editsignPaste=§6표지판을 붙여넣었습니다\! editsignPasteLine=§6표지판의 §c{0} §6번째 줄을 붙여넣었습니다\! +editsignCommandUsage=/<command> <set/clear/copy/paste> [line number] [text] +editsignCommandUsage1=/<command> set <line number> <text> +editsignCommandUsage2=/<command> clear <line number> +editsignCommandUsage3=/<command> copy [line number] +editsignCommandUsage4=/<command> paste [line number] signFormatFail=§4[{0}] signFormatSuccess=§1[{0}] signFormatTemplate=[{0}] @@ -962,6 +1070,7 @@ south=남 southWest=남서 skullChanged=§6머리가 §c{0}§6 (으)로 변경되었습니다. skullCommandDescription=플레이어 머리의 주인을 설정합니다. +skullCommandUsage=/<command> [owner] skullCommandUsage1=/<command> skullCommandUsage2=/<command> <플레이어> slimeMalformedSize=잘못된 크기. @@ -977,10 +1086,16 @@ socialSpyPrefix=§f[§6SS§f] §r soloMob=그 몬스터도 좋습니다. spawned=스폰 spawnerCommandDescription=스포너의 몹 유형을 바꿉니다. +spawnerCommandUsage=/<command> <mob> [delay] +spawnerCommandUsage1=/<command> <mob> [delay] spawnmobCommandDescription=몹을 소환합니다. +spawnmobCommandUsage=/<command> <mob>[\:data][,<mount>[\:data]] [amount] [player] +spawnmobCommandUsage1=/<command> <mob>[\:data] [amount] [player] +spawnmobCommandUsage2=/<command> <mob>[\:data],<mount>[\:data] [amount] [player] spawnSet=§c{0} §6그룹의 스폰장소가 설정되었습니다. spectator=관전자 speedCommandDescription=속도를 바꿉니다. +speedCommandUsage=/<command> [type] <speed> [player] speedCommandUsage1=/<command> <속도> speedCommandUsage2=/<command> <유형> <속도> [플레이어] stonecutterCommandDescription=석제 절단기를 엽니다. @@ -1027,6 +1142,7 @@ tempbanJoin={0} 동안 서버에서 차단되었습니다. 사유\: {1} tempBanned=§r{0} §c동안 임시 차단되었습니다. 사유\:\n§r{2} tempbanCommandDescription=유저를 임시 차단합니다. tempbanCommandUsage=/<command> <플레이어> <기간> [사유] +tempbanCommandUsage1=/<command> <player> <datediff> [reason] tempbanipCommandDescription=IP 주소를 임시 차단합니다. tempbanipCommandUsage=/<command> <플레이어> <기간> [사유] tempbanipCommandUsage1=/<command> <플레이어|ip 주소> <기간> [사유] @@ -1038,6 +1154,7 @@ thunderDuration=§6당신은 이 월드의 천둥을 {1}초 동안 {0} 시켰습 timeBeforeHeal=§4다음 회복까지 필요한 시간\:§c {0}§4. timeBeforeTeleport=§4다음 텔레포트까지 필요한 시간\:§c {0}§4. timeCommandDescription=월드의 시간을 표시/변경합니다. 기본값은 현재 월드입니다. +timeCommandUsage=/<command> [set|add] [day|night|dawn|17\:30|4pm|4000ticks] [worldname|all] timeCommandUsage1=/<command> timeCommandUsage1Description=모든 월드의 시간을 표시합니다 timeCommandUsage2=/<command> set <시간> [world|all] @@ -1079,9 +1196,10 @@ tpacancelCommandUsage=/<command> [플레이어] tpacancelCommandUsage1=/<command> tpacancelCommandUsage1Description=모든 대기중인 텔레포트 요청을 취소합니다. tpacancelCommandUsage2=/<command> <플레이어> -tpacceptCommandDescription=텔레포트 요청을 수락합니다. tpacceptCommandUsage=/<command> [다른 플레이어] tpacceptCommandUsage1=/<command> +tpacceptCommandUsage2=/<command> <플레이어> +tpacceptCommandUsage3=/<command> * tpahereCommandDescription=해당 플레이어를 나에게 텔레포트하도록 요청합니다. tpahereCommandUsage=/<command> <플레이어> tpahereCommandUsage1=/<command> <플레이어> @@ -1091,9 +1209,10 @@ tpallCommandUsage1=/<command> [플레이어] tpautoCommandDescription=텔레포트 요청을 자동으로 수락합니다. tpautoCommandUsage=/<command> [플레이어] tpautoCommandUsage1=/<command> [플레이어] -tpdenyCommandDescription=텔레포트 요청을 거절합니다. tpdenyCommandUsage=/<command> tpdenyCommandUsage1=/<command> +tpdenyCommandUsage2=/<command> <플레이어> +tpdenyCommandUsage3=/<command> * tphereCommandDescription=플레이어를 나에게 텔레포트시킵니다. tphereCommandUsage=/<command> <플레이어> tphereCommandUsage1=/<command> <플레이어> @@ -1238,6 +1357,7 @@ whoisAFK=§6 - 잠수\:§r {0} whoisAFKSince=§6 - 잠수\:§r {0} ({1} 부터) whoisBanned=§6 - 차단\:§r {0} whoisCommandDescription=닉네임 뒤에 가려진 진짜 닉네임을 확인합니다. +whoisCommandUsage=/<command> <nickname> whoisCommandUsage1=/<command> <플레이어> whoisCommandUsage1Description=해당 플레이어의 기본적인 정보를 보여줍니다. whoisExp=§6 - 경험치\:§r {0} (레벨 {1}) diff --git a/Essentials/src/main/resources/messages_lt.properties b/Essentials/src/main/resources/messages_lt.properties index 9add8288dab..df74d30eeb7 100644 --- a/Essentials/src/main/resources/messages_lt.properties +++ b/Essentials/src/main/resources/messages_lt.properties @@ -148,6 +148,8 @@ depthBelowSea=§6Tu esi§c {0} §6blokais-(u) zemiau juros lygio. destinationNotSet=Paskirties vieta nenustatyta\! disabled=išjungta disabledToSpawnMob=§4Spawning this mob was disabled in the config file. +discordCommandUsage=/<command> +discordCommandUsage1=/<command> disposalCommandUsage=/<command> distance=§6Distance\: {0} dontMoveMessage=§6Teleportacija prasidės po§c {0}§6. Nejudėkite. @@ -446,6 +448,8 @@ playerNeverOnServer=§4Žaidėjas§c {0} §4niekada nebuvo prisijungęs prie ši playerNotFound=§4Žaidėjas nerastas. playerTempBanned=§6Player §c{0}§6 temporarily banned §c{1}§6 for §c{2}§6\: §c{3}§6. playerUnmuted=§6Tau vėl leista kalbėti. +playtimeCommandUsage=/<command> [player] +playtimeCommandUsage1=/<command> pong=Pong\! posPitch=§6Pitch\: {0} (Head angle) possibleWorlds=§6Possible worlds are the numbers §c0§6 through §c{0}§6. diff --git a/Essentials/src/main/resources/messages_lv_LV.properties b/Essentials/src/main/resources/messages_lv_LV.properties index 593ecf88134..480d0691bce 100644 --- a/Essentials/src/main/resources/messages_lv_LV.properties +++ b/Essentials/src/main/resources/messages_lv_LV.properties @@ -232,6 +232,8 @@ destinationNotSet=Galamērķis nav noteikts\! disabled=atspējots disabledToSpawnMob=§4Šī moba radīšana bija atspējota konfigurācijas failā. disableUnlimited=§6Atspējoja§c {0} §6bezgalīgo novietošanu spēlētājam§c {1}§6. +discordCommandUsage=/<command> +discordCommandUsage1=/<command> disposal=Likvidēšana disposalCommandDescription=Tiek atvērta pārnēsājama atkritne. disposalCommandUsage=/<command> @@ -695,6 +697,9 @@ playerTempBanned=§6Spēlētājs §c{0}§6 uz laiku izraidīts §c{1}§6 par §c playerUnbanIpAddress=§6Spēlētājs§c {0} §6noņēma aizliegumu IP\:§c {1} playerUnbanned=§6Spēlētājs§c {0} §6noņēma aizliegumu§c {1} playerUnmuted=§6Tev noņēma apklusinājumu. +playtimeCommandUsage=/<command> [player] +playtimeCommandUsage1=/<command> +playtimeCommandUsage2=/<command> <player> pong=Pong\! posPitch=§6Šķērsvirziena ass\: {0} (Galvas leņķis) possibleWorlds=§6Iespējamās pasaules ir skaitļi no §c0§6 līdz §c{0}§6. @@ -961,9 +966,9 @@ tpacancelCommandDescription=Atcelt visus neizpildītos teleportēšanas piepras tpacancelCommandUsage=/<command> [player] tpacancelCommandUsage1=/<command> tpacancelCommandUsage2=/<command> <player> -tpacceptCommandDescription=Pieņem teleportēšanas pieprasījumu. tpacceptCommandUsage=/<command> [otherplayer] tpacceptCommandUsage1=/<command> +tpacceptCommandUsage2=/<command> <player> tpahereCommandDescription=Pieprasiet, lai norādītais spēlētājs teleportējas pie jums. tpahereCommandUsage=/<command> <player> tpahereCommandUsage1=/<command> <player> @@ -973,9 +978,9 @@ tpallCommandUsage1=/<command> [player] tpautoCommandDescription=Automātiski pieņem teleportēšanās pieprasījumus. tpautoCommandUsage=/<command> [player] tpautoCommandUsage1=/<command> [player] -tpdenyCommandDescription=Noraidiet teleportēšanas pieprasījumu. tpdenyCommandUsage=/<command> tpdenyCommandUsage1=/<command> +tpdenyCommandUsage2=/<command> <player> tphereCommandDescription=Teleportē spēlētāju pie sevis,. tphereCommandUsage=/<command> <player> tphereCommandUsage1=/<command> <player> diff --git a/Essentials/src/main/resources/messages_nl.properties b/Essentials/src/main/resources/messages_nl.properties index 4a9079c0d0d..86f6bc46b23 100644 --- a/Essentials/src/main/resources/messages_nl.properties +++ b/Essentials/src/main/resources/messages_nl.properties @@ -9,9 +9,9 @@ adventure=avontuur afkCommandDescription=Markeert je als weg-van-toetsenbord. afkCommandUsage=/<command> [speler/bericht...] afkCommandUsage1=/<command> [bericht] -afkCommandUsage1Description=Schakel je afk status met een andere reden +afkCommandUsage1Description=Schakel je afk status met een optionele reden afkCommandUsage2=/<command> <player> [message] -afkCommandUsage2Description=Schakel de afk status van een specifieke speler met een andere reden +afkCommandUsage2Description=Schakel de afk status van een specifieke speler met een optionele reden alertBroke=gebroken\: alertFormat=§3[{0}] §f {1} §6 {2} bij\: {3} alertPlaced=geplaatst\: @@ -94,6 +94,10 @@ bookCommandDescription=Staat heropenen en bewerken van gesloten boeken toe. bookCommandUsage=/<command> [titel|auteur [naam]] bookCommandUsage1=/<command> bookCommandUsage1Description=Vergrendelt/Ontgrendelt een boek en veer/getekend boek +bookCommandUsage2=/<command> auteur <author> +bookCommandUsage2Description=Verandert de auteur van een ondertekend boek +bookCommandUsage3=/<command> titel <title> +bookCommandUsage3Description=Verandert de titel van een ondertekend boek bookLocked=§cDit boek is nu vergrendeld. bookTitleSet=§6Titel van het boek is veranderd naar\: {0} breakCommandDescription=Breekt het blok waar je naar kijkt. @@ -102,12 +106,15 @@ broadcast=§6[§4Omroep§6]§a {0} broadcastCommandDescription=Stuurt een bericht uit naar de hele server. broadcastCommandUsage=/<command> <msg> broadcastCommandUsage1=/<command> <bericht> +broadcastCommandUsage1Description=Stuurt een bericht uit naar de hele server broadcastworldCommandDescription=Stuurt een bericht uit naar een wereld. broadcastworldCommandUsage=/<command> <wereld> <bericht> broadcastworldCommandUsage1=/<command> <wereld> <bericht> +broadcastworldCommandUsage1Description=Stuurt een bericht uit naar een gegeven wereld burnCommandDescription=Zet een speler in brand. burnCommandUsage=/<command> <speler> <seconden> burnCommandUsage1=/<command> <speler> <seconden> +burnCommandUsage1Description=Zet de opgegeven speler voor een opgegeven aantal seconden in de fik burnMsg=§7Je hebt {0} voor {1} seconde(n) in brand gezet. cannotSellNamedItem=§4Je hebt geen toestemming om items met naam te verkopen. cannotSellTheseNamedItems=§6Je hebt geen toestemming om deze items met een naam te verkopen\: §4{0} @@ -128,22 +135,35 @@ clearInventoryConfirmToggleOn=§6Je zult worden gevraagd voor een bevestiging bi clearinventoryCommandDescription=Verwijder alle voorwerpen in je inventaris. clearinventoryCommandUsage=/<command> [speler|*] [item[\:<data>]|*|**] [totaal] clearinventoryCommandUsage1=/<command> +clearinventoryCommandUsage1Description=Verwijdert alle voorwerpen uit je inventaris clearinventoryCommandUsage2=/<command> <player> +clearinventoryCommandUsage2Description=Verwijdert alle voorwerpen uit het inventaris van de opgegeven speler +clearinventoryCommandUsage3=/<commando> <speler> <item> [hoeveelheid] +clearinventoryCommandUsage3Description=Verwijdert alle (of de aangegeven hoeveelheid) van het aangegeven voorwerp uit het inventaris van de opgegeven speler clearinventoryconfirmtoggleCommandDescription=Wisselt of je gevraagd wordt om je inventaris te legen. clearinventoryconfirmtoggleCommandUsage=/<command> commandArgumentOptional=§7 +commandArgumentOr=§c commandArgumentRequired=§e commandCooldown=§cJe kan deze command niet typen voor {0}. commandDisabled=§cDe opdracht§6 {0}§c is uitgeschakeld. commandFailed=Opdracht {0} is mislukt\: commandHelpFailedForPlugin=Fout bij het verkrijgen van hulp voor\: {0}. +commandHelpLine1=§6Commando Hulp\: §f/{0} +commandHelpLine2=§6Omschrijving\: §f{0} +commandHelpLine3=§6Gebruik; +commandHelpLine4=§6Aliassen\: §f{0} +commandHelpLineUsage={0} §6{1} commandNotLoaded=§cOpdracht {0} is fout geladen. compassBearing=§6Richting\: {0} ({1} graden). compassCommandDescription=Beschrijft je huidige richting. compassCommandUsage=/<command> condenseCommandDescription=Perst items samen in meer compacte blokken. +condenseCommandUsage=/<commando> [item] condenseCommandUsage1=/<command> +condenseCommandUsage1Description=Condenseert alle items in je inventaris condenseCommandUsage2=/<command> <item> +condenseCommandUsage2Description=Condenseert het opgegeven item in je inventaris configFileMoveError=Het verplaatsen van config.yml naar de backup locatie is mislukt. configFileRenameError=Fout bij het hernoemen van de tijdelijke map naar config.yml confirmClear=§7Om het leeghalen van je intventaris te §lBEVESTIGEN§7, herhaal de command\: §6{0} @@ -158,9 +178,11 @@ createdKit=§6Kit §c{0} §6gemaakt met §c{1} §6items en met §c{2} §6seconde createkitCommandDescription=Maak een kit in het spel\! createkitCommandUsage=/<command> <kitnaam> <vertraging> createkitCommandUsage1=/<command> <kitnaam> <vertraging> +createkitCommandUsage1Description=Maakt een uitrusting met de gegeven naam en vertraging createKitFailed=§4Fout opgetreden tijdens het maken van kit {0}. createKitSeparator=§m----------------------- createKitSuccess=§6Gemaakte Kit\: §f{0}\n§6Vertraging §f{1}\n§6Link\: §f{2}\n§6Kopieer wat in de link staat in de kits.yml +createKitUnsupported=§4NBT item serialisatie is ingeschakeld, maar deze server draait geen Paper 1.15.2 +. Terugvallen naar standaard item serialisatie. creatingConfigFromTemplate=Bezig met aanmaken van een config vanaf sjabloon\: {0} creatingEmptyConfig=Bezig met het aanmaken van een lege configuratie\: {0} creative=creatief @@ -171,16 +193,24 @@ customtextCommandUsage=/<alias> - Definieer in bukkit.yml day=dag days=dagen defaultBanReason=De Ban Hamer heeft gesproken\! +deletedHomes=Alle huizen verwijderd. +deletedHomesWorld=Alle huizen in {0} verwijderd. deleteFileError=Het bestand kon niet verwijderd worden\: {0} deleteHome=§7Huis {0} is verwijderd. deleteJail=§7Gevangenis {0} is verwijderd. deleteKit=§6Kit§c {0} §6is verwijderd. deleteWarp=§7Warp {0} is verwijderd. +deletingHomes=Alle huizen aan het verwijderen... +deletingHomesWorld=Alle huizen in {0} aan het verwijderen... delhomeCommandDescription=Verwijdert een huis. delhomeCommandUsage=/<command> [speler\:]<naam> +delhomeCommandUsage1=/<commando> <naam> +delhomeCommandUsage1Description=Verwijdert het huis met de gegeven naam +delhomeCommandUsage2Description=Verwijdert het huis met de opgegeven naam van de opgegeven speler deljailCommandDescription=Verwijdert een gevangenis. deljailCommandUsage=/<command> <gevangenisnaam> deljailCommandUsage1=/<command> <gevangenisnaam> +deljailCommandUsage1Description=Verwijdert de gevangenis met de opgegeven naam delkitCommandDescription=Verwijdert de opgegeven kit. delkitCommandUsage=/<command> <kit> delkitCommandUsage1=/<command> <kit> @@ -200,6 +230,22 @@ destinationNotSet=Bestemming niet ingesteld. disabled=uitgeschakeld disabledToSpawnMob=Het spawnen van mobs is uitgeschakeld in het configuratie bestand. disableUnlimited=§6Oneindig plaatsen van§c {0} §6uitgeschakeld voor§c {1}§6. +discordCommandUsage=/<command> +discordCommandUsage1=/<command> +discordCommandExecuteDescription=Voert een consolecommando uit op de Minecraft server. +discordCommandExecuteArgumentCommand=Het commando om uit te voeren +discordCommandExecuteReply=Commando aan het uitvoeren\: "/{0}" +discordCommandListDescription=Toont een lijst met online spelers. +discordCommandListArgumentGroup=Een specifieke groep om je zoekopdracht te beperken +discordCommandMessageDescription=Stuurt een bericht naar een speler op de Minecraft server. +discordCommandMessageArgumentUsername=De speler om het bericht naartoe te sturen +discordCommandMessageArgumentMessage=Het bericht om naar de speler te sturen +discordErrorCommand=Je hebt je bot verkeerd aan je server toegevoegd. Volg alsjeblieft de tutorial in de configuratie en voeg je bot toe met https\://essentialsx.net/discord.html\! +discordErrorCommandDisabled=Dat commando is uitgeschakeld\! +discordErrorLogin=Er is een fout opgetreden tijdens het inloggen op Discord, waardoor de plugin zichzelf heeft uitgeschakeld\: \n{0} +discordErrorNoGuildSize=Je hebt je bot nog niet toegevoegd aan een server\! Volg alsjeblieft de tutorial in de configuratie om de plugin in te stellen. +discordErrorNoPerms=Je bot kan geen kanalen bekijken of in kanalen praten. Zorg er alsjeblieft voor dat je bot lees- en schrijfrechten heeft in alle kanalen die je wilt gebruiken. +discordErrorNoToken=Geen token opgegeven\! Volg alsjeblieft de tutorial in de configuratie om de plugin in te stellen. disposal=Vuilnisbak disposalCommandDescription=Opent een draagbaar verwijderingsmenu. disposalCommandUsage=/<command> @@ -230,17 +276,28 @@ errorWithMessage=§cFout\:§4 {0} essentialsCommandDescription=Herlaadt EssentialsX. essentialsCommandUsage=/<command> essentialsCommandUsage1=/<command> reload +essentialsCommandUsage3Description=Geeft informatie over welke commando''s Essentials doorstuurt essentialsCommandUsage4=/<command> debug +essentialsCommandUsage4Description=Schakelt Essentials'' "debug modus" aan of uit +essentialsCommandUsage5Description=Reset de gebruikersgegevens van de opgegeven speler +essentialsCommandUsage6Description=Schoont oude gebruikersgegevens op +essentialsCommandUsage7Description=Beheert de huizen van spelers +essentialsCommandUsage8Description=Genereert een server dump met de gevraagde informatie essentialsHelp1=Het bestand is beschadigd en Essentials kan het niet openenen. Essentials is nu uitgeschakeld. Als u dit probleem niet zelf kunt oplossen ga dan naar http\://tiny.cc/EssentialsChat essentialsHelp2=Het bestand is beschadigd en Essentials kan het niet openenen. Essentials is nu uitgeschakeld. Als u dit probleem niet zelf kun oplossen ga dan naar http\://tiny.cc/EssentialsChat of typ /essentialshelp in het spel. essentialsReload=§6Essentials is herladen§c {0}. exp=§c{0} §6heeft§c {1} §6exp (level§c {2}§6) en heeft nog§c {3} §6exp meer nodig om een level hoger te gaan. expCommandDescription=Ervaring van een speler geven, instellen, resetten of bekijken. expCommandUsage=/<command> [reset|show|set|give] [spelernaam [totaal]] +expCommandUsage1Description=Geeft de opgegeven speler een opgegeven hoeveelheid xp +expCommandUsage2Description=Stelt het xp van opgegeven speler in op de opgegeven hoeveelheid +expCommandUsage4Description=Toont hoeveel xp de opgegeven speler heeft +expCommandUsage5Description=Reset de xp van de opgegeven speler terug naar 0 expSet=§c{0} §6heeft nu§c {1} §6exp. extCommandDescription=Blus spelers. extCommandUsage=/<command> [speler] extCommandUsage1=/<command> [speler] +extCommandUsage1Description=Blus jezelf of een andere speler indien opgegeven extinguish=§6U heeft uzelf geblust. extinguishOthers=§6Je hebt {0}§6 geblust. failedToCloseConfig=Fout bij het sluiten van configuratie {0} @@ -251,20 +308,30 @@ feed=§7Je honger is verzadigd. feedCommandDescription=Stil de honger. feedCommandUsage=/<command> [speler] feedCommandUsage1=/<command> [speler] +feedCommandUsage1Description=Voedt jezelf of een andere speler indien opgegeven volledig feedOther=U heeft de honger van {0} verzadigd. fileRenameError=Hernoemen van {0} mislukt fireballCommandDescription=Gooi een vuurbal of verscheidene andere projectielen. fireballCommandUsage=/<command> [fireball|small|large|arrow|skull|egg|snowball|expbottle|dragon|splashpotion|lingeringpotion|trident] [snelheid] fireballCommandUsage1=/<command> +fireballCommandUsage1Description=Schiet een normale vuurbal vanaf je locatie +fireballCommandUsage2Description=Schiet het opgegeven projectiel af vanaf je locatie, met een optionele snelheid fireworkColor=§4U moet een kleur aan het vuurwerk geven om een effect toe te voegen. fireworkCommandDescription=Staat je toe een stapel vuurwerk aan te passen. fireworkCommandUsage=/<command> <<meta param>|power [totaal]|clear|fire [totaal]> fireworkCommandUsage1=/<command> clear +fireworkCommandUsage1Description=Verwijdert alle effecten van het vuurwerk wat je vast houdt +fireworkCommandUsage2Description=Stelt de kracht van het vuurwerk wat je vast houdt in +fireworkCommandUsage3Description=Lanceert één, of het opgegeven aantal, kopieën van het vuurwerk wat je vast houdt +fireworkCommandUsage4Description=Voegt het opgegeven effect toe aan het vuurwerk wat je vast houdt fireworkEffectsCleared=§6Alle effecten zijn van de vastgehouden stapel verwijderd. fireworkSyntax=§6Firework parameters\:§c color\:<color> [fade\:<color>] [shape\:<shape>] [effect\:<effect>]\n§6Om meerdere kleuren/effecten toe te voegen, scheid de waarden met komma''s\: §cred,blue,pink\n§6Shapes\:§c star, ball, large, creeper, burst §6Effects\:§c trail, twinkle. +fixedHomes=Ongeldige huizen verwijderd. +fixingHomes=Ongeldige huizen aan het verwijderen... flyCommandDescription=Opstijgen en zweven\! flyCommandUsage=/<command> [speler] [on|off] flyCommandUsage1=/<command> [speler] +flyCommandUsage1Description=Schakelt vliegen aan of uit voor jezelf of een andere speler indien opgegeven flying=vliegen flyMode=§7Zet vliegen {0} voor {1}. foreverAlone=§cU heeft niemand naar wie u kan reageren. @@ -276,6 +343,7 @@ gameModeInvalid=§4U moet een geldige speler/gamemodus opgeven. gamemodeCommandDescription=Verander speler spelmodus. gamemodeCommandUsage=/<command> <survival|creative|adventure|spectator> [speler] gamemodeCommandUsage1=/<command> <survival|creative|adventure|spectator> [speler] +gamemodeCommandUsage1Description=Stelt de spelmodus in van jezelf of een andere speler indien opgegeven gcCommandDescription=Rapporteert geheugen, uptime en tickinformatie. gcCommandUsage=/<command> gcfree=Vrij geheugen\: {0} MB @@ -286,8 +354,12 @@ geoipJoinFormat=§6Speler §c{0} §6komt uit §c{1}§6. getposCommandDescription=Krijg jouw huidige coördinaten of die van een speler. getposCommandUsage=/<command> [speler] getposCommandUsage1=/<command> [speler] +getposCommandUsage1Description=Toont de coördinaten van jezelf of een andere speler indien opgegeven giveCommandDescription=Geef een speler een item. giveCommandUsage=/<command> <speler> <item|numeric> [totaal [itemmeta...]] +giveCommandUsage1=/<commando> <speler> <item> [hoeveelheid] +giveCommandUsage1Description=Geeft de opgegeven speler 64 (of de opgegeven hoeveelheid) van een specifiek voorwerp +giveCommandUsage2Description=Geeft de opgegeven speler de opgegeven hoeveelheid van het opgegeven voorwerp met de opgegeven metadata geoipCantFind=§6Speler §c{0} §6komt van §aeen obbekend land§6. geoIpErrorOnJoin=Niet in staat GeoIP-gegevens op te halen voor {0}. Zorg ervoor dat de licentiesleutel en configuratie correct zijn. geoIpLicenseMissing=Geen licentiesleutel gevonden\! Ga naar https\://essentialsx.net/geoip voor installatie-instructies. @@ -297,6 +369,7 @@ givenSkull=§6U heeft de schedel ontvangen van §c{0}§6. godCommandDescription=Zet je goddelijke krachten aan. godCommandUsage=/<command> [speler] [on|off] godCommandUsage1=/<command> [speler] +godCommandUsage1Description=Schakelt god-modus aan of uit voor jezelf of een andere speler indien opgegeven giveSpawn=§c {0} {1} §6gegeven aan §c{2}§6. giveSpawnFailure=§4Niet genoeg ruimte, §c{0} {1} §4is verloren gegaan. godDisabledFor=§cuitgezet§6 voor§c {0}\n @@ -310,7 +383,9 @@ hatArmor=§4Fout, u kunt dit voorwerp niet als hoed gebruiken\! hatCommandDescription=Krijg wat coole nieuwe hoofddeksels. hatCommandUsage=/<command> [remove] hatCommandUsage1=/<command> +hatCommandUsage1Description=Zet je hoed in op het voorwerp wat je vast houdt hatCommandUsage2=/<command> remove +hatCommandUsage2Description=Verwijdert je huidige hoed hatCurse=§4Je kunt geen hoed met de vloek van het binden verwijderen\! hatEmpty=§4Je draagt geen hoed. hatFail=§4Je hebt iets nodig om te dragen als hoed. @@ -321,6 +396,7 @@ heal=§6Je bent genezen. healCommandDescription=Geneest jou of de gegeven speler. healCommandUsage=/<command> [speler] healCommandUsage1=/<command> [speler] +healCommandUsage1Description=Geneest jou of een andere speler indien opgegeven healDead=§4Je kan niet iemand genezen die dood is\! healOther=§6Je hebt§c {0}§6 genezen. helpCommandDescription=Toon de beschikbare commando’s. @@ -334,20 +410,29 @@ helpPlugin=§4{0}§r\: Plugin Hulp\: /help {1} helpopCommandDescription=Stuur een bericht aan online admins. helpopCommandUsage=/<command> <bericht> helpopCommandUsage1=/<command> <bericht> +helpopCommandUsage1Description=Stuurt het opgegeven bericht naar alle online beheerders holdBook=§4U houdt geen beschrijfbaar boek vast. holdFirework=§4U moet vuurwerk vasthouden om een effect toe te voegen. holdPotion=§4U moet een toverdrank vast houden om er een effect aan toe te voegen. holeInFloor=§4Gat in de vloer\! homeCommandDescription=Teleporteert je naar je huis. homeCommandUsage=/<command> [speler\:][naam] +homeCommandUsage1=/<commando> <naam> +homeCommandUsage1Description=Teleporteert je naar je huis met de opgegeven naam +homeCommandUsage2Description=Teleporteert je naar het huis met de opgegeven naam van de opgegeven speler homes=§6Huizen\:§r {0} homeConfirmation=§6Je hebt al een huis genaamd §c{0}§6\!\nOm je bestaande huis te overschrijven, typ het commando opniew. homeSet=§6Thuisadres ingesteld als huidige locatie. hour=uur hours=uren +ice=§6Je voelt je een stuk kouder... +iceCommandDescription=Koelt een speler af. iceCommandUsage=/<command> [speler] iceCommandUsage1=/<command> +iceCommandUsage1Description=Koelt je af iceCommandUsage2=/<command> <player> +iceCommandUsage2Description=Koelt de opgegeven speler af +iceCommandUsage3Description=Koelt alle online spelers af ignoreCommandDescription=Negeer of stop negeren van andere spelers. ignoreCommandUsage=/<command> <player> ignoreCommandUsage1=/<command> <player> @@ -407,6 +492,7 @@ itemnameClear=§6Je hebt de naam van dit voorwerp gewist. itemnameCommandDescription=Geeft een voorwerp een naam. itemnameCommandUsage=/<command> [naam] itemnameCommandUsage1=/<command> +itemnameCommandUsage2=/<commando> <naam> itemnameInvalidItem=§cJe moet een voorwerp vast hebben om het te hernoemen. itemnameSuccess=§6Je hebt het vastgehouden item hernoemd naar "§c{0}§6". itemNotEnough1=§4Je hebt niet genoeg van die voorwerpen om te verkopen. @@ -548,6 +634,7 @@ msgIgnore=§c{0} §4heeft u genegeerd. msgtoggleCommandDescription=Blokkeert alle privéberichten. msgtoggleCommandUsage=/<command> [speler] [on|off] msgtoggleCommandUsage1=/<command> [speler] +msgtoggleCommandUsage1Description=Schakelt vliegen aan of uit voor jezelf of een andere speler indien opgegeven multipleCharges=§4U kunt niet meer dan één lading aan dit vuurwerk toevoegen. multiplePotionEffects=§4U kunt niet meer dan één effect aan dit toverdrankje toevoegen. muteCommandDescription=Dempt een speler of heft het dempen op. @@ -671,6 +758,11 @@ playerTempBanned=§6Speler §c{0}§6 verbande§c {1}§6 tijdelijk voor §c{2}§6 playerUnbanIpAddress=§6Speler§c {0} §6verwijderde IPban op IP\:§c {1} playerUnbanned=§6Speler§c {0} §6verwijderde ban van§c {1} playerUnmuted=§6Speler mag weer praten. +playtimeCommandUsage=/<command> [speler] +playtimeCommandUsage1=/<command> +playtimeCommandUsage2=/<command> <player> +playtime=§6Speeltijd\:§c {0} +playtimeOther=§6Speeltijd van {1}§6\:§c {0} pong=Pong\! posPitch=§6Pitch\: {0} (Gezichtspunt) possibleWorlds=§6Mogelijke werelden zijn de nummers §c0§6 door §c{0}§6. @@ -803,6 +895,7 @@ setBalOthers=§aU heeft het saldo van {0} §aingesteld op {1}. setSpawner=§6Veranderde oproeper type naar§c {0}§6. sethomeCommandDescription=Stelt je thuisadres in als je huidige locatie. sethomeCommandUsage=/<command> [[speler\:]naam] +sethomeCommandUsage1=/<commando> <naam> setjailCommandDescription=Maakt een gevangenis op de opgegegeven plaats genaamd [jailname]. setjailCommandUsage=/<command> <gevangenisnaam> setjailCommandUsage1=/<command> <gevangenisnaam> @@ -955,10 +1048,9 @@ tpacancelCommandUsage1=/<command> tpacancelCommandUsage1Description=Annuleert al je openstaande teleport verzoeken tpacancelCommandUsage2=/<command> <player> tpacancelCommandUsage2Description=Annuleert al je openstaande teleport verzoek met de opgegeven speler -tpacceptCommandDescription=Accepteert een teleportatieverzoek. tpacceptCommandUsage=/<command> [anderespeler] tpacceptCommandUsage1=/<command> -tpacceptCommandUsage1Description=Accepteert een inkomende teleport aanvraag +tpacceptCommandUsage2=/<command> <player> tpahereCommandDescription=Verzoek dat de opgegeven speler naar je teleporteert. tpahereCommandUsage=/<command> <player> tpahereCommandUsage1=/<command> <player> @@ -968,9 +1060,9 @@ tpallCommandUsage1=/<command> [speler] tpautoCommandDescription=Automatisch teleportatieverzoeken accepteren. tpautoCommandUsage=/<command> [speler] tpautoCommandUsage1=/<command> [speler] -tpdenyCommandDescription=Een teleportatieverzoek afwijzen. tpdenyCommandUsage=/<command> tpdenyCommandUsage1=/<command> +tpdenyCommandUsage2=/<command> <player> tphereCommandDescription=Teleporteer een speler naar jou. tphereCommandUsage=/<command> <player> tphereCommandUsage1=/<command> <player> @@ -1011,9 +1103,11 @@ unableToSpawnMob=§4De mob kan niet gespawnt worden. unbanCommandDescription=Verbanning van de opgegeven speler opheffen. unbanCommandUsage=/<command> <player> unbanCommandUsage1=/<command> <player> +unbanCommandUsage1Description=Verbanning van de opgegeven speler opheffen unbanipCommandDescription=Verbanning van het opgegeven IP-adres opheffen. unbanipCommandUsage=/<command> <adres> unbanipCommandUsage1=/<command> <adres> +unbanipCommandUsage1Description=Verbanning van het opgegeven IP-adres opheffen unignorePlayer=§6U negeert §c{0}§6 niet meer. unknownItemId=§4Onbekend voorwerp id\: §r{0}§4. unknownItemInList=§4Onbekend voorwerp {0} in {1} lijst. @@ -1064,6 +1158,7 @@ versionOutputFine=§6{0} versie\: §a{1} versionOutputWarn=§6{0} versie\: §c{1} versionOutputUnsupported=§d{0} §6versie\: §d{1} versionOutputUnsupportedPlugins=§6Er draaien §dniet-ondersteunde plugins§6\! +versionOutputEconLayer=§6Economie Laag\: §r{0} versionMismatch=Verkeerde versie\! Update {0} naar dezelfde versie. versionMismatchAll=Verkeerde versie\! Update alle Essentials jars naar dezelfde versie. versionReleaseLatest=§6Je gebruikt de laatste stabiele versie van EssentialsX\! @@ -1091,9 +1186,12 @@ warps=§6Warps\:§r {0} warpsCount=§6Er zijn§c {0} §6warps. Getoonde pagina §c{1} §6van §c{2}§6. weatherCommandDescription=Stelt het weer in. weatherCommandUsage=/<command> <storm/sun> [duur] +weatherCommandUsage1Description=Stelt het weer in op het opgegeven type weer voor optionele tijd warpSet=§7Warp {0} ingesteld. warpUsePermission=§4Je hebt geen toestemming om die warp te gebruiken. weatherInvalidWorld=De wereld genaamd {0} is niet gevonden\! +weatherSignStorm=§6Weer\: §cstormachtig§6. +weatherSignSun=§6Weer\: §czonnig§6. weatherStorm=§6Je hebt het weer naar §cstormachtig§6 gezet in§c {0}§6. weatherStormFor=§6Je hebt het weer in §c{0}§6 naar §cstorm§6 gezet voor§c {1} seconde(n)§6. weatherSun=§6Je hebt het weer naar §czonnig§6 gezet in§c {0}§6. @@ -1105,6 +1203,7 @@ whoisBanned=§6 - Verbannen\:§f {0} whoisCommandDescription=Bepaal de gebruikersnaam achter een bijnaam. whoisCommandUsage=/<command> <bijnaam> whoisCommandUsage1=/<command> <player> +whoisCommandUsage1Description=Geeft de basisinformatie over de gespecificeerde speler whoisExp=§6 - Exp\:§f {0} (Level {1}) whoisFly=§6 - Vlieg modus\:§f {0} ({1}) whoisSpeed=§6 - Snelheid\:§r {0} diff --git a/Essentials/src/main/resources/messages_no.properties b/Essentials/src/main/resources/messages_no.properties index 7bd8fa9f140..a85c53f09a7 100644 --- a/Essentials/src/main/resources/messages_no.properties +++ b/Essentials/src/main/resources/messages_no.properties @@ -158,6 +158,7 @@ compassBearing=§6Peiling\: {0} ({1} grader). compassCommandDescription=Beskriver din gjeldende retningssans. compassCommandUsage=/<command> condenseCommandDescription=Kondenserer gjenstander til mer kompakte blokker. +condenseCommandUsage=/<command> [item] condenseCommandUsage1=/<command> condenseCommandUsage1Description=Kondenserer alle gjenstander i inventaret ditt condenseCommandUsage2=/<command> <gjenstand> @@ -230,6 +231,15 @@ destinationNotSet=Destinasjon ikke satt\! disabled=deaktivert disabledToSpawnMob=§4Fremkalling av denne skapningen er deaktivert i konfigurasjonsfilen. disableUnlimited=§6Deaktiverte ubegrenset plassering av§c {0} §6for§c {1}§6. +discordbroadcastCommandDescription=Sendir broadcast skilaboð á uppsetta discord rás. +discordbroadcastCommandUsage=/<skipun> <rás> <skilaboð> +discordbroadcastCommandUsage1=/<skipun> <rás> <skilaboð> +discordbroadcastCommandUsage1Description=Sendir skilaboðin á uppsetta discord rás +discordbroadcastInvalidChannel=§4Discord rás §c{0}§4 er ekki til +discordbroadcastPermission=§4Þú hefur ekki heimild til að senda skilaboð á §c{0}§4 rás. +discordbroadcastSent=§6Skilaboð send til §c{0}§6\! +discordCommandUsage=/<command> +discordCommandUsage1=/<command> discordCommandExecuteDescription=Utfører en konsollkommando på Minecraft-serveren. discordCommandExecuteArgumentCommand=Kommandoen som skal utføres discordCommandExecuteReply=Utfører kommando\: "/{0}" @@ -258,6 +268,12 @@ disposalCommandUsage=/<command> distance=§6Avstand\: {0} dontMoveMessage=§6Du vil bli teleportert om§c {0}§6. Ikke flytt på deg. downloadingGeoIp=Laster ned GeoIP-database... dette kan ta en stund (land\: 1.7 MB, steder\: 30MB) +dumpConsoleUrl=En serverutskrift ble opprettet\: §c{0} +dumpCreating=§6Oppretter serverutskrift... +dumpDeleteKey=§6Bruk følgende tast om du ønsker å slette serverutskriften ved en senere anledning\: §c{0} +dumpError=§4En feil oppstod under opprettelse av serverutskrift §c{0}§4. +dumpErrorUpload=§4En feil oppstod under opplastning §c{0}§4\: §c{1} +dumpUrl=§6Opprettet serverutskrift\: §c{0} duplicatedUserdata=Duplisert brukerdata\: {0} og {1}. durability=§6Dette verktøyet har §c{0}§6 bruk igjen. east=Ø @@ -298,6 +314,8 @@ essentialsCommandUsage3Description=Gir informasjon om hvilke kommandoer Essentia essentialsCommandUsage5Description=Nullstiller gitt spillers brukerdata essentialsCommandUsage6Description=Rydder opp gamle brukerdata essentialsCommandUsage7Description=Administrerer brukeres hjem +essentialsCommandUsage8=/<command> dump [all] [config] [discord] [kits] [log] +essentialsCommandUsage8Description=Oppretter en serverutskrift med den angitte informasjonen essentialsHelp1=Filen er ødelagt og Essentials kan ikke åpne den. Essentials er nå deaktivert. Hvis du ikke kan fikse filen selv, kan du gå til http\://tiny.cc/EssentialsChat essentialsHelp2=Filen er ødelagt og Essentials kan ikke åpne den. Essentials er nå deaktivert. Hvis du ikke kan fikse filen selv, kan du enten skrive /essentialshelp i spillet eller gå til http\://tiny.cc/EssentialsChat essentialsReload=§6Essentials lastet§c {0}§6 inn på ny. @@ -618,6 +636,10 @@ mailCommandUsage1Description=Leser den første (eller angitt) siden i e-posten d mailCommandUsage2Description=Fjerner enten alle eller angitte e-post(er) mailCommandUsage3Description=Sender den angitte spilleren meldingen mailDelay=For mange meldinger har blitt sendt i løpet av det siste minuttet. Maksimalt\: {0} +mailFormatNew=§6[§r{0}§6] §6[§r{1}§6] §r{2} +mailFormatNewTimed=§6[§e⚠§6] §6[§r{0}§6] §6[§r{1}§6] §r{2} +mailFormatNewRead=§6[§r{0}§6] §6[§r{1}§6] §7§o{2} +mailFormatNewReadTimed=§6[§e⚠§6] §6[§r{0}§6] §6[§r{1}§6] §7§o{2} mailFormat=§6[§r{0}§6] §r{1} mailMessage={0} mailSent=§6Melding sendt\! @@ -632,6 +654,7 @@ mayNotJailOffline=§4Du kan ikke fengsle offline spillere. meCommandDescription=Beskriver en handling i spillerens kontekst. meCommandUsage=/<command> <beskrivelse> meCommandUsage1=/<command> <beskrivelse> +meCommandUsage1Description=Beskriver en handling meSender=meg meRecipient=meg minimumBalanceError=§4Minste saldo en bruker kan ha er {0}. @@ -803,6 +826,9 @@ playerTempBanned=§6Spiller §c{0}§6 utestengte §c{1}§6 midlertidig i §c{2} playerUnbanIpAddress=§6Spiller§c {0} §6opphevet utestengelsen av IP\:§c {1} playerUnbanned=§6Spiller§c {0} §6opphevet utestengelsen av§c {1} playerUnmuted=§6Du er ikke lenger dempet. +playtimeCommandUsage=/<command> [spiller] +playtimeCommandUsage1=/<command> +playtimeCommandUsage2=/<command> <spiller> pong=Pong\! posPitch=§6Helning\: {0} (Hodevinkel) possibleWorlds=§6Mulige verdener er tallene §c0§6 til §c{0}§6. @@ -897,9 +923,11 @@ repairCommandDescription=Reparerer holdbarheten til ett eller alle gjenstandene. repairCommandUsage=/<command> [hand|all] repairCommandUsage1=/<command> repairCommandUsage1Description=Reparerer det holdte objektet +repairCommandUsage2Description=Reparerer alle gjenstander i ryggsekken din repairEnchanted=§4Du har ikke lov til å reparere fortryllede gjenstander. repairInvalidType=§4Denne gjenstanden kan ikke repareres. repairNone=§4Det var ingen gjenstander som måtte repareres. +replyFromDiscord=**Svar fra {0}\:** `{1}` replyLastRecipientDisabled=§6Svar til mottaker av siste melding er §cdeaktivert§6. replyLastRecipientDisabledFor=§6Svar til mottaker av siste melding er §cdeaktivert §6i §c{0}§6. replyLastRecipientEnabled=§6Svar til mottaker av siste melding er §caktivert§6. @@ -1103,9 +1131,9 @@ tpacancelCommandDescription=Avbryt alle utestående teleporteringsforespørsler. tpacancelCommandUsage=/<command> [spiller] tpacancelCommandUsage1=/<command> tpacancelCommandUsage2=/<command> <spiller> -tpacceptCommandDescription=Godtar en teleporteringsforespørsel. tpacceptCommandUsage=/<command> [annenspiller] tpacceptCommandUsage1=/<command> +tpacceptCommandUsage2=/<command> <spiller> tpahereCommandDescription=Forespør den spesifiserte spilleren om å teleportere til deg. tpahereCommandUsage=/<command> <spiller> tpahereCommandUsage1=/<command> <spiller> @@ -1115,9 +1143,9 @@ tpallCommandUsage1=/<command> [spiller] tpautoCommandDescription=Godta teleporteringsforespørsler automatisk. tpautoCommandUsage=/<command> [spiller] tpautoCommandUsage1=/<command> [spiller] -tpdenyCommandDescription=Avvis en teleporteringsforespørsel. tpdenyCommandUsage=/<command> tpdenyCommandUsage1=/<command> +tpdenyCommandUsage2=/<command> <spiller> tphereCommandDescription=Teleporter en spiller til deg. tphereCommandUsage=/<command> <spiller> tphereCommandUsage1=/<command> <spiller> diff --git a/Essentials/src/main/resources/messages_pl.properties b/Essentials/src/main/resources/messages_pl.properties index 9ef27611279..6c2125d2494 100644 --- a/Essentials/src/main/resources/messages_pl.properties +++ b/Essentials/src/main/resources/messages_pl.properties @@ -143,6 +143,7 @@ clearinventoryCommandUsage3Description=Usuwa wszystkie (lub podaną ilość) dan clearinventoryconfirmtoggleCommandDescription=Przełącza, czy trzeba potwierdzić wyczyszczenie ekwipunku. clearinventoryconfirmtoggleCommandUsage=/<command> commandArgumentOptional=§7 +commandArgumentOr=§c commandArgumentRequired=§e commandCooldown=§cMożesz użyć tego polecenia za {0}. commandDisabled=§Polecenie§6 {0}§c jest wyłączone. @@ -212,8 +213,8 @@ deljailCommandUsage=/<command> <nazwa_więzienia> deljailCommandUsage1=/<command> <nazwa_więzienia> deljailCommandUsage1Description=Usuwa więzienie o podanej nazwie delkitCommandDescription=Usuwa określony zestaw. -delkitCommandUsage=/<command> <zestaw> -delkitCommandUsage1=/<command> <zestaw> +delkitCommandUsage=/<command> <kit> +delkitCommandUsage1=/<command> <kit> delkitCommandUsage1Description=Usuwa zestaw o podanej nazwie delwarpCommandDescription=Usuwa określony warp. delwarpCommandUsage=/<command> <warp> @@ -232,6 +233,18 @@ destinationNotSet=Cel nieokreślony. disabled=wyłączone disabledToSpawnMob=§4Tworzenie tego moba zostało wyłączone w pliku konfiguracyjnym. disableUnlimited=§6Wyłączono nielimitowane stawianie §c {0} §6dla§c {1}§6. +discordbroadcastCommandDescription=Wysyła wiadomość do określonego kanału Discord. +discordbroadcastCommandUsage=/<command> <kanał> <wiadomość> +discordbroadcastCommandUsage1=/<command> <kanał> <wiadomość> +discordbroadcastCommandUsage1Description=Wysyła podaną wiadomość do danego kanału Discord +discordbroadcastInvalidChannel=§4Kanał §c{0}§4 nie istnieje. +discordbroadcastPermission=§4Nie masz permisji do wysyłania wiadomości na kanał §c{0}§4. +discordbroadcastSent=§6Wiadomość została wysłana do §c{0}§6\! +discordCommandDescription=Wysyła odsyłacz zaproszeniem do gracza. +discordCommandLink=§6Dołącz do naszego serwera Discorda na §c{0}§6\! +discordCommandUsage=/<command> +discordCommandUsage1=/<command> +discordCommandUsage1Description=Wysyła odsyłacz zaproszeniem do gracza discordCommandExecuteDescription=Wykonuje polecenie konsoli na serwerze Minecraft. discordCommandExecuteArgumentCommand=Polecenie do wykonania discordCommandExecuteReply=Wykonywanie polecenia\: "/{0}" @@ -248,6 +261,8 @@ discordErrorLoggerNoPerms=Rejestrator konsoli Discorda został wyłączony z pow discordErrorNoGuild=Nieprawidłowy lub brakujący identyfikator serwera\! Postępuj zgodnie z poradnikiem w konfiguracji, aby skonfigurować plugin. discordErrorNoGuildSize=Twój bot nie jest na żadnym serwerze\! Proszę postępować zgodnie z samouczkiem w konfiguracji, aby skonfigurować plugin. discordErrorNoPerms=Twój bot nie może widzieć ani rozmawiać na żadnym kanale\! Upewnij się, że Twój bot ma uprawnienia do odczytu i zapisu we wszystkich kanałach, których chcesz użyć. +discordErrorNoPrimary=Nie zdefiniowałeś kanału podstawowego lub zdefiniowany kanał podstawowy jest nieprawidłowy. Powrót do kanału domyślnego\: \#{0}. +discordErrorNoPrimaryPerms=Twój bot nie może rozmawiać na podstawowym kanale \#{0}\! Upewnij się, że twój bot ma uprawnienia do odczytu i zapisu we wszystkich kanałach, z których chcesz korzystać. discordErrorNoToken=Nie podano tokenu\! Postępuj zgodnie z poradnikiem w konfiguracji, aby skonfigurować plugin. discordErrorWebhook=Wystąpił błąd podczas wysyłania wiadomości do kanału konsoli\! Było to prawdopodobnie spowodowane przypadkowym usunięciem twojego webhooka konsoli. Zazwyczaj można to naprawić, upewniając się, że Twój bot ma uprawnienia "Zarządzaj Webhookami" i uruchamiając "/ess reload". discordLoggingIn=Próba logowania do Discorda... @@ -260,6 +275,12 @@ disposalCommandUsage=/<command> distance=§7Odległość\: {0} dontMoveMessage=§7Teleportacja nastąpi za§a {0}§7. Proszę się nie ruszać. downloadingGeoIp=Pobieranie bazy danych GeoIP... To może zająć chwile (kraj\: 1.7 MB, miasto\: 30MB) +dumpConsoleUrl=Utworzono zrzut serwera\: §c{0} +dumpCreating=§6Tworzenie zrzutu serwera... +dumpDeleteKey=§6Jeśli chcesz usunąć ten zrzut serwera w późniejszym terminie, użyj następującego klucza usuwania\: §c{0} +dumpError=§4Błąd podczas tworzenia zrzutu serwera §c{0}§4. +dumpErrorUpload=§4Błąd podczas wgrywania §c{0}§4\: §c{1} +dumpUrl=§6Stworzono zrzut serwera\: §c{0} duplicatedUserdata=Kopiowanie danych uzytkownika\: {0} i {1} durability=§6Temu narzędziu pozostało §c{0}§6 użyć east=E @@ -309,6 +330,8 @@ essentialsCommandUsage6=/<command> cleanup essentialsCommandUsage6Description=Czyści stare dane użytkownika essentialsCommandUsage7=/<command> homes essentialsCommandUsage7Description=Zarządza domami użytkownika +essentialsCommandUsage8=/<command> dump [all] [config] [discord] [kits] [log] +essentialsCommandUsage8Description=Generuje zrzut serwera z wymaganymi informacjami essentialsHelp1=Plik jest uszkodzony i Essentials nie może go otworzyc. Essentials jest teraz wyłączone. Jesli nie możesz samemu naprawić pliku, idź na  http\://tiny.cc/EssentialsChat essentialsHelp2=Plik jest uszkodzony i Essentials nie może go otworzyc. Essentials jest teraz wyłączone. Jesli nie możesz samemu naprawić pliku, wpisz /essentialshelp w grze lub wejdź na http\://tiny.cc/EssentialsChat essentialsReload=§6Essentials przeładował§c {0}. @@ -565,6 +588,7 @@ jailAlreadyIncarcerated=§4Ten gracz jest już w więzieniu §c{0} §4. jailList=§6Więzienia\:§r {0} jailMessage=§4Za każde przewinienie czeka cię kara. jailNotExist=§4Nie ma takiego więzienia. +jailNotifyJailed=§6Gracz§c {0} §6został wtrącony do więzienia przez gracza §c{1}§6. jailReleased=§7Gracz §c{0}§7 został wypuszczony z więzienia. jailReleasedPlayerNotify=§7Zostałeś zwolniony\! jailSentenceExtended=§7Czas pobytu w więzieniu zwiększono do\: {0} @@ -641,6 +665,7 @@ listCommandUsage1=/<command> [grupa] listCommandUsage1Description=Wyświetla listę wszystkich graczy na serwerze lub w podanej grupie listGroupTag=§6{0}§r\: listHiddenTag=§7[UKRYTY]§r +listRealName=({0}) loadWarpError=§4Błąd przy wczytywaniu warpu {0}. localFormat=[L]<{0}> {1} loomCommandDescription=Otwiera krosno. @@ -858,10 +883,13 @@ playerMutedForReason=§6Zostałeś wyciszony na§c {0}§6. Powód\: §c{1} playerMutedReason=§6Zostałeś wyciszony\! Powód\: §c{0} playerNeverOnServer=§4Gracz§c {0} §4nigdy nie był na tym serwerze. playerNotFound=§4Nie odnaleziono gracza. -playerTempBanned=§6Gracz §c{0}§6 tymczasowo zbanował §c{1}§6 za §c{2}§6\: §c{3}§6. +playerTempBanned=§6Gracz §c{0}§6 tymczasowo zbanował §c{1}§6 na §c{2}§6\: §c{3}§6. playerUnbanIpAddress=§6Gracz§c {0} §6odbanował IP\:§c {1} playerUnbanned=§6Gracz§c {0} §6odbanował gracza§c {1} playerUnmuted=§7Twój głos został przywrócony. +playtimeCommandUsage=/<command> [gracz] +playtimeCommandUsage1=/<command> +playtimeCommandUsage2=/<command> <gracz> pong=Pong\! posPitch=§7Pitch\: {0} (Kierunek głowy) possibleWorlds=§6Możliwe światy to numery od 0 do {0}. @@ -979,7 +1007,7 @@ repairCommandUsage2Description=Naprawia wszystkie przedmioty w twoim ekwipunku repairEnchanted=§4Nie masz uprawnień na naprawiania ulepszonych przedmiotów. repairInvalidType=§4Ten przedmiot nie może byc naprawiony. repairNone=§4Żadne twoje przedmioty nie potrzebują naprawy. -replyFromDiscord=**Odpowiedz od {0}\:** `{1}` +replyFromDiscord=**Odpowiedź od {0}\:** `{1}` replyLastRecipientDisabled=§6Odpowiadanie na wiadomość ostatniego odbiorcy wiadomości zostało §cwyłączone§6. replyLastRecipientDisabledFor=§6Odpowiadanie na wiadomość ostatniego odbiorcy wiadomości zostało §cwyłączone §6na §c{0}§6. replyLastRecipientEnabled=§6Odpowiadanie na wiadomość ostatniego odbiorcy wiadomości zostało §cwłączone§6. @@ -1252,10 +1280,10 @@ tpacancelCommandUsage1=/<command> tpacancelCommandUsage1Description=Anuluje wszystkie Twoje oczekujące żądania teleportacji tpacancelCommandUsage2=/<command> <gracz> tpacancelCommandUsage2Description=Anuluje wszystkie twoje prośby o teleportację do określonego gracza -tpacceptCommandDescription=Akceptuje prośbę o teleportację. tpacceptCommandUsage=/<command> [inny gracz] tpacceptCommandUsage1=/<command> -tpacceptCommandUsage1Description=Akceptuje przychodzące żądanie teleportu +tpacceptCommandUsage2=/<command> <gracz> +tpacceptCommandUsage3=/<command> * tpahereCommandDescription=Poproś, aby określony gracz teleportował się do ciebie. tpahereCommandUsage=/<command> <gracz> tpahereCommandUsage1=/<command> <gracz> @@ -1268,10 +1296,10 @@ tpautoCommandDescription=Automatycznie akceptuj prośby o teleportację. tpautoCommandUsage=/<command> [gracz] tpautoCommandUsage1=/<command> [gracz] tpautoCommandUsage1Description=Przełącza automatyczne akceptowanie próśb o teleport dla Ciebie lub innego gracza -tpdenyCommandDescription=Odrzuć prośbę o teleportację. tpdenyCommandUsage=/<command> tpdenyCommandUsage1=/<command> -tpdenyCommandUsage1Description=Odrzuca prośbę o teleport przychodzący +tpdenyCommandUsage2=/<command> <gracz> +tpdenyCommandUsage3=/<command> * tphereCommandDescription=Teleportuje gracza do ciebie. tphereCommandUsage=/<command> <gracz> tphereCommandUsage1=/<command> <gracz> diff --git a/Essentials/src/main/resources/messages_pt.properties b/Essentials/src/main/resources/messages_pt.properties index 4592613f1b7..d39d64284e9 100644 --- a/Essentials/src/main/resources/messages_pt.properties +++ b/Essentials/src/main/resources/messages_pt.properties @@ -143,6 +143,7 @@ clearinventoryCommandUsage3Description=Elimina todos (ou um número específico) clearinventoryconfirmtoggleCommandDescription=Alterna o aviso de destruição de itens do inventário. clearinventoryconfirmtoggleCommandUsage=/<command> commandArgumentOptional=§7 +commandArgumentOr=§c commandArgumentRequired=§e commandCooldown=§cNão podes executar este comando durante {0}. commandDisabled=§cO comando§6 {0}§c está desativado. @@ -232,6 +233,8 @@ destinationNotSet=Não foi definido nenhum destino\! disabled=desativou disabledToSpawnMob=§4A geração desta criatura foi desativada no ficheiro de configurações. disableUnlimited=§6A permissão de construção ilimitada de §c{0} §6foi desativada por §c{1}§6. +discordCommandUsage=/<command> +discordCommandUsage1=/<command> discordCommandExecuteDescription=Executa um comando da consola no servidor de Minecraft. discordCommandExecuteArgumentCommand=O comando a ser executado discordCommandExecuteReply=Comando a ser executado\: "/{0}" @@ -242,6 +245,8 @@ discordCommandMessageArgumentUsername=O jogador a quem enviar a mensagem discordCommandMessageArgumentMessage=A mensagem a enviar ao jogador discordErrorCommand=Não adicionaste corretamente o bot ao teu servidor. Segue as instruções no ficheiro de configurações e adiciona o bot com https\://essentialsx.net/discord.html\! discordErrorCommandDisabled=Este comando está desativado\! +discordErrorLogin=Ocorreu um erro ao iniciar sessão no Discord, o que causou que o plugin se desativasse\: {0} +discordErrorLoggerInvalidChannel=O registo de consola do Discord foi desativado devido uma definição inválida do canal\! Se a pretendes desativar, define o ID para "none"; caso contrário, verifica se o ID do canal está correto. discordErrorNoGuild=O ID do servidor é inválido\! Segue as instruções no ficheiro de configurações para definires corretamente o plugin. discordLoggingIn=A iniciar sessão no Discord... discordLoggingInDone=Sessão iniciada como {0} @@ -252,6 +257,12 @@ disposalCommandUsage=/<command> distance=§6Distância\: {0} dontMoveMessage=§6O teletransporte começará daqui a§c {0}§6. Não te mexas\! downloadingGeoIp=A transferir a base de dados do GeoIP... isto pode demorar algum tempo (país\: 1.7 MB, cidade\: 30MB) +dumpConsoleUrl=Servidor descarregado\: §c{0} +dumpCreating=§6A descarregar o servidor... +dumpDeleteKey=§6Se quiseres eliminar este descarregamento mais tarde, usa esta chave de eliminação\: §c{0} +dumpError=§4Ocorreu um erro ao descarregar §c{0}§4. +dumpErrorUpload=§4Ocorreu um erro ao enviar §c{0}§4\: §c{1} +dumpUrl=§6Descarregamento do servidor concluído\: §c{0} duplicatedUserdata=Dados de utilizador duplicados\: {0} e {1}. durability=§6Esta ferramenta ainda pode ser usada mais §c{0}§6 vezes east=E @@ -301,6 +312,7 @@ essentialsCommandUsage6=/<command> cleanup essentialsCommandUsage6Description=Elimina os dados antigos de um jogador essentialsCommandUsage7=/<command> homes essentialsCommandUsage7Description=Gere as casas de um jogador +essentialsCommandUsage8Description=Cria uma cópia do servidor com a informação solicitada essentialsHelp1=O ficheiro está corrompido e o Essentials não o consegue abrir. O Essentials está agora desativado. Se não conseguires corrigir o ficheiro por ti mesmo, acede a http\://tiny.cc/EssentialsChat essentialsHelp2=O ficheiro está corrompido e o Essentials não o consegue abrir. O Essentials está agora desativado. Se não conseguires corrigir o ficheiro por ti mesmo, usa o comando /essentialshelp ou acede http\://tiny.cc/EssentialsChat essentialsReload=§6O Essentials foi recarregado§c {0}. @@ -829,6 +841,9 @@ playerTempBanned=§6§c{0}§6 baniu temporariamente §c{1}§6 por §c{2}§6\: § playerUnbanIpAddress=§6§c {0} §6readmitiu o IP\:§c {1} playerUnbanned=§6§c {0} §6readmitiu§c {1} playerUnmuted=§6Já não estás silenciado. +playtimeCommandUsage=/<command> [jogador] +playtimeCommandUsage1=/<command> +playtimeCommandUsage2=/<command> <jogador> pong=Pong\! posPitch=§6Rotação em X\: {0} possibleWorlds=§6Os mundos possíveis são dos números §c0§6 a §c {0} §6. @@ -1132,9 +1147,10 @@ tpacancelCommandDescription=Cancela todos os pedidos de teletransporte. Especifi tpacancelCommandUsage=/<command> [jogador] tpacancelCommandUsage1=/<command> tpacancelCommandUsage2=/<command> <jogador> -tpacceptCommandDescription=Aceita um pedido de teletransporte. tpacceptCommandUsage=/<command> [outro jogador] tpacceptCommandUsage1=/<command> +tpacceptCommandUsage2=/<command> <jogador> +tpacceptCommandUsage3=/<command> * tpahereCommandDescription=Envia um pedido para um jogador teletransportar-se para ao pé de ti. tpahereCommandUsage=/<command> <jogador> tpahereCommandUsage1=/<command> <jogador> @@ -1144,9 +1160,10 @@ tpallCommandUsage1=/<command> [jogador] tpautoCommandDescription=Aceita pedidos de teletransporte automaticamente. tpautoCommandUsage=/<command> [jogador] tpautoCommandUsage1=/<command> [jogador] -tpdenyCommandDescription=Recusa um pedido de teletransporte. tpdenyCommandUsage=/<command> tpdenyCommandUsage1=/<command> +tpdenyCommandUsage2=/<command> <jogador> +tpdenyCommandUsage3=/<command> * tphereCommandDescription=Teletransporta um jogador para ao pé de ti. tphereCommandUsage=/<command> <jogador> tphereCommandUsage1=/<command> <jogador> diff --git a/Essentials/src/main/resources/messages_pt_BR.properties b/Essentials/src/main/resources/messages_pt_BR.properties index f96aaba5188..524cb4c4620 100644 --- a/Essentials/src/main/resources/messages_pt_BR.properties +++ b/Essentials/src/main/resources/messages_pt_BR.properties @@ -9,9 +9,9 @@ adventure=aventura afkCommandDescription=Marca você como AFK. afkCommandUsage=/<command> [jogador/mensagem...] afkCommandUsage1=/<command> [mensagem] -afkCommandUsage1Description=Ativa o AFK com um motivo opcional -afkCommandUsage2=/<command> <player> [message] -afkCommandUsage2Description=Ativa o AFK de um jogador específico e define o motivo (opcional) +afkCommandUsage1Description=Ativa o modo "fora do teclado" com um motivo opcional +afkCommandUsage2=/<comando> <jogador> [mensagem] +afkCommandUsage2Description=Ativa o modo "fora do teclado" de um jogador específico e define o motivo opcional alertBroke=quebrou\: alertFormat=§3[{0}] §r {1} §6 {2} em\: {3} alertPlaced=colocou\: @@ -58,9 +58,9 @@ balanceOther=§aSaldo de {0}§a\:§c {1} balanceTop=§6Mais ricos ({0}) balanceTopLine={0}, {1}, {2} balancetopCommandDescription=Lista os mais ricos do servidor. -balancetopCommandUsage=/<command> [page] -balancetopCommandUsage1=/<command> [page] -balancetopCommandUsage1Description=Exibe a primeira página (ou especificada) dos maiores saldos +balancetopCommandUsage=/<comando> [página] +balancetopCommandUsage1=/<comando> [página] +balancetopCommandUsage1Description=Exibe a primeira página (ou a página especificada) dos maiores saldos banCommandDescription=Bane um jogador. banCommandUsage=/<command> <jogador> [motivo] banCommandUsage1=/<command> <jogador> [motivo] @@ -71,8 +71,8 @@ banFormat=§4Você foi banido\:\n§r{0} banIpJoin=Seu endereço de IP foi banido deste servidor. Motivo\: {0} banJoin=Você está banido deste servidor. Motivo\: {0} banipCommandDescription=Bane um endereço IP. -banipCommandUsage=/<command> <address> [reason] -banipCommandUsage1=/<command> <address> [reason] +banipCommandUsage=/<comando> <endereço> [motivo] +banipCommandUsage1=/<comando> <endereço> [motivo] banipCommandUsage1Description=Bane o endereço IP especificado com um motivo opcional bed=§ocama§r bedMissing=§4Sua cama não foi definida, foi quebrada ou está obstruída. @@ -94,9 +94,9 @@ bookCommandDescription=Permite reabrir e editar livros assinados. bookCommandUsage=/<command> [título|autor [name]] bookCommandUsage1=/<command> bookCommandUsage1Description=Bloqueia/Desbloqueia um livro aberto ou assinado -bookCommandUsage2=/<command> autor <author> +bookCommandUsage2=/<comando> author <autor> bookCommandUsage2Description=Define o autor de um livro assinado -bookCommandUsage3=/<command> título <title> +bookCommandUsage3=/<comando> title <título> bookCommandUsage3Description=Define o título de um livro assinado bookLocked=§6O livro agora está trancado. bookTitleSet=§6Título do livro definido para {0}. @@ -106,7 +106,7 @@ broadcast=§r§6 [§4Anúncio§6] §a {0} broadcastCommandDescription=Transmite uma mensagem para todo o servidor. broadcastCommandUsage=/<command> <mensagem> broadcastCommandUsage1=/<command> <mensagem> -broadcastCommandUsage1Description=Transmite a mensagem para todo o servidor +broadcastCommandUsage1Description=Transmite a mensagem dada para todo o servidor broadcastworldCommandDescription=Transmite uma mensagem para um mundo. broadcastworldCommandUsage=/<command> <mundo> <mensagem> broadcastworldCommandUsage1=/<command> <mundo> <mensagem> @@ -114,7 +114,7 @@ broadcastworldCommandUsage1Description=Transmite a mensagem para o mundo especif burnCommandDescription=Coloca um jogador em chamas. burnCommandUsage=/<command> <jogador> <segundos> burnCommandUsage1=/<command> <jogador> <segundos> -burnCommandUsage1Description=Põe fogo no jogador especificado por um tempo determinado em segundos +burnCommandUsage1Description=Põe fogo no jogador especificado por um determinado tempo em segundos burnMsg=§6Você colocou fogo em§c {0} §6por§c {1} segundos§6. cannotSellNamedItem=§6Você não tem permissão para vender itens com nome. cannotSellTheseNamedItems=§6Você não tem permissão para vender estes itens com nome\: §4{0} @@ -138,17 +138,18 @@ clearinventoryCommandUsage1=/<command> clearinventoryCommandUsage1Description=Limpa todos os itens do seu inventário clearinventoryCommandUsage2=/<command> <jogador> clearinventoryCommandUsage2Description=Limpa todos os itens do inventário do jogador especificado -clearinventoryCommandUsage3=/<command> <player> <item> [amount] -clearinventoryCommandUsage3Description=Limpa todos (ou a quantidade especificada) de item especificado no inventário do jogador alvo +clearinventoryCommandUsage3=/<comando> <jogador> <item> [quantidade] +clearinventoryCommandUsage3Description=Limpa todos (ou a quantidade especificada) do item especificado no inventário do jogador alvo clearinventoryconfirmtoggleCommandDescription=Alterna se você será solicitado a confirmar limpezas de inventário. clearinventoryconfirmtoggleCommandUsage=/<command> commandArgumentOptional=§7 +commandArgumentOr=§c commandArgumentRequired=§e commandCooldown=§cVocê não poderá executar este comando por {0}. commandDisabled=§cO comando§6 {0}§c está desativado. commandFailed=O comando {0} falhou\: commandHelpFailedForPlugin=Erro ao obter a ajuda do plugin\: {0} -commandHelpLine1=§6Ajuda de Comando\: §f/{0} +commandHelpLine1=§6Ajuda de comando\: §f/{0} commandHelpLine2=§6Descrição\: §f{0} commandHelpLine3=§6Uso(s)\: commandHelpLine4=§6Atalho(s)\: §f{0} @@ -158,7 +159,7 @@ compassBearing=§6Apontando para\: {0} ({1} graus). compassCommandDescription=Indica a direção cardeal para qual você está olhando. compassCommandUsage=/<command> condenseCommandDescription=Condensa itens em blocos compactos. -condenseCommandUsage=/<command> [item] +condenseCommandUsage=/<comando> [item] condenseCommandUsage1=/<command> condenseCommandUsage1Description=Comprime todos os itens do seu inventário condenseCommandUsage2=/<command> <item> @@ -177,7 +178,7 @@ createdKit=§6Kit §c{0} criado §6com §c{1} §6entradas e tempo de espera de createkitCommandDescription=Crie um kit dentro do jogo\! createkitCommandUsage=/<command> <nome do kit> <cooldown> createkitCommandUsage1=/<command> <nome do kit> <cooldown> -createkitCommandUsage1Description=Cria um kit com o nome e com atraso +createkitCommandUsage1Description=Cria um conjunto de itens com nome e tempo de espera createKitFailed=§4Um erro ocorreu ao criar o kit {0}. createKitSeparator=§m----------------------- createKitSuccess=§6Kit criado\: §f{0}\n§6Tempo\: §f{1}\n§6Link\: §f{2}\n§6Copie o conteúdo do link acima para o seu arquivo kits.yml. @@ -188,12 +189,12 @@ creative=criativo currency={0}{1} currentWorld=§6Mundo atual\:§c {0} customtextCommandDescription=Permite que você crie comandos com texto personalizado. -customtextCommandUsage=/<alias> - Defina no bukkit.yml +customtextCommandUsage=/<atalho> - Defina em bukkit.yml day=dia days=dias defaultBanReason=O Martelo de Banimento proclamou\! -deletedHomes=Todas as casas deletadas. -deletedHomesWorld=Todas as casas em {0} deletadas. +deletedHomes=Todas as casas foram deletadas. +deletedHomesWorld=Todas as casas em {0} foram deletadas. deleteFileError=Não foi possível apagar o arquivo\: {0} deleteHome=§6A casa§c {0} §6foi removida. deleteJail=§6A cadeia§c {0} §6foi removida. @@ -203,22 +204,22 @@ deletingHomes=Excluindo todas as casas... deletingHomesWorld=Excluindo todas as casas em {0}... delhomeCommandDescription=Remove uma casa. delhomeCommandUsage=/<command> [jogador\:]<nome> -delhomeCommandUsage1=/<command> <name> -delhomeCommandUsage1Description=Deleta sua casa com o nome fornecido -delhomeCommandUsage2=/<command> <player>\:<name> -delhomeCommandUsage2Description=Exclui a casa do jogador especificado com o nome fornecido +delhomeCommandUsage1=/<comando> <nome> +delhomeCommandUsage1Description=Deleta sua casa de nome fornecido +delhomeCommandUsage2=/<comando> <jogador>\:<nome> +delhomeCommandUsage2Description=Exclui a casa de nome fornecido do jogador especificado deljailCommandDescription=Remove uma cadeia. deljailCommandUsage=/<command> <nome da prisão> deljailCommandUsage1=/<command> <nome da prisão> -deljailCommandUsage1Description=Exclui a prisão com o nome fornecido +deljailCommandUsage1Description=Exclui a prisão de nome fornecido delkitCommandDescription=Exclui o kit especificado. delkitCommandUsage=/<command> <kit> delkitCommandUsage1=/<command> <kit> -delkitCommandUsage1Description=Deleta o kit com o nome fornecido +delkitCommandUsage1Description=Deleta o conjunto de itens de nome fornecido delwarpCommandDescription=Exclui a warp especificada. delwarpCommandUsage=/<command> <warp> delwarpCommandUsage1=/<command> <warp> -delwarpCommandUsage1Description=Exclui o warp com o nome fornecido +delwarpCommandUsage1Description=Exclui o transporte de nome fornecido deniedAccessCommand=§c{0} §4foi negado a utilizar o comando. denyBookEdit=§4Você não pode destrancar este livro. denyChangeAuthor=§4Você não pode mudar o autor deste livro. @@ -231,24 +232,38 @@ depthCommandUsage=/depth destinationNotSet=Destino não definido\! disabled=desativado disabledToSpawnMob=§4A invocação deste mob foi desativada nas configurações. -disableUnlimited=§6A colocação ilimitada de §c{0} §6foi desativada por §c{1}§6. +disableUnlimited=§6Permissão para colocar §c{0} §6ilimitadamente foi desativada por §c{1}§6. +discordbroadcastCommandDescription=Transmite uma mensagem ao canal do Discord especificado. +discordbroadcastCommandUsage=/<comando> <canal> <mensagem> +discordbroadcastCommandUsage1=/<comando> <canal> <mensagem> +discordbroadcastCommandUsage1Description=Envia uma mensagem ao canal do Discord especificado +discordbroadcastInvalidChannel=§4O canal do Discord §c{0}§4 não existe. +discordbroadcastPermission=§4Você não tem permissão para enviar mensagens ao canal §c{0}§4. +discordbroadcastSent=§6Mensagem enviada a §c{0}§6\! +discordCommandDescription=Envia o convite do Discord ao jogador. +discordCommandLink=§6Entre no nosso servidor do Discord em §c{0}§6\! +discordCommandUsage=/<command> +discordCommandUsage1=/<command> +discordCommandUsage1Description=Envia o convite do Discord ao jogador discordCommandExecuteDescription=Executa um comando de console no servidor Minecraft. discordCommandExecuteArgumentCommand=O comando a ser executado discordCommandExecuteReply=Executando comando\: "/{0}" -discordCommandListDescription=Obtém uma lista de jogadores online. +discordCommandListDescription=Obtém a lista de jogadores online. discordCommandListArgumentGroup=Um grupo específico para limitar a sua pesquisa por discordCommandMessageDescription=Manda mensagens para um jogador no servidor Minecraft. discordCommandMessageArgumentUsername=O jogador que vai receber a mensagem discordCommandMessageArgumentMessage=A mensagem para enviar ao jogador -discordErrorCommand=Você adicionou seu bot ao seu servidor de forma incorreta. Por favor, siga o tutorial na configuração e adicione seu bot usando https\://essentialsx.net/discord.html\! +discordErrorCommand=Você adicionou seu bot ao seu servidor de forma incorreta. Por favor, siga o tutorial da configuração e adicione seu bot usando https\://essentialsx.net/discord.html\! discordErrorCommandDisabled=Este comando está desabilitado\! discordErrorLogin=Ocorreu um erro ao entrar no Discord, o que fez com que o plugin se desabilitasse\: \n{0} discordErrorLoggerInvalidChannel=O registro do console do Discord foi desativado devido a uma definição de canal inválido\! Se você pretende desativá-lo, defina o ID do canal para "nenhum"; caso contrário, verifique se seu ID de canal está correto. discordErrorLoggerNoPerms=O logger do console do Discord foi desativado devido a permissões insuficientes\! Por favor, certifique-se de que o seu bot tem as permissões "Gerenciar Webhooks" no servidor. Após corrigir isso, execute "/ess recload". -discordErrorNoGuild=ID do servidor inválido ou faltando\! Siga o tutorial nas configurações para configurar o plugin. -discordErrorNoGuildSize=Seu bot não está em nenhum servidor\! Siga o tutorial nas configurações para configurar o plugin. +discordErrorNoGuild=ID do servidor inválido ou faltando\! Siga o tutorial da configuração para configurar o plugin. +discordErrorNoGuildSize=Seu bot não está em servidor algum\! Siga o tutorial da configuração para configurar o plugin. discordErrorNoPerms=Seu bot não pode ver ou conversar em nenhum canal\! Por favor, verifique se o bot tem permissões de leitura e escrita em todos os canais que deseja usar. -discordErrorNoToken=Nenhum token fornecido\! Por favor, siga o tutorial nas configurações para configurar o plugin. +discordErrorNoPrimary=Você não definiu um canal primário ou o canal definido é inválido. Utilizando o canal padrão\: \#{0}. +discordErrorNoPrimaryPerms=Seu bot não pode ver ou conversar no canal primário, \#{0}\! Por favor, verifique se o bot tem permissões de leitura e escrita em todos os canais que deseja usar. +discordErrorNoToken=Nenhum token fornecido\! Por favor, siga o tutorial da configuração para configurar o plugin. discordErrorWebhook=Ocorreu um erro ao enviar mensagens para o canal do console\! Isso provavelmente foi causado por excluir acidentalmente o webhook do console. Isso geralmente pode ser corrigido, garantindo que o seu bot tenha a permissão "Gerenciar Webhooks" e executando "/ess reload". discordLoggingIn=Tentando acessar o Discord... discordLoggingInDone=Sessão iniciada com sucesso como {0} @@ -258,37 +273,40 @@ disposal=Lixeira disposalCommandDescription=Abre uma lixeira portátil. disposalCommandUsage=/<command> distance=§6Distância\: {0} -dontMoveMessage=§6Teletransporte iniciará em§c {0}§6. Não se mova. +dontMoveMessage=§6Teletransporte acontecerá em§c {0}§6. Não se mova. downloadingGeoIp=Baixando o banco de dados do GeoIP... Isso pode levar um tempo (país\: 1.7 MB, cidade\: 30MB) +dumpConsoleUrl=Dump do servidor criado\: §c{0} +dumpCreating=§6Criando dump do servidor... +dumpErrorUpload=§4Erro ao fazer upload de §c{0}§4\: §c{1} duplicatedUserdata=Duplicata de dados de usuário\: {0} e {1}. durability=§6Esta ferramenta tem §c{0}§6 usos restantes. east=L ecoCommandDescription=Gerencia a economia do servidor. -ecoCommandUsage=/<command> <give|take|set|reset> <player> <amount> -ecoCommandUsage1=/<command> give <player> <amount> +ecoCommandUsage=/<comando> <give|take|set|reset> <jogador> <quantidade> +ecoCommandUsage1=/<comando> give <jogador> <quantidade> ecoCommandUsage1Description=Dá ao jogador indicado uma quantia de dinheiro -ecoCommandUsage2=/<command> pega <player> <amount> +ecoCommandUsage2=/<comando> take <jogador> <quantidade> ecoCommandUsage2Description=Tira uma quantia de dinheiro do jogador especificado -ecoCommandUsage3=/<command> set <player> <amount> +ecoCommandUsage3=/<comando> set <jogador> <quantidade> ecoCommandUsage3Description=Define o saldo do jogador especificado para a quantia especificada de dinheiro -ecoCommandUsage4=/<command> reset <player> <amount> +ecoCommandUsage4=/<comando> reset <jogador> <quantidade> ecoCommandUsage4Description=Redefine o saldo do jogador especificado para o saldo inicial do servidor editBookContents=§eAgora você pode editar o conteúdo deste livro. enabled=ativado enchantCommandDescription=Encanta o item que o usuário está segurando. -enchantCommandUsage=/<command> <enchantmentname> [level] -enchantCommandUsage1=/<command> <enchantment name> [level] -enchantCommandUsage1Description=Encanta o item segurado com o encantamento dado para um nível opcional +enchantCommandUsage=/<comando> <nome do encantamento> [nivel] +enchantCommandUsage1=/<comando> <nome do encantamento> [nivel] +enchantCommandUsage1Description=Encanta o item na mão principal com o encantamento dado para um nível opcional enableUnlimited=§6Dando quantidade ilimidada de§c {0} §6para §c{1}§6. enchantmentApplied=§6O encantamento§c {0} §6foi aplicado ao item em sua mão. enchantmentNotFound=§4Encantamento não encontrado\! enchantmentPerm=§4Você não tem permissão para§c {0}§4. enchantmentRemoved=§6O encantamento§c {0} §6foi removido do item em sua mão. enchantments=§6Encantamentos\:§r {0} -enderchestCommandDescription=Permite que você veja um Baú do Ender. +enderchestCommandDescription=Permite que você abra o Baú do Ender. enderchestCommandUsage=/<command> [jogador] enderchestCommandUsage1=/<command> -enderchestCommandUsage1Description=Abre o seu baú do ender +enderchestCommandUsage1Description=Abre seu baú do ender enderchestCommandUsage2=/<command> <jogador> enderchestCommandUsage2Description=Abre o baú do ender do jogador alvo errorCallingCommand=Erro ao usar o comando /{0} @@ -305,14 +323,18 @@ essentialsCommandUsage4=/<command> debug essentialsCommandUsage4Description=Alterna o "modo depuração" do Essentials essentialsCommandUsage5=/<command> reset <jogador> essentialsCommandUsage5Description=Redefine os dados de usuário do jogador +essentialsCommandUsage6=/<comando> cleanup +essentialsCommandUsage6Description=Limpa os dados de usuários antigos +essentialsCommandUsage7=/<comando> homes essentialsCommandUsage7Description=Gerencia as casas do usuário +essentialsCommandUsage8=/<comando> dump [all] [config] [discord] [kits] [log] essentialsHelp1=O arquivo está corrompido e o Essentials não consegue abri-lo. O Essentials foi desativado. Se você não conseguir arrumar o arquivo sozinho, acesse http\://tiny.cc/EssentialsChat essentialsHelp2=O arquivo está corrompido e o Essentials não consegue abri-lo. O Essentials foi desativado. Se você não conseguir arrumar o arquivo sozinho, digite /essentialshelp no jogo ou acesse http\://tiny.cc/EssentialsChat essentialsReload=§6Essentials recarregado§c {0}. exp=§c{0} §6tem§c {1} §6de exp (nível§c {2}§6) e precisa de§c {3} §6mais exp para subir de nível. expCommandDescription=Dê, defina, redefina ou olhe a experiência de um jogador. expCommandUsage=/<command> [reset|show|set|give} [nome do jogador [amount]] -expCommandUsage1=/<command> give <player> <amount> +expCommandUsage1=/<comando> give <jogador> <quantidade> expCommandUsage1Description=Dá ao jogador alvo a quantia especificada de xp expCommandUsage2=/<command> set <jogador> <quantidade> expCommandUsage2Description=Define a xp do jogador alvo para a quantidade especificada @@ -342,6 +364,7 @@ fireballCommandDescription=Joga uma bola de fogo ou outros projéteis variados. fireballCommandUsage=/<command> [fireball|small|large|arrow|skull|egg|snowball|expbottle|dragon|splashpotion|lingeringpotion|trident] [speed] fireballCommandUsage1=/<command> fireballCommandUsage1Description=Lança uma bola de fogo normal de sua localização +fireballCommandUsage2=/<comando> fireball|small|large|arrow|skull|egg|snowball|expbottle|dragon|splashpotion|lingeringpotion|trident [velocidade] fireballCommandUsage2Description=Lança o projétil especificado de sua localização, com uma velocidade opcional fireworkColor=§4Parâmetros de fogo de artifício inválidos. Defina uma cor antes. fireworkCommandDescription=Permite que você modifique uma pilha de fogos de artifício. @@ -349,6 +372,8 @@ fireworkCommandUsage=/<command> <<meta param>|power [amount]|clear|fire [amount] fireworkCommandUsage1=/<command> clear fireworkCommandUsage1Description=Limpa todos os efeitos de seus fogos de artifício guardados fireworkCommandUsage2Description=Define o poder do fogo de artifício segurado +fireworkCommandUsage3=/<command> fire [amount] +fireworkCommandUsage3Description=Lança uma, ou a quantidade especificada, cópias do fogo de artifício fireworkCommandUsage4=/<command> <meta> fireworkCommandUsage4Description=Adiciona o efeito aos fogos de artifício na mão fireworkEffectsCleared=§6Todos os efeitos desse pack foram removidos. @@ -384,7 +409,7 @@ getposCommandUsage1=/<command> [jogador] getposCommandUsage1Description=Obtém as suas coordenadas ou de outro jogador, se especificado giveCommandDescription=Dê um item a um jogador. giveCommandUsage=/<command> <jogador> <item|número> [quantidade [dadosdoitem...]] -giveCommandUsage1=/<command> <player> <item> [amount] +giveCommandUsage1=/<comando> <jogador> <item> [quantidade] giveCommandUsage1Description=Dá ao jogador alvo 64 (ou a quantidade especificada) do item especificado giveCommandUsage2=/<command> <player> <item> <amount> <meta> giveCommandUsage2Description=Dá ao jogador alvo a quantidade especificada do item especificado com os metadados inseridos @@ -445,9 +470,9 @@ holdPotion=§4Segure uma poção para aplicar efeitos a ela. holeInFloor=§4Há um buraco no chão\! homeCommandDescription=Teletransporta-te para a sua casa. homeCommandUsage=/<command> [jogador\:][nome] -homeCommandUsage1=/<command> <name> +homeCommandUsage1=/<comando> <nome> homeCommandUsage1Description=Teletransporta você para sua casa com o nome fonecido -homeCommandUsage2=/<command> <player>\:<name> +homeCommandUsage2=/<comando> <jogador>\:<nome> homeCommandUsage2Description=Teletransporta você para a casa do jogador especificado com o nome fornecido homes=§6Casas\:§r {0} homeConfirmation=§6Você já possui uma casa chamada §c{0}§6\!\nPara substituí-la, digite o comando novamente. @@ -463,6 +488,7 @@ iceCommandUsage2=/<command> <jogador> iceCommandUsage2Description=Resfria o jogador selecionado iceCommandUsage3=/<command> * iceCommandUsage3Description=Resfria todos os jogadores online +iceOther=§6Congelando§c {0}§6. ignoreCommandDescription=Alterna se você está ignorando um jogador. ignoreCommandUsage=/<command> <jogador> ignoreCommandUsage1=/<command> <jogador> @@ -533,7 +559,7 @@ itemnameCommandDescription=Nomeia um item. itemnameCommandUsage=/<command> [nome] itemnameCommandUsage1=/<command> itemnameCommandUsage1Description=Limpa o nome do item segurado -itemnameCommandUsage2=/<command> <name> +itemnameCommandUsage2=/<comando> <nome> itemnameCommandUsage2Description=Define o nome dado ao item na mão itemnameInvalidItem=§cVocê precisa segurar um item para renomeá-lo. itemnameSuccess=§6Você renomeou o item em sua mão para "§c{0}§6". @@ -556,6 +582,9 @@ jailAlreadyIncarcerated=§4Esta pessoa já está na prisão\:§c {0} jailList=§6Prisões\:§r {0} jailMessage=§4Você foi preso. jailNotExist=§4Essa cadeia não existe. +jailNotifyJailed=§6Jogador§c {0} §6preso por §c{1}. +jailNotifyJailedFor=§6Jogador§c {0} §6preso pelo motivo§c {1}§6 por §c{2}. +jailNotifySentenceExtended=§6Jogador§c{0} §6tempo de prisão extendido para §c{1} §6por §c{2}§6. jailReleased=§6O jogador §c{0}§6 foi liberado da prisão. jailReleasedPlayerNotify=§6Você foi liberado\! jailSentenceExtended=§6Tempo na prisão extendido para\: {0}. @@ -590,22 +619,22 @@ kitCommandUsage=/<command> [kit] [jogador] kitCommandUsage1=/<command> kitCommandUsage1Description=Lista todos os kits disponíveis kitCommandUsage2=/<command> <kit> [player] -kitCommandUsage2Description=Da o determinado kit para você ou outro jogador, se especificado -kitContains=§6Kit §c{0} §6contém\: +kitCommandUsage2Description=Dá o determinado conjunto de itens para você ou outro jogador quando especificado +kitContains=§6Conjunto de itens §c{0} §6contém\: kitCost=\ §7§o({0})§r kitDelay=§m{0}§r -kitError=§4Não ha kits válidos. -kitError2=§4Esse kit não existe ou foi definido impropriamente. Contate um administrador. -kitError3=Não foi possível dar o item do kit "{0}" para o usuário {1} pois o item do kit requer Paper 1.15.2+ para deserializar. +kitError=§4Não há conjunto de itens válidos. +kitError2=§4Esse conjunto de itens não existe ou foi definido impropriamente. Contate um administrador. +kitError3=Não foi possível dar algum item do conjunto de itens "{0}" para o usuário {1} pois o item requer Paper 1.15.2+ para desserializar. kitGiveTo=§6Dando o kit§c {0}§6 para §c{1}§6. -kitInvFull=§4Seu inventário está cheio, colocando o kit no chão. +kitInvFull=§4Seu inventário está cheio, colocando o conjunto de itens no chão. kitInvFullNoDrop=§4Não há espaço suficiente em seu inventário para esse kit. kitItem=§6- §f{0} -kitNotFound=§4Esse kit não existe. -kitOnce=§4Você não pode usar esse kit novamente. -kitReceive=§6Recebido kit§c {0}§6. -kitReset=§6Redefinir o tempo de espera para o kit §c{0}§6. -kitresetCommandDescription=Redefine o tempo de espera no kit especificado. +kitNotFound=§4Esse conjunto de itens não existe. +kitOnce=§4Você não pode usar esse conjunto de itens novamente. +kitReceive=§6Recebeu o conjunto de itens§c {0}§6. +kitReset=§6Redefinir o tempo de espera para o conjunto de itens §c{0}§6. +kitresetCommandDescription=Redefine o tempo de espera do conjunto de itens especificado. kitresetCommandUsage=/<command> <kit> [player] kitresetCommandUsage1=/<command> <kit> [player] kitresetCommandUsage1Description=Redefine o tempo de espera do kit especificado para você ou outro jogador, se especificado @@ -632,6 +661,7 @@ listCommandUsage1=/<command> [grupo] listCommandUsage1Description=Lista todos os jogadores no servidor, ou no grupo especificado listGroupTag=§6{0}§r\: listHiddenTag=§7[ESCONDIDO]§r +listRealName=({0}) loadWarpError=§4Falha ao carregar o warp {0}. localFormat=[L]<{0}> {1} loomCommandDescription=Abre um tear. @@ -640,6 +670,10 @@ mailClear=§6Para marcar seus e-mails como lidos, digite§c /mail clear§6. mailCleared=§6E-mails removidos\! mailClearIndex=§4Você deve especificar um número entre 1-{0}. mailCommandDescription=Gerencia o email entre jogadores, entre servers. +mailCommandUsage=/<comando> [read|clear|clear [número]|send [destinatário] [mensagem]|sendtemp [destinatário] [prazo de validade] [mensagem]|sendall [mensagem]] +mailCommandUsage1=/<comando> read [página] +mailCommandUsage1Description=Marca a primeira página (ou a página especificada) do seu correio como lida +mailCommandUsage2=/<comando> clear [número] mailDelay=Muitos e-mails foram enviados no último minuto. Máximo\: {0} mailFormat=§6[§r{0}§6] §r{1} mailMessage={0} @@ -655,6 +689,7 @@ mayNotJailOffline=§4Você não pode prender jogadores desconectados. meCommandDescription=Descreve uma ação no contexto do jogador. meCommandUsage=/<command> <description> meCommandUsage1=/<command> <description> +meCommandUsage1Description=Descreve uma ação meSender=eu meRecipient=eu minimumBalanceError=§4O saldo mínimo que um usuário pode ter é {0}. @@ -681,6 +716,7 @@ moveSpeed=§6A velocidade de §c{2}§6 foi definida de {0} para §c {1} §6. msgCommandDescription=Envia uma mensagem privada ao jogador especificado. msgCommandUsage=/<command> <destinatário> <mensagem> msgCommandUsage1=/<command> <destinatário> <mensagem> +msgCommandUsage1Description=Envia uma mensagem particular ao jogador especificado msgDisabled=§6Recebimento de mensagens §cdesativado§6. msgDisabledFor=§6Recebimento de mensagens §cdesativado §6para §c{0}§6. msgEnabled=§6Receiving messages §cenabled§6. @@ -696,6 +732,8 @@ multiplePotionEffects=§4Você não pode aplicar mais de um efeito para essa po muteCommandDescription=Silencia ou não um jogador. muteCommandUsage=/<command> <player> [datediff] [reason] muteCommandUsage1=/<command> <jogador> +muteCommandUsage1Description=Silencia permanentemente o jogador especificado ou o dessilencia se ele já tiver sido silenciado +muteCommandUsage2Description=Silencia o jogador especificado pelo tempo dado com um motivo opcional mutedPlayer=§6Jogador§c {0} §6silenciado. mutedPlayerFor=§6Jogador§c {0} §6silenciado por§c {1}§6. mutedPlayerForReason=§6Jogador§c {0} §6silenciado por§c {1}§6. Motivo\: §c{2} @@ -710,13 +748,21 @@ muteNotifyReason=§c{0} §6silenciou o jogador §c{1}§6. Motivo\: §c{2} nearCommandDescription=Lista os jogadores perto de um jogador. nearCommandUsage=/<command> [playername] [radius] nearCommandUsage1=/<command> +nearCommandUsage1Description=Lista todos os jogadores ao seu redor usando a distância padrão +nearCommandUsage2=/<comando> <raio> +nearCommandUsage2Description=Lista todos os jogadores ao seu redor nearCommandUsage3=/<command> <jogador> +nearCommandUsage3Description=Lista todos os jogadores ao redor de um jogador específico usando a distância padrão +nearCommandUsage4=/<comando> <jogador> <raio> +nearCommandUsage4Description=Lista todos os jogadores ao redor de um jogador específico usando raio dado nearbyPlayers=§6Jogadores por perto\:§r {0} negativeBalanceError=§4Usuário não tem permissão para ter um saldo negativo. nickChanged=§6Apelido alterado. nickCommandDescription=Mude seu apelido ou de outro jogador. nickCommandUsage=/<command> [player] <nickname|off> nickCommandUsage1=/<command> <nickname> +nickCommandUsage1Description=Muda seu apelido para o texto fornecido +nickCommandUsage2Description=Remove seu nome de usuário nickDisplayName=§4Você precisa ativar o change-displayname na configuração do Essentials. nickInUse=§4Esse nome já está em uso. nickNameBlacklist=Esse apelido não é permitido. @@ -814,12 +860,24 @@ playerTempBanned=§6Jogador §c{0}§6 baniu temporariamente §c{1}§6 por §c{2} playerUnbanIpAddress=§6O jogador§c {0} §6desbaniu o IP\:§c {1} playerUnbanned=§6O jogador§c {0} §6desbaniu§c {1} playerUnmuted=§6Você não está mais silenciado. +playtimeCommandUsage=/<command> [jogador] +playtimeCommandUsage1=/<command> +playtimeCommandUsage1Description=Mostra seu tempo em jogo +playtimeCommandUsage2=/<command> <jogador> +playtimeCommandUsage2Description=Mostar o tempo em jogo do jogador especificado +playtime=§6Tempo de jogo\:§c {0} +playtimeOther=§6Tempo de jogo de {1}§6\:§c {0} pong=Pong\! posPitch=§6Pitch\: {0} (Ângulo da cabeça) possibleWorlds=§6Possíveis mundos são os números §c0§6 através de §c {0} §6. potionCommandDescription=Adiciona efeitos de poção personalizados a uma poção. potionCommandUsage=/<command> <clear|apply|effect\:<effect> power\:<power> duration\:<duration>> potionCommandUsage1=/<command> clear +potionCommandUsage1Description=Limpa todos os efeitos da poção na mão principal +potionCommandUsage2=/<command> aplicar +potionCommandUsage2Description=Aplica todos os efeitos da poção na mão principal sem consumir a poção +potionCommandUsage3=/<comando> effect\:<efeito> power\:<potência> duration\:<duração> +potionCommandUsage3Description=Aplica a descrição de efeito de poção à poção em mãos posX=§6X\: {0} (+Leste <-> -Oeste) posY=§6Y\: {0} (+Cima <-> -Baixo) posYaw=§6Yaw\: {0} (Rotação) @@ -863,6 +921,7 @@ questionFormat=§2[Pergunta]§r {0} rCommandDescription=Responde rapidamente o último jogador que te enviou uma mensagem. rCommandUsage=/<command> <mensagem> rCommandUsage1=/<command> <mensagem> +rCommandUsage1Description=Responde a última pessoa que te enviou mensagem com o texto dado radiusTooBig=§4O raio é muito grande\! O máximo é§c {0}§4. readNextPage=§6Digite§c /{0} {1} §6para ler a proxima página. realName=§f{0}§r§6 is §f{1} @@ -874,6 +933,7 @@ recipe=§6Receita para §c {0} §6 (§6 §c {1} de §c {2} §6) recipeBadIndex=Não há receita para esse numero. recipeCommandDescription=Exibe como fazer os itens. recipeCommandUsage=/<command> <item> [number] +recipeCommandUsage1Description=Mostra como fabricar um item determinado recipeFurnace=§6Fundir\:§c {0}. recipeGrid=§c{0}X §6| §{1}X §6| §{2}X recipeGridItem=§c{0}X §6é §c{1} @@ -890,9 +950,13 @@ repairAlreadyFixed=§4Esse item não precisa de reparo. repairCommandDescription=Repara a durabilidade de um ou todos os itens. repairCommandUsage=/<command> [hand|all] repairCommandUsage1=/<command> +repairCommandUsage1Description=Repara o item na mão principal +repairCommandUsage2=/<comando> all +repairCommandUsage2Description=Repara todos os itens no seu inventário repairEnchanted=§4Você não tem permissão para reparar itens encantados. repairInvalidType=§4Esse item não pode ser reparado. repairNone=§4Não haviam itens para serem reparados. +replyFromDiscord=**Resposta de {0}\:** `{1}` replyLastRecipientDisabled=§6Responder ao último destinatário §cdesativado§6. replyLastRecipientDisabledFor=§6Responder ao último destinatário §cdesativado §6por §c{0}§6. replyLastRecipientEnabled=§6Responder ao último destinatário §cdesativado§6. @@ -929,6 +993,7 @@ seenOffline=§6Jogador§c {0} §6está §4offline§6 desde §c{1}§6. seenOnline=§6Jogador§c {0} §6está §aonline§6 desde §c{1}§6. sellBulkPermission=§6You do not have permission to bulk sell. sellCommandDescription=Vende o item na sua mão. +sellCommandUsage3=/<comando> all sellHandPermission=§6You do not have permission to hand sell. serverFull=Servidor cheio\! serverReloading=Há uma boa chance do seu server estar recarregando agora. Se é esse o caso, por que você se odeia? Não espere nenhum suporte da equipe EssentialsX ao usar /reload. @@ -944,8 +1009,8 @@ setBalOthers=§aVocê configurou o seu balanço atual de {0}§a para {1}. setSpawner=§6Spawner alterado para§c {0}. sethomeCommandDescription=Defina sua casa para sua localização atual. sethomeCommandUsage=/<command> [[player\:]name] -sethomeCommandUsage1=/<command> <name> -sethomeCommandUsage2=/<command> <player>\:<name> +sethomeCommandUsage1=/<comando> <nome> +sethomeCommandUsage2=/<comando> <jogador>\:<nome> setjailCommandDescription=Cria uma cadeia onde você especificou o nome [jailname]. setjailCommandUsage=/<command> <nome da prisão> setjailCommandUsage1=/<command> <nome da prisão> @@ -1096,9 +1161,10 @@ tpacancelCommandDescription=Cancela todas as solicitações de teletransporte pe tpacancelCommandUsage=/<command> [jogador] tpacancelCommandUsage1=/<command> tpacancelCommandUsage2=/<command> <jogador> -tpacceptCommandDescription=Aceita uma solicitação de teletransporte. tpacceptCommandUsage=/<command> [otherplayer] tpacceptCommandUsage1=/<command> +tpacceptCommandUsage2=/<command> <jogador> +tpacceptCommandUsage3=/<command> * tpahereCommandDescription=Solicite que o jogador especificado teletransporte até você. tpahereCommandUsage=/<command> <jogador> tpahereCommandUsage1=/<command> <jogador> @@ -1108,9 +1174,10 @@ tpallCommandUsage1=/<command> [jogador] tpautoCommandDescription=Aceite automaticamente pedidos de teletransporte. tpautoCommandUsage=/<command> [jogador] tpautoCommandUsage1=/<command> [jogador] -tpdenyCommandDescription=Rejeita um pedido de teletransporte. tpdenyCommandUsage=/<command> tpdenyCommandUsage1=/<command> +tpdenyCommandUsage2=/<command> <jogador> +tpdenyCommandUsage3=/<command> * tphereCommandDescription=Teletransporta um jogador para você. tphereCommandUsage=/<command> <jogador> tphereCommandUsage1=/<command> <jogador> @@ -1216,7 +1283,7 @@ voiceSilencedReasonTime=§6Sua voz foi silenciada por {0}\! Motivo\: §c{1} walking=andando warpCommandDescription=Lista todos os warps ou warp para o local especificado. warpCommandUsage=/<command> <pagenumber|warp> [player] -warpCommandUsage1=/<command> [page] +warpCommandUsage1=/<comando> [página] warpDeleteError=§4Problema ao deletar o arquivo do warp. warpInfo=§6Informação para warp§c {0}§6\: warpinfoCommandDescription=Encontra informações de localização para um warp especificado. @@ -1275,6 +1342,7 @@ worldCommandUsage1=/<command> worth=§aPack de {0} vale §c{1}§a ({2} a {3} cada) worthCommandDescription=Calcula o valor de itens na mão ou conforme especificado. worthCommandUsage=/<command> <<itemname>|<id>|hand|inventory|blocks> [-][amount] +worthCommandUsage3=/<comando> all worthMeta=§aPack de {0} com metadata de {1} vale §c{2}§a ({3} a {4} cada) worthSet=§6Valor definido year=ano diff --git a/Essentials/src/main/resources/messages_ro.properties b/Essentials/src/main/resources/messages_ro.properties index 4d708688626..984a1366993 100644 --- a/Essentials/src/main/resources/messages_ro.properties +++ b/Essentials/src/main/resources/messages_ro.properties @@ -149,6 +149,8 @@ destinationNotSet=Destinatia nu a fost setata\! disabled=dezactivat disabledToSpawnMob=§4Generarea acestui mob a fost dezactivata din configuratie. disableUnlimited=§6Plasarea nelimitată de§c {0} §6a fost dezactivată pentru§c {1}§6. +discordCommandUsage=/<command> +discordCommandUsage1=/<command> disposal=Cos de gunoi disposalCommandDescription=Deschide un cos de gunoi portabil. disposalCommandUsage=/<command> @@ -523,6 +525,8 @@ playerNeverOnServer=§4Jucatorul§c {0} §4nu a fost niciodata pe acest server. playerNotFound=§4Jucatorul nu a fost gasit. playerTempBanned=§6Player §c{0}§6 temporarily banned §c{1}§6 for §c{2}§6\: §c{3}§6. playerUnmuted=§6Ti s-a dat voie sa vorbesti. +playtimeCommandUsage=/<command> [player] +playtimeCommandUsage1=/<command> pong=Pong\! posPitch=§6Inaltime\: {0} (unghiul capului) possibleWorlds=§6Possible worlds are the numbers §c0§6 through §c{0}§6. diff --git a/Essentials/src/main/resources/messages_ru.properties b/Essentials/src/main/resources/messages_ru.properties index 18e1fe2fcaa..2b6b04b2c6b 100644 --- a/Essentials/src/main/resources/messages_ru.properties +++ b/Essentials/src/main/resources/messages_ru.properties @@ -3,15 +3,15 @@ # Single quotes have to be doubled: '' # by: action=§5* {0} §5{1} -addedToAccount=§a{0} было зачислено на Ваш аккаунт. -addedToOthersAccount=§a{0} зачислено на аккаунт {1}§a. Текущий баланс\: {2} +addedToAccount=§a{0} было зачислено на Ваш счёт. +addedToOthersAccount=§a{0} зачислено на счёт {1}§a. Текущий баланс\: {2} adventure=приключенческий -afkCommandDescription=Отмечает Вас как отошедшего. +afkCommandDescription=Отмечает Вас как AFK. afkCommandUsage=/<command> [игрок/сообщение...] afkCommandUsage1=/<command> [сообщение] -afkCommandUsage1Description=Переключает Ваш статус отошедшего с необязательным указанием причины +afkCommandUsage1Description=Переключает Ваш AFK-статус с указанием причины afkCommandUsage2=/<command> <игрок> [сообщение] -afkCommandUsage2Description=Переключает статус отошедшего указанного игрока с необязательным указанием причины +afkCommandUsage2Description=Переключает AFK-статус указанного игрока с указанием причины alertBroke=сломал\: alertFormat=§3[{0}] §r {1} §6 {2} в\: {3} alertPlaced=поставил\: @@ -27,26 +27,26 @@ antiochCommandDescription=Небольшой сюрприз для операт antiochCommandUsage=/<command> [сообщение] anvilCommandDescription=Открывает наковальню. anvilCommandUsage=/<command> -autoAfkKickReason=Вы были выкинуты с сервера за бездействие более {0} минут. +autoAfkKickReason=Вы были кикнуты за бездействие более {0} минут. autoTeleportDisabled=§6Вы больше не принимаете запросы на телепортацию автоматически. autoTeleportDisabledFor=§c{0}§6 больше не принимает запросы на телепортацию автоматически. -autoTeleportEnabled=§6Теперь Вы принимаете запросы на телепортацию автоматически. -autoTeleportEnabledFor=§c{0}§6 теперь принимает запросы на телепортацию автоматически. +autoTeleportEnabled=§6Теперь Вы автоматически принимаете запросы на телепортацию. +autoTeleportEnabledFor=§c{0}§6 теперь автоматически принимает запросы на телепортацию. backAfterDeath=§6Используйте команду§c /back§6, чтобы вернуться на место своей смерти. -backCommandDescription=Телепортирует Вас на последнюю локацию перед tp/spawn/warp. +backCommandDescription=Телепортирует Вас на прежнюю локацию перед tp/spawn/warp. backCommandUsage=/<command> [игрок] backCommandUsage1=/<command> -backCommandUsage1Description=Телепортирует Вас на последнюю локацию +backCommandUsage1Description=Телепортирует Вас на прежнюю локацию backCommandUsage2=/<command> <игрок> -backCommandUsage2Description=Телепортирует указанного игрока на его последнюю локацию -backOther=§c{0}§6 возвращен на предыдущую локацию. +backCommandUsage2Description=Телепортирует указанного игрока на его прежнюю локацию +backOther=§c{0}§6 возвращен на прежнюю локацию. backupCommandDescription=Запускает резервное копирование, если это указано в конфигурации. backupCommandUsage=/<command> backupDisabled=§4Внешний скрипт резервного копирования не был настроен. backupFinished=§6Резервное копирование завершено. backupStarted=§6Резервное копирование начато. backupInProgress=§6В данный момент выполняется скрипт внешнего резервного копирования\! Отключение плагина недоступно до завершения процесса. -backUsageMsg=§6Возвращение на предыдущую локацию. +backUsageMsg=§6Возвращение на прежнюю локацию. balance=§aБаланс\:§c {0} balanceCommandDescription=Отображает текущий баланс игрока. balanceCommandUsage=/<command> [игрок] @@ -64,24 +64,24 @@ balancetopCommandUsage1Description=Отображает первую (или у banCommandDescription=Банит игрока. banCommandUsage=/<command> <игрок> [причина] banCommandUsage1=/<command> <игрок> [причина] -banCommandUsage1Description=Банит указанного игрока с необязательным указанием причины +banCommandUsage1Description=Банит указанного игрока с указанием причины либо без неё banExempt=§4Вы не можете забанить этого игрока. -banExemptOffline=§4Вы не можете банить офлайн игроков. +banExemptOffline=§4Вы не можете забанить игрока не в сети. banFormat=§4Вы были забанены\:\n§r{0} -banIpJoin=Ваш IP-адрес был забанен на этом сервере. Причина\: {0} -banJoin=Вы были забанены на этом сервере. Причина\: {0} +banIpJoin=Ваш IP-адрес забанен на этом сервере. Причина\: {0} +banJoin=Вы забанены на этом сервере. Причина\: {0} banipCommandDescription=Банит IP-адрес. banipCommandUsage=/<command> <ip-адрес> [причина] banipCommandUsage1=/<command> <ip-адрес> [причина] -banipCommandUsage1Description=Банит указанный IP-адрес с необязательным указанием причины +banipCommandUsage1Description=Банит указанный IP-адрес с указанием причины либо без неё bed=§obed (кровать)§r bedMissing=§4Ваша кровать не установлена, потеряна, или доступ к ней заблокирован. bedNull=§mbed (кровать)§r -bedOffline=§4Невозможно телепортироваться к кроватям офлайн игроков. +bedOffline=§4Невозможно телепортироваться к кроватям игроков не в сети. bedSet=§6Спавн у кровати установлен\! beezookaCommandDescription=Бросает взрывную пчелу в Вашего противника. beezookaCommandUsage=/<command> -bigTreeFailure=§4Не удалось сгенерировать большое дерево. Попробуйте на дёрне или земле. +bigTreeFailure=§4Не удалось сгенерировать большое дерево. Попробуйте на блоках травы или земли. bigTreeSuccess=§6Большое дерево создано. bigtreeCommandDescription=Создаёт большое дерево на месте Вашего взора. bigtreeCommandUsage=/<command> <tree|redwood|jungle|darkoak> @@ -98,7 +98,7 @@ bookCommandUsage2=/<command> author <автор> bookCommandUsage2Description=Изменяет автора подписанной книги bookCommandUsage3=/<command> title <название> bookCommandUsage3Description=Изменяет название подписанной книги -bookLocked=§6Теперь эта книга заблокирована. +bookLocked=§6Книга заблокирована. bookTitleSet=§6Название книги изменено на {0}. breakCommandDescription=Разрушает блок, на который Вы смотрите. breakCommandUsage=/<command> @@ -107,7 +107,7 @@ broadcastCommandDescription=Объявляет сообщение на весь broadcastCommandUsage=/<command> <сообщение> broadcastCommandUsage1=/<command> <сообщение> broadcastCommandUsage1Description=Объявляет указанное сообщение на весь сервер -broadcastworldCommandDescription=Объявляет сообщение миру. +broadcastworldCommandDescription=Объявляет сообщение в мире. broadcastworldCommandUsage=/<command> <мир> <сообщение> broadcastworldCommandUsage1=/<command> <мир> <сообщение> broadcastworldCommandUsage1Description=Объявляет указанное сообщение в указанном мире @@ -139,10 +139,11 @@ clearinventoryCommandUsage1Description=Удаляет все предметы в clearinventoryCommandUsage2=/<command> <игрок> clearinventoryCommandUsage2Description=Удаляет все предметы в инвентаре указанного игрока clearinventoryCommandUsage3=/<command> <игрок> <предмет> [кол-во] -clearinventoryCommandUsage3Description=Удаляет весь (или указанное количество) указанного предмета из инвентаря указанного игрока +clearinventoryCommandUsage3Description=Удаляет все (или указанное количество) указанного предмета из инвентаря указанного игрока clearinventoryconfirmtoggleCommandDescription=Переключает подтверждение очистки инвентаря. clearinventoryconfirmtoggleCommandUsage=/<command> commandArgumentOptional=§7 +commandArgumentOr=§c commandArgumentRequired=§e commandCooldown=§cВы не можете использовать эту команду ещё {0}. commandDisabled=§cКоманда§6 {0}§c отключена. @@ -181,7 +182,7 @@ createkitCommandUsage1Description=Создаёт набор с указанны createKitFailed=§4Произошла ошибка при создании набора {0}. createKitSeparator=§m----------------------- createKitSuccess=§6Создан набор\: §f{0}\n§6Задержка\: §f{1}\n§6Ссылка\: §f{2}\n§6Скопируйте содержимое по ссылке выше в kits.yml. -createKitUnsupported=§4Сериализация NBT предметов была включена, но этот сервер не использует Paper 1.15.2+. Используем стандартную сериализацию предметов. +createKitUnsupported=§4Сериализация NBT предметов включена, но этот сервер не использует Paper 1.15.2+. Используется стандартный метод сериализации предметов. creatingConfigFromTemplate=Создаю файл конфигурации из шаблона\: {0} creatingEmptyConfig=Создаю пустой конфигурационный файл\: {0} creative=творческий @@ -214,11 +215,11 @@ deljailCommandUsage1Description=Удаляет тюрьму с указанны delkitCommandDescription=Удаляет указанный набор. delkitCommandUsage=/<command> <набор> delkitCommandUsage1=/<command> <набор> -delkitCommandUsage1Description=Удаляет набор с заданным именем +delkitCommandUsage1Description=Удаляет набор с указанным именем delwarpCommandDescription=Удаляет указанный варп. delwarpCommandUsage=/<command> <варп> delwarpCommandUsage1=/<command> <варп> -delwarpCommandUsage1Description=Удаляет варп с заданным именем +delwarpCommandUsage1Description=Удаляет варп с указанным именем deniedAccessCommand=§c{0} §4отказано в доступе к команде. denyBookEdit=§4Вы не можете переписать эту книгу. denyChangeAuthor=§4Вы не можете изменить автора этой книги. @@ -232,6 +233,18 @@ destinationNotSet=Место назначения не назначено\! disabled=выключено disabledToSpawnMob=§4Призыв данного моба отключен в настройках. disableUnlimited=§6Отключено неограниченное размещение§c {0} §6для§c {1}§6. +discordbroadcastCommandDescription=Направляет сообщение в указанный Discord-канал. +discordbroadcastCommandUsage=/<command> <канал> <сообщение> +discordbroadcastCommandUsage1=/<command> <канал> <сообщение> +discordbroadcastCommandUsage1Description=&c&lИНФО &fОтправляет указанное сообщение в указанный Discord-канал +discordbroadcastInvalidChannel=§4Discord-канал §c{0}§4 не существует. +discordbroadcastPermission=§4У вас нет прав для отправки сообщений в канал §c{0}§4. +discordbroadcastSent=§6Сообщение отправлено в канал §c{0}§6\! +discordCommandDescription=&c&lИНФО &fОтправляет игроку ссылку-приглашение на discord. +discordCommandLink=§6Присоединитесь к нашему discord-серверу через §c{0}§6\! +discordCommandUsage=/<command> +discordCommandUsage1=/<command> +discordCommandUsage1Description=Отправляет игроку ссылку-приглашение на discord discordCommandExecuteDescription=Выполняет консольную команду на сервере Minecraft. discordCommandExecuteArgumentCommand=Команда, которую нужно выполнить discordCommandExecuteReply=Выполнение команды\: "/{0}" @@ -243,11 +256,13 @@ discordCommandMessageArgumentMessage=Сообщение, отправляемо discordErrorCommand=Вы добавили бота на свой сервер некорректно. Пожалуйста, следуйте руководству в конфигурации и добавьте своего бота с помощью https\://essentialsx.net/discord.html\! discordErrorCommandDisabled=Эта команда отключена\! discordErrorLogin=Произошла ошибка при входе в Discord, что привело к отключению плагина\: \n{0} -discordErrorLoggerInvalidChannel=Логирование консоли в Discord было отключено из-за неверного канала\! Если Вы хотите отключить его, установите ID канала на "none"; иначе проверьте правильность ID канала. +discordErrorLoggerInvalidChannel=Отображение лога консоли в Discord было отключено из-за неверного канала\! Если Вы хотите отключить эту функцию, установите ID канала на "none"; или же проверьте правильность ID канала. discordErrorLoggerNoPerms=Логирование консоли в Discord было отключено из-за недостатка прав\! Пожалуйста, убедитесь, что у Вашего бота есть право на "Управление вебхуками". После этого введите "/ess reload". discordErrorNoGuild=ID сервера неверен или отсутствует\! Пожалуйста, следуйте руководству в конфигурации для верной настройки плагина. discordErrorNoGuildSize=Вашего бота нет на серверах\! Пожалуйста, следуйте руководству в конфигурации для верной настройки плагина. discordErrorNoPerms=Ваш бот не может видеть или писать ни на одном канале\! Пожалуйста, убедитесь, что Ваш бот имеет права на чтение и запись во всех каналах, которые Вы хотите использовать. +discordErrorNoPrimary=Вы не указали основной канал или Ваш основной канал неверен. Будет использован стандартный канал\: \#{0}. +discordErrorNoPrimaryPerms=Ваш бот не может говорить в вашем основном канале, \#{0}. Пожалуйста, убедитесь, что ваш бот имеет разрешения на чтение и запись во всех каналах, которые вы хотите использовать. discordErrorNoToken=Токен не предоставлен\! Пожалуйста, следуйте руководству в конфигурации для верной настройки плагина. discordErrorWebhook=Произошла ошибка при отправке сообщений на канал консоли\! Скорее всего, это было вызвано случайным удалением вебхука консоли. Обычно это можно исправить выдачей боту права "Управления вебхуками" и вводом "/ess reload". discordLoggingIn=Попытка входа в Discord... @@ -260,6 +275,12 @@ disposalCommandUsage=/<command> distance=§6Дистанция\: {0} dontMoveMessage=§6Телепортация начнется через§c {0}§6. Не двигайтесь. downloadingGeoIp=Идёт загрузка базы данных GeoIP... Это может занять некоторое время (страна\: 1,7 MB город\: 30MB) +dumpConsoleUrl=Дамп сервера был создан\: §c{0} +dumpCreating=§6Создание дампа сервера... +dumpDeleteKey=§6Если вы захотите позже удалить этот дамп, используйте следующий ключ удаления\: §c{0} +dumpError=§4Произошла ошибка при создании дампа §c{0}§4. +dumpErrorUpload=§4Произошла ошибка при выгрузке §c{0}§4\: §c{1} +dumpUrl=§6Создан дамп сервера\: §c{0} duplicatedUserdata=Дублированные файлы пользователей\: {0} и {1}. durability=§6У этого предмета ещё §c{0}§6 использований. east=В @@ -308,7 +329,9 @@ essentialsCommandUsage5Description=Сбрасывает пользователь essentialsCommandUsage6=/<command> cleanup essentialsCommandUsage6Description=Очищает старые пользовательские данные essentialsCommandUsage7=/<command> homes -essentialsCommandUsage7Description=Управляет домами игроков +essentialsCommandUsage7Description=Управляет домами игрока +essentialsCommandUsage8=/<command> dump [all] [config] [discord] [kits] [log] +essentialsCommandUsage8Description=Создаёт дамп памяти сервера с запрошенной информацией essentialsHelp1=Файл поврежден, поэтому Essentials не может его открыть. Плагин будет отключен. Если Вы не можете исправить проблему самостоятельно, перейдите по ссылке https\://essentialsx.cf/community.html essentialsHelp2=Файл поврежден, поэтому Essentials не может его открыть. Плагин будет отключен. Если Вы не можете исправить проблему самостоятельно, введите /essentialshelp или перейдите по ссылке https\://essentialsx.cf/community.html essentialsReload=§6Essentials перезагружен§c {0}. @@ -318,11 +341,11 @@ expCommandUsage=/<command> [reset|show|set|give] [<игрок> [кол-во]] expCommandUsage1=/<command> give <игрок> <сумма> expCommandUsage1Description=Даёт указанному игроку указанную сумму опыта expCommandUsage2=/<command> set <игрок> <значение> -expCommandUsage2Description=Устанавливает опыт игрока на указанную сумму +expCommandUsage2Description=Устанавливает опыт игрока на указанное количество expCommandUsage3=/<command> show <игрок> -expCommandUsage4Description=Отображает количество опыта игрока +expCommandUsage4Description=Отображает количество опыта указанного игрока expCommandUsage5=/<command> reset <игрок> -expCommandUsage5Description=Сбрасывает опыт определённого игрока до 0 +expCommandUsage5Description=Сбрасывает опыт указанного игрока expSet=§c{0} §6теперь имеет§c {1} §6опыта. extCommandDescription=Тушит игроков. extCommandUsage=/<command> [игрок] @@ -352,20 +375,20 @@ fireworkCommandDescription=Позволяет изменить стак фейе fireworkCommandUsage=/<command> <<метаданные>|power <мощность>|clear|fire [кол-во]> fireworkCommandUsage1=/<command> clear fireworkCommandUsage1Description=Очищает все эффекты из удерживаемого фейерверка -fireworkCommandUsage2=/<command> power <сила> -fireworkCommandUsage2Description=Устанавливает силу удерживаемого фейерверка -fireworkCommandUsage3=/<command> fire [сумма] +fireworkCommandUsage2=/<command> power <мощность> +fireworkCommandUsage2Description=Устанавливает мощность удерживаемого фейерверка +fireworkCommandUsage3=/<command> fire [кол-во] fireworkCommandUsage3Description=Запускает одну, или указанное количество копий удерживаемого фейерверка fireworkCommandUsage4=/<command> <метаданные> -fireworkCommandUsage4Description=Добавляет указанный эффект в удерживаемый феерверк +fireworkCommandUsage4Description=Добавляет указанный эффект на удерживаемый фейерверк fireworkEffectsCleared=§6Убраны все эффекты с удерживаемого стака. fireworkSyntax=§6Параметры фейерверка\:§c color\:<цвет> [fade\:<цвет>] [shape\:<форма>] [effect\:<эффект>]\n§6Чтобы использовать несколько цветов/эффектов, разделяйте значения запятыми\: §cred,blue,pink\n§6Формы\:§c star, ball, large, creeper, burst§6. Эффекты\:§c trail, twinkle§6. -fixedHomes=Недействительные дома удалены. -fixingHomes=Удаление недействительных домов... +fixedHomes=Недействительные точки дома удалены. +fixingHomes=Удаление недействительных точек дома... flyCommandDescription=Лети, как птица\! flyCommandUsage=/<command> [игрок] [on|off] flyCommandUsage1=/<command> [игрок] -flyCommandUsage1Description=Переключает полёт для вас, или для другого игрока, если он указан +flyCommandUsage1Description=Переключает полёт для вас или другого игрока, если он указан flying=летает flyMode=§6Режим полета§c {0} §6для {1}§6. foreverAlone=§4Нет никого, кому бы Вы могли ответить. @@ -418,7 +441,7 @@ hatArmor=§4Вы не можете надеть этот предмет на г hatCommandDescription=Надевает на Вас крутой головной убор. hatCommandUsage=/<command> [remove] hatCommandUsage1=/<command> -hatCommandUsage1Description=Надевает блок в руке Вам на голову +hatCommandUsage1Description=Надевает предмет в руке Вам на голову hatCommandUsage2=/<command> remove hatCommandUsage2Description=Убирает вашу текущую шляпу hatCurse=§4Вы не можете снять шляпу с проклятием несъёмности\! @@ -445,7 +468,7 @@ helpPlugin=§fПомощь по плагину §4{0}§r\: /help {1} helpopCommandDescription=Отсылает сообщение онлайн администраторам. helpopCommandUsage=/<command> <сообщение> helpopCommandUsage1=/<command> <сообщение> -helpopCommandUsage1Description=Отправляет указанное сообщение всем администраторам находящимися в данный момент в сети +helpopCommandUsage1Description=Отправляет указанное сообщение всем администраторам, которые находятся в данный момент в сети holdBook=§4Вы не держите редактируемую книгу. holdFirework=§4Вы должны держать фейерверк для добавления эффектов. holdPotion=§4Вы должны держать зелье для применения эффектов. @@ -527,7 +550,7 @@ itemloreCommandUsage=/<command> <add|set|clear> [линия] [текст] itemloreCommandUsage1=/<command> add [текст] itemloreCommandUsage1Description=Добавляет заданный текст в конец описания удерживаемого предмета itemloreCommandUsage2=/<command> set <строка> <текст> -itemloreCommandUsage2Description=Устанавливает указанную строку описания удерживаемого предмета на заданный текст +itemloreCommandUsage2Description=Устанавливает указанный текст в выбранную строку на удерживаемый предмет itemloreCommandUsage3=/<command> clear itemloreCommandUsage3Description=Удаляет описание у удерживаемого предмета itemloreInvalidItem=§cВам нужно держать предмет, чтобы редактировать его описание. @@ -565,6 +588,9 @@ jailAlreadyIncarcerated=§4Игрок уже в тюрьме\:§c {0} jailList=§6Тюрьмы\:§r {0} jailMessage=§4Вы попали в тюрьму. Приятного отдыха\! jailNotExist=§4Этой тюрьмы не существует. +jailNotifyJailed=§6Игрок§c {0} §6заключен в тюрьму §c{1}. +jailNotifyJailedFor=§6Игрок§c {2} §6посадил§c {0} §6в тюрьму за§c {1}§6. +jailNotifySentenceExtended=§6Игрок§c{0} §6Время тюрьмы продлено до §c{1} §6на §c{2}§6. jailReleased=§6Игрок §c{0}§6 выпущен на свободу. jailReleasedPlayerNotify=§6Вы были выпущен\! jailSentenceExtended=§6Срок тюремного заключения продлен до §c{0}§6. @@ -587,7 +613,7 @@ kickExempt=§4Вы не можете выкинуть этого игрока. kickallCommandDescription=Выкидывает с сервера всех игроков, кроме тех, у кого есть защита. kickallCommandUsage=/<command> [причина] kickallCommandUsage1=/<command> [причина] -kickallCommandUsage1Description=Выкидывает с сервера всех с необязательным указанием причины +kickallCommandUsage1Description=Выкидывает с сервера всех игроков с необязательным указанием причины kill=§6Убит§c {0}§6. killCommandDescription=Убивает указанного игрока. killCommandUsage=/<command> <игрок> @@ -605,7 +631,7 @@ kitCost=\ §7§o({0})§r kitDelay=§m{0}§r kitError=§4Нет наборов, которые могут быть выданы. kitError2=§4Этот набор неправильно настроен. Свяжитесь с администрацией. -kitError3=Невозможно дать предмет из набора "{0}" игроку {1} потому что предмет требует Paper 1.15.2+ для десериализации. +kitError3=Невозможно дать предмет из набора "{0}" игроку {1}. Предмет требует Paper 1.15.2+ для десериализации. kitGiveTo=§6Выдан набор§c {0}§6 игроку §c{1}§6. kitInvFull=§4Ваш инвентарь заполнен, оставшиеся предметы лежат на полу. kitInvFullNoDrop=§4В Вашем инвентаре недостаточно места для этого набора. @@ -627,9 +653,9 @@ leatherSyntax=§6Синтаксис цвета кожаных предметов lightningCommandDescription=Сила Тора. Поражает молнией одну точку или игрока. lightningCommandUsage=/<command> [игрок] [мощность] lightningCommandUsage1=/<command> [игрок] -lightningCommandUsage1Description=Ударяет молнией то место, куда вы смотрите, либо другого игрока, если он указан +lightningCommandUsage1Description=Ударяет молнией в точку, куда вы смотрите, либо в другого игрока, если он указан lightningCommandUsage2=/<command> <игрок> <сила> -lightningCommandUsage2Description=Ударяет молнией указанного игрока с указанной силой +lightningCommandUsage2Description=Ударяет молнией указанного игрока с заданной мощностью lightningSmited=§6В Вас ударила молния\! lightningUse=§6Ударили молнией в игрока§c {0} listAfkTag=§7[Отошёл]§r @@ -641,6 +667,7 @@ listCommandUsage1=/<command> [группа] listCommandUsage1Description=Перечисляет всех игроков на сервере, или заданную группу, если она указана listGroupTag=§6{0}§r\: listHiddenTag=§7[СКРЫТ]§r +listRealName=({0}) loadWarpError=§4Не удалось загрузить варп {0}. localFormat=[Л]<{0}> {1} loomCommandDescription=Открывает ткацкий станок. @@ -652,14 +679,16 @@ mailCommandDescription=Управляет Вашей серверной почт mailCommandUsage=/<command> [read|clear|clear [число]|send [кому] [сообщение]|sendtemp [кому] [expire time] [сообщение]|sendall [сообщение]] mailCommandUsage1=/<command> read [страница] mailCommandUsage1Description=Читает первую (или указанную) страницу вашей почты -mailCommandUsage2=/<command> clear [число] +mailCommandUsage2=/<command> clear [номер] mailCommandUsage2Description=Очищает или все, или только указанные письма mailCommandUsage3=/<command> send <игрок> <сообщение> mailCommandUsage3Description=Отправляет определённому игроку указанное сообщение mailCommandUsage4=/<command> sendall <сообщение> mailCommandUsage4Description=Отправляет всем игрокам указанное сообщение mailCommandUsage5=/<command> sendtemp <игрок> <время истечения> <сообщение> -mailCommandUsage5Description=Отправляет указанному игроку указанное сообщение, срок действия которого истекает в указанное время +mailCommandUsage5Description=Отправляет указанному игроку определённое сообщение, срок действия которого истекает в указанное время +mailCommandUsage6=/<command> sendtemp <игрок> <время истечения> <сообщение> +mailCommandUsage6Description=Отправляет всем игрокам данное сообщение, срок действия которого истекает в указанное время mailDelay=Слишком много писем было отправлено за последнюю минуту. Максимум\: {0} mailFormatNew=§6[§r{0}§6] §6[§r{1}§6] §r{2} mailFormatNewTimed=§6[§e⚠§6] §6[§r{0}§6] §6[§r{1}§6] §r{2} @@ -718,7 +747,7 @@ msgIgnore=§c{0} §4отключил сообщения. msgtoggleCommandDescription=Блокирует получение приватных сообщений. msgtoggleCommandUsage=/<command> [игрок] [on|off] msgtoggleCommandUsage1=/<command> [игрок] -msgtoggleCommandUsage1Description=Переключает полёт для вас, или для другого игрока, если он указан +msgtoggleCommandUsage1Description=Переключает полёт для вас или другого игрока, если он указан multipleCharges=§4Вы не можете применить больше одного заряда для фейерверка. multiplePotionEffects=§4Вы не можете применить более одного эффекта для зелья. muteCommandDescription=Заглушает или снимает заглушку с игрока. @@ -754,13 +783,13 @@ nickChanged=§6Никнейм изменен. nickCommandDescription=Изменяет Ваш никнейм или никнейм другого игрока. nickCommandUsage=/<command> [игрок] <никнейм|off> nickCommandUsage1=/<command> <никнейм> -nickCommandUsage1Description=Изменяет ваш ник на заданный текст +nickCommandUsage1Description=Изменяет ваш псевдоним на заданный текст nickCommandUsage2=/<command> off nickCommandUsage2Description=Удаляет ваш псевдоним nickCommandUsage3=/<command> <игрок> <ник> -nickCommandUsage3Description=Изменяет никнейм указанного игрока на указанный текст +nickCommandUsage3Description=Изменяет псевдоним указанного игрока на указанный текст nickCommandUsage4=/<command> <игрок> off -nickCommandUsage4Description=Удаляет ник указанного игрока +nickCommandUsage4Description=Удаляет псевдоним у указанного игрока nickDisplayName=§4Вы должны включить опцию change-displayname в настройках Essentials. nickInUse=§4Данный никнейм уже используется. nickNameBlacklist=§4Этот никнейм недопустим. @@ -828,7 +857,7 @@ passengerTeleportFail=§4Вы не можете телепортироватьс payCommandDescription=Передает сумму с Вашего баланса другому игроку. payCommandUsage=/<command> <игрок> <сумма> payCommandUsage1=/<command> <игрок> <сумма> -payCommandUsage1Description=Платит указанному игроку заданную сумму денег +payCommandUsage1Description=Переводит указанному игроку заданную сумму денег payConfirmToggleOff=§6Вы больше не будете получать запросы на подтверждение платежей. payConfirmToggleOn=§6Теперь Вам будет предлагать подтвердить платежи. payDisabledFor=§c{0}§6 больше не может принимать платежи. @@ -862,13 +891,21 @@ playerTempBanned=§6Игрок §c{0}§6 временно забанил §c{1} playerUnbanIpAddress=§6Игрок§c {0} §6разбанил IP-адрес§c {1} playerUnbanned=§6Игрок§c {0} §6разбанил§c {1} playerUnmuted=§6Вы снова можете писать в чат. +playtimeCommandDescription=Показывает время игрока в игре +playtimeCommandUsage=/<command> [игрок] +playtimeCommandUsage1=/<command> +playtimeCommandUsage1Description=Показывает ваше время, сыгранное в игре +playtimeCommandUsage2=/<command> <игрок> +playtimeCommandUsage2Description=Показывает указанное время игрока в игре +playtime=§6Аптайм\:§c {0} +playtimeOther=§6Время игры {1}§6\:§c {0} pong=Понг\! posPitch=§6Наклон\: {0} (Угол головы) possibleWorlds=§6Номера возможных миров начинаются с §c0§6 и заканчиваются §c{0}§6. potionCommandDescription=Добавляет новые эффекты к зелью. potionCommandUsage=/<command> <clear|apply|effect\:<эффект> power\:<мощность> duration\:<длительность>> potionCommandUsage1=/<command> clear -potionCommandUsage1Description=Удаляет все эффекты на удерживаемом зелье +potionCommandUsage1Description=Удаляет все эффекты у удерживаемого зелья potionCommandUsage2=/<command> apply potionCommandUsage2Description=Накладывает все эффекты удерживаемого зелья на вас, не расходуя зелье potionCommandUsage3=/<command> effect\:<эффект> power\:<сила> duration\:<продолжительность> @@ -945,7 +982,7 @@ realName=§f{0}§r§6 is §f{1} realnameCommandDescription=Отображает действительный никнейм игрока. realnameCommandUsage=/<command> <никнейм> realnameCommandUsage1=/<command> <никнейм> -realnameCommandUsage1Description=Отображает действительный никнейм игрока на основе переданного псевдонима +realnameCommandUsage1Description=Отображает действительное имя игрока на основе указанного псевдонима recentlyForeverAlone=§4{0} недавно вышел. recipe=§6Рецепт §c{0}§6 (§c{1}§6 из §c{2}§6) recipeBadIndex=Рецепта под этим номером не найдено. @@ -1124,7 +1161,7 @@ socialSpyMutedPrefix=§f[§6СШ§f] §7(заглушен) §r socialspyCommandDescription=Переключает возможность просмотра msg/mail в чате. socialspyCommandUsage=/<command> [игрок] [on|off] socialspyCommandUsage1=/<command> [игрок] -socialspyCommandUsage1Description=Переключает режим СоцШпиона Вам или указанному игроку +socialspyCommandUsage1Description=Переключает режим СоцШпиона Вам, или указанному игроку socialSpyPrefix=§f[§6СШ§f] §r soloMob=§4Этот моб любит быть в одиночестве. spawned=призван @@ -1145,7 +1182,7 @@ speedCommandUsage=/<command> [fly/walk] <скорость> [игрок] speedCommandUsage1=/<command> <скорость> speedCommandUsage1Description=Устанавливает вашу скорость полёта или ходьбы до заданного значения speedCommandUsage2=/<command> [fly/walk] <скорость> [игрок] -speedCommandUsage2Description=Устанавливает скорость для заданного типа для Вас или указанного игрока +speedCommandUsage2Description=Устанавливает скорость указанного вида для вас, или для другого игрока, если он указан stonecutterCommandDescription=Открывает камнерез. stonecutterCommandUsage=/<command> sudoCommandDescription=Выполняет команду от лица другого игрока. @@ -1208,7 +1245,7 @@ timeBeforeTeleport=§4Времени до следующей телепорта timeCommandDescription=Отображает/изменяет время в мире. По умолчанию - в текущем мире. timeCommandUsage=/<command> [set|add] [day|night|dawn|17\:30|4pm|4000ticks] [мир|all] timeCommandUsage1=/<command> -timeCommandUsage1Description=Показывает время во всех мирах +timeCommandUsage1Description=Отображает время во всех мирах timeCommandUsage2=/<command> set <время> [мир|all] timeCommandUsage2Description=Устанавливает время в текущем (или указанном) мире на заданное время timeCommandUsage3=/<command> add <время> [мир|all] @@ -1245,17 +1282,17 @@ tpaCommandUsage1Description=Отправляет указанному игрок tpaallCommandDescription=Запрашивает всех игроков телепортироваться к Вам. tpaallCommandUsage=/<command> <игрок> tpaallCommandUsage1=/<command> <игрок> -tpaallCommandUsage1Description=Отправляет всем игрокам запрос на телепортацию к Вам +tpaallCommandUsage1Description=Отправляет всем игрокам запрос на телепортацию к вам tpacancelCommandDescription=Отменяет все исходящие запросы на телепорт. Укажите [игрок] для отмены запросов к конкретному игроку. tpacancelCommandUsage=/<command> [игрок] tpacancelCommandUsage1=/<command> tpacancelCommandUsage1Description=Отменяет все ваши ожидающие подтверждения запросы на телепортацию tpacancelCommandUsage2=/<command> <игрок> tpacancelCommandUsage2Description=Отменяет все ваши ожидающие подтверждения запросы на телепортацию к указанному игроку -tpacceptCommandDescription=Принимает запрос на телепортацию. tpacceptCommandUsage=/<command> [игрок] tpacceptCommandUsage1=/<command> -tpacceptCommandUsage1Description=Принимает входящий запрос на телепортацию +tpacceptCommandUsage2=/<command> <игрок> +tpacceptCommandUsage3=/<command> * tpahereCommandDescription=Запрашивает указанного игрока телепортироваться к Вам. tpahereCommandUsage=/<command> <игрок> tpahereCommandUsage1=/<command> <игрок> @@ -1268,10 +1305,10 @@ tpautoCommandDescription=Включает автоматический приё tpautoCommandUsage=/<command> [игрок] tpautoCommandUsage1=/<command> [игрок] tpautoCommandUsage1Description=Вкл\\Выкл автоматический прием запросов на телепортацию у Вас, или у другого игрока, если указано -tpdenyCommandDescription=Отклоняет запрос на телепортацию. tpdenyCommandUsage=/<command> tpdenyCommandUsage1=/<command> -tpdenyCommandUsage1Description=Отклоняет запрос на входящий телепорт +tpdenyCommandUsage2=/<command> <игрок> +tpdenyCommandUsage3=/<command> * tphereCommandDescription=Телепортирует игрока к Вам. tphereCommandUsage=/<command> <игрок> tphereCommandUsage1=/<command> <игрок> @@ -1367,7 +1404,7 @@ vanish=§6Невидимость для {0}§6\: {1} vanishCommandDescription=Скрывает Вас от других игроков. vanishCommandUsage=/<command> [игрок] [on|off] vanishCommandUsage1=/<command> [игрок] -vanishCommandUsage1Description=Вкл.\\Выкл. невидимость для Вас или другого игрока, если указано +vanishCommandUsage1Description=Переключает невидимость для Вас или другого игрока, если он указан vanished=§6Вы полностью невидимы для обычных игроков и скрыты от внутриигровых команд. versionCheckDisabled=§6Проверка обновлений отключена в настройках. versionCustom=§6Не удалось проверить Вашу версию\! Собрано вручную? Информация о сборке\: §c{0}§6. diff --git a/Essentials/src/main/resources/messages_si_LK.properties b/Essentials/src/main/resources/messages_si_LK.properties index 0ae58ec88ed..52e338b63ba 100644 --- a/Essentials/src/main/resources/messages_si_LK.properties +++ b/Essentials/src/main/resources/messages_si_LK.properties @@ -37,6 +37,8 @@ delkitCommandUsage1=/<command> <kit> delwarpCommandUsage=/<command> <warp> delwarpCommandUsage1=/<command> <warp> depthCommandUsage=/depth +discordCommandUsage=/<command> +discordCommandUsage1=/<command> disposalCommandUsage=/<command> enderchestCommandUsage=/<command> [player] enderchestCommandUsage1=/<command> @@ -74,6 +76,8 @@ payconfirmtoggleCommandUsage=/<command> paytoggleCommandUsage=/<command> [player] paytoggleCommandUsage1=/<command> [player] pingCommandUsage=/<command> +playtimeCommandUsage=/<command> [player] +playtimeCommandUsage1=/<command> powertooltoggleCommandUsage=/<command> repairCommandUsage1=/<command> restCommandUsage=/<command> [player] diff --git a/Essentials/src/main/resources/messages_sk.properties b/Essentials/src/main/resources/messages_sk.properties index 1afb931dcd7..4583f6c2047 100644 --- a/Essentials/src/main/resources/messages_sk.properties +++ b/Essentials/src/main/resources/messages_sk.properties @@ -124,6 +124,7 @@ clearinventoryCommandUsage2=/<command> <hráč> clearinventoryCommandUsage3=/<command> <hráč> <predmet> [množstvo] clearinventoryconfirmtoggleCommandDescription=Zapína/vypína nutnosť potvrdenia vyčistenia inventára. clearinventoryconfirmtoggleCommandUsage=/<command> +commandArgumentOr=§c commandCooldown=§cTento príkaz môžeš znova zadať o {0}. commandDisabled=§cPríkaz§6 {0}§c je vypnutý. commandFailed=Príkaz {0} zlyhal\: @@ -199,6 +200,23 @@ destinationNotSet=Cieľ nebol nastavený\! disabled=vypnuté disabledToSpawnMob=§4Vyvolávanie tohto tvora bolo vypnuté v konfiguračnom súbore. disableUnlimited=§6Neobmedzené ukladanie§c {0} §6bolo vypnuté pre hráča§c {1}§6. +discordbroadcastCommandDescription=Vyšle oznam zadanému Discord kanálu. +discordbroadcastCommandUsage=/<command> <kanál> <správa> +discordbroadcastCommandUsage1=/<command> <kanál> <správa> +discordbroadcastCommandUsage1Description=Odošle správu zadanému Discord kanálu +discordbroadcastInvalidChannel=§4Discord kanál §c{0}§4 neexistuje. +discordbroadcastPermission=§4Nemáš povolenie posielať správy do kanálu §c{0}§4. +discordbroadcastSent=§6Správa odoslaná do kanálu §c{0}§6\! +discordCommandDescription=Odošle hráčovi pozvánku na Discord. +discordCommandLink=§6Pripoj sa na náš Discord server tu\: §c{0}§6\! +discordCommandUsage=/<command> +discordCommandUsage1=/<command> +discordCommandUsage1Description=Odošle hráčovi pozvánku na Discord +discordCommandExecuteArgumentCommand=Príkaz ktorý bude vykonaný +discordCommandExecuteReply=Vykonávam príkaz\: "/{0}" +discordCommandListDescription=Vypíše hráčov ktorý sú online. +discordErrorNoPrimary=Primárny kanál nie je definovaný alebo je neplatný. Bude použitý predvolený kanál\: \#{0}. +discordErrorNoPrimaryPerms=Tvoj bot nemôže hovoriť v primárnom kanáli, \#{0}. Uisti sa, že tvoj bot má práva na čítanie a písanie správ vo všetkých kanáloch, ktoré chceš použiť. discordReloadInvalid=Opätovné načítanie konfigurácie EssentialsX Discord nie je možné, keď je plugin v neplatnom stave\! Ak sa konfigurácia zmenila, reštartuj server. disposal=Odpadkový kôš disposalCommandDescription=Otvorí prenosný odpadkový kôš. @@ -206,6 +224,12 @@ disposalCommandUsage=/<command> distance=§6Vzdialenosť\: {0} dontMoveMessage=§6Teleport sa spustí o§c {0}§6. Nehýb sa. downloadingGeoIp=Sťahuje sa GeoIP databáza... môže to chvíľu trvať (krajina\: 1.7 MB, mesto\: 30 MB) +dumpConsoleUrl=Serverový výpis bol vytvorený\: §c{0} +dumpCreating=§6Vytvára sa serverový výpis... +dumpDeleteKey=§6Ak budeš chcieť tento výpis neskôr vymazať, použi nasledovný kľúč\: §c{0} +dumpError=§4Pri vytváraní výpisu §c{0}§4 sa vyskytla chyba. +dumpErrorUpload=§4Pri nahrávaní výpisu §c{0}§4 sa vyskytla chyba\: §c{1} +dumpUrl=§6Serverový výpis vytvorený\: §c{0} duplicatedUserdata=Duplikované používateľské dáta\: {0} a {1}. durability=§6Tomuto nástroju zostáva ešte §c{0}§6 použití. east=V @@ -237,6 +261,8 @@ essentialsCommandUsage6=/<command> cleanup essentialsCommandUsage6Description=Vyčistí staré používateľské dáta essentialsCommandUsage7=/<command> homes essentialsCommandUsage7Description=Spravuje používateľské domovy +essentialsCommandUsage8=/<command> dump [all] [config] [discord] [kits] [log] +essentialsCommandUsage8Description=Vytvorí serverový výpis, obsahujúci požadované informácie essentialsHelp1=Súbor je poškodený a Essentials ho nevie otvoriť. Essentials je teraz vypnutý. Ak súbor nemáš ako opraviť, choď na http\://tiny.cc/EssentialsChat essentialsHelp2=Súbor je poškodený a Essentials ho nevie otvoriť. Essentials je teraz vypnutý. Ak súbor nemáš ako opraviť, napíš v hre /essentialshelp alebo choď na http\://tiny.cc/EssentialsChat essentialsReload=§6Essentials bol znova načítaný§c {0}. @@ -445,6 +471,9 @@ jailAlreadyIncarcerated=§4Hráč už je vo väzení\:§c {0} jailList=§6Väzenia\:§r {0} jailMessage=§4Priestupok si musíš odsedieť. jailNotExist=§4Zadané väzenie neexistuje. +jailNotifyJailed=§6Hráč§c {0} §6bol uväznený hráčom §c{1}§6. +jailNotifyJailedFor=§6Hráč§c {0} §6bol uväznený hráčom §c{2}§6 za §c{1}§6. +jailNotifySentenceExtended=§6Vázenie hráča§c {0} §6bolo predĺžené hráčom §c{2}§6 na §c{1}§6. jailReleased=§6Hráč §c{0}§6 bol prepustený na slobodu. jailReleasedPlayerNotify=§6Bol si prepustený na slobodu\! jailSentenceExtended=§6Väzenie predĺžené na §c{0}§6. @@ -510,6 +539,7 @@ listCommandUsage=/<command> [skupina] listCommandUsage1=/<command> [skupina] listGroupTag=§6{0}§r\: listHiddenTag=§7[SKRYTÝ]§r +listRealName=({0}) loadWarpError=§4Nepodarilo sa načítať warp {0}. localFormat=[L]<{0}> {1} loomCommandDescription=Otvorí krosná. @@ -529,6 +559,8 @@ mailCommandUsage4=/<command> sendall <správa> mailCommandUsage4Description=Odošle všetkým hráčom zadanú správu mailCommandUsage5=/<command> sendtemp <hráč> <čas do vypršania> <správa> mailCommandUsage5Description=Odošle hráčovi správu, ktorá vyprší po zadanom čase +mailCommandUsage6=/<command> sendtempall <čas do vypršania> <správa> +mailCommandUsage6Description=Odošle všetkým hráčom správu, ktorá vyprší po zadanom čase mailDelay=Za poslednú minútu bolo odoslaných príliš veľa správ. Maximum\: {0} mailFormatNew=§6[§r{0}§6] §6[§r{1}§6] §r{2} mailFormatNewTimed=§6[§e⚠§6] §6[§r{0}§6] §6[§r{1}§6] §r{2} @@ -707,6 +739,14 @@ playerTempBanned=§6Hráč §c{0}§6 udelil dočasný ban hráčovi §c{1}§6 na playerUnbanIpAddress=§6Hráč§c {0} §6zrušil ban IP adrese §c{1} playerUnbanned=§6Hráč§c {0} §6zrušil ban hráčovi §c{1} playerUnmuted=§6Môžeš znova hovoriť. +playtimeCommandDescription=Zobrazí odohraný čas hráča +playtimeCommandUsage=/<command> [hráč] +playtimeCommandUsage1=/<command> +playtimeCommandUsage1Description=Zobrazí tvoj odohraný čas +playtimeCommandUsage2=/<command> <hráč> +playtimeCommandUsage2Description=Zobrazí odohraný čas daného hráča +playtime=§6Odohraný čas\:§c {0} +playtimeOther=§6Odohraný čas hráča {1}§6\:§c {0} pong=Pong\! posPitch=§6Sklon\: {0} (Uhol náklonu hlavy) possibleWorlds=§6Možné svety sú očíslované od §c0§6 po §c{0}§6. @@ -988,9 +1028,10 @@ tpacancelCommandDescription=Zruší všetky nezodpovedané žiadosti o teleport. tpacancelCommandUsage=/<command> [hráč] tpacancelCommandUsage1=/<command> tpacancelCommandUsage2=/<command> <hráč> -tpacceptCommandDescription=Prijme žiadosť o teleport. tpacceptCommandUsage=/<command> [iný_hráč] tpacceptCommandUsage1=/<command> +tpacceptCommandUsage2=/<command> <hráč> +tpacceptCommandUsage3=/<command> * tpahereCommandDescription=Požiadaj daného hráča o teleport k tebe. tpahereCommandUsage=/<command> <hráč> tpahereCommandUsage1=/<command> <hráč> @@ -1000,9 +1041,10 @@ tpallCommandUsage1=/<command> [hráč] tpautoCommandDescription=Automaticky prijímať žiadosti o teleportovanie. tpautoCommandUsage=/<command> [hráč] tpautoCommandUsage1=/<command> [hráč] -tpdenyCommandDescription=Odmietne žiadosť o teleport. tpdenyCommandUsage=/<command> tpdenyCommandUsage1=/<command> +tpdenyCommandUsage2=/<command> <hráč> +tpdenyCommandUsage3=/<command> * tphereCommandDescription=Teleportuje hráča k tebe. tphereCommandUsage=/<command> <hráč> tphereCommandUsage1=/<command> <hráč> diff --git a/Essentials/src/main/resources/messages_sr_CS.properties b/Essentials/src/main/resources/messages_sr_CS.properties index 55058edcd4d..56807048b81 100644 --- a/Essentials/src/main/resources/messages_sr_CS.properties +++ b/Essentials/src/main/resources/messages_sr_CS.properties @@ -9,6 +9,9 @@ adventure=avantura afkCommandDescription=Obeležava vas kao da ste daleko od tastature. afkCommandUsage=/<command> [igrač/poruka] afkCommandUsage1=/<command> [message] +afkCommandUsage1Description=Menja Vaš afk status sa opcionim razlogom +afkCommandUsage2=/<command> <player> [message] +afkCommandUsage2Description=Menja afk status navedenog igrača sa opcionim razlogom alertBroke=je polomio\: alertFormat=§3[{0}] §r {1} §6 {2} na\: {3} alertPlaced=je postavio\: @@ -23,54 +26,127 @@ antiBuildUse=§4Nemate dozvolu da koristite§c {0}§4. antiochCommandDescription=Malo iznenađenje za operatore. antiochCommandUsage=/<command> [message] anvilCommandDescription=Otvara nakovanj. +anvilCommandUsage=/<command> autoAfkKickReason=Izbaceni ste zato sto ste bili AFK vise od {0} minuta. autoTeleportDisabled=Više ne odobravate automatske zahvteve za teleport. autoTeleportDisabledFor=§c{0}§6 više ne odobrava automatske zahvteve za teleport. autoTeleportEnabled=§6Sada automatski dozvoljavate zahteve za teleport. autoTeleportEnabledFor=§c{0}§6 sada automatski odobrava zahvteve za teleport. backAfterDeath=§6Koristi §c /back§6 kommandu da se vratite na mesto smrti. +backCommandDescription=Teleportuje Vas do lokacije koja prethodi tp/spawn/warp. +backCommandUsage=/<command> [player] +backCommandUsage1=/<command> backCommandUsage1Description=Teleportuje vas na vasu prethodnu lokaciju backCommandUsage2Description=Teleportuje specificiranog igraca na njegovu prethodnu lokaciju +backOther=§6Vraćen§c {0}§6 na prethodnu lokaciju. +backupCommandDescription=Pokreće sigurnosnu kopiju ako je konfigurisana. +backupCommandUsage=/<command> backupDisabled=§4Eksterna backup skripta nije podesena. backupFinished=§6Backup zavrsen. backupStarted=§6Backup poceo. +backupInProgress=§6Spoljna rezervna kopija je trenutno u procesu\! Zaustavljanje deaktivacije plugina dok se ne završi. backUsageMsg=§6Vracanje na prethodnu lokaciju. balance=§aNovac\:§c {0} +balanceCommandDescription=Navodi trenutan iznos novca igrača. +balanceCommandUsage=/<command> [player] +balanceCommandUsage1=/<command> balanceCommandUsage1Description=Prikazuje vase trenutno novcano stanje balanceCommandUsage2Description=Prikazuje trenutno novcano stanje specificaranog igraca balanceOther=§aNovac igraca {0}§a\:§c {1} balanceTop=§6Top stanja ({0}) +balanceTopLine={0}. {1}, {2} +balancetopCommandDescription=Navodi najvišu vrednost salda. +balancetopCommandUsage=/<command> [page] +balancetopCommandUsage1=/<command> [page] +balancetopCommandUsage1Description=Prikazuje prvu (ili izabranu) stranicu vrha vrednosti salda +banCommandDescription=Banuje igrača. +banCommandUsage=/<command> <player> [reason] +banCommandUsage1=/<command> <player> [reason] +banCommandUsage1Description=Banuje odabranog igrača sa opcionim razlogom banExempt=§4Ne mozete banovati tog igraca. banExemptOffline=§4 Ne mozes zatvoriti offline igrace. banFormat=§cBanovani ste\:\n§r{0} banIpJoin=Vasa IP Adresa je banovana sa ovog servera.\nRazlog\: {0} banJoin=Banovani ste sa ovog servera.\nRazlog\: {0} +banipCommandDescription=Banuje IP adresu. +banipCommandUsage=/<command> <address> [reason] +banipCommandUsage1=/<command> <address> [reason] +banipCommandUsage1Description=Banuje navedenu IP adresu sa opcionim razlogom bed=§okrevet§r bedMissing=§4Vas krevet ili nije postavljen, izgubljen ili blokiran. bedNull=§mkrevet§r +bedOffline=§4Ne može se teleportovati do kreveta offline igrača. bedSet=§6Krevet postavljen\! +beezookaCommandDescription=Baca eksplodirajuću pčelu na protivnika. +beezookaCommandUsage=/<command> bigTreeFailure=§4Nije uspelo stvaranje drveta. Pokusajte ponovo na travi ili zemlji. bigTreeSuccess=§6Drvo stvoreno. +bigtreeCommandDescription=Stvara veliko drvo na blok u koji gledate. +bigtreeCommandUsage=/<command> <tree|redwood|jungle|darkoak> +bigtreeCommandUsage1=/<command> <tree|redwood|jungle|darkoak> +bigtreeCommandUsage1Description=Stvara veliko drvo navednog tipa +blockList=§6EssentialsX prepušta sledeće komande drugim pluginima\: +blockListEmpty=§6EssentialsX ne prepušta komande drugim pluginima. bookAuthorSet=§6Autor knjige je sada {0}. +bookCommandDescription=Dozvoljava ponovno otvaranje i uređivanje potpisanih knjiga. +bookCommandUsage=/<command> [title|author [name]] +bookCommandUsage1=/<command> +bookCommandUsage1Description=Zaključava/Otključava knjigu i pero/potpisanu knjigu +bookCommandUsage2=/<command> author <author> +bookCommandUsage2Description=Postavlja autora potpisane knjige +bookCommandUsage3=/<command> title <title> +bookCommandUsage3Description=Postavlja naziv potpisane knjige bookLocked=§6Ova knjiga je sada zakljucana. bookTitleSet=§6Naslov knjige je sada {0}. +breakCommandDescription=Ruši blok u koji gledate. +breakCommandUsage=/<command> +broadcast=§6[§4Obaveštenje§6]§a {0} +broadcastCommandDescription=Emituje obaveštenje celom serveru. +broadcastCommandUsage=/<command> <msg> +broadcastCommandUsage1Description=Emituje datu poruku kao obaveštenje celom serveru +broadcastworldCommandDescription=Emituje obaveštenje svetu. +broadcastworldCommandUsage=/<command> <world> <msg> +broadcastworldCommandUsage1=/<command> <world> <msg> +broadcastworldCommandUsage1Description=Emituje datu poruku kao obaveštenje navedenom svetu +burnCommandDescription=Zapalite igrača. +burnCommandUsage=/<command> <player> <seconds> +burnCommandUsage1=/<command> <player> <seconds> +burnCommandUsage1Description=Zapalite navedenog igrača na određenu količinu sekundi burnMsg=§6Postavili ste igraca§c {0} §6na vatru na§c {1} sekundi§6. +cannotSellNamedItem=§6Nije Vam dozvoljeno da prodajete stvari sa nazivom. +cannotSellTheseNamedItems=§6Nije Vam dozvoljeno da prodajete stvari sa nazivom\: §4{0} cannotStackMob=§4Nemate dozvolu da mnozite vise mobova. canTalkAgain=§6Ponovo mozete da govorite. cantFindGeoIpDB=Ne moguce naci GeoIP bazu\! cantGamemode=§4Nemas permisiju da promenis svoj gamemodu u {0} cantReadGeoIpDB=Ne moguce procitati GeoIP bazu\! cantSpawnItem=§4Stvaranje itema§c {0}§4 je zabranjeno. +cartographytableCommandDescription=Otvara kartografski sto. +cartographytableCommandUsage=/<command> chatTypeLocal=[L] chatTypeSpy=[Spy] cleaned=Fajlovi igraca ocisceni. cleaning=Ciscenje fajlova igraca. clearInventoryConfirmToggleOff=§6Više vas nećemo pitati za potvrdu brisanja inventara. clearInventoryConfirmToggleOn=§6Više vas nećemo pitati za potvrdu brisanja inventara. +clearinventoryCommandDescription=Čisti sve stvari iz Vašeg inventara. +clearinventoryCommandUsage=/<command> [player|*] [item[\:<data>]|*|**] [amount] +clearinventoryCommandUsage1=/<command> +clearinventoryCommandUsage1Description=Čisti sve stvari iz Vašeg inventara +clearinventoryCommandUsage2Description=Čisti sve stvari iz inventara navedenog igrača +clearinventoryCommandUsage3=/<command> <player> <item> [amount] +clearinventoryCommandUsage3Description=Čisti sve (ili navedenu količinu) navedene stvari iz inventara navedenog igrača +clearinventoryconfirmtoggleCommandDescription=Aktivira/Deaktivira potvrdu za brisanje inventara. +clearinventoryconfirmtoggleCommandUsage=/<command> +commandArgumentOptional=§7 +commandArgumentOr=§c +commandArgumentRequired=§e commandCooldown=§cNe možete koristiti tu komandu za {0}. commandFailed=Komanda {0} neuspela\: commandHelpFailedForPlugin=Greska pri trazenju pomoci o dodatku\: {0} commandNotLoaded=§4Komanda {0} nepravilno ucitana. +compassCommandUsage=/<command> +condenseCommandUsage1=/<command> configFileMoveError=Neuspelo premestanje config.yml na lokaciju za backup. configFileRenameError=Neuspelo preimenovanje privremenog fajla u config.yml. confirmClear=§7Da §lPOTVRDITE§7 čišćenje inventara, molimo vas ponovite komandu\: §6{0} @@ -84,6 +160,7 @@ createdKit=§6Napravljen kit §c{0} §6sa §c{1} §6unosa i čekanjem od §c{2} createKitFailed=§4Greška prilikom kreiranju kita {0}. createKitSeparator=§m----------------------- createKitSuccess=§6Kreiran Kit\: §f{0}\n§6Čekanje\: §f{1}\n§6Link\: §f{2}\n§6Kopirajte sadržinu linka iznad u svoj kits.yml. +createKitUnsupported=§4Serijalizacija NBT predmeta je aktivirana, ali server ne koristi Paper 1.15.2+. Koristimo standardnu serializaciju predmeta. creatingConfigFromTemplate=Stvaranje konfiguracije iz sablona\: {0} creatingEmptyConfig=Stvaranje prazne konfiguracije\: {0} creative=kreativnost @@ -92,10 +169,14 @@ currentWorld=§6Trenutni svetovi\:§c {0} day=dan days=dana defaultBanReason=Banovan si sa servera\! +deletedHomes=Sve kuće obrisane. +deletedHomesWorld=Sve kuće obrisane u {0}. deleteFileError=Ne moguce obrisati fajl\: {0} deleteHome=§6Kuca§c {0} §6je obrisana. deleteJail=§6Zatvor§c {0} §6je obrisan. deleteWarp=§6Warp§c {0} §6je obrisan. +deletingHomes=Brisanje svih kuća... +deletingHomesWorld=Brisanje svih kuća u {0}... deniedAccessCommand=§4Igracu §c{0} §4je zabranjen pristup komandi. denyBookEdit=§4Ne mozete otkljucati tu knjigu. denyChangeAuthor=§4Ne mozete promeniti autora te knjige. @@ -106,9 +187,49 @@ depthBelowSea=§6Na§c {0} §6bloka ste ispod nivoa mora. destinationNotSet=Destinacija nije postavljena\! disabled=onemoguceno disabledToSpawnMob=§4Stvaranje ovog stvorenja je ugaseno u konfiguraciji. +discordbroadcastCommandDescription=Šalje obaveštenje u predodređen Discord kanal. +discordbroadcastCommandUsage=/<command> <channel> <msg> +discordbroadcastCommandUsage1=/<command> <channel> <msg> +discordbroadcastCommandUsage1Description=Šalje odabranu poruku u predodređen Discord kanal +discordbroadcastInvalidChannel=§4Discord kanal §c{0}§4 ne postoji. +discordbroadcastPermission=§4Nemate dozvolu da šaljete poruke u §c{0}§4 kanalu. +discordbroadcastSent=§6Poruka poslata u §c{0}§6\! +discordCommandUsage=/<command> +discordCommandUsage1=/<command> +discordCommandExecuteDescription=Izvršava komandu konzole na Minecraft server-u. +discordCommandExecuteArgumentCommand=Komanda za izvršenje +discordCommandExecuteReply=Izvršavanje komande\: "/{0}" +discordCommandListDescription=Prikazuje listu onlajn igrača. +discordCommandListArgumentGroup=Ograničite pretraživanje određenom grupom +discordCommandMessageDescription=Šalje poruku igraču na Minecraft server-u. +discordCommandMessageArgumentUsername=Igrač kome ćete poslati poruku +discordCommandMessageArgumentMessage=Poruka koju biste poslali igraču +discordErrorCommand=Loše ste dodali svog bota na server. Molimo Vas da pratite priručnik u konfiguraciji i dodate svog bota koristeći https\://essentialsx.net/discord.html\! +discordErrorCommandDisabled=Ta komanda je onemogućena\! +discordErrorLogin=Dogodila se greška tokom povezivanja sa Discord-om, što je prouzrokovalo deaktivaciju plugina\: {0} +discordErrorLoggerInvalidChannel=Evidentiranje Discord konzole je onemogućeno zbog nevažeće definicije kanala\! Ako nameravate da ga onemogućite, postavite ID kanala na „none“; u suprotnom proverite da li je ID kanala tačan. +discordErrorLoggerNoPerms=Evidentar konzole Discord-a je onemogućen zbog nedovoljnih dozvola\! Uverite se da vaš bot ima dozvole „Manage Webhooks“ na serveru. Nakon što to ispravite, ukucajte „/ess reload“. +discordErrorNoGuild=Server ID je nevažen ili nepostoji\! Molimo Vas da pratite priručnik da biste podesili plugin. +discordErrorNoGuildSize=Vaš bot nije ni na jednom serveru\! Molimo Vas da pratite priručnik da biste podesili plugin. +discordErrorNoPerms=Vaš bot ne može videti ili razgovarati ni u jednom kanalu\! Molimo Vas uverite se da Vaš bot ima Read and Write dozvole u svim kanalima koji želite da koristite. +discordErrorNoPrimary=Niste definisali primarni kanal ili definisani primarni kanal nije validan. Postavljamo default kanal\: \#{0}. +discordErrorNoPrimaryPerms=Vaš bot ne može govoriti u Vašem primarnom kanalu, \#{0}. Molimo Vas proverite da li bot ima read and write dozvole u svim kanalima koje želite koristiti. +discordErrorNoToken=Token nije pronađen\! Molimo Vas da pratite priručnik da biste podesili plugin. +discordErrorWebhook=Dogodila se greška tokom slanja poruka u Vaš kanal za konzolu\! Ovo se može dogoditi ako slučajno obrišete console webhook. Proverite da li Vaš bot ima „Manage Webhooks“ dozvolu i kucajte „/ess reload“. +discordLoggingIn=Pokušavamo se prijaviti na Discord... +discordLoggingInDone=Uspešno prijavljeni kao {0} +discordNoSendPermission=Nemoguće poslati poruku u kanalu\: \#{0}. Molimo Vas uverite se da bot ima "Send Messages" dozvol u tom kanalu\! +discordReloadInvalid=Pokušali ste osvežiti konfiguraciju EssentialsX Discord plugina dok je bio u nevažećem stanju\! Ukoliko ste modifikovali config, restartujte server. +disposalCommandUsage=/<command> distance=§6Distanca\: {0} dontMoveMessage=§6Teleportacija ce poceti za§c {0}§6. Ne pomerajte se. downloadingGeoIp=Preuzimanje GeoIP databaze... ovo može potrajati (država\: 1.7 MB, grad\: 30MB) +dumpConsoleUrl=Server dump kreiran\: §c{0} +dumpCreating=§6Kreiramo server dump... +dumpDeleteKey=§6Ukoliko želite obrisati ovaj dump kasnije, koristite ovaj ključ\: §c{0} +dumpError=§4Greška prilikom kreiranja dump-a §c{0}§4. +dumpErrorUpload=§4Greška prilikom otpremljivanja §c{0}§4\: §c{1} +dumpUrl=§6Kreiran server dump\: §c{0} duplicatedUserdata=Duplikat fajlova igraca\: {0} i {1}. durability=§6Ova alatka možete da koristite još §c{0}§6 puta. east=E @@ -120,13 +241,24 @@ enchantmentNotFound=§4Moc nije pronadjena\! enchantmentPerm=§4Nemate dozvolu za§c {0}§4. enchantmentRemoved=§6Moc§c {0} §6je uklonjena sa itema u ruci. enchantments=§6Moci\:§r {0} +enderchestCommandUsage=/<command> [player] +enderchestCommandUsage1=/<command> errorCallingCommand=Greska pozivajuci komandu /{0} errorWithMessage=§cGreska\:§4 {0} +essentialsCommandUsage=/<command> +essentialsCommandUsage6=/<command> cleanup +essentialsCommandUsage6Description=Čisti stari userdata +essentialsCommandUsage7=/<command> homes +essentialsCommandUsage7Description=Upravlja kućama igrača +essentialsCommandUsage8=/<command> dump [all] [config] [discord] [kits] [log] +essentialsCommandUsage8Description=Generiše server dump sa traženim informacijama essentialsHelp1=Taj fajl je iskljcen i essentials ne moze da ga otvori. Essentials je sada iskljucen. Da nadjete resenje pogledajte na http\://tiny.cc/EssentialsChat essentialsHelp2=Dokument je slomljen i Essentials ga ne moze otvoriti. Essentials je sada iskljucen. Ukoliko zelite sami da popravite dokument, kucajte /essentialshelp u igri ili idite na sledeci link\: http\://tiny.cc/EssentialsChat essentialsReload=§6Essentials ponovo ucitan§c {0}. exp=§6Igrac §c{0} §6ima§c {1} §6iskustva (nivo§c {2}§6) i treba mu jos§c {3} §6za sledeci nivo. expSet=§6Igrac §c{0} §6sada ima§c {1} §6iskustva. +extCommandUsage=/<command> [player] +extCommandUsage1=/<command> [player] extinguish=§6Ugasili ste samog sebe. extinguishOthers=§6Ugasili ste igraca {0}§6. failedToCloseConfig=Neuspelo zatvaranje konfiguracije {0}. @@ -134,37 +266,52 @@ failedToCreateConfig=Neuspelo kreiranje konfiguracije {0}. failedToWriteConfig=Neuspelo pisanje konfiguracije {0}. false=§4netacno§r feed=§6Vas apetit je zadovoljen. +feedCommandUsage=/<command> [player] +feedCommandUsage1=/<command> [player] feedOther=§6Zadovoljili ste apetit igraca §c{0}§6. fileRenameError=Preimenovanje fajla {0} neuspesno\! +fireballCommandUsage1=/<command> fireworkColor=§4Neispravno uneseti parametri punjenja vatrometa, morate prvo staviti boju. fireworkEffectsCleared=§6Svi efekti su uklonjeni sa stacka kojeg drzite. fireworkSyntax=§6Parametri vatrometa\:§c color\:<boja> [fade\:<boja>] [shape\:<oblik>] [effect\:<efekat>]\n§6Da koristite razne boje/efekte, razdvojite ih zarezima\: §cred,blue,pink\n§6Oblici\:§c star, ball, large, creeper, burst §6Efekti\: §ctrail, twinkle. +fixedHomes=Nevalidne kuće obrisane. +fixingHomes=Brisanje svih nevalidnih kuća... +flyCommandUsage1=/<command> [player] flying=letenje flyMode=§6Promenjen rezim letenja u§c {0} §6za igraca {1}§6. foreverAlone=§4Nemate kome da odgovorite. fullStack=§4Vec imate punu gomilu. gameMode=§6Promenjen rezim igre u§c {0} §6za igraca §c{1}§6. gameModeInvalid=§4Morate navesti validnog igraca/mod. +gcCommandUsage=/<command> gcfree=§6Slobodna memorija\:§c {0} MB. gcmax=§6Maksimalna memorija\:§c {0} MB. gctotal=§6Dodeljena memorija\:§c {0} MB. gcWorld=§6{0} "§c{1}§6"\: §c{2}§6 chunkova, §c{3}§6 entiteta, §c{4}§6 tilova. geoipJoinFormat=§6Igrac §c{0} §6dolazi iz §c{1}§6. +getposCommandUsage=/<command> [player] +getposCommandUsage1=/<command> [player] +giveCommandUsage1=/<command> <player> <item> [amount] geoIpUrlEmpty=GeoIP adresa za preuzimanje prazna. geoIpUrlInvalid=GeoIP adresa za preuzimanje nevazeca. givenSkull=§6Dobio si glavu igraca §c{0}§6. +godCommandUsage1=/<command> [player] godDisabledFor=§conemoguceno§6 za§c {0} godEnabledFor=§aomoguceno§6 za§c {0} godMode=§6God mod§c {0}§6. +grindstoneCommandUsage=/<command> groupDoesNotExist=§4Nema igraca na mrezi koji pripadaju toj grupi\! groupNumber=§c{0}§f igraca online, za celu listu kucajte\:§c /{1} {2} hatArmor=§4Ne mozete koristiti taj item kao kapu\! +hatCommandUsage1=/<command> hatEmpty=§4Trenutno ne nosite kapu. hatFail=§4Morate da stavite nesto u ruku da biste to i nosili. hatPlaced=§6Uzivajte u vasoj novoj kapi\! hatRemoved=§6Vasa kapa je uklonjena. haveBeenReleased=§6Oslobodjeni ste. heal=§6Izleceni ste. +healCommandUsage=/<command> [player] +healCommandUsage1=/<command> [player] healDead=§4Ne mozete izleciti nekoga ko je mrtav\! healOther=§6Izlecen§c {0}§6. helpFrom=§6Komande od {0}\: @@ -180,6 +327,15 @@ homes=§6Kuce\:§r {0} homeSet=§6Kuca postavljena na trenutnoj lokaciji. hour=Sat hours=Sati +ice=§6Dosta vam je hladnije... +iceCommandDescription=Hladi igrača. +iceCommandUsage=/<command> [player] +iceCommandUsage1=/<command> +iceCommandUsage1Description=Hladi Vas +iceCommandUsage2Description=Hladi određenog igrača +iceCommandUsage3=/<command> * +iceCommandUsage3Description=Hladi sve onlajn igrače +iceOther=§6Ohlađen igrač§c {0}§6. ignoredList=§6Ignorisani\:§r {0} ignoreExempt=Ne mozes ignorisati ovog igraca. ignorePlayer=§6Od sada ignorisete igraca§c {0} §6. @@ -210,8 +366,10 @@ isIpBanned=§6IP §c{0} §6je banovan. internalError=§cUnutrašnja greška načinjena prilikom pokušaja pokretanje komande. itemCannotBeSold=§4Tu stvar ne mozete prodati serveru. itemId=§6ID\:§c {0} +itemloreCommandUsage1=/<command> add [text] itemMustBeStacked=§4Stvar mora biti razmenjena u stacku. Kolicina 2s bi bilo dva steka i slicno. itemNames=§6Alijasi itema\:§r {0} +itemnameCommandUsage1=/<command> itemNotEnough1=§4Nemate dovoljno tog itema za prodaju. itemsConverted=§6Svi itemi pretvoreni u blokove. itemSellAir=Stvarno pokusavate da prodate maglu? Stavite item u ruku. @@ -223,21 +381,31 @@ jailAlreadyIncarcerated=§4Igrac je vec u zatvor\:§c {0} jailList=§6Ćelije\:§r {0} jailMessage=§4Pocinis zlocin, sada izdrzavaj kaznu. jailNotExist=§4Taj zatvor ne postoji. +jailNotifyJailed=§6Igrač§c {0} §6zatvoren od strane §c{1}. +jailNotifyJailedFor=§6Igrač§c {0} §6zatvoren na§c {1}§6od strane §c{2}§6. +jailNotifySentenceExtended=§6Igraču§c{0} §6produženo vreme iza rešetka na §c{1} §6od strane §c{2}§6. jailReleased=§6Igrac §c{0}§6 oslobodjen. jailReleasedPlayerNotify=§6Oslobodjeni ste\! jailSentenceExtended=§6Vreme u zatvoru produzeno na §c{0}§6. jailSet=§6Zatvor§c {0} §6postavljen. +jailWorldNotExist=§4Svet tog zatvora ne postoji. +jailsCommandUsage=/<command> +jumpCommandUsage=/<command> jumpError=§4To bi ostetilo mozak vaseg racunara. +kickCommandUsage=/<command> <player> [reason] +kickCommandUsage1=/<command> <player> [reason] kickDefault=Izbaceni ste sa servera. kickedAll=§4Svi igraci sa servera izbaceni. kickExempt=§4Ne mozete izbaciti tog igraca. kill=§6Ubijen§c {0}§6. killExempt=§4Ne mozete ubiti §c{0}§4. +kitCommandUsage1=/<command> kitContains=§6Kit §c{0} §6sadrži\: kitCost=\ §7§o({0})§r kitDelay=§m{0}§r kitError=§4Nema vazecih kitova. kitError2=§4Taj kit je nepravilno definisan. Kontaktirajte administratora. +kitError3=Nemoguće dati predmet iz opreme "{0}" igraču {1} jer odabrani predmet zahteva Paper 1.15.2+ za deserijalizaciju. kitGiveTo=§6Davanje kita§c {0}§6 igracu §c{1}§6. kitInvFull=§4Vas inventar je pun, bacanje kita na zemlju. kitItem=§6- §f{0} @@ -245,21 +413,38 @@ kitNotFound=§4Taj kit ne postoji. kitOnce=§4Ne mozete vise koristiti taj kit. kitReceive=§6Primljen kit§c {0}§6. kits=§6Kitovi\:§r {0} +kittycannonCommandUsage=/<command> kitTimed=§4Ne mozete koristiti taj kit sledecih§c {0}§4. +lightningCommandUsage1=/<command> [player] lightningSmited=§6Munja je udarila\! lightningUse=§6Lupanje igraca§c {0} listAfkTag=§7[AFK]§r listAmount=§6Trenutno je §c{0}§6 od maksimalnih §c{1}§6 igraca online. listHiddenTag=§7[SAKRIVEN]§r +listRealName=({0}) loadWarpError=§4Neuspelo citanje warpa {0}. localFormat=[L]<{0}> {1} +loomCommandUsage=/<command> mailClear=§6Za čišćenje maila, kucajte§c /mail clear§6. mailCleared=Ocisceno postansko sanduce\! +mailClearIndex=§4Morate odabrati broj između 1-{0}. +mailCommandUsage=/<command> [read|clear|clear [number]|send [to] [message]|sendtemp [to] [expire time] [message]|sendall [message]] +mailCommandUsage2=/<command> clear [number] +mailCommandUsage2Description=Briše sve ili odabrane mail-ove +mailCommandUsage5=/<command> sendtemp <player> <expire time> <message> +mailCommandUsage5Description=Šalje odabranom igraču poruku koja ističe za određeno vreme +mailCommandUsage6=/<command> sendtempall <expire time> <message> +mailCommandUsage6Description=Šalje svim igračima odabranu poruku koja će isteći za određeno vreme mailDelay=Previse mailova posaljeno u minuti\! Maksimalno\: {0} +mailFormatNew=§6[§r{0}§6] §6[§r{1}§6] §r{2} +mailFormatNewTimed=§6[§e⚠§6] §6[§r{0}§6] §6[§r{1}§6] §r{2} +mailFormatNewRead=§6[§r{0}§6] §6[§r{1}§6] §7§o{2} +mailFormatNewReadTimed=§6[§e⚠§6] §6[§r{0}§6] §6[§r{1}§6] §7§o{2} mailFormat=§6[§r{0}§6] §r{1} mailMessage={0} mailSent=§6Poruka poslata\! mailSentTo=§c{0}§6 je poslao mail\: +mailSentToExpire=§6Poslat je sledeći mail igraču §c{0}§6 koji ističe za §c{1}§6\: mailTooLong=§4Mail poruka predugacka. Potrudite se da bude manja od 1000 karaktera. markMailAsRead=§6Da stavite da ste procitali poruku, kucajte§c /mail clear§6. matchingIPAddress=§6Sledeci igraci su pre ulazili na taj nalog sa te IP adrese\: @@ -286,6 +471,7 @@ msgEnabled=§6Primanje poruka §cuključeno§6. msgEnabledFor=§6Primanje poruka §cuključeno §6za §c{0}§6. msgFormat=§6[§c{0}§6 -> §c{1}§6] §r{2} msgIgnore=§c{0} §4je isključio primanje poruka. +msgtoggleCommandUsage1=/<command> [player] multipleCharges=§4Ne mozes primeniti vise od jednog punjena na ovaj vatromet. multiplePotionEffects=§4Ne mozes primeniti vise od jednog efekta na ovaj naptiak. mutedPlayer=§6Igrac§c {0} §6ucutkan. @@ -295,6 +481,7 @@ muteExempt=§4Ne mozete ucutkati tog igraca. muteExemptOffline=Ne mozes ucutkati offline igrace. muteNotify=§c{0} §6je ucutkao igraca §c{1}§6. muteNotifyFor=§c{0} §6je ućutkao igrača §c{1}§6 za§c {2}§6. +nearCommandUsage1=/<command> nearbyPlayers=§6Igraci u blizini\:§r {0} negativeBalanceError=§4Igracu nije dozvoljeno da ima negativno stanje. nickChanged=§6Nadimak promenjen. @@ -345,6 +532,7 @@ nothingInHand=§4Nemate nista u ruci. now=sada noWarpsDefined=§6Nema postavljenih warpova. nuke=§5Krece kisa smrti. +nukeCommandUsage=/<command> [player] numberRequired=Brojevi idu tu. onlyDayNight=/time dozvoljava samo day/night. onlyPlayers=§4Samo u igri mozete koristiti §c{0}§4. @@ -358,8 +546,12 @@ payConfirmToggleOn=§6Od sada ćemo vas pitati za potvrdu uplata. payMustBePositive=§4Iznos uplate mora biti pozitivan. payToggleOff=§6Više ne primate uplate. payToggleOn=§6Od sada prihvatate uplate. +payconfirmtoggleCommandUsage=/<command> +paytoggleCommandUsage=/<command> [player] +paytoggleCommandUsage1=/<command> [player] pendingTeleportCancelled=§4Zahtev za teleport otkazan. pingCommandDescription=Pong\! +pingCommandUsage=/<command> playerBanIpAddress=§6Igrac§c {0} §6je banovao IP adresu igraca§c {1} §6za\: §c{2}§6. playerBanned=&6Korisnik&c {0} &6je banovao&c {1} &6zbog\: &c{2}&6. playerJailed=§6Igrac§c {0} §6zatvoren. @@ -370,6 +562,13 @@ playerNeverOnServer=§4Igrac§c {0} §4nikada nije usao na server. playerNotFound=§4Igrac nije pronadjen. playerTempBanned=§6Igrač §c{0}§6 je privremeno banovao §c{1}§6 na §c{2}§6\: §c{3}§6. playerUnmuted=§6Mozete ponovo da pricate. +playtimeCommandDescription=Prikazuje vreme koje je igrač proveo u igri +playtimeCommandUsage=/<command> [player] +playtimeCommandUsage1=/<command> +playtimeCommandUsage1Description=Prikazuje vreme koje ste proveli u igri +playtimeCommandUsage2Description=Prikazuje vreme koje je određeni igrač proveo u igri +playtime=§6Vreme provedeno u igri\:§c {0} +playtimeOther=§6Vreme koje je {1} proveo u igri§6\:§c {0} pong=Pong\! posPitch=§6Pitch\: {0} (Ugao glave) possibleWorlds=§6Moguci svetovi su brojevi §c0§6 kroz §c{0}§6. @@ -388,6 +587,7 @@ powerToolRemove=§6Komanda §c{0}§6 je uklonjena sa §c{1}§6. powerToolRemoveAll=§6Sve komande izbrisane od §c{0}§6. powerToolsDisabled=§6Svaki tvoj power tool je deaktiviran. powerToolsEnabled=§6Svaki tvoj power tool je aktiviran. +powertooltoggleCommandUsage=/<command> pTimeCurrent=§6Vreme igraca §c{0}§6 je§c {1}§6. pTimeCurrentFixed=§c{0}§6 vreme je namesteno na §c{1}§6. pTimeNormal=§c{0}§6 vreme je namesteno na normalu i sada se poklapa sa serverom. @@ -419,9 +619,11 @@ recipeWhere=§6Gde\: {0} removed=§6Obrisano§c {0} §6enititija. repair=§6Uspesno ste popravili svoj(u)\: §c{0}§6. repairAlreadyFixed=§4Ovom itemu nije potrebna popravka. +repairCommandUsage1=/<command> repairEnchanted=§4Nemate dozvolu da popravljate zacarane iteme. repairInvalidType=§4Ovaj item ne mozete popraviti. repairNone=§4Nemate iteme koje treba popraviti. +replyFromDiscord=**Odgovor od {0}\:** `{1}` requestAccepted=§6Zahtev za teleportaciju prihvacen. requestAcceptedFrom=§c{0} §6je prihvatio vas zahtev za teleport. requestDenied=§6Zahtev za teleport odbijen. @@ -431,6 +633,8 @@ requestSentAlready=§4Već ste poslali {0}§4 zahtev za teleport. requestTimedOut=§4Zahtev za teleport je istekao. resetBal=§6Stanje resetovano na §c{0} §6za sve online igrace. resetBalAll=§6Stanje resetovano na §c{0} §6za sve igrace. +restCommandUsage=/<command> [player] +restCommandUsage1=/<command> [player] returnPlayerToJailError=§4Greska prilikiom pokusavanja vracanja igraca §c {0} §4tuzatvor\: §c{1}§4\! runningPlayerMatch=§6Pokrećem pretragu za igrace koji imaju §c{0}§6'' (ovo moze da potraje). second=sekunda @@ -457,16 +661,21 @@ southEast=SE south=S southWest=SW skullChanged=§6Glava promenjena na §c{0}§6. +skullCommandUsage1=/<command> slimeMalformedSize=§4Losa velicina. +smithingtableCommandUsage=/<command> socialSpy=§6SocialSpijun za igraca §c{0}§6\: §c{1} socialSpyMutedPrefix=§f[§6SS§f] §7(ućutkan) §r +socialspyCommandUsage1=/<command> [player] socialSpyPrefix=§f[§6SS§f] §r soloMob=§4To stvorenje zeli da bude samo. spawned=stvoreno spawnSet=§6Spawn lokacija postavljena za grupu§c {0}§6. spectator=spectator +stonecutterCommandUsage=/<command> sudoExempt=§4Ne možete naterati §c{0}. sudoRun=§6Forsiranje igraca§c {0} §6na\:§r /{1} +suicideCommandUsage=/<command> suicideMessage=§6Zbog surovi svete... suicideSuccess=§6Igrac §c{0} §6je uskratio sebi zivot. survival=prezivljavanje @@ -496,16 +705,33 @@ thunder=§6Ti§c {0} §6si zagrmeo u svom svetu. thunderDuration=§6Ti§c {0} §6si zagrmeo u svom svetu za§c {1} §6sekunde. timeBeforeHeal=§4Vreme do sledeceg izlecenja\:§c {0}§4. timeBeforeTeleport=§4Vreme do sledeceg teleporta\:§c {0}§4. +timeCommandUsage1=/<command> timeFormat=§c{0}§6 ili §c{1}§6 ili §c{2}§6 timeSetPermission=§4Nije vam dozvoljeno da menjate vreme. timeSetWorldPermission=§4Nije vam dozvoljeno da menjate vreme u svetu ''{0}''. timeWorldCurrent=§6Trenutno vreme u§c {0} §6je §c{1}§6. timeWorldSet=§6Vreme je namesteno na§c {0} §6u\: §c{1}§6. +toggleshoutCommandUsage1=/<command> [player] +topCommandUsage=/<command> totalSellableAll=§aUkupna vrednost svih predmeta i blokova koji se mogu prodati je §c{1}§a. totalSellableBlocks=§aUkupna vrednost svih blokova koji se mogu prodati je §c{1}§a. totalWorthAll=§aProdani su svi predmeti i blokovi za ukupnu cenu od §c{1}§a. totalWorthBlocks=§aProdani su svi blokovi za ukupnu cenu od §c{1}§a. +tpacancelCommandUsage=/<command> [player] +tpacancelCommandUsage1=/<command> +tpacceptCommandUsage1=/<command> +tpacceptCommandUsage3=/<command> * +tpallCommandUsage=/<command> [player] +tpallCommandUsage1=/<command> [player] +tpautoCommandUsage=/<command> [player] +tpautoCommandUsage1=/<command> [player] +tpdenyCommandUsage=/<command> +tpdenyCommandUsage1=/<command> +tpdenyCommandUsage3=/<command> * +tprCommandUsage=/<command> +tprCommandUsage1=/<command> tps=§6Trenutni TPS \= {0} +tptoggleCommandUsage1=/<command> [player] tradeSignEmpty=§4Znak za razmenu nema nista dostupno za tebe. tradeSignEmptyOwner=§4Nema nicega da se pokupi sa ovog znaka za razmenu. treeFailure=§4Stvaranje drveta neuspelo. Pokusajte na travi. @@ -540,16 +766,19 @@ userJailed=§6Zatvoreni ste\! userUnknown=§4Upozorenje\: Igrac ''§c{0}§4'' nikad nije usao na server. usingTempFolderForTesting=Koriscenje privremenog direktorijuma radi testiranja\: vanish=§6Vanish za {0}§6\: {1} +vanishCommandUsage1=/<command> [player] vanished=§6 Postao si ne vidljiv za igrace i sakriven za komande. versionOutputVaultMissing=§4Vault nije instaliran. Chat i permisije možda neće raditi. versionOutputFine=§6{0} verzija\: §a{1} versionOutputWarn=§6{0} verzija\: §c{1} versionOutputUnsupported=§d{0} §verzija\: §d{1} versionOutputUnsupportedPlugins=§6Koristite plugine za koje ne nudimo §dpodršku§6\! +versionOutputEconLayer=§6Sloj Ekonomije\: §r{0} versionMismatch=§4Verzija se ne slaze\! Molimo vas azurirajte {0} na istu verziju. versionMismatchAll=§4Verzija se ne slaze\! Molimo vas azurirajte sve Essentials jar dokumente na iste verzije. voiceSilenced=§6Ti si upravo mutiran\! walking=hodanje +warpCommandUsage1=/<command> [page] warpDeleteError=§4Problem prilikom brisanja datoteke warp. warpingTo=§6Warp do§c {0}§6. warpList={0} @@ -585,6 +814,8 @@ whoisPlaytime=§6 - Igrao\:§r {0} whoisTempBanned=§6 - Ban ističe\:§r {0} whoisTop=§6 \=\=\=\=\=\= KoJe\:§c {0} §6\=\=\=\=\=\= whoisUuid=§6 - UUID\:§r {0} +workbenchCommandUsage=/<command> +worldCommandUsage1=/<command> worth=§aGomila {0} vredi §c{1}§a ({2} predmet(a) za {3} po svakom) worthMeta=§aGomila {0} sa metadatom od {1} kosta §c{2}§a ({3} predmet(a) {4} po svakom) worthSet=§6Vrednost podesenja diff --git a/Essentials/src/main/resources/messages_sv.properties b/Essentials/src/main/resources/messages_sv.properties index 5c6b261814a..a8f79cc31a0 100644 --- a/Essentials/src/main/resources/messages_sv.properties +++ b/Essentials/src/main/resources/messages_sv.properties @@ -6,12 +6,12 @@ action=§5* {0} §5{1} addedToAccount=§a{0} har blivit tillagt på ditt konto. addedToOthersAccount=§a{0} har blivit tillagt på {1}§a konto. Ny balans\: {2} adventure=äventyr -afkCommandDescription=Markerar dig som AFK. +afkCommandDescription=Markerar dig som borta. afkCommandUsage=/<command> [spelare/meddelande...] afkCommandUsage1=/<command> [meddelande] -afkCommandUsage1Description=Växla din afk status med en frivillig anledning -afkCommandUsage2=/<kommando> <spelare> [meddelande] -afkCommandUsage2Description=Växlar afk status för den angivna spelaren med en valfri +afkCommandUsage1Description=Växlar huruvida du vill vara markerad som borta eller ej med möjlighet att ange en anledning +afkCommandUsage2=/<command> <spelare> [meddelande] +afkCommandUsage2Description=Växlar huruvida en vald spelare är markerad som borta eller ej med möjlighet att ange en anledning alertBroke=gjorde sönder\: alertFormat=§3[{0}] §r {1} §6 {2} vid\: §{3} alertPlaced=placerade\: @@ -23,11 +23,12 @@ antiBuildDrop=§4Du har inte tillåtelse att kasta ut§c {0}§4. antiBuildInteract=§4Du har inte tillåtelse att påverka {0}. antiBuildPlace=§4Du har inte tillåtelse att placera {0} här. antiBuildUse=§4Du har inte tillåtelse att använda {0}. -antiochCommandDescription=En liten överraskning för operatörer. +antiochCommandDescription=En liten överraskning till operatörerna. antiochCommandUsage=/<command> [meddelande] +anvilCommandDescription=Öppnar upp ett städ. anvilCommandUsage=/<command> autoAfkKickReason=Du har blivit utsparkad för att ha varit inaktiv i mer än {0} minuter. -autoTeleportDisabled=§6Du godkänner inte längre automatiskt teleporteringsförfrågningar. +autoTeleportDisabled=§6Du godkänner inte längre teleporteringsförfrågningar automatiskt. autoTeleportDisabledFor=§c{0}§6 godkänner inte längre teleporteringsförfrågningar automatiskt. autoTeleportEnabled=§6Du godkänner nu teleporteringsförfrågningar automatiskt. autoTeleportEnabledFor=§c{0}§6 godkänner nu teleporteringsförfrågningar automatiskt. @@ -35,6 +36,9 @@ backAfterDeath=§6Använd§c /back§6 kommandot för att gå tillbaks till din d backCommandDescription=Teleporterar dig till din plats innan tp/spawn/warp. backCommandUsage=/<command> [spelare] backCommandUsage1=/<command> +backCommandUsage1Description=Te2leporterar dig till en tidigare position +backCommandUsage2=/<command> <spelare> +backCommandUsage2Description=Teleporterar den valda spelaren till en tidigare position backOther=§6Återvände§c {0}§6 till din föregående position. backupCommandDescription=Kör säkerhetskopian om den är konfigurerad. backupCommandUsage=/<command> @@ -44,22 +48,32 @@ backupStarted=Backup startad backupInProgress=§6Ett externt säkerhetskopieringsskript pågår för närvarande\! Avaktivera plugin tills det är klart. backUsageMsg=§7Tar dig tillbaka till din föregående position. balance=§7Balans\: {0} -balanceCommandDescription=Visar saldot för en spelare. +balanceCommandDescription=Visar en spelares saldo. balanceCommandUsage=/<command> [spelare] balanceCommandUsage1=/<command> +balanceCommandUsage1Description=Visar ditt nuvarande saldo +balanceCommandUsage2=/<command> <spelare> +balanceCommandUsage2Description=Visar en vald spelares saldo balanceOther=§aKonto balans för {0} §aär §c{1} balanceTop=§7Topp balans ({0}) balanceTopLine={0}. {1}, {2} balancetopCommandDescription=Hämtar de högsta saldovärdena. +balancetopCommandUsage=/<command> [sida] +balancetopCommandUsage1=/<command> [sida] +balancetopCommandUsage1Description=Visar den första (eller angivna) sidan av saldotopplistan banCommandDescription=Bannar en spelare. -banCommandUsage=/<command> <player> [reason] -banCommandUsage1=/<command> <player> [reason] +banCommandUsage=/<command> <spelare> [anledning] +banCommandUsage1=/<command> <spelare> [anledning] +banCommandUsage1Description=Bannlyser den angivna spelaren med en valfri anledning banExempt=§cDu kan inte banna den spelaren. banExemptOffline=§4Du kan inte banna spelare som är offline. banFormat=§4Bannlyst\: \n§r{0} banIpJoin=Your IP address is banned from this server. Reason\: {0} banJoin=You are banned from this server. Reason\: {0} banipCommandDescription=Bannar en IP-adress. +banipCommandUsage=/<command> <adress> [anledning] +banipCommandUsage1=/<command> <adress> [anledning] +banipCommandUsage1Description=Bannlyser den angivna ipadressen med en valfri anledning bed=§osäng§r bedMissing=§4Din säng finns ej, är blockerad, eller saknas. bedNull=§msäng§r @@ -72,26 +86,35 @@ bigTreeSuccess=§7Stort träd genererat. bigtreeCommandDescription=Skapa ett stort träd på det blocket du kollar på. bigtreeCommandUsage=/<command> <tree|redwood|jungle|darkoak> bigtreeCommandUsage1=/<command> <tree|redwood|jungle|darkoak> +bigtreeCommandUsage1Description=Spawnar ett stort träd av angiven typ blockList=§6EssentialsX vidarebefordrar följande kommandon till andra plugins\: blockListEmpty=§6EssentialsX vidarebefordrar inte några kommandon till andra plugins. bookAuthorSet=§6Författaren av boken är nu {0}. bookCommandDescription=Tillåter återöppnande och redigering av förseglade böcker. -bookCommandUsage=/<command> [titel|författare [name]] +bookCommandUsage=/<command> [title|author [namn]] bookCommandUsage1=/<command> +bookCommandUsage1Description=Låser/Låser upp en signerad bok +bookCommandUsage2=/<command> author <författare> +bookCommandUsage2Description=Anger en författare för en signerad bok +bookCommandUsage3=/<command> title <boktitel> +bookCommandUsage3Description=Anger titeln för en signerad bok bookLocked=§6Denna bok är nu låst. bookTitleSet=§6Titeln av boken har blivit ändrad till {0} breakCommandDescription=Tar sönder blocket du tittar på. breakCommandUsage=/<command> broadcast=§6[§4Utsänd§6]§a {0} broadcastCommandDescription=Sänder ett meddelande till hela servern. -broadcastCommandUsage=/<command> <msg> -broadcastCommandUsage1=/<command> <message> +broadcastCommandUsage=/<command> <meddelande> +broadcastCommandUsage1=/<command> <meddelande> +broadcastCommandUsage1Description=Ropar ut ett angivet meddelande för hela servern broadcastworldCommandDescription=Skickar ett medelande till en hel värld. -broadcastworldCommandUsage=/<command> <world> <msg> -broadcastworldCommandUsage1=/<command> <world> <msg> +broadcastworldCommandUsage=/<command> <värld> <meddelande> +broadcastworldCommandUsage1=/<command> <värld> <meddelande> +broadcastworldCommandUsage1Description=Ropar ut ett angivet meddelande för vald värld burnCommandDescription=Sätt en spelare i brand. -burnCommandUsage=/<command> <player> <seconds> -burnCommandUsage1=/<command> <player> <seconds> +burnCommandUsage=/<command> <spelare> <sekunder> +burnCommandUsage1=/<command> <spelare> <sekunder> +burnCommandUsage1Description=Sätter eld på den valda spelaren i antal sekunder som angivits burnMsg=§7Du satte eld på {0} i {1} sekunder. cannotSellNamedItem=§6You har inte tillåtelse att sälja nämnda saker. cannotSellTheseNamedItems=§6Du hare inte tillåtelse att sälja dessa nämnda saker\: §4{0} @@ -101,6 +124,7 @@ cantFindGeoIpDB=Kunde inte hitta GeoIP-databasen\! cantGamemode=§4You do not have permission to change to gamemode {0} cantReadGeoIpDB=Kunde inte läsa innehåll från GeoIP-databasen\! cantSpawnItem=§cDu har inte behörighet att spawna {0} +cartographytableCommandDescription=Öppnar upp ett kartografbord. cartographytableCommandUsage=/<command> chatTypeLocal=[L] chatTypeSpy=[Spion] @@ -111,32 +135,50 @@ clearInventoryConfirmToggleOn=§6You will now be prompted to confirm inventory c clearinventoryCommandDescription=Rensa alla saker i ditt förråd. clearinventoryCommandUsage=/<command> [player|*] [item[\:<data>]|*|**] [amount] clearinventoryCommandUsage1=/<command> +clearinventoryCommandUsage1Description=Rensar alla saker från ditt inventarie +clearinventoryCommandUsage2=/<command> <spelare> +clearinventoryCommandUsage2Description=Rensar alla saker från den angivna spelaren inventarie +clearinventoryCommandUsage3=/<command> <spelare> <föremål> [mängd] +clearinventoryCommandUsage3Description=Rensar allt (eller en given mängd) av det angivna föremålet från den valda spelarens förråd clearinventoryconfirmtoggleCommandDescription=Ändrar om du är frågad att konfirmera förråds rensingar. clearinventoryconfirmtoggleCommandUsage=/<command> +commandArgumentOptional=§7 +commandArgumentOr=§c +commandArgumentRequired=§e commandCooldown=§cYou cannot type that command for {0}. commandDisabled=§cKommandot§6 {0}§c är inaktiverat. commandFailed=Kommando {0} misslyckades\: commandHelpFailedForPlugin=Kunde inte hitta hjälp för\: {0} +commandHelpLine1=§6Hjälp med kommando\: §f/{0} +commandHelpLine2=§6Beskrivning\: §f{0} +commandHelpLine3=§6Användning\: +commandHelpLine4=§6Alias\: §f{0} +commandHelpLineUsage={0} §6- {1} commandNotLoaded=§cKommando {0} är felaktigt laddat. compassBearing=§6Riktning\: {0} ({1} grader). compassCommandDescription=Beskriver ditt nuvarande lager. compassCommandUsage=/<command> condenseCommandDescription=Konsenderar objekt i ett mer kompakt block. +condenseCommandUsage=/<command> [föremål] condenseCommandUsage1=/<command> +condenseCommandUsage1Description=Foga ihop alla föremål i ditt förråd condenseCommandUsage2=/<command> <föremål> +condenseCommandUsage2Description=Foga ihop alla av det angivna föremålet i ditt förråd configFileMoveError=Kunde inte flytta config.yml till backup-platsen. configFileRenameError=Kunde inte byta namn på temp-filen till config.yml confirmClear=§7To §lCONFIRM§7 inventory clear, please repeat command\: §6{0} confirmPayment=§7To §lCONFIRM§7 payment of §6{0}§7, please repeat command\: §6{1} connectedPlayers=§7Anslutna spelare§r connectionFailed=Kunde inte öppna anslutning. +consoleName=Konsol cooldownWithMessage=§cNedkylning\: {0} coordsKeyword={0}, {1}, {2} couldNotFindTemplate=Kunde inte hitta mallen {0} createdKit=§6Created kit §c{0} §6with §c{1} §6entries and delay §c{2} createkitCommandDescription=Skapa ett kit i spelet\! -createkitCommandUsage=/<kommando> <kitnamn> <väntetid> -createkitCommandUsage1=/<kommando> <kitnamn> <väntetid> +createkitCommandUsage=/<command> <uppsättningsnamn> <tidsgräns> +createkitCommandUsage1=/<command> <uppsättningsnamn> <tidsgräns> +createkitCommandUsage1Description=Skapar en uppsättning med det angivna namnet och tidsgränsen createKitFailed=§4Error occurred whilst creating kit {0}. createKitSeparator=§m----------------------- createKitSuccess=§6Created Kit\: §f{0}\n§6Delay\: §f{1}\n§6Link\: §f{2}\n§6Copy contents in the link above into your kits.yml. @@ -146,26 +188,37 @@ creative=kreativ currency={0}{1} currentWorld=Nuvarande värld\: {0} customtextCommandDescription=Låter dig skapa egna text kommandon. -customtextCommandUsage=/<alias> - Bestäm i bukkit.yml +customtextCommandUsage=/<alias> - Definiera i bukkit.yml day=dag days=dagar defaultBanReason=Banhammaren har talat\! +deletedHomes=Alla hem är nu borttagna. +deletedHomesWorld=Alla hem i {0} är nu borttagna. deleteFileError=Kunde inte radera filen\: {0} deleteHome=§7Hemmet {0} har tagits bort. deleteJail=§7Fängelset {0} har tagits bort. deleteKit=§6Kit§c {0} §6har tagits bort. deleteWarp=§7Warpen {0} har tagits bort. +deletingHomes=Tar bort alla hem... +deletingHomesWorld=Tar bort alla hem i {0}... delhomeCommandDescription=Tar bort ett hem. -delhomeCommandUsage=/<command> [spelare\:]<name> +delhomeCommandUsage=/<command> [spelare\:]<namn> +delhomeCommandUsage1=/<command> <namn> +delhomeCommandUsage1Description=Tar bort ditt hem med det avgivna namnet +delhomeCommandUsage2=/<command> <spelare>\:<namn> +delhomeCommandUsage2Description=Tar bort den valda spelarens hem med det angivna namnet deljailCommandDescription=Tar bort ett fängelse. -deljailCommandUsage=/<command> <jailname> -deljailCommandUsage1=/<command> <jailname> +deljailCommandUsage=/<command> <fängelsenamn> +deljailCommandUsage1=/<command> <fängelsenamn> +deljailCommandUsage1Description=Tar bort fängelset med det angivna namnet delkitCommandDescription=Tar bort det specifierade kittet. -delkitCommandUsage=/<command> <kit> -delkitCommandUsage1=/<command> <kit> +delkitCommandUsage=/<command> <uppsättning> +delkitCommandUsage1=/<command> <uppsättning> +delkitCommandUsage1Description=Tar bort uppsättningen med det angivna namnet delwarpCommandDescription=Tar bort den specifierade varpen. -delwarpCommandUsage=/<command> <warp> -delwarpCommandUsage1=/<command> <warp> +delwarpCommandUsage=/<command> <respunkt> +delwarpCommandUsage1=/<command> <respunkt> +delwarpCommandUsage1Description=Tar bort respunkten med det angivna namnet deniedAccessCommand={0} nekades åtkomst till kommandot. denyBookEdit=§4Du kan inte låsa upp denna boken. denyChangeAuthor=§4Du kan inte ändra författaren av denna bok. @@ -179,6 +232,33 @@ destinationNotSet=Ingen destination är inställd. disabled=inaktiverad disabledToSpawnMob=Att spawna fram den här moben är inaktiverat i configurationsfilen. disableUnlimited=§6Inaktiverade oändlig placering av§c {0} §6för§c {1}§6. +discordbroadcastCommandDescription=Skickar ett meddelande till den angivna Discord-kanalen. +discordbroadcastCommandUsage=/<command> <kanal> <meddelande> +discordbroadcastCommandUsage1=/<command> <kanal> <meddelande> +discordbroadcastCommandUsage1Description=Skickar det inmatade meddelandet till den angivna Discord-kanalen +discordbroadcastInvalidChannel=§4Det finns ingen Discord-kanal som heter §c{0}§4. +discordbroadcastPermission=§4Du har inte behörighet att skicka meddelanden i Discord-kanalen §c{0}§4. +discordbroadcastSent=§6Meddelandet skickades till §c{0}§6\! +discordCommandDescription=Skickar Discord-serverns inbjudningslänk till spelaren. +discordCommandLink=§6Gå med i vår Discord-server här\: §c{0}§6\! +discordCommandUsage=/<command> +discordCommandUsage1=/<command> +discordCommandUsage1Description=Skickar Discord-serverns inbjudningslänk till spelaren +discordCommandExecuteDescription=Kör ett konsolkommando på Minecraft-servern. +discordCommandExecuteArgumentCommand=Kommandot som kommer att köras +discordCommandExecuteReply=Kör kommando\: "/{0}" +discordCommandListDescription=Hämtar en lista med spelare som är online. +discordCommandMessageDescription=Skriv ett meddelande till en spelare på Minecraft-servern. +discordCommandMessageArgumentUsername=Spelaren som du vill skicka meddelandet till +discordCommandMessageArgumentMessage=Meddelandet som du vill skicka till spelaren +discordErrorCommandDisabled=Det kommandot är inaktiverat\! +discordErrorLogin=Det gick inte att logga in på Discord och tillägget har avaktiverats\: \n{0} +discordErrorNoPerms=Din bot kan inte se eller skriva i någon kanal\! Se till att din bot har skriv- och läsbehörigheter i alla kanaler du vill använda. +discordErrorNoPrimary=Antingen har du inte angett en primär kanal eller så är den kanal du angett som primär ogiltig. Återgår till standardkanalen\: \#{0}. +discordErrorNoPrimaryPerms=Din bot kan inte skriva i din primära kanal, \#{0}. Se till att din bot har skriv- och läsbehörigheter i alla kanaler du vill använda. +discordLoggingIn=Loggar in på Discord... +discordLoggingInDone=Lyckades logga in som {0} +discordNoSendPermission=Kan inte skicka meddelanden i kanalen\: \#{0}. Se till att boten har behörighet att skicka meddelanden i den kanalen\! disposal=Avfallshantering disposalCommandDescription=Öppnar en bärbar avfallsmeny. disposalCommandUsage=/<command> @@ -189,30 +269,64 @@ duplicatedUserdata=Dublicerad användardata\: {0} och {1} durability=§7Det här verktyget har §c{0}§7 användningar kvar east=E ecoCommandDescription=Hanterar serverns ekonomi. -ecoCommandUsage=/<command> <give|take|set|reset> <player> <amount> +ecoCommandUsage=/<command> <give|take|set|reset> <spelare> <mängd> +ecoCommandUsage1=/<command> give <spelare> <mängd> +ecoCommandUsage1Description=Ger den valda spelaren den angivna mängden pengar +ecoCommandUsage2=/<command> take <spelare> <mängd> +ecoCommandUsage2Description=Tar den angivna mängden pengar från den valda spelaren +ecoCommandUsage3=/<command> set <spelare> <mängd> +ecoCommandUsage3Description=Ställer in den valda spelarens saldo till den angivna mängden pengar +ecoCommandUsage4=/<command> reset <spelare> <mängd> +ecoCommandUsage4Description=Återställer den valda spelarens saldo till serverns inställda start-saldo editBookContents=§eDu kan nu ändra innehållet i denna bok. enabled=aktiverad enchantCommandDescription=Förtrollor saken spelaren håller. -enchantCommandUsage=/<command> <enchantmentname> [level] +enchantCommandUsage=/<command> <förtrollningsnamn> [nivå] +enchantCommandUsage1=/<command> <förtrollningsnamn> [nivå] +enchantCommandUsage1Description=Förtrollar föremålet du håller i med den angivna förtrollningen till en valfri nivå enableUnlimited=Ger oändligt med pengar till enchantmentApplied=§7Förtrollningen {0} har blivit tillämpad på saken du har i handen. enchantmentNotFound=§cFörtrollningen hittades inte enchantmentPerm=§cDu har inte behörighet att {0} enchantmentRemoved=§7Förtrollningen {0} har tagits bort från saken i din hand. enchantments=§7Förtrollningar\: {0} -enderchestCommandDescription=Låter dig se inuti en enderchest. +enderchestCommandDescription=Låter dig se innehållet i en enderkista. enderchestCommandUsage=/<command> [spelare] enderchestCommandUsage1=/<command> +enderchestCommandUsage1Description=Öppnar din enderkista +enderchestCommandUsage2=/<command> <spelare> +enderchestCommandUsage2Description=Öppnar en vald spelares enderkista errorCallingCommand=Kunde inte kontakta kommandot /{0} errorWithMessage=§cFel\:§4 {0} essentialsCommandDescription=Laddar om EssentialsX. essentialsCommandUsage=/<command> +essentialsCommandUsage1=/<command> reload +essentialsCommandUsage1Description=Läser om Essentials konfigurationer på nytt +essentialsCommandUsage2=/<command> version +essentialsCommandUsage2Description=Visar information om den använda versionen av Essentials +essentialsCommandUsage3=/<command> commands +essentialsCommandUsage4=/<command> debug +essentialsCommandUsage4Description=Går in i Essentials felsökningsläge +essentialsCommandUsage5=/<command> reset <spelare> +essentialsCommandUsage5Description=Återställer den valda spelarens användardata +essentialsCommandUsage6=/<command> cleanup +essentialsCommandUsage6Description=Rensar gammal användardata +essentialsCommandUsage7=/<command> homes +essentialsCommandUsage7Description=Hanterar användarhem essentialsHelp1=Filen är trasig och Essentials kan inte öppna den. Essentials är nu inaktiverat. Om du inte kan fixa problemet själv, gå till http\://tiny.cc/EssentialsChat essentialsHelp2=Filen är trasig och Essentials kan inte öppna den. Essentials är nu inaktiverat. Om du inte kan fixa problemet själv, skriv /essentialshelp i spelet eller gå till http\://tiny.cc/EssentialsChat essentialsReload=§6Essentials omladdad§c {0}. exp=§c{0} §7har§c {1} §7exp (level§c {2}§7) och behöver§c {3} §7mer erfarenhet för att gå upp en nivå. expCommandDescription=Ge, sätt, återställ eller titta på en spelares xp. expCommandUsage=/<command> [reset|show|set|give] [spelarnamn [amount]] +expCommandUsage1=/<command> give <spelare> <mängd> +expCommandUsage1Description=Ger den valda spelaren den angivna mängden erfarenhetspoäng +expCommandUsage2=/<command> set <spelare> <mängd> +expCommandUsage2Description=Ställer in den valda spelarens erfarenhetspoäng till den angivna mängden +expCommandUsage3=/<command> show <spelare> +expCommandUsage4Description=Visar hur mycket erfarenhetspoäng den valda spelaren har +expCommandUsage5=/<command> reset <spelare> +expCommandUsage5Description=Ställer in den valda spelarens erfarenhetspoäng till noll expSet=§c{0} §7har nu§c {1} §7erfarenhet. extCommandDescription=Släck spelare. extCommandUsage=/<command> [spelare] @@ -230,15 +344,27 @@ feedCommandUsage1=/<command> [spelare] feedOther=§6Du mättade §c{0}s§6 aptit. fileRenameError=Namnbytet av filen {0} misslyckades fireballCommandDescription=Kaste ett eldklot eller andra blandade projektiler. -fireballCommandUsage=/<command> [fireball|small|large|arrow|skull|egg|snowball|expbottle|dragon|splashpotion|lingeringpotion|trident] [speed] +fireballCommandUsage=/<command> [fireball|small|large|arrow|skull|egg|snowball|expbottle|dragon|splashpotion|lingeringpotion|trident] [hastighet] fireballCommandUsage1=/<command> +fireballCommandUsage2=/<command> <fireball|small|large|arrow|skull|egg|snowball|expbottle|dragon|splashpotion|lingeringpotion|trident> [hastighet] +fireballCommandUsage2Description=Kastar den valda projektilen från din plats med möjlighet att ange en hastighet fireworkColor=§4Inkorrekta fyrverkeri parametrar, du måste ange en färg först. fireworkCommandDescription=Låter dig ändra en bunt fyrverkerier. fireworkCommandUsage=/<command> <<meta param>|power [amount]|clear|fire [amount]> +fireworkCommandUsage1=/<command> clear +fireworkCommandUsage1Description=Tar bort alla effekter från fyrverkeripjäsen du håller i +fireworkCommandUsage2=/<command> power <mängd> +fireworkCommandUsage2Description=Ställer in styrkan på fyrverkeripjäsen du håller i +fireworkCommandUsage3=/<command> avfyra [mängd] +fireworkCommandUsage3Description=Avfyrar en kopia, eller den angivna mängden, av fyrverkeripjäsen du håller i +fireworkCommandUsage4=/<command> <metadata> +fireworkCommandUsage4Description=Lägger till den angivna effekten på fyrverkeripjäsen du håller i fireworkEffectsCleared=§6Tog bort alla effekter från objektet i din hand. fireworkSyntax=§6Fyrverkeri parametrar\: §c färg\: <färg>[fade\: <färg>] [form\: <form>] [effekt\: <effect>] §6För att använda flera färger/effekter, avgränsar du värdena med kommatecken\: §cred, blue, pink §6Former\:§c star, ball, larege, creeper, burst §6Effekter\:§c trail, twinkle. +fixedHomes=Alla ogiltiga hem är nu borttagna. +fixingHomes=Tar bort alla ogiltiga hem... flyCommandDescription=Ta fart, och snart\! -flyCommandUsage=/<command> [player] [on|off] +flyCommandUsage=/<command> [spelare] [on|off] flyCommandUsage1=/<command> [spelare] flying=flyger flyMode=§7Aktiverade flygläge {0} för {1}. @@ -249,8 +375,9 @@ fullStackDefaultOversize=§6Din stack has blivigt satt till dess maximala storle gameMode=§7Satte {0}s spelläge till {1}. gameModeInvalid=§4Du måste ange en en giltig spelare/läge. gamemodeCommandDescription=Ändra spelarens spelläge. -gamemodeCommandUsage=/<command> <survival|creative|adventure|spectator> [player] -gamemodeCommandUsage1=/<command> <survival|creative|adventure|spectator> [player] +gamemodeCommandUsage=/<command> <survival|creative|adventure|spectator> [spelare] +gamemodeCommandUsage1=/<command> <survival|creative|adventure|spectator> [spelare] +gamemodeCommandUsage1Description=Ställer in ditt eller en vald spelares spelläge gcCommandDescription=Rapporterar minne, upptid och tick information. gcCommandUsage=/<command> gcfree=Ledigt minne\: {0} MB @@ -261,8 +388,12 @@ geoipJoinFormat=§6Spelaren §c{0} §6kommer från §c{1}§6. getposCommandDescription=Få dina nuvarande koordinater eller spelarens koordinater. getposCommandUsage=/<command> [spelare] getposCommandUsage1=/<command> [spelare] +getposCommandUsage1Description=Hämtar dina eller en vald spelares koordinater giveCommandDescription=Ge en spelare ett föremål. giveCommandUsage=/<command> <player> <item|numeric> [belopp [itemmeta...]] +giveCommandUsage1=/<command> <spelare> <föremål> [mängd] +giveCommandUsage1Description=Ger den valda spelaren 64 (eller det angivna antalet) stycken av ett valt föremål +giveCommandUsage2=/<command> <spelare> <föremål> <mängd> <metadata> geoipCantFind=§cSpelaren §c{0} §6kommer från §aett okänt land §6. geoIpErrorOnJoin=Kan ej hämta GeoIP data för {0}. Försäkra att din licens nyckel och konfiguration är korrekt. geoIpLicenseMissing=Ingen licensnyckel hittad\! Vänligen besök https\://essentialsx.net/geoip för installationsinstruktioner åt nya användare. @@ -270,13 +401,14 @@ geoIpUrlEmpty=Nerladdningsadressen för GeoIP är tom. geoIpUrlInvalid=Nerladdningsadressen för GeoIP är ogiltig. givenSkull=§6Du har fått skallen av §c{0}§6. godCommandDescription=Möjliggör dina gudfruktiga krafter. -godCommandUsage=/<command> [player] [on|off] +godCommandUsage=/<command> [spelare] [on|off] godCommandUsage1=/<command> [spelare] giveSpawn=§6Ger§c {0} §6av§c {1} §6till§c {2}§6. giveSpawnFailure=§4Inte tillräckligt med utrymme, §c{0} {1} §4förlorades. godDisabledFor=§cdeaktiverat§6 för§c {0} godEnabledFor=aktiverat för {0} godMode=§7Odödlighet {0}. +grindstoneCommandDescription=Öppnar upp en slipsten. grindstoneCommandUsage=/<command> groupDoesNotExist=§4Ingen är online i denna gruppen\! groupNumber=§c{0}§f online, för att se alla skriv\:§c /{1} {2} @@ -284,6 +416,8 @@ hatArmor=§cFel, du kan inte använda den här saken som en hatt\! hatCommandDescription=Få några coola nya huvudbonader. hatCommandUsage=/<command> [remove] hatCommandUsage1=/<command> +hatCommandUsage2=/<command> remove +hatCommandUsage2Description=Tar bort din nuvarande hatt hatCurse=§4Du kan inte ta bort en hatt med bindningens förbannelse\! hatEmpty=§cDu har inte på dig en hatt. hatFail=§cDu måste ha någonting att bära i din hand. @@ -294,10 +428,11 @@ heal=§7Du har blivit läkt. healCommandDescription=Läker dig eller den givna spelaren. healCommandUsage=/<command> [spelare] healCommandUsage1=/<command> [spelare] +healCommandUsage1Description=Läker dig eller en vald spelare healDead=§4Du kan inte hela någon som är död\! healOther=§7Läkte {0}. helpCommandDescription=Visar en lista över tillgängliga kommandon. -helpCommandUsage=/<command> [sökterm] [page] +helpCommandUsage=/<command> [term] [sida] helpConsole=För att visa hjälp från konsolen, skriv ''?''. helpFrom=§7Kommandon från {0}\: helpLine=§6/{0}§r\: {1} @@ -305,27 +440,46 @@ helpMatching=§7Kommandon matchar "{0}"\: helpOp=§c[OpHjälp]§f §7{0}\:§f {1} helpPlugin=§4{0}§f\: Hjälp för insticksprogram\: /help {1} helpopCommandDescription=Skicka ett medelande till en online administratör. -helpopCommandUsage=/<command> <message> -helpopCommandUsage1=/<command> <message> +helpopCommandUsage=/<command> <meddelande> +helpopCommandUsage1=/<command> <meddelande> +helpopCommandUsage1Description=Skickar det angivna meddelandet till alla administratörer som är online holdBook=§4Boken du hÃ¥ller i är inte skrivbar holdFirework=§4Du måste hålla i en fyrverkeripjäs för att lägga till effekter. holdPotion=§4Du måste hålla i en brygd för att ge den effekter. holeInFloor=Hål i golvet homeCommandDescription=Teleportera till ditt hem. -homeCommandUsage=/<command> [spelare\:][name] +homeCommandUsage=/<command> [spelare\:][namn] +homeCommandUsage1=/<command> <namn> +homeCommandUsage1Description=Teleporterar dig till ditt hem med det angivna namnet +homeCommandUsage2=/<command> <spelare>\:<namn> +homeCommandUsage2Description=Teleporterar dig till den valda spelarens hem med det angivna namnet homes=Hem\: {0} homeConfirmation=§6Du har redan ett hem som heter §c{0}§6\\\!\nFör att skriva över ditt nuvarande hem, skriv kommandot igen. homeSet=§7Hem inställt. hour=timme hours=timmar +ice=§6Du börjar huttra i kylan... +iceCommandDescription=Kyler ned en spelare. iceCommandUsage=/<command> [spelare] iceCommandUsage1=/<command> +iceCommandUsage1Description=Kyler ned dig +iceCommandUsage2=/<command> <spelare> +iceCommandUsage2Description=Kyler ned den valda spelaren +iceCommandUsage3=/<command> * +iceCommandUsage3Description=Kyler ned alla spelare som är online +iceOther=§6Kyler ned§c {0}§6. +ignoreCommandDescription=Växlar mellan om du vill ignorera en annan spelare eller ej +ignoreCommandUsage=/<command> <spelare> +ignoreCommandUsage1=/<command> <spelare> +ignoreCommandUsage1Description=Växlar mellan om du vill ignorera en vald spelare eller ej ignoredList=§6Ignorerad\:§r {0} ignoreExempt=§4Du får inte ignorera den spelaren. ignorePlayer=Du ignorerar spelaren {0} från och med nu. illegalDate=Felaktigt datumformat. infoChapter=§6Välj kapitel\: infoChapterPages=§e ---- §6{0} §e--§6 Sida §c{1}§6 of §c{2} §e---- +infoCommandDescription=Visar information skriven av serverägaren. +infoCommandUsage=/<command> [kapitel] [sida] infoPages=§e ---- §6{2} §e--§6 Sida §4{0}§6/§4{1} §e---- infoUnknownChapter=§4Okänt kapitel. insufficientFunds=§4Du har inte råd med detta. @@ -348,45 +502,98 @@ inventoryClearingAllArmor=§6Rensade alla inventory objekt och rustning från {0 inventoryClearingAllItems=§6Rensade alla inventory items från§c {0}§6. inventoryClearingFromAll=§6Rensar inventoriet för alla spelare... inventoryClearingStack=§6Tog bort§c {0} §c {1} §6från§c {2}§6. -invseeCommandDescription=Se förrådet av andra spelare. +invseeCommandDescription=Se andra spelares inventarie. +invseeCommandUsage=/<command> <spelare> +invseeCommandUsage1=/<command> <spelare> +invseeCommandUsage1Description=Öppnar den valda spelarens förråd is=är isIpBanned=§6IP §c {0} §6är bannad. internalError=§cAn internal error occurred while attempting to perform this command. itemCannotBeSold=Det objektet kan inte säljas till servern. itemCommandDescription=Skapa ett föremål. +itemCommandUsage=/<command> <föremål|id> [mängd [metadata...]] +itemCommandUsage1=/<command> <föremål> [mängd] +itemCommandUsage1Description=Ger dig 64 (eller det angivna antalet) stycken av ett valt föremål +itemCommandUsage2=/<command> <föremål> <mängd> <metadata> +itemCommandUsage2Description=Ger dig den angivna mängden av det valda föremålet med den givna metadatan itemId=§6ID\:§c {0} +itemloreClear=§6Du har tagit bort det här föremålets beskrivning. +itemloreCommandDescription=Redigera ett föremåls beskrivning. +itemloreCommandUsage=/<command> <add/set/clear> [text/rad] [text] +itemloreCommandUsage1=/<command> add [text] +itemloreCommandUsage1Description=Lägger till den angivna texten vid slutet av beskrivningen på föremålet du håller i. +itemloreCommandUsage2=/<command> set <radnummer> <text> +itemloreCommandUsage2Description=Ställer in en given rad i beskrivningen på föremålet du håller i till den angivna texten +itemloreCommandUsage3=/<command> clear +itemloreCommandUsage3Description=Tar bort beskrivningen på föremålet du håller i +itemloreInvalidItem=§4Du måste hålla i ett föremål för att redigera dess beskrivning. +itemloreNoLine=§4Föremålet du håller i har ingen beskrivning på rad §c{0}§4. +itemloreNoLore=§4Föremålet du håller i har ingen beskrivning. +itemloreSuccess=§6Du har lagt till "§c{0}§6" i beskrivningen på föremålet du håller i. +itemloreSuccessLore=§6Du har ställt in rad §c{0}§6 i beskrivningen på föremålet du håller i till "§c{1}§6". itemMustBeStacked=Objektet måste köpas i staplar. En mängd av 2s kommer bli 2 staplar, etc. itemNames=Förkortning på objekt\: {0} +itemnameClear=§6Du har rensat det här föremålets namn. +itemnameCommandDescription=Namnger ett föremål. +itemnameCommandUsage=/<command> [namn] itemnameCommandUsage1=/<command> +itemnameCommandUsage1Description=Tar bort namnet på föremålet du håller i +itemnameCommandUsage2=/<command> <namn> +itemnameCommandUsage2Description=Ställer in namnet på föremålet du håller i till den angivna texten +itemnameInvalidItem=§cDu måste hålla i ett föremål för att byta namn på det. +itemnameSuccess=§6Du har bytt namn på föremålet du håller i till "§c{0}§6". itemNotEnough1=§cDu har inte tillräckligt av den saken för att sälja. itemsConverted=§6Converted all items into blocks. itemsCsvNotLoaded=Kunde inte ladda {0}\! itemSellAir=Försökte du att sälja luft? Sätt en sak i din hand. itemsNotConverted=§4You have no items that can be converted into blocks. itemSold=§7Sålde för §c{0} §7({1} {2} för {3} styck) +itemSoldConsole=§e{0} §asålde§e {1}§a för §e{2} §a({3} föremål à {4}). itemSpawn=§7Ger {0} stycken {1} itemType=Objekt\: {0} +itemdbCommandDescription=Söker efter ett föremål. itemdbCommandUsage=/<command> <föremål> itemdbCommandUsage1=/<command> <föremål> +itemdbCommandUsage1Description=Söker i föremåls-databasen efter det angivna föremålet jailAlreadyIncarcerated=§cPersonen är redan i fängelse\: {0} jailList=§6Jails\:§r {0} jailMessage=§cBryter du mot reglerna, får du stå ditt kast. jailNotExist=Det fängelset finns inte. +jailNotifyJailed=§c{0} §6har blivit fängslad av §c{1}. +jailNotifyJailedFor=§c{0} §6har blivit fängslad för§c {1}§6 av §c{2}§6. +jailNotifySentenceExtended=§c{0} §6fängelsestraff har förlängts till §c{1} §6av §c{2}§6. jailReleased=§7Spelaren §e{0}§7 är frisläppt. jailReleasedPlayerNotify=§7Du har blivit frisläppt\! jailSentenceExtended=Fängelsestraffet förlängt till\: {0} jailSet=§7Fängelset {0} har skapats +jailWorldNotExist=§4Det fängelsets värld existerar ej. +jailsCommandDescription=Ger en lista på alla fängelsen. jailsCommandUsage=/<command> jumpCommandUsage=/<command> jumpError=Det skulle skadat din dators hjärna. -kickCommandUsage=/<command> <player> [reason] -kickCommandUsage1=/<command> <player> [reason] +kickCommandDescription=Sparkar ut en vald spelare med möjlighet att ange en anledning. +kickCommandUsage=/<command> <spelare> [anledning] +kickCommandUsage1=/<command> <spelare> [anledning] +kickCommandUsage1Description=Sparkar ut den valda spelaren med möjlighet att ange en anledning kickDefault=Utsparkad från server kickedAll=§cSparkade ut alla spelare från servern kickExempt=§cDu kan inte sparka ut den spelaren. +kickallCommandDescription=Sparkar ut alla spelare utom utfärdaren från servern. +kickallCommandUsage=/<command> [anledning] +kickallCommandUsage1=/<command> [anledning] +kickallCommandUsage1Description=Sparkar ut alla spelare med möjlighet att ange en anledning kill=§7Dödade {0}. +killCommandDescription=Dödar vald spelare. +killCommandUsage=/<command> <spelare> +killCommandUsage1=/<command> <spelare> +killCommandUsage1Description=Dödar vald spelare killExempt=§4Du kan inte döda §c{0}§4. +kitCommandDescription=Erhåller den angivna uppsättningen eller visar en lista med alla uppsättningar. +kitCommandUsage=/<command> [uppsättning] [spelare] kitCommandUsage1=/<command> +kitCommandUsage1Description=Ger en lista med alla tillgängliga uppsättningar +kitCommandUsage2=/<command> <uppsättning> [spelare] +kitCommandUsage2Description=Ger den angivna uppsättningen till dig eller en vald spelare kitContains=§6Kit §c{0} §6contains\: kitCost=\ §7§o({0})§r kitDelay=§m{0}§r @@ -394,30 +601,64 @@ kitError=§cDet finns inga giltiga kit. kitError2=§4Det där kittet är inte korrekt konfigurerat. Kontakta en administratör. kitGiveTo=§6Ger kit§c {0}§6 till §c{1}§6. kitInvFull=§cDitt Förråd var fullt, placerar kit på golvet +kitInvFullNoDrop=§4Du har inte tillräckligt med utrymme i ditt förråd för den där uppsättningen. kitItem=§6- §f{0} kitNotFound=§4Det där kittet existerar inte. kitOnce=§4Du kan inte avända det kitet igen. kitReceive=§6Fick kittet§c {0}§6. +kitReset=§6Återställde väntetiden för uppsättningen §c{0}§6. +kitresetCommandDescription=Återställer väntetiden på den angivna uppsättningen. +kitresetCommandUsage=/<command> <uppsättning> [spelare] +kitresetCommandUsage1=/<command> <uppsättning> [spelare] +kitresetCommandUsage1Description=Återställer väntetiden på den angivna uppsättningen för dig eller en vald spelare +kitResetOther=§6Återställer väntetiden för uppsättningen §c{0} §6för §c{1}§6. kits=§7Kit\: {0} +kittycannonCommandDescription=Kasta en exploderande katt mot din motståndare. kittycannonCommandUsage=/<command> kitTimed=§cDu kan inte använda det kit\:et igen på {0}. +lightningCommandDescription=Tors kraft slår ned vid din muspekare eller i en spelare. +lightningCommandUsage=/<command> [spelare] [styrka] lightningCommandUsage1=/<command> [spelare] +lightningCommandUsage1Description=En blixt slår antingen ned där du tittar eller i en vald spelare +lightningCommandUsage2=/<command> <spelare> <styrka> +lightningCommandUsage2Description=En blixt slår ned med den angivna styrkan i vald spelare lightningSmited=§7Blixten har slagit ner på dig lightningUse=§7En blixt kommer slå ner på {0} listAfkTag=§7[AFK]§f listAmount=§9Det är §c{0}§9 av maximalt §c{1}§9 spelare online. +listCommandDescription=Ger en lista med alla spelare som är online. +listCommandUsage=/<command> [grupp] +listCommandUsage1=/<command> [grupp] listGroupTag=§6{0}§r\: listHiddenTag=§7[GÖMD]§f +listRealName=({0}) loadWarpError=Kunde inte ladda warp {0} localFormat=[L]<{0}> {1} +loomCommandDescription=Öppnar upp en vävstol. loomCommandUsage=/<command> mailClear=§6För att markera dina meddelanden som lästa, skriv /mail clear. mailCleared=§7Meddelanden rensade\! +mailCommandUsage=/<command> [read|clear|clear [nummer]|send [till] [meddelande]|sendtemp [till] [förfallotid] [meddelande]|sendall [meddelande]] +mailCommandUsage1=/<command> read [sida] +mailCommandUsage2=/<command> clear [nummer] +mailCommandUsage3=/<command> send <spelare> <meddelande> +mailCommandUsage3Description=Skickar det angivna meddelandet till den valda spelaren +mailCommandUsage4=/<command> sendall <meddelande> +mailCommandUsage4Description=Skickar det angivna meddelandet till alla spelare +mailCommandUsage5=/<command> sendtemp <spelare> <förfallotid> <meddelande> +mailCommandUsage5Description=Skickar ett meddelande som löper ut efter den angivna tiden till den valda spelaren +mailCommandUsage6=/<command> sendtempall <förfallotid> <meddelande> +mailCommandUsage6Description=Skickar ett meddelande som löper ut efter den angivna tiden till alla spelare mailDelay=För många mails har skickats sen senaste minuten. Max\: {0} +mailFormatNew=§6[§r{0}§6] §6[§r{1}§6] §r{2} +mailFormatNewTimed=§6[§e⚠§6] §6[§r{0}§6] §6[§r{1}§6] §r{2} +mailFormatNewRead=§6[§r{0}§6] §6[§r{1}§6] §7§o{2} +mailFormatNewReadTimed=§6[§e⚠§6] §6[§r{0}§6] §6[§r{1}§6] §7§o{2} mailFormat=§6[§r{0}§6] §r{1} mailMessage={0} mailSent=§7Meddelandet skickad\! mailSentTo=§c{0}§6 has been sent the following mail\: +mailSentToExpire=§6Följande meddelande har skickats till §c{0}§6 som löper ut om §c{1}§6\: mailTooLong=§4Mail message too long. Try to keep it below 1000 characters. markMailAsRead=§6För att markera dina meddelanden som lästa, skriv /mail clear. matchingIPAddress=§6Följande spelare har tidigare loggat in från den IP adressen\: @@ -425,8 +666,10 @@ maxHomes=Du kan inte ha fler än {0} hem. maxMoney=Den här transaktionen är för hög för den här användaren mayNotJail=§cDu får inte sätta den personen i fängelse mayNotJailOffline=§4Du kan inte fängsla spelare som inte är online. +meCommandDescription=Beskriver en handling med avseende på spelaren. meCommandUsage=/<command> <beskrivning> meCommandUsage1=/<command> <beskrivning> +meCommandUsage1Description=Beskriver en handling meSender=mig meRecipient=mig minimumBalanceError=§4Minsta saldo en användare kan ha är {0}. @@ -444,34 +687,62 @@ moneySentTo=§a{0} har skickats till {1} month=månad months=månader moreCommandDescription=Fyller objektet stapel i hand till angivet belopp, eller till maximal storlek om ingen är angiven. -moreCommandUsage=/<command> [amount] -moreCommandUsage1=/<command> [amount] +moreCommandUsage=/<command> [mängd] +moreCommandUsage1=/<command> [mängd] moreThanZero=Mångden måste vara större än 0. motdCommandDescription=Visar budskapet om dagen. +motdCommandUsage=/<command> [kapitel] [sida] +msgCommandDescription=Skickar ett privat meddelande till den valda spelaren. +msgCommandUsage=/<command> <till> <meddelande> +msgCommandUsage1=/<command> <till> <meddelande> +msgCommandUsage1Description=Skickar det angivna meddelandet privat till den valda spelaren msgDisabled=§6Receiving messages §cdisabled§6. msgDisabledFor=§6Receiving messages §cdisabled §6for §c{0}§6. msgEnabled=§6Receiving messages §cenabled§6. msgEnabledFor=§6Receiving messages §cenabled §6for §c{0}§6. msgFormat=§6[§c{0}§6 -> §c{1}§6] §r{2} msgIgnore=§c{0} §4has messages disabled. -msgtoggleCommandUsage=/<command> [player] [on|off] +msgtoggleCommandUsage=/<command> [spelare] [on|off] msgtoggleCommandUsage1=/<command> [spelare] multipleCharges=§4Du kan inte lägga till mer än en laddning till denna fyrverkeripjäs. multiplePotionEffects=§4Du kan inte lägga till mer än en effekt till denna brygd. +muteCommandDescription=Tystar eller slutar tysta en spelare. +muteCommandUsage=/<command> <spelare> [tidslängd] [anledning] +muteCommandUsage1=/<command> <spelare> +muteCommandUsage1Description=Tystar eller slutar tysta den valda spelaren permanent +muteCommandUsage2=/<command> <spelare> <tidslängd> [anledning] +muteCommandUsage2Description=Tystar den valda spelaren under den angivna tiden med möjlighet att ange en anledning mutedPlayer=§6Spelare§c {0} §6tystad. mutedPlayerFor=§c {0} §6tystas ner för§c {1} §6. +mutedPlayerForReason=§c{0} §6är nu tystad i§c {1}§6. Anledning\: §c{2} +mutedPlayerReason=§c{0} §6är nu tystad. Anledning\: §c{1} mutedUserSpeaks={0} försökte att prata, men blev tystad. muteExempt=§cDu kan inte tysta den spelaren. muteExemptOffline=§4Du kan inte tysta spelare som är offline. muteNotify=§4{0} §6har tystat §4{1}. muteNotifyFor=§c{0} §6has muted player §c{1}§6 for§c {2}§6. +muteNotifyForReason=§c{0} §6har tystat §c{1}§6 i§c {2}§6. Anledning\: §c{3} +muteNotifyReason=§c{0} §6har tystat §c{1}§6. Anledning\: §c{2} nearCommandUsage1=/<command> +nearCommandUsage2=/<command> <radie> +nearCommandUsage3=/<command> <spelare> +nearCommandUsage4=/<command> <spelare> <radie> nearbyPlayers=Spelare i närheten\: {0} negativeBalanceError=Användaren är inte tillåten att ha en negativ balans. nickChanged=Smeknamn ändrat. +nickCommandDescription=Ändra ditt eller en vald spelares smeknamn. +nickCommandUsage=/<command> [spelare] <smeknamn|off> +nickCommandUsage1=/<command> <smeknamn> +nickCommandUsage1Description=Ändrar ditt smeknamn till den angivna texten +nickCommandUsage2=/<command> off +nickCommandUsage2Description=Tar bort ditt smeknamn +nickCommandUsage3=/<command> <spelare> <smeknamn> +nickCommandUsage3Description=Ändrar den valda spelarens smeknamn till den angivna texten +nickCommandUsage4=/<command> <spelare> off +nickCommandUsage4Description=Tar bort den angivna spelarens smeknamn nickDisplayName=§7Du måste aktivera change-displayname i Essentials-konfigurationen. nickInUse=§cDet namnet används redan. -nickNameBlacklist=§4Det där aliaset är inte tillåtet. +nickNameBlacklist=§4Det där smeknamnet är inte tillåtet. nickNamesAlpha=§cSmeknamn måste vara alfanumeriska. nickNamesOnlyColorChanges=§4Nicknames can only have their colors changed. nickNoMore=§7Du har inte ett smeknamn längre @@ -499,6 +770,7 @@ noMetaJson=JSON Metadata är inte kompakt med denna bukkit version. noMetaPerm=§4Du har inte behörighet att lägga till §c{0}§c meta till detta objektet. none=inga noNewMail=§7Du har inget nytt meddelande. +nonZeroPosNumber=§4Du måste ange en siffra som inte är lika med noll. noPendingRequest=Du har inga väntande förfrågan. noPerm=§cDu har inte §f{0}§c tillåtelse. noPermissionSkull=§4Du har inte tillåtelse att modifiera det Huvudet. @@ -517,7 +789,10 @@ nothingInHand=§cDu har inget i din hand. now=nu noWarpsDefined=Inga warpar är definerade nuke=Låt död regna över dem +nukeCommandDescription=Må döden träffa dem från ovan. nukeCommandUsage=/<command> [spelare] +nukeCommandUsage1=/<command> [spelare...] +nukeCommandUsage1Description=Släpper en atombomb över alla spelare, eller dem valda spelarna numberRequired=Det ska vara ett nummer där, dumbom. onlyDayNight=/time stöder bara day(dag) eller night(natt). onlyPlayers=§4Bara spelare kan använda §c{0}§4. @@ -525,31 +800,61 @@ onlyPlayerSkulls=§4Du kan bara ange ägaren för skallar av spelare (§c397\:3 onlySunStorm=/weather stöder bara sun(sol) eller storm(storm). openingDisposal=§6Opening disposal menu... orderBalances=Beställer balanser av {0} användare, vänligen vänta... +oversizedMute=§4Du kan inte tysta en spelare under så lång tid. oversizedTempban=§4Du kan inte banna en spelare just vid denna tidpunkt. +payCommandDescription=Betalar en annan spelare från ditt saldo. +payCommandUsage=/<command> <spelare> <summa> +payCommandUsage1=/<command> <spelare> <summa> +payCommandUsage1Description=Betalar den valda spelaren den angivna summan pengar payConfirmToggleOff=§6You will no longer be prompted to confirm payments. payConfirmToggleOn=§6You will now be prompted to confirm payments. payMustBePositive=§4Amount to pay must be positive. payOffline=§4Du kan inte betala spelare som inte är online. payToggleOff=§6You are no longer accepting payments. payToggleOn=§6You are now accepting payments. +payconfirmtoggleCommandDescription=Växlar mellan om du vill bli ombedd att bekräfta betalningar eller ej. payconfirmtoggleCommandUsage=/<command> +paytoggleCommandDescription=Växlar mellan om du tar emot betalningar eller ej. paytoggleCommandUsage=/<command> [spelare] paytoggleCommandUsage1=/<command> [spelare] +paytoggleCommandUsage1Description=Växlar mellan om du eller en vald spelare tar emot betalningar eller ej pendingTeleportCancelled=§cAvvaktande teleporteringsbegäran är avbruten. pingCommandDescription=Pong\! pingCommandUsage=/<command> playerBanIpAddress=§6Player§c {0} §6banned IP address§c {1} §6for\: §c{2}§6. +playerTempBanIpAddress=§c{0} §6bannlyste tillfälligt IP-adressen §c{1}§6 för §c{2}§6\: §c{3}§6. playerBanned=§6Spelare§c {0} §6bannade§c {1} §6för §c{2}§6. playerJailed=§7Spelaren {0} fängslad. +playerJailedFor=§c{0} §6är fängslad för§c {1}§6. +playerKicked=§c{0} §6sparkade ut§c {1}§6 med anledningen\:§c {2}§6. playerMuted=§7Du har blivit tystad playerMutedFor=§6Du har blivit tystad för§c {0}§6. +playerMutedForReason=§6Du har blivit tystad i§c {0}§6. Anledning\: §c{1} +playerMutedReason=§6Du har blivit tystad\! Anledning\: §c{0} playerNeverOnServer=§cSpelaren {0} har aldrig varit på den här servern. playerNotFound=§cSpelaren hittades inte. playerTempBanned=§6Player §c{0}§6 temporarily banned §c{1}§6 for §c{2}§6\: §c{3}§6. +playerUnbanIpAddress=§c{0} §6upphävde bannlysningen för IP-adressen\:§c {1} +playerUnbanned=§c{0} §6upphävde bannlysningen för§c {1} playerUnmuted=§7Du kan nu prata +playtimeCommandDescription=Visar en spelares speltid +playtimeCommandUsage=/<command> [spelare] +playtimeCommandUsage1=/<command> +playtimeCommandUsage1Description=Visar din speltid +playtimeCommandUsage2=/<command> <spelare> +playtimeCommandUsage2Description=Visar den valda spelarens speltid +playtime=§6Speltid\:§c {0} pong=Pong\! posPitch=§6Pitch\: {0} (Huvudvinkel) possibleWorlds=§6De möjliga världarna är nummer §c0§6 till §c{0}§6. +potionCommandDescription=Lägger till en anpassad brygdeffekt på en brygd. +potionCommandUsage=/<command> <clear|apply|effect\:<effekt> power\:<styrka> duration\:<tidslängd>> +potionCommandUsage1=/<command> clear +potionCommandUsage1Description=Tar bort alla effekter från brygden du håller i +potionCommandUsage2=/<command> apply +potionCommandUsage2Description=Ger dig alla effekter från brygden du håller i utan att brygden förbrukas +potionCommandUsage3=/<command> effect\:<effekt> power\:<styrka> duration\:<tidslängd> +potionCommandUsage3Description=Tillämpar den angivna brygd-metadatan till brygden du håller i posX=§6X\: {0} (+Öster <-> -Väst) posY=§6Y\: {0} (+Upp <-> -Ner) posYaw=§6Girning\: {0} (Rotation) @@ -565,7 +870,15 @@ powerToolRemove=§6Kommand §c{0}§6 har tagits bort från §c{1}§6. powerToolRemoveAll=§6All commands removed from §c{0}§6. powerToolsDisabled=Alla dina powertools har blivit inaktiverade. powerToolsEnabled=Alla dina powertools har blivit aktiverade. +powertoolCommandUsage1=/<command> l\: +powertoolCommandUsage1Description=Ger en lista med alla kraftdon på föremålet du håller i +powertoolCommandUsage2=/<command> d\: +powertoolCommandUsage2Description=Tar bort alla kraftdon på föremålet du håller i +powertoolCommandUsage3=/<command> r\:<kommando> +powertoolCommandUsage4=/<command> <kommando> +powertoolCommandUsage5=/<command> a\:<kommando> powertooltoggleCommandUsage=/<command> +pweatherCommandDescription=Ändrar vädret för en spelare pTimeCurrent=§e{0}''*s§f klockan är {1}. pTimeCurrentFixed=§e{0}''s§f tiden är fixerad till {1}. pTimeNormal=§e{0}''s§f tiden är normal och matchar servern. @@ -582,13 +895,20 @@ pWeatherPlayers=§6Dessa spelare har sitt eget väder\:§r pWeatherReset=§6Personligt väder har återställts för\: §c{0} pWeatherSet=§6Personligt väder är satt till §c{0}§6 för\: §c{1}. questionFormat=§7[Fråga]§f {0} -rCommandUsage=/<command> <message> -rCommandUsage1=/<command> <message> +rCommandDescription=Svara snabbt till den senaste spelaren som skickat ett meddelande till dig. +rCommandUsage=/<command> <meddelande> +rCommandUsage1=/<command> <meddelande> +radiusTooBig=§4Radien är för stor\! Den största möjliga radien är§c {0}§4. readNextPage=Skriv /{0} {1} för att läsa nästa sida realName=§f{0}§r§6 is §f{1} +realnameCommandUsage=/<command> <smeknamn> +realnameCommandUsage1=/<command> <smeknamn> +realnameCommandUsage1Description=Visar användarnamnet på en användare baserat på ett angivet smeknamn recentlyForeverAlone=§4{0} recently went offline. recipe=§6Recipe for §c{0}§6 (§c{1}§6 of §c{2}§6) recipeBadIndex=Det finns inget recept med det numret +recipeCommandDescription=Visar hur du skapar föremål. +recipeCommandUsage1Description=Visar hur man skapar det angivna föremålet recipeFurnace=§6Smelt\: §c{0}§6. recipeGrid=§c{0}X §6| §{1}X §6| §{2}X recipeGridItem=§c{0}X §6is §c{1} @@ -596,15 +916,24 @@ recipeNone=Inga recept existerar för {0} recipeNothing=ingenting recipeShapeless=§6Kombinera §c{0} recipeWhere=§6Var\: {0} +removeCommandDescription=Tar bort entiteter i din värld. removed=§7Tog bort {0} enheter. repair=§6You have successfully repaired your\: §c{0}§6. repairAlreadyFixed=§7Den här saken behöver inte repareras. +repairCommandDescription=Återställer hållbarheten på ett eller alla föremål. +repairCommandUsage=/<command> [hand|all] repairCommandUsage1=/<command> +repairCommandUsage1Description=Reparerar föremålet du håller i +repairCommandUsage2=/<command> all +repairCommandUsage2Description=Reparerar alla föremål i ditt förråd repairEnchanted=§7Du har inte behörighet att reparera förtrollade saker. repairInvalidType=§cDen här saken kan inte bli reparerad. repairNone=§4Det finns inga saker som behöver repareras. +replyFromDiscord=**Svar från {0}\:** `{1}` requestAccepted=§7Teleporterings-förfrågan accepterad. +requestAcceptedAuto=§6Accepterade automatiskt en teleporterings-förfrågan från {0}. requestAcceptedFrom=§7{0} accepterade din teleportations-förfrågan. +requestAcceptedFromAuto=§c{0} §6accepterade din teleporterings-förfrågan automatiskt. requestDenied=§7Teleportations-förfrågan nekad. requestDeniedFrom=§7{0} nekade din teleportations-förfrågan. requestSent=§7Förfrågan skickad till {0}§7. @@ -612,29 +941,91 @@ requestSentAlready=§4You have already sent {0}§4 a teleport request. requestTimedOut=§cTeleportations-förfrågan har gått ut resetBal=§6Balance has been reset to §c{0} §6for all online players. resetBalAll=§6Balance has been reset to §c{0} §6for all players. +rest=§6Du känner dig utvilad. +restCommandDescription=Gör dig eller en vald spelare utvilad. restCommandUsage=/<command> [spelare] restCommandUsage1=/<command> [spelare] +restOther=§6Får§c {0}§6 att känna sig utvilad. returnPlayerToJailError=§4Error occurred when trying to return player§c {0} §4to jail\: §c{1}§4\! -rtoggleCommandUsage=/<command> [player] [on|off] +rtoggleCommandUsage=/<command> [spelare] [on|off] +rulesCommandDescription=Visar serverreglerna. +rulesCommandUsage=/<command> [kapitel] [sida] runningPlayerMatch=§6Kör sökning efter spelare som matchar ''§c{0}§6'' (detta kan ta ett tag) second=sekund seconds=sekunder seenAccounts=§6Player has also been known as\:§c {0} +seenCommandUsage1Description=Visar utloggnings-, bannlysnings-, tystnings- och UUID-information om den valda spelaren seenOffline=§6Player§c {0} §6has been §4offline§6 since §c{1}§6. seenOnline=§6Player§c {0} §6has been §aonline§6 since §c{1}§6. sellBulkPermission=§6You do not have permission to bulk sell. +sellCommandDescription=Säljer föremålet du håller i. +sellCommandUsage2=/<command> hand [mängd] +sellCommandUsage3=/<command> all +sellCommandUsage4=/<command> blocks [mängd] sellHandPermission=§6You do not have permission to hand sell. serverFull=Servern är full +serverReloading=Det är mycket troligt att du läser in servern på nytt just nu. Om så är fallet måste vi bara fråga varför du hatar dig själv? Förvänta dig inte någon hjälp från oss som utvecklat EssentialsX när du använder /reload. serverTotal=Totalt på servern\: {0} +serverUnsupported=Du kör en serverversion som inte stöds\! setBal=§aDin kontobalans sattes till {0}. setBalOthers=§aDu satte {0}§a''s kontobalans till {1}. setSpawner=§6Changed spawner type to§c {0}§6. -setjailCommandUsage=/<command> <jailname> -setjailCommandUsage1=/<command> <jailname> -setwarpCommandUsage=/<command> <warp> -setwarpCommandUsage1=/<command> <warp> +sethomeCommandDescription=Ställer in din nuvarande plats som ditt hem. +sethomeCommandUsage1=/<command> <namn> +sethomeCommandUsage1Description=Ställer in din nuvarande plats som ditt hem med det angivna namnet +sethomeCommandUsage2=/<command> <spelare>\:<namn> +sethomeCommandUsage2Description=Ställer in din nuvarande plats som den valda spelarens hem med det angivna namnet +setjailCommandDescription=Skapar ett fängelse med namnet [jailname] på den angivna platsen. +setjailCommandUsage=/<command> <fängelsenamn> +setjailCommandUsage1=/<command> <fängelsenamn> +setjailCommandUsage1Description=Ställer in fängelset med det angivna namnet till din nuvarande plats +settprCommandDescription=Ställer in plats och parametrar för slumpmässig teleportering. +settprCommandUsage=/<command> [center|minrange|maxrange] [värde] +settprCommandUsage1=/<command> center +settprCommandUsage1Description=Ställer in den nuvarande platsen som centrum för slumpmässig teleportering. +settprCommandUsage2=/<command> minrange <radie> +settprCommandUsage2Description=Ställer in den inre radien för slumpmässig teleportering till det angivna värdet +settprCommandUsage3=/<command> maxrange <radie> +settprCommandUsage3Description=Ställer in den yttre radien för slumpmässig teleportering till det angivna värdet +settpr=§6Ställde in den nuvarande platsen som centrum för slumpmässig teleportering. +settprValue=§6Ställde in §c{0}§6 för slumpmässig teleportering till §c{1}§6. +setwarpCommandDescription=Skapar en ny respunkt. +setwarpCommandUsage=/<command> <respunkt> +setwarpCommandUsage1=/<command> <respunkt> +setwarpCommandUsage1Description=Ställer in respunkten med det angivna namnet till din nuvarande plats +setworthCommandDescription=Ange ett föremåls försäljningsvärde +setworthCommandUsage1=/<command> <pris> +setworthCommandUsage1Description=Ställer in värdet på föremålet du håller i till det angivna priset +setworthCommandUsage2Description=Ställer in värdet på det valda föremålet till det angivna priset sheepMalformedColor=Felformulerad färg. +shoutDisabled=§6Rop-läget är nu §cavslaget§6 för dig. +shoutDisabledFor=§6Rop-läget är nu §cavslaget §6för §c{0}§6. +shoutEnabled=§6Rop-läget är nu §cpåslaget§6 för dig. +shoutEnabledFor=§6Rop-läget är nu §cpåslaget §6för §c{0}§6. shoutFormat=§7[Hojtning]§f {0} +editsignCommandClear=§6Skylt rensad. +editsignCommandClearLine=§6Rensade rad§c {0}§6. +showkitCommandDescription=Visar innehållet i en uppsättning. +showkitCommandUsage=/<command> <uppsättningsnamn> +showkitCommandUsage1=/<command> <uppsättningsnamn> +showkitCommandUsage1Description=Visar föremålen i den angivna uppsättningen +editsignCommandDescription=Redigerar en skylt ute i världen. +editsignCommandLimit=§4Den texten är för lång för att få plats på vald skylt. +editsignCommandNoLine=§4Du måste ange ett radnummer mellan §c1 och 4§4. +editsignCommandSetSuccess=§6Ställer in rad§c {0}§6 till följande text "§c{1}§6". +editsignCommandTarget=§4Du måste titta på en skylt för att ändra dess text. +editsignCopy=§6Skylten är kopierad\! Klistra in den med §c/{0} paste§6. +editsignCopyLine=§6Kopierade rad §c{0} §6från skylten\! Klistra in den med §c/{1} paste {0}§6. +editsignPaste=§6Skylt inklistrad\! +editsignPasteLine=§6Klistrade in rad §c{0} §6på skylten\! +editsignCommandUsage=/<command> <set/clear/copy/paste> [radnummer] [text] +editsignCommandUsage1=/<command> set <radnummer> <text> +editsignCommandUsage2=/<command> clear <radnummer> +editsignCommandUsage2Description=Rensar den angivna raden på den valda skylten +editsignCommandUsage3=/<command> copy [radnummer] +editsignCommandUsage3Description=Kopierar all text på den valda skylten (eller den angivna raden) +editsignCommandUsage4=/<command> paste [radnummer] +editsignCommandUsage4Description=Klistrar in ditt urklipp på hela skylten (eller på den angivna raden) signFormatFail=§4[{0}] signFormatSuccess=§1[{0}] signFormatTemplate=[{0}] @@ -644,21 +1035,38 @@ southEast=SE south=S southWest=SW skullChanged=§6Skull changed to §c{0}§6. +skullCommandUsage=/<command> [innehavare] skullCommandUsage1=/<command> +skullCommandUsage1Description=Hämtar din skalle +skullCommandUsage2=/<command> <spelare> +skullCommandUsage2Description=Hämtar en vald spelares skalle slimeMalformedSize=Felformulerad storlek. +smithingtableCommandDescription=Öppnar upp en smedsbänk. smithingtableCommandUsage=/<command> socialSpy=§6SocialSpy for §c{0}§6\: §c{1} +socialSpyMsgFormat=§6[§c{0}§7 -> §c{1}§6] §7{2} socialSpyMutedPrefix=§f[§6SS§f] §7(muted) §r -socialspyCommandUsage=/<command> [player] [on|off] +socialspyCommandUsage=/<command> [spelare] [on|off] socialspyCommandUsage1=/<command> [spelare] socialSpyPrefix=§f[§6SS§f] §r soloMob=Det här monstret gillar att vara ensam spawned=spawnade +spawnerCommandDescription=Ändra vilken typ av varelse som skapas från en monsterskapare. +spawnerCommandUsage=/<command> <varelse> [fördröjning] +spawnerCommandUsage1=/<command> <varelse> [fördröjning] +spawnerCommandUsage1Description=Ändrar vilken typ av varelse som skapas från monsterskaparen du tittar på (samt, om angivet, ändrar fördröjningen) +spawnmobCommandDescription=Skapa en varelse. spawnSet=§7Spawnpunkten inställd för gruppen {0}. spectator=spectator +speedCommandDescription=Ändrar hur snabbt du kan röra dig. +speedCommandUsage1=/<command> <hastighet> +speedCommandUsage1Description=Ställer in din flyg- eller gånghastighet till den angivna hastigheten +stonecutterCommandDescription=Öppnar upp en stenskärare. stonecutterCommandUsage=/<command> +sudoCommandUsage1Description=Får den valda spelaren att köra det angivna kommandot sudoExempt=Du kan inte göra en sudo på den här användaren sudoRun=§6Forcing§c {0} §6to run\:§r /{1} +suicideCommandDescription=Förintetgör dig. suicideCommandUsage=/<command> suicideMessage=§7Adjö grymma värld... suicideSuccess=§7{0} tog sitt eget liv @@ -678,6 +1086,7 @@ teleportHome=§6Teleporting to §c{0}§6. teleporting=§7Teleporterar... teleportInvalidLocation=Koordinater kan inte vara över 30000000 teleportNewPlayerError=Messlyckades med att teleportera ny spelare +teleportNoAcceptPermission=§c{0} §4har inte behörighet att acceptera teleporterings-förfrågningar. teleportRequest=§c{0}§c har begärt att få teleportera sig till dig. teleportRequestAllCancelled=§6All outstanding teleport requests cancelled. teleportRequestTimeoutInfo=§7Den här begäran kommer att gå ut efter {0} sekunder. @@ -687,7 +1096,15 @@ teleportOffline=§6Spelaren§c{0}§6 är just nu offline. Du kan teleportera til tempbanExempt=§7Du kan inte temporärt banna den spelaren tempbanExemptOffline=§4Du kan inte temporärt banna spelare som inte är online. tempbanJoin=You are banned from this server for {0}. Reason\: {1} +tempBanned=§cDu har blivit tillfälligt bannlyst för§r {0}\:\n§r{2} +tempbanCommandDescription=Bannlyser en spelare tillfälligt. +tempbanCommandUsage1=/<command> <spelare> <tidslängd> [anledning] +tempbanCommandUsage1Description=Bannlyser den valda spelaren på förutbestämd tid med möjlighet att ange en anledning +tempbanipCommandDescription=Bannlyser en IP-adress tillfälligt. +tempbanipCommandUsage1Description=Bannlyser den angivna IP-adressen på förutbestämd tid med möjlighet att ange en anledning thunder=Du {0} åska i din värld +thunderCommandDescription=Aktivera eller inaktivera åska. +thunderCommandUsage1=/<command> <true|false> [tidslängd] thunderDuration=Du {0} i din värld i {1} sekunder. timeBeforeHeal=Tid före näste läkning\: {0} timeBeforeTeleport=Tid före nästa teleportering\: {0} @@ -697,38 +1114,78 @@ timeSetPermission=§cDu har inte tillstånd att ställa in tiden. timeSetWorldPermission=§4You are not authorized to set the time in world ''{0}''. timeWorldCurrent=Den nuvarande tiden i {0} är §3{1} timeWorldSet=Tiden är nu {0} i\: §c{1} -toggleshoutCommandUsage=/<command> [player] [on|off] +togglejailCommandDescription=Fängslar eller friar en spelare, teleporterar dem till det angivna fängelset. +togglejailCommandUsage=/<command> <spelare> <fängelsenamn> [tidslängd] +toggleshoutCommandDescription=Sätter på eller stänger av rop-läget för dig +toggleshoutCommandUsage=/<command> [spelare] [on|off] toggleshoutCommandUsage1=/<command> [spelare] +toggleshoutCommandUsage1Description=Sätter på eller stänger av rop-läget för dig eller en annan spelare topCommandUsage=/<command> totalSellableAll=§aDet totala värdet av alla säljbara objekt är §c {1} §a. totalSellableBlocks=§aDet totala värdet av alla säljbara block är §c {1} §a. totalWorthAll=§aSålde alla objekt för ett totalt värde av §c{1}§a. totalWorthBlocks=§aSålde alla blocks för ett totalt värde av §c{1}§a. tpCommandDescription=Teleportera till en spelare. +tpCommandUsage1=/<command> <spelare> +tpCommandUsage1Description=Teleporterar dig till den valda spelaren +tpCommandUsage2Description=Teleporterar den först angivna spelaren till den andra tpaCommandDescription=Begär att teleportera till den angivna spelaren. +tpaCommandUsage=/<command> <spelare> +tpaCommandUsage1=/<command> <spelare> +tpaCommandUsage1Description=Ber om att få teleportera dig till den valda spelaren tpaallCommandDescription=Begär att alla spelare online ska teleportera sig till dig. +tpaallCommandUsage=/<command> <spelare> +tpaallCommandUsage1=/<command> <spelare> +tpaallCommandUsage1Description=Ber alla spelare att teleportera sig till dig tpacancelCommandDescription=Avbryt alla utestående teleporteringsförfrågningar. Ange [player] för att avbryta förfrågningar med dem. tpacancelCommandUsage=/<command> [spelare] tpacancelCommandUsage1=/<command> +tpacancelCommandUsage2=/<command> <spelare> tpacceptCommandUsage1=/<command> +tpacceptCommandUsage2=/<command> <spelare> +tpacceptCommandUsage3=/<command> * tpahereCommandDescription=Begär att den angivna spelaren teleporterar till dig. +tpahereCommandUsage=/<command> <spelare> +tpahereCommandUsage1=/<command> <spelare> +tpahereCommandUsage1Description=Ber den valda spelaren att teleportera sig till dig. tpallCommandDescription=Teleportera alla onlinespelare till en annan spelare. tpallCommandUsage=/<command> [spelare] tpallCommandUsage1=/<command> [spelare] +tpallCommandUsage1Description=Teleporterar alla spelare till dig eller en annan vald spelare +tpautoCommandDescription=Accepterar automatiskt teleporterings-förfrågningar. tpautoCommandUsage=/<command> [spelare] tpautoCommandUsage1=/<command> [spelare] tpdenyCommandUsage=/<command> tpdenyCommandUsage1=/<command> +tpdenyCommandUsage2=/<command> <spelare> +tpdenyCommandUsage3=/<command> * tphereCommandDescription=Teleportera en spelare till dig. +tphereCommandUsage=/<command> <spelare> +tphereCommandUsage1=/<command> <spelare> +tphereCommandUsage1Description=Teleporterar den valda spelaren till dig +tpoCommandUsage1=/<command> <spelare> tpofflineCommandDescription=Teleportera till spelarens senast kända utloggningsplats +tpofflineCommandUsage=/<command> <spelare> +tpofflineCommandUsage1=/<command> <spelare> +tpohereCommandUsage=/<command> <spelare> +tpohereCommandUsage1=/<command> <spelare> +tpposCommandDescription=Teleportera till koordinater. +tprCommandDescription=Teleportera till en slumpmässig plats. tprCommandUsage=/<command> tprCommandUsage1=/<command> +tprCommandUsage1Description=Teleporterar dig till en slumpmässig plats tprSuccess=§6Teleporterar till en slumpmässig plats... tps=Nuvarande TPS \= {0} -tptoggleCommandUsage=/<command> [player] [on|off] +tptoggleCommandDescription=Stoppar alla former av teleportering. +tptoggleCommandUsage=/<command> [spelare] [on|off] tptoggleCommandUsage1=/<command> [spelare] +tptoggleCommandUsageDescription=Växlar mellan om du eller en vald spelare får använda teleportering eller ej tradeSignEmpty=Köpskylten har inget tillgängligt för dig. tradeSignEmptyOwner=Det finns inget att från den här köpskylten. +treeCommandDescription=Ett träd växer upp där du tittar. +treeCommandUsage=/<command> <tree|birch|redwood|redmushroom|brownmushroom|jungle|junglebush|swamp> +treeCommandUsage1=/<command> <tree|birch|redwood|redmushroom|brownmushroom|jungle|junglebush|swamp> +treeCommandUsage1Description=Ett träd av angiven sort växer upp där du tittar treeFailure=§cTrädgenereringn misslyckades. Prova igen på gräs eller jord. treeSpawned=§7Träd genererat. true=sant @@ -737,12 +1194,26 @@ typeTpaccept=§7För att teleportera, skriv §c/tpaccept§7. typeTpdeny=§7För att neka denna förfrågan, skriv §c/tpdeny§7. typeWorldName=§7Du kan också skriva namnet av en specifik värld. unableToSpawnMob=Kunde inte spawna moben. +unbanCommandDescription=Upphäver bannlysningen av en vald spelare. +unbanCommandUsage=/<command> <spelare> +unbanCommandUsage1=/<command> <spelare> +unbanCommandUsage1Description=Upphäver bannlysningen av en vald spelare +unbanipCommandDescription=Upphäver bannlysningen av den angivna IP-adressen. unbanipCommandUsage=/<command> <adress> unbanipCommandUsage1=/<command> <adress> +unbanipCommandUsage1Description=Upphäver bannlysningen av den angivna IP-adressen unignorePlayer=Du ignorerar inte spelaren {0} längre. unknownItemId=Okänt objekt-ID\: {0} unknownItemInList=Okänt objekt {0} i listan {1}. unknownItemName=Okänt objektnamn\: {0} +unlimitedCommandDescription=Möjliggör obegränsad placering av föremål. +unlimitedCommandUsage=/<command> <list|item|clear> [spelare] +unlimitedCommandUsage1=/<command> list [spelare] +unlimitedCommandUsage1Description=Visar en lista med oändliga föremål för dig eller en annan spelare +unlimitedCommandUsage2=/<command> <föremål> [spelare] +unlimitedCommandUsage2Description=Gör ett föremål oändligt, eller ett oändligt föremål begränsat igen, för dig eller en annan spelare +unlimitedCommandUsage3=/<command> clear [spelare] +unlimitedCommandUsage3Description=Tar bort alla obegränsade föremål från dig eller en vald spelare unlimitedItemPermission=§4No permission for unlimited item §c{0}§4. unlimitedItems=Obegränsade objekt\: unmutedPlayer=Spelaren {0} är inte bannlyst längre. @@ -755,14 +1226,19 @@ userAFKWithMessage=§7{0} §5är för närvarande AFK och kanske inte svarar. {1 userdataMoveBackError=Kunde inte flytta userdata/{0}.tmp till userdata/{1} userdataMoveError=Kunde inte flytta userdata/{0} till userdata/{1}.tmp userDoesNotExist=Användaren {0} existerar inte. +uuidDoesNotExist=§4Användaren med UUID§c {0} §4finns inte. userIsAway={0} är nu AFK userIsAwayWithMessage={0} är nu AFK userIsNotAway={0} är inte längre AFK +userIsAwaySelf=§7Du är nu markerad som borta. +userIsAwaySelfWithMessage=§7Du är nu markerad som borta. +userIsNotAwaySelf=§7Du är inte längre markerad som borta. userJailed=§7Du har blivit fängslad userUnknown=§4Varning\: Användaren ''§c{0}§4'' har aldrig varit inne på denna server tidigare. usingTempFolderForTesting=Använder temporär mapp mapp för testning\: vanish=§6Försvinna för {0} §6\: {1} -vanishCommandUsage=/<command> [player] [on|off] +vanishCommandDescription=Döljer dig från andra spelare. +vanishCommandUsage=/<command> [spelare] [on|off] vanishCommandUsage1=/<command> [spelare] vanished=§aDu är nu osynlig. versionCheckDisabled=§6Uppdateringskontroll är inaktiverad i konfigurationen. @@ -772,13 +1248,31 @@ versionDevDiverged=§6Du kör en experimental version av EssentialsX som är §c versionDevDivergedBranch=Funktionsunderavdelning\: §c{0}§6. versionDevDivergedLatest=§6Du kör en aktuell experimental version av EssentialsX\! versionDevLatest=§6Du kör den senaste utvecklarversionen av EssentialsX\! +versionFetching=§6Hämtar information om den nuvarande versionen... +versionOutputFine=§6{0} version\: §a{1} +versionOutputWarn=§6{0} version\: §c{1} +versionOutputUnsupported=§d{0} §6version\: §d{1} versionMismatch=Versionerna matchar inte\! Vänligen uppgradera {0} till samma version. versionMismatchAll=Versionerna matchar inte\! Vänligen uppgradera alla Essentials jars till samma version. +versionReleaseLatest=§6Du kör den senaste versionen av EssentialsX\! +versionReleaseNew=§4Det finns en ny version av EssentialsX tillgänglig för nedladdning\: §c{0}§4. +versionReleaseNewLink=§4Ladda ned den här\:§c {0} voiceSilenced=§7Din röst har tystats +voiceSilencedTime=§6Din röst har tystats i {0}\! +voiceSilencedReason=§6Din röst har tystats\! Anledning\: §c{0} +voiceSilencedReasonTime=§6Din röst har tystats i {0}\! Anledning\: §c{1} walking=går +warpCommandDescription=Visar en lista med alla respunkter eller tar dig till den angivna respunkten. +warpCommandUsage1=/<command> [sida] +warpCommandUsage1Description=Visar en lista med alla respunkter på den första, eller angivna, sidan +warpCommandUsage2=/<command> <respunkt> [spelare] +warpCommandUsage2Description=Teleporterar dig eller en vald spelare till den angivna respunkten warpDeleteError=Problem med att ta bort warp-filen. -warpinfoCommandUsage=/<command> <warp> -warpinfoCommandUsage1=/<command> <warp> +warpInfo=§6Information om respunkten§c {0}§6\: +warpinfoCommandDescription=Hittar information om platsen för en angiven respunkt. +warpinfoCommandUsage=/<command> <respunkt> +warpinfoCommandUsage1=/<command> <respunkt> +warpinfoCommandUsage1Description=Ger dig information om en given respunkt warpingTo=§7Warpar till {0}. warpList={0} warpListPermission=§cDu har inte tillstånd att lista warparna. @@ -786,17 +1280,28 @@ warpNotExist=Den warpen finns inte. warpOverwrite=§cDu kan inte skriva över den warpen. warps=Warpar\: {0} warpsCount=§6There are§c {0} §6warps. Showing page §c{1} §6of §c{2}§6. +weatherCommandDescription=Ställer in vädret. +weatherCommandUsage=/<command> <storm/sun> [tidslängd] +weatherCommandUsage1=/<command> <storm|sun> [tidslängd] +weatherCommandUsage1Description=Ställer in vilken typ av väder det ska vara med möjlighet att ange hur länge det ska kvarstå warpSet=§7Warpen {0} inställd. warpUsePermission=§cDU har inte tillstånd att använda den warpen. weatherInvalidWorld=Värld med namn {0} hittades inte\! +weatherSignStorm=§6Väder\: §cregnigt§6. +weatherSignSun=§6Väder\: §csoligt§6. weatherStorm=§7Du har ställt in vädret till storm i {0} weatherSun=§7Du har ställt in vädret till sol i {0} west=W whoisAFK=§6 - AFK\:§f {0} whoisAFKSince=§6 - AFK\:§r {0} (Since {1}) whoisBanned=§6 - Bannad\:§f {0} +whoisCommandDescription=Tar reda på användarnamnet bakom ett smeknamn. +whoisCommandUsage=/<command> <smeknamn> +whoisCommandUsage1=/<command> <spelare> +whoisCommandUsage1Description=Skriver ut grundläggande information om den valda spelaren whoisExp=§6 - Erfarenhet\:§f {0} (Level {1}) whoisFly=§6 - Flygläge\:§f {0} ({1}) +whoisSpeed=§6 - Fart\:§r {0} whoisGamemode=§6 - Spelläge\:§f {0} whoisGeoLocation=§6 - Lokalisering\:§f {0} whoisGod=§6 - Gudsläge\:§f {0} @@ -807,18 +1312,29 @@ whoisJail=§6 - Fängelse\:§f {0} whoisLocation=§6 - Lokalisering\:§f ({0}, {1}, {2}, {3}) whoisMoney=§6 - Pengar\:§f {0} whoisMuted=§6 - Tystad\:§f {0} +whoisMutedReason=§6 - Tystad\:§r {0} §6Anledning\: §c{1} whoisNick=§6 - Smeknamn\:§f {0} whoisOp=§6 - OP\:§f {0} whoisPlaytime=§6 - Playtime\:§r {0} whoisTempBanned=§6 - Ban expires\:§r {0} whoisTop=§6 \=\=\=\=\=\= WhoIs\:§c {0} §6\=\=\=\=\=\= whoisUuid=§6 - UUID\:§r {0} +workbenchCommandDescription=Öppnar upp en arbetsbänk. workbenchCommandUsage=/<command> +worldCommandDescription=Växlar mellan världar. +worldCommandUsage=/<command> [värld] worldCommandUsage1=/<command> +worldCommandUsage1Description=Teleporterar dig till motsvarande plats i nether eller övervärlden +worldCommandUsage2=/<command> <värld> +worldCommandUsage2Description=Teleporterar dig till din plats i den angivna världen worth=§7Stapeln med {0} ({2} objekt) är värd §c{1}§7 ({3} styck) +worthCommandUsage2=/<command> hand [mängd] +worthCommandUsage3=/<command> all +worthCommandUsage4=/<command> blocks [mängd] worthMeta=§7Stapeln med {0} av typ {1} ({3} objekt) är värd §c{2}§7 ({4} styck) worthSet=Värdet inställt year=år years=år youAreHealed=§7Du har blivit läkt. youHaveNewMail=§cDu har {0} meddelanden\!§f Skriv §7/mail read§f för att läsa dina meddelanden. +xmppNotConfigured=XMPP är inte korrekt konfigurerat. Om du inte vet vad XMPP är så rekommenderar vi att du tar bort insticksprogrammet EssentialsXXMPP från din server. diff --git a/Essentials/src/main/resources/messages_th.properties b/Essentials/src/main/resources/messages_th.properties index b3d73f4e474..646fd927f3b 100644 --- a/Essentials/src/main/resources/messages_th.properties +++ b/Essentials/src/main/resources/messages_th.properties @@ -6,6 +6,8 @@ action=§5* {0} §5{1} addedToAccount=§a{0} ถูกเพิ่มเข้าบัญชีของคุณ addedToOthersAccount=§a{0} ถูกเพิ่มเข้าบัญชีของ {1} จำนวนเงินในบัญชีล่าสุด\: {2} adventure=โหมดผจญภัย +afkCommandUsage1=/<command> [message] +afkCommandUsage2=/<command> <player> [message] alertBroke=ทำลายบล็อค\: alertFormat=§3 [{0}] §r {1} §6 {2} โดย\: {3} alertPlaced=วางบล็อค\: @@ -17,35 +19,57 @@ antiBuildDrop=§4คุณยังไม่ได้รับอนุญาต antiBuildInteract=§4คุณยังไม่ได้รับอนุญาตให้ใช้งาน§c {0}§4. antiBuildPlace=§4คุณยังไม่ได้รับอนุญาตให้วาง§c {0} §4ที่นี้. antiBuildUse=§4คุณยังไม่ได้รับอนุญาตให้ใช้งาน§c {0}§4 +antiochCommandUsage=/<command> [message] +anvilCommandUsage=/<command> autoAfkKickReason=คุณถูกเตะเนื่องจากอยู่นิ่งเกิน {0} นาที autoTeleportDisabled=คุณจะไม่ตอบรับคำขอเทเลพอร์ตอัตโนมัติอีกต่อไป autoTeleportDisabledFor=§c{0}§6 จะไม่ตอบรับคำขอเทเลพอร์ตอัตโนมัติอีกต่อไป autoTeleportEnabled=§6คุณจะตอบรับคำขอเทเลพอร์ตอัตโนมัติ autoTeleportEnabledFor=§c{0}§6 จะตอบรับคำขอเทเลพอร์ตอัตโนมัติ backAfterDeath=§6พิมพ์ /back เพื่อกลับไปยังจุดที่คุณตายล่าสุด +backCommandUsage=/<command> [player] +backCommandUsage1=/<command> +backupCommandUsage=/<command> backupDisabled=§aHEXCore\: §7§oไม่มีการกำหนดค่าสคริปต์ของระบบสำรองข้อมูล backupFinished=§6สำรองข้อมูลเสร็จสิ้น backupStarted=§6เริ่มสำรองข้อมูล backUsageMsg=§6คุณได้กลับมายังตำแหน่งล่าสุด balance=§aBalance\:§c {0}\n +balanceCommandUsage=/<command> [player] +balanceCommandUsage1=/<command> balanceOther=§aยอดเงินในบัญชีของ {0}§aคือ §c {1} balanceTop=§7อันดับคนที่รวยที่สุดภายในเซิฟเวอร์§f\:\n§a(§c{0}§a) +balanceTopLine={0}. {1}, {2} +balancetopCommandUsage=/<command> [หน้า] +balancetopCommandUsage1=/<command> [หน้า] +banCommandDescription=แบนผู้เล่น banExempt=§4คุณไม่สามารถแบนผู้เล่นคนนี้ได้ banExemptOffline=§4คุณไม่สามารถแบนผู้เล่นออฟไลน์ได้ banFormat=§cผู้เล่นที่ถูกแบน\:\n§r{0} banIpJoin=ที่อยู่ IP ของคุณถูกแบนจากเซิร์ฟเวอร์นี้ เพราะว่า\:{0} banJoin=คุณถูกแบนจากเซิร์ฟเวอร์นี้ เพราะว่า\: {0} +banipCommandDescription=แบนหมายเลขไอพี bed=§obed§r bedMissing=§4เตียงของคุณยังไม่ได้ถูกบันทึก, หายไปหรือถูกปิดกั้น bedNull=§mเตียงนอน§r bedSet=§6ตำแหน่งเตียงถูกบันทึก\! +beezookaCommandUsage=/<command> bigTreeFailure=§4การสร้างต้นไม้ขนาดใหญ่ล้มเหลว ลองอีกครั้งบนหญ้าหรือดิน bigTreeSuccess=§aHEXCore\: §7§oต้นไม้ขนาดใหญ่ถูกสร้าง blockList=§aHEXCore §7§oส่งคำสั่งนี้ไปยังปลั้กอิน§a\: bookAuthorSet=§6ผู้เขียนหนังสือเล่มนี้ถูกตั้งเป็น {0} +bookCommandUsage1=/<command> +bookCommandUsage3=/<command> หัวข้อ <title> bookLocked=§7หนังสือเล่มนี้ถูกล็อค bookTitleSet=§7ชื่อเรื่องของหนังสือเล่มนี้ถูกตั้งเป็น §a{0} +breakCommandUsage=/<command> broadcast=§r§6[§4ประกาศ§6]§a {0} +broadcastCommandUsage=/<command> <msg> +broadcastworldCommandDescription=ประกาศข้อความไปยังโลก +broadcastworldCommandUsage=/<command> <world> <msg> +broadcastworldCommandUsage1=/<command> <world> <msg> +burnCommandUsage=/<command> <player> <seconds> +burnCommandUsage1=/<command> <player> <seconds> burnMsg=§7คุณทำให้§a {0} §7ถูกไฟเผาเป็นเวลา§c {1} §7วินาที cannotStackMob=§7คุณไม่มีสิทธิ์ในการรวมม็อบหลายๆ กอง canTalkAgain=§7คุณสามารถพูดได้อีกครั้ง @@ -53,38 +77,70 @@ cantFindGeoIpDB=§7ไม่พบฐานข้อมูลที่ใช้ cantGamemode=§4คุณไม่ได้รับอนุญาตให้เปลี่ยนเป็นโหมดเกม {0} cantReadGeoIpDB=§7ไม่สามารถอ่านฐานข้อมูลที่ใช้ระบุตำแหน่งที่ตั้งของไอพี\! cantSpawnItem=§7คุณไม่ได้รับอนุญาตให้เสกไอเทม§a {0}§c +cartographytableCommandUsage=/<command> chatTypeLocal=[L] chatTypeSpy=[Spy] cleaned=§7ข้อมูลของผู้เล่นได้ถูกกำจัดออกหมดแล้ว cleaning=§7กำลังกำจัดข้อมูลของผู้เล่น clearInventoryConfirmToggleOff=กไกไไกไก clearInventoryConfirmToggleOn=กไกไ +clearinventoryCommandUsage1=/<command> +clearinventoryCommandUsage3=/<command> <player> <item> [amount] +clearinventoryconfirmtoggleCommandUsage=/<command> +commandArgumentOptional=§7 +commandArgumentOr=§c +commandArgumentRequired=§e commandCooldown=§cคุณไม่สามารถใช้คำสั่งนี้ได้ {0} commandDisabled=§cคำสั่ง§6 {0}§c ถูกปิดใช้งาน commandFailed=§aHEXCore\: §7§oคำสั่ง §e{0} §7ล้มเหลว§a\: commandHelpFailedForPlugin=§7เกิดข้อผิดพลาดในการดึงคำช่วยเหลือ ของปลั๊กอิน§f\: §a{0} +commandHelpLine1=§6ดูคำสั่งช่วยเหลือ\: §f/{0} +commandHelpLine2=§6รายละเอียด\: §f{0} +commandHelpLine3=§6โปรดใช้(s); +commandHelpLineUsage={0} §6- {1} commandNotLoaded=§7คำสั่ง §c{0}§7 ยังไม่ได้โหลด. compassBearing=§7การหมุน§f\: §a{0}§8 (§e{1} §7องศา§8) +compassCommandUsage=/<command> +condenseCommandUsage=/<command> [item] +condenseCommandUsage1=/<command> configFileMoveError=เกิดข้อผิดพลาดในการย้ายไฟล์ config.yml ไปยังที่อยู่ที่เก็บข้อมูลสำรอง configFileRenameError=§7ไม่สามารถเปลี่ยนชื่อไฟล์ชั่วคราวเป็นชื่อ config.yml ได้ connectedPlayers=§6ผู้เล่นที่ออนไลน์§r\n connectionFailed=การเชื่อมต่อล้มเหลว +consoleName=คอนโซล cooldownWithMessage=§4กรุณารอ\: {0} coordsKeyword={0}, {1}, {2} couldNotFindTemplate=§4ไม่พบรูปแบบที่ต้องการ {0} +createkitCommandUsage=/<command> <kitname> <delay> +createkitCommandUsage1=/<command> <kitname> <delay> +createKitSeparator=§m----------------------- creatingConfigFromTemplate=กำลังสร้าง Config จากไฟล์ต้นแบบ\:{0} creatingEmptyConfig=กำลังสร้าง Config ที่ว่างเปล่า.... {0} creative=§cโหมดสร้างสรรค์ currency={0}{1} currentWorld=§6โลกปัจจุบัน\:§c {0} +customtextCommandUsage=/<alias> - กำหนดใน bukkit.yml day=วัน days=§7วัน defaultBanReason=คุณถูกแบนจากเซิร์ฟเวอร์\! +deletedHomes=ลบบ้านทั้งหมดแล้ว +deletedHomesWorld=ลบบ้านทั้งหมดใน {0} แล้ว deleteFileError=ไม่สามารถลบไฟล์\: {0} deleteHome=§6บ้านชื่อ§c {0} §6ถูกลบออก deleteJail=§6คุกชื่อ§c {0} §6ถูกลบออก deleteKit=§6คุกชื่อ§c {0} §6ถูกลบออก deleteWarp=§6วาร์ปชื่อ§c {0} §6ถูกลบออก +deletingHomes=กำลังลบบ้านทั้งหมด... +delhomeCommandDescription=ลบบ้าน +delhomeCommandUsage=/<command> [player\:]<name> +delhomeCommandUsage1=/<command> <name> +delhomeCommandUsage2=/<command> <player>\:<name> +deljailCommandUsage=/<command> <jailname> +deljailCommandUsage1=/<command> <jailname> +delkitCommandUsage=/<command> <kit> +delkitCommandUsage1=/<command> <kit> +delwarpCommandUsage=/<command> <warp> +delwarpCommandUsage1=/<command> <warp> deniedAccessCommand=§c{0} §4ไม่ตอบกลับคำสั่งนั้น. denyBookEdit=§4คุณไม่สามารถปลดล็อกหนังสือเล่มนี้ได้ denyChangeAuthor=§4คุณไม่สามารถเปลี่ยนผู้เขียนของหนังสือเล่มนี้ได้ @@ -92,17 +148,23 @@ denyChangeTitle=§4คุณไม่สามารถเปลี่ยนช depth=§6คุณอยู่ที่ระดับน้ำทะเล depthAboveSea=§6คุณกำลังอยู่เหนือระดับน้ำทะเล§c {0} §6บล็อค. depthBelowSea=&aHEXCore\!\!\n§7§oคุณอยู่ต่ำกว่าระดับน้ำทะเล§e {0} §7§oบล็อค +depthCommandUsage=/depth destinationNotSet=&cยังไม่ได้ตั้งค่าปลายทาง\! disabled=ปิดใช้งาน disabledToSpawnMob=§4การเกิดของม็อบนี้ถูกปิดในการตั้งค่าไฟล์. disableUnlimited=§6ปิดการใช้งานในแบบไม่จำกัด§c {0} §6สำหรับ {1}. +discordCommandUsage=/<command> +discordCommandUsage1=/<command> disposal=กำจัดไอเทม +disposalCommandUsage=/<command> distance=§6ระยะทาง\: {0} dontMoveMessage=§6การวาร์ปจะเริ่มขึ้นใน§c {0}§6 ถ้าขยับการวาร์ปจะถูกยกเลิก downloadingGeoIp=กำลังดาวน์โหลดฐานข้อมูล GeoIP ... อาจใช้เวลาสักครู่ (ประเทศ\: 1.7 MB, เมือง\: 30MB) duplicatedUserdata=ข้อมูลของผู้ใช้ซ้ำ\: {0} และ {1} durability=§6เครื่องมือนี้สามารถใช้ได้อีก §c{0}§6 ครั้ง. east=ตะวันออก +ecoCommandUsage=/<command> <give|take|set|reset> <player> <amount> +ecoCommandUsage1=/<command> ให้ <player> <amount> editBookContents=§eตอนนี้คุณสามารถเปลี่ยนเนื้อหาของหนังสือได้แล้ว enabled=เปิดใช้งาน enableUnlimited=§6ให้ §c {0} §6 ที่ไม่จำกัด ไปยัง §c{1} §6 @@ -111,13 +173,22 @@ enchantmentNotFound=§eไม่พบการเสริมประสิท enchantmentPerm=§4คุณไม่มีสิทธิ์ในการเสริมประสิทธิภาพ §c {0}§4. enchantmentRemoved=§6การเสริมประสิทธิภาพ §c {0} §6ได้ถูกลบออกจากไอเทมในมือแล้ว. enchantments=§6เสริมประสิทธิภาพ\:§r {0} +enderchestCommandUsage=/<command> [player] +enderchestCommandUsage1=/<command> errorCallingCommand=เกิดข้อผิดพลาดในการเรียกใช้คำสั่ง /{0} errorWithMessage=§cผิดพลาด\:§4 {0} +essentialsCommandUsage=/<command> +essentialsCommandUsage7=/<command> บ้าน essentialsHelp1=ไฟล์นี้เสียหายและ Essentials ไม่สามารถเปิดมันได้ Essentialsis ถูกปิดใช้งาน ถ้าคุณไม่สามารถซ่อมไฟล์นี้ได้ ไปยังเว็บ http\://tiny.cc/EssentialsChat essentialsHelp2=ไฟล์นี้เสียหายและ Essentials ไม่สามารถเปิดมันได้ Essentialsis ถูกปิดใช้งาน ถ้าคุณไม่สามารถซ่อมไฟล์นี้ได้ พิมพ์ /essentialshelp หรือไปยังเว็บ http\://tiny.cc/EssentialsChat essentialsReload=§6Essentials ได้โหลดใหม่§c {0} exp=§6ผู้เล่น §c{0} §6มีค่าประสบการ์ณ§c {1} §6EXP (เลเวล§c {2}§6) และต้องการอีก§c {3} §6EXP เพื่ออัพเลเวล. +expCommandUsage1=/<command> ให้ <player> <amount> +expCommandUsage3=/<command> แสดง <playername> +expCommandUsage5=/<command> รีเซ็ต <playername> expSet=§6ผู้เล่น §c{0} §6มี EXP ขณะนี้ §c {1} §6EXP. +extCommandUsage=/<command> [player] +extCommandUsage1=/<command> [player] extinguish=§6คุณได้ดับไฟตัวเอง. extinguishOthers=§6คุณได้ดับไฟให้ {0}§6. failedToCloseConfig=ผิดผลาดในการปิดไฟล์การตั้งค่า {0}. @@ -125,43 +196,57 @@ failedToCreateConfig=ผิดพลาดในการสร้างไฟ failedToWriteConfig=ผิดพลาดในการเขียนไฟล์การตั้งค่า {0}. false=§4ไม่§r feed=§6คุณได้กินอาหารจนอิ่มแล้ว. +feedCommandUsage=/<command> [player] +feedCommandUsage1=/<command> [player] feedOther=§6คุณได้กินอาหารจนอิ่มแล้วจาก §c{0}§6. fileRenameError=เปลี่ยนชื่อไฟล์ {0} ล้มเหลว\! +fireballCommandUsage1=/<command> fireworkColor=§4ใส่ค่าคำสั่งของดอกไม้ไฟไม่ถูกต้อง, ต้องตั้งสีก่อน. fireworkEffectsCleared=§6เอฟเฟคดอกไม้ไฟได้ถูกลบออกทั้งหมด. fireworkSyntax=§6ค่าของพลุ\:§c สี\:<color> [สีของเงา\:<color>] [รูปร่าง\:<shape>] [เอฟเฟคพิเศษ\:<effect>]\n§6สำหรับการใช้งานหลายสี,หลายเอฟเฟค ต้องแบ่งค่าด้วยคอมม่า (,) เช่น\: §cred,blue,pink\n§6รูปร่างที่ใช้งานได้\:§c star, ball, large, creeper, burst §6เอฟเฟคที่ใช้งานได้\:§c trail, twinkle. +flyCommandUsage1=/<command> [player] flying=อยู่ในโหมดบิน flyMode=§6ตั้งค่าโหมดบิน§c {0} §6สำหรับ {1}§6. foreverAlone=§4คุณได้ไม่มีใครที่คุณสามารถตอบกลับ. fullStack=§4คุณมีกองที่เต็มแล้ว. gameMode=§6ได้เปลี่ยนเกมส์โหมดของ§c {1} §6เป็น §c{0}§6. gameModeInvalid=§4คุณต้องระบุตัวผู้เล่น/โหมดให้ถูกต้อง +gcCommandUsage=/<command> gcfree=§6หน่วยความจำที่เหลือ\:§c {0} เมกะไบต์ gcmax=§6หน่วยความจำทั้งหมด\:§c {0} เมกะไบต์ gctotal=§6หน่วยความจำที่ใช้\:§c {0} เมกะไบต์ gcWorld=§6{0} "§c{1}§6"\: §c{2}§6 ชื้น, §c{3}§6 วัตถุ, §c{4}§6 แผ่น. geoipJoinFormat=§6ผู้เล่นชื่อ §c{0} §6มาจากประเทศ§c {1} +getposCommandUsage=/<command> [player] +getposCommandUsage1=/<command> [player] +giveCommandUsage1=/<command> <player> <item> [amount] geoIpUrlEmpty=ไม่สามารถดาวน์โหลด GeoIP ได้ เนื่องจาก URL ไม่มี. geoIpUrlInvalid=ไม่สามารถดาวน์โหลด GeoIP ได้ เนื่องจาก URL ผิดพลาด. givenSkull=§6คุณได้รับหัว Skull ของ §c{0}§6. +godCommandUsage1=/<command> [player] giveSpawn=§6ให้§c {0} §6of§c {1} to§c {2}§6. giveSpawnFailure=§4พื้นที่ไม่เพียงพอ, §c{0} §c{1} §4ได้สูญหาย. godDisabledFor=§cปิดใช้งาน§6 สำหรับ§c {0} godEnabledFor=§aเปิดใช้งาน§6 สำหรับ§c {0} godMode=§6โหมดอมตะ§c {0} +grindstoneCommandUsage=/<command> groupDoesNotExist=§4ไม่มีใครกำลังเล่นอยู่ในกลุ่มนี้\! groupNumber=§cผู้เล่นที่ออนไลน์ {0}§f, รายชื่อผู้เล่นที่ออนไลน์\:§c /{1} {2} hatArmor=§4ไอเท็มนี้ไม่สามารถใช้เป็นหมวกได้\! +hatCommandUsage1=/<command> hatEmpty=§4ยังไม่ได้ใส่หมวก hatFail=§4คุณต้องมีบางอย่างที่สวมใส่ในมือของคุณ. hatPlaced=§6หมวกใหม่ของคุณ ขอให้สนุก\! hatRemoved=§6หมวกได้ถูกออกแล้ว. haveBeenReleased=§6คุณได้ถูกปล่อยตัวแล้ว. heal=§6คุณได้รับการรักษา. +healCommandUsage=/<command> [player] +healCommandUsage1=/<command> [player] healDead=§4คุณไม่สามารถรักษาผู้เล่นที่ตายแล้วได้\! healOther=§6คุณรักษาผู้เล่นชื่อ§c {0} helpConsole=ถ้าต้องการดูวิธีใช้จากคอนโซล, พิมพ์ ? helpFrom=§6คำสั่งจากปลั้กอิน {0}\: +helpLine=§6/{0}§r\: {1} helpMatching=§6คำสั่งที่อาจเหมือนกัน "§c{0}§6"\: helpOp=§4[ต้องการความช่วยเหลือ]§r §6{0}\:§r {1} helpPlugin=§4 {0} §r\: วิธีใช้ปลั๊กอิน\: /help {1} @@ -169,10 +254,14 @@ holdBook=§4คุณยังไม่ได้ถือสมุด. holdFirework=§4คุณต้องถือดอกไม้ไฟเพื่อทำการเพิ่มเอฟเฟค. holdPotion=§4คุณต้องถือขวดยาเพื่อทำการเพิ่มเอฟเฟค. holeInFloor=§4ต้องอยู่บนพื้น\! +homeCommandUsage1=/<command> <name> +homeCommandUsage2=/<command> <player>\:<name> homes=§6บ้าน\:§r {0} homeSet=§6ตำแหน่งบ้านถูกบันทึก hour=ชั่วโมง hours=ชั่วโมง +iceCommandUsage=/<command> [player] +iceCommandUsage1=/<command> ignoredList=§6ละเว้น\:§r {0} ignoreExempt=§4คุณอาจไม่ละเว้นผู้เล่นคนนั้น. ignorePlayer=§6คุณได้ละเว้นผู้เล่น§c {0} §6จากนี้ไป. @@ -204,6 +293,8 @@ isIpBanned=§6IP §c{0} §6นี้ได้ถูกแบน. itemCannotBeSold=§4ไอเทมนี้ไม่สามารถขายให้เซิร์ฟเวอร์ได้ itemMustBeStacked=§4Item ต้องซื้อขายในกอง ปริมาณของ 2s จะสองกอง ฯลฯ itemNames=§6ชือย่อของไอเทม\:§r {0} +itemnameCommandUsage1=/<command> +itemnameCommandUsage2=/<command> <name> itemNotEnough1=§4คุณมีไอเทมนี้ ไม่พอที่จะขาย itemNotEnough2=§6ถ้าคุณต้องการขายไอเทมชนิดเดียวกันทั้งหมดสามารถพิมพ์ "/sell ชื่อของไอเทม" ได้ itemNotEnough3=§6/ขาย itemname -1 จะขายทั้งหมดแต่หนึ่งสินค้า ฯลฯ @@ -222,12 +313,15 @@ jailReleased=§6ผู้เล่นชื่อ §c{0}§6 เป็นอิ jailReleasedPlayerNotify=§6คุณได้ถูกปล่อยตัวแล้ว\! jailSentenceExtended=§6เวลาขังถูกเพิ่มเป็น §c{0}§6. jailSet=§6คุกชื่อ§c {0} §6ถูกบันทึก +jailsCommandUsage=/<command> +jumpCommandUsage=/<command> jumpError=§4สิ่งนี้ที่อาจจะทำร้ายสมองของคอมพิวเตอร์คุณ. kickDefault=คุณถูกเตะออกจากเซิร์ฟเวอร์\! kickedAll=§4เตะผู้เล่นทั้งหมดออกจากเซิร์ฟเวอร์ kickExempt=§4คุณไม่สามารถเตะผู้เล่นคนนั้นได้ kill=§6กำจัด§c {0}§6ทิ้ง killExempt=§4คุณไม่สามารถฆ่าผู้เล่นชื่อ §c{0} §4ได้ +kitCommandUsage1=/<command> kitError=§4ไม่มีชุดอุปกณ์ที่ถูกต้อง. kitError2=§4ชุดอุปกรณ์นั้นกำหนดไว้ไม่ถูกต้อง. ติดต่อผู้ดูแลเซิฟเวอร์. kitGiveTo=§6ได้รับชุดอุปกรณ์§c {0}§6 ถึง §c{1}§6. @@ -236,8 +330,10 @@ kitNotFound=§4ไม่มีชุดอุปกรณ์นั้น. kitOnce=§4คุณไม่สามารถใช้ชุดนั้นอีกครั้งได้. kitReceive=§6ได้รับชุดอุปกรณ์§c {0}§6. kits=§6ชุดอุปกรณ์\:§r {0} +kittycannonCommandUsage=/<command> kitTimed=§4คุณไม่สามารถใช้ชุดอุปกรณ์นั้นอีกครั้งได้สำหรับ§c {0}§4. leatherSyntax=§6Leather color syntax\: color\:<red>,<green>,<blue> eg\: color\:255,0,0 OR color\:<rgb int> eg\: color\:16777011 +lightningCommandUsage1=/<command> [player] lightningSmited=§6เทพเจ้าสายฟ้าฟาด\! lightningUse=§6ฟ้าผ่า§c {0} listAfkTag=§7[ไม่อยู่]§r @@ -246,6 +342,7 @@ listAmountHidden=§6นี้คือ §c{0}§6/{1}§6 ผู้ที่ถู listGroupTag=§6{0}§r\: §r listHiddenTag=§7[ซ่อน]§r loadWarpError=§4เกิดข้อผิดพลาดในการโหลดวาร์ป {0} +loomCommandUsage=/<command> mailCleared=§6ได้ล้างจดหมาย\! mailDelay=มีการส่งจดหมายจำนวนมากเกินไปในนาทีสุดท้าย สูงสุด\: {0} mailSent=§6ได้ส่งจดหมาย\! @@ -274,12 +371,14 @@ moreThanZero=§4ต้องใส่จำนวนที่มากกว่ moveSpeed=§6ได้ตั้งค่า {0} ที่ความเร็ว§c {1} §6สำหรับ §c{2}§6. msgDisabled=§6รับข้อความ §cปิดการใช้งาน§6 msgDisabledFor=§6รับข้อความ §cปิดการใช้งาน §6สำหรับ {§c {0} §6 +msgtoggleCommandUsage1=/<command> [player] multipleCharges=§4คุณไม่สามารถใส่เอฟเฟคของดอกไม้ไฟนี้ได้มากกว่าหนึ่งเอฟเฟค. multiplePotionEffects=§4คุณไม่สามารถใส่เอฟเฟคของยานี้ได้มากกว่าหนึ่งเอฟเฟค. mutedPlayerFor=§6ผู้เล่น§c {0} §6ได้ถูกปิดการสนทนา เป็นเวลา§c {1}§6. muteExempt=§4คุณอาจจะไม่ได้ปิดการสนทนาผู้เล่นคนนี้. muteExemptOffline=§4คุณอาจไม่ปิดการสนทนาของผู้เล่นที่ออฟไลน์. muteNotify=§c{0} §6ได้ทำการใบ้ผู้เล่น §c{1}§6. +nearCommandUsage1=/<command> nearbyPlayers=§6ผู้เล่นที่อยู๋ไกล้\:§r {0} negativeBalanceError=§4ผู้เล่น ไม่สามารถมีเงินติดลบได้. nickChanged=§6ชื่อเล่นได้ถูกเปลี่ยน. @@ -323,6 +422,7 @@ nothingInHand=§4คุณไม่มีอะไรอยู่ในมือ now=ตอนนี้ noWarpsDefined=§6ไม่มีวาร์ปที่กำหนด. nuke=§5ฝนระเบิด ได้ถูกปล่อยไปแล้ว\! +nukeCommandUsage=/<command> [player] numberRequired=ใส่ตัวเลขตรงนี้, โง่จริง. onlyDayNight=/time สามารถใช้ได้แค่ day/night เท่านั้น onlyPlayers=§4เฉพาะผู้เล่นที่เล่นอยู่เท่านั้นจึงสามารถใช้ §c{0}§4 @@ -331,8 +431,12 @@ onlySunStorm=§4/weather สามารถใช้ได้แค่ sun/storm orderBalances=§6เรียกดูยอดเงินจาก§c {0} §6ผู้เล่น, รอสักครู่... oversizedTempban=§4คุณอาจไม่สามารถแบนผู้เล่นในช่วงเวลานี้. payMustBePositive=§4จำนวนเงินที่จ่ายต้องเป็นค่าบวก +payconfirmtoggleCommandUsage=/<command> +paytoggleCommandUsage=/<command> [player] +paytoggleCommandUsage1=/<command> [player] pendingTeleportCancelled=§4คำขอการเคลื่อยนย้ายผู้เล่นถูกยกเลิก pingCommandDescription=ป่อง\! +pingCommandUsage=/<command> playerBanIpAddress=§6ผู้เล่น§c {0} §6ได้แบน IP address§c {1} §6สำหรับ\: §c{2}§6. playerBanned=§6ผู้เล่น§c {0} §6ได้แบน§c {1} §6สำหรับ\: §c{2}§6. playerJailed=§6ผู้เล่น §c {0} §6ได้ถูกขังคุก. @@ -345,6 +449,8 @@ playerNotFound=ไม่พบผู้เล่น. playerUnbanIpAddress=§6ผู้เล่น§c {0} §6ได้ปลดแบน IP\: {1}. playerUnbanned=§6ผู้เล่น§c {0} §6ได้ปลด§c {1}. playerUnmuted=§6คุณสามารถสนทนาได้แล้ว. +playtimeCommandUsage=/<command> [player] +playtimeCommandUsage1=/<command> pong=ป่อง\! posPitch=§6เอียง\: {0} (มุมของหัว) possibleWorlds=§6เป็นไปได้ที่โลกจะเป็นแบบหมายเลข §c0§6 ผ่าน §{0}§6. @@ -361,6 +467,7 @@ powerToolRemove=§6คำสั่ง §c{0}§6 ได้นำออกจา powerToolRemoveAll=§6คำสั่งทั้งหมดได้นำออกจาก §c{0}§6. powerToolsDisabled=§6เครื่องมือพิเศษของคุณทั้งหมด ได้ถูกปิดการใช้งาน. powerToolsEnabled=§6เครื่องมือพิเศษของคุณทั้งหมด ได้ถูกเปิดการใช้งาน. +powertooltoggleCommandUsage=/<command> pTimeCurrent=§6เวลาของ §c{0}§6 ถูกตั้งไว้ที่§c {1}§6 pTimeCurrentFixed=§6เวลาของ §c{0}§6 ถูกตั้งให้ตายตัวไว้ที่§c {1}§6 pTimeNormal=§6เวลาของ §c{0}§6 เป็นปกติและตรงกับเซิฟเวอร์ @@ -391,6 +498,7 @@ recipeWhere=§6ที่\: {0} removed=§6ลบ§c {0} §6สิ่งเรียบร้อยแล้ว repair=§6ประสบความสำเร็จในการซ่อมแซม\: §c{0}§6. repairAlreadyFixed=§4ไอเทมนี้ยังไม่ต้องการซ่อมแซม. +repairCommandUsage1=/<command> repairEnchanted=§4คุณยังไม่สามารถซ่อมแซมไอเทมที่เสริมประสิทธิภาพ. repairInvalidType=§4ไม่สามารถซ่อมแซมไอเทมนี้ได้. repairNone=§4ไม่มีไอเทมที่ต้องการซ่อมแซม. @@ -403,6 +511,8 @@ requestSentAlready=§4คุณส่ง {0} §4คำขอ teleport แล้ requestTimedOut=§4หมดเวลาคำขอเทเลพอร์ต. resetBal=§6ยอดเงินได้ถูกรีเซ็ตใหม่เป็น §c{0} §6สำหรับผู้เล่นทั้งหมดที่ออนไลน์อยู่ทุกคน. resetBalAll=§6ยอดเงินได้ถูกรีเซ็ตใหม่เป็น §c{0} §6สำหรับผู้เล่นทั้งหมดในเซิฟเวอร์. +restCommandUsage=/<command> [player] +restCommandUsage1=/<command> [player] returnPlayerToJailError=§4เกิดข้อผิดพลาดในการพยายามส่งผู้เล่น§c {0} §4กลับไปขังคุก\: §c{1}§4\! runningPlayerMatch=§6กำลังค้นหาผู้เล่นที่เหมือนกัน ''§c{0}§6'' (อาจใช้เวลาสักครู่..). second=วินาที @@ -415,19 +525,30 @@ serverTotal=§6Server ทั้งหมด\:§c {0} setBal=§aยอดเงินของคุณได้ถูกตั้งค่าเป็น {0}. setBalOthers=§aคุณได้ตั้งค่า {0}§a ให้มียอดเงินเหลือ {1}. setSpawner=§6เปลี่ยนกรงเกิดมอนสเตอร์เป็น§c {0}§6. +sethomeCommandUsage1=/<command> <name> +sethomeCommandUsage2=/<command> <player>\:<name> +setjailCommandUsage=/<command> <jailname> +setjailCommandUsage1=/<command> <jailname> +setwarpCommandUsage=/<command> <warp> +setwarpCommandUsage1=/<command> <warp> sheepMalformedColor=§4สีไม่ถูกต้อง shoutFormat=§6[ตะโกน]§r {0} signProtectInvalidLocation=§4คุณไม่ได้รับอนุญาตให้สร้างป้ายที่นี่ similarWarpExist=§4มีวาร์ปที่ใช้ชื่อนี้อยู่แล้ว skullChanged=§6หัว Skull ได้ถูกเปลี่ยนเป็น §c{0}§6. +skullCommandUsage1=/<command> slimeMalformedSize=§4ขนาดไม่ถูกต้อง +smithingtableCommandUsage=/<command> socialSpy=§6SocialSpy สำหรับ §c{0}§6\: §c{1} socialSpyMsgFormat=§6[§c{0}§6 -> §c{1}§6] §7{2} +socialspyCommandUsage1=/<command> [player] soloMob=§4ม็อบนี้ชอบอยู่คนเดียว. spawned=เสก spawnSet=§6ตำแหน่ง Spawn ได้ถูกตั้งค่าสำหรับกลุ่ม§c {0}§6. spectator=ผู้ชม +stonecutterCommandUsage=/<command> sudoRun=§6ได้บังคับ§c {0} §6ให้ทำการรัน\:§r /{1} +suicideCommandUsage=/<command> suicideMessage=§6ลาก่อนโลกอันโหดร้าย... suicideSuccess=§6ผู้เล่น §c{0} §6ได้ใช้ชีวิตของตัวเอง. survival=โหมดเอาชีวิตรอด @@ -457,15 +578,30 @@ thunder=§6คุณ§c {0} §6ฟ้าผ่าในโลก. thunderDuration=§6คุณ§c {0} §6สำหรับฟ้าผ่าในโลก§c {1} §6วินาที. timeBeforeHeal=§4ก่อนเวลาถัดไปรักษา\:§c {0}§4. timeBeforeTeleport=§4ก่อนเวลาการเทเลพอร์ต\:§c {0}§4. +timeCommandUsage1=/<command> timeFormat=§c{0}§6 หรือ §c{1}§6 หรือ §c{2}§6 timeSetPermission=§4คุณยังไม่ได้รับอนุญาตให้ตั้งค่าเวลา. timeWorldCurrent=§6เวลาปัจจุบันของ§c {0} §6คือ §c{1} timeWorldSet=§6เวลาถูกตั้งเป็น§c {0} §6ใน\: §c{1} +toggleshoutCommandUsage1=/<command> [player] +topCommandUsage=/<command> totalSellableAll=§aมูลค่าทั้งหมดของไอเท็มที่ขายได้และบล็อคคือ §c{1} totalSellableBlocks=§aมูลค่าทั้งหมดของบล็อคทีขายได้คือ §c{1}§a. totalWorthAll=§aขายไอเท็มและบล็อคทั้งหมด เป็นจำนวนเงิน §c{1}§a. totalWorthBlocks=§aขายบล็อคทั้งหมด เป็นจำนวนเงิน §c{1}§a. +tpacancelCommandUsage=/<command> [player] +tpacancelCommandUsage1=/<command> +tpacceptCommandUsage1=/<command> +tpallCommandUsage=/<command> [player] +tpallCommandUsage1=/<command> [player] +tpautoCommandUsage=/<command> [player] +tpautoCommandUsage1=/<command> [player] +tpdenyCommandUsage=/<command> +tpdenyCommandUsage1=/<command> +tprCommandUsage=/<command> +tprCommandUsage1=/<command> tps=§6ค่า TPS ในตอนนี้\= {0} +tptoggleCommandUsage1=/<command> [player] tradeSignEmpty=§4ป้ายแลกเปลี่ยนยังไม่พร้อมให้คุณใช้งาน. tradeSignEmptyOwner=§4ไม่มีสิ่งที่จะเก็บได้จากป้ายแลกเปลี่ยนนี้ treeFailure=§4การสร้างต้นไม้ผิดพลาด. โปรดลองอีกครั้งบนหญ้าหรือดิน. @@ -498,6 +634,7 @@ userJailed=§6คุณได้ถูกขัง\! userUnknown=§4เตือน\: ผู้เล่น ''§c{0}§4'' ไม่เคยเข้าร่วมในเซิฟเวอร์นี้. usingTempFolderForTesting=ใช้โฟลเดอร์ temp ชั่วคราวสำหรับการทดสอบ\: vanish=§6โหมดหายตัว สำหรับ {0}§6\: {1} +vanishCommandUsage1=/<command> [player] vanished=§6ตอนนี้คุณได้หายตัวจากผู้เล่นคนอื่น, และซ่อนตัวอยู่ในหน้าต่างเกม. versionOutputVaultMissing=§4Vault ยังไม่ได้ติดตั้ง การแชทและการอนุญาตอาจไม่ทำงาน versionOutputFine=§6{0} เวอร์ชั่น\: §a{1} @@ -506,7 +643,10 @@ versionMismatch=§4เวอร์ชั่นไม่ตรงกัน\! โ versionMismatchAll=§4เวอร์ชั่นไม่ตรงกัน\! โปรดอับเดทไฟล์ Essentials .jars ทั้งหมดให้เป็นเวอร์ชั่นเดียวกัน. voiceSilenced=§6เสียงของคุณได้ถูกปิด\! walking=โหมดเดิน +warpCommandUsage1=/<command> [หน้า] warpDeleteError=§4ประสบปัญหาในการลบไฟล์วาร์ป. +warpinfoCommandUsage=/<command> <warp> +warpinfoCommandUsage1=/<command> <warp> warpingTo=§6วาร์ปไปยัง§c {0}§6. warpListPermission=§4คุณไม่มีสิทธิในการใช้คำสั่ง /List Warps. warpNotExist=§4ไม่มีวาร์ปนี้. @@ -534,6 +674,8 @@ whoisMuted=§6 - ได้ถูกปิดการสนทนา\:§r {0} whoisNick=§6 - ชื่อเล่น\:§r {0} whoisOp=§6 - โหมด OP\:§r {0} whoisTop=§6 \=\=\=\=\=\= รายระเอียด\:§c {0} §6\=\=\=\=\=\= +workbenchCommandUsage=/<command> +worldCommandUsage1=/<command> worth=§aกองของ {0} มีมูลค่า §c{1}§a (จำนวน {2} อัน แต่ละอันมีมูลค่า {3}) worthMeta=§aกองของ {0} ที่มี metadata ของ {1} มีมูลค่า §c{2}§a (จำนวน {3} อัน แต่ละอันมีมูลค่า {4}) worthSet=§6อัตราการแลกเปลี่ยน diff --git a/Essentials/src/main/resources/messages_tr.properties b/Essentials/src/main/resources/messages_tr.properties index 40f893e5755..071c22304f1 100644 --- a/Essentials/src/main/resources/messages_tr.properties +++ b/Essentials/src/main/resources/messages_tr.properties @@ -200,6 +200,8 @@ destinationNotSet=Hedef ayarlanmadı\! disabled=devre dışı disabledToSpawnMob=§4Bu mobun oluşturulması konfigürasyon dosyasından devre dışı bırakılmış. disableUnlimited=§c {1} §6isimli eşyanın §c {0}§6 için sınırsız yerleştirilmesi devre dışı bırakıldı. +discordCommandUsage=/<komut> +discordCommandUsage1=/<komut> disposal=Tasfiye disposalCommandDescription=Taşınabilir bir çöp menüsü açar. disposalCommandUsage=/<komut> @@ -665,6 +667,9 @@ playerTempBanned=§6Oyuncu §c{0} §6geçici olarak §c {2} §6\: §c {3} §6 s playerUnbanIpAddress=§c{0} §6oyuncusu §c{1} §6IP adresinin uzaklaştırmasını kaldırdı. playerUnbanned=§6Oyuncu,§c {0}§6, §c{1} §6isimli oyuncunun uzaklaştırılmasını kaldırdı. playerUnmuted=§6Artık konuşabilirsin. +playtimeCommandUsage=/<komut> [oyuncu] +playtimeCommandUsage1=/<komut> +playtimeCommandUsage2=/<komut> <oyuncu> pong=Pong\! posPitch=§6Eğim\: {0} (Kafa açısı) possibleWorlds=§6Mümkün dünyalar §c0§6 ile §c{0}§6 arasındadır. @@ -929,9 +934,9 @@ tpacancelCommandDescription=Aktif ışınlanma istekleri iptal eder. Bir oyuncu tpacancelCommandUsage=/<komut> [oyuncu] tpacancelCommandUsage1=/<komut> tpacancelCommandUsage2=/<komut> <oyuncu> -tpacceptCommandDescription=Bir ışınlanma isteğini kabul eder. tpacceptCommandUsage=/<komut> [diğeroyuncu] tpacceptCommandUsage1=/<komut> +tpacceptCommandUsage2=/<komut> <oyuncu> tpahereCommandDescription=Belirtilen oyuncunun sana ışınlanmasını iste. tpahereCommandUsage=/<komut> <oyuncu> tpahereCommandUsage1=/<komut> <oyuncu> @@ -941,9 +946,9 @@ tpallCommandUsage1=/<komut> [oyuncu] tpautoCommandDescription=Işınlanma isteklerini otomatik kabul et. tpautoCommandUsage=/<komut> [oyuncu] tpautoCommandUsage1=/<komut> [oyuncu] -tpdenyCommandDescription=Bir ışınlanma isteğini reddet. tpdenyCommandUsage=/<komut> tpdenyCommandUsage1=/<komut> +tpdenyCommandUsage2=/<komut> <oyuncu> tphereCommandDescription=Bir oyuncuyu kendine ışınla. tphereCommandUsage=/<komut> <oyuncu> tphereCommandUsage1=/<komut> <oyuncu> diff --git a/Essentials/src/main/resources/messages_uk.properties b/Essentials/src/main/resources/messages_uk.properties index 4f656470c4d..c7b70032f08 100644 --- a/Essentials/src/main/resources/messages_uk.properties +++ b/Essentials/src/main/resources/messages_uk.properties @@ -25,7 +25,7 @@ antiBuildPlace=§4Вам не дозволено встановлювати§c { antiBuildUse=§4Вам не дозволяється використовувати§c {0}§4. antiochCommandDescription=Маленький подарунок для операторів. antiochCommandUsage=/<command> [message] -anvilCommandDescription=Відкрити наковальню. +anvilCommandDescription=Відкрити ковадло. anvilCommandUsage=/<command> autoAfkKickReason=Вас вигнано з гри через бездіяльність на протязі {0} хвилин. autoTeleportDisabled=§6Ви більше не приймаєте запити на телепортацію автоматично. @@ -45,10 +45,10 @@ backupCommandUsage=/<command> backupDisabled=§4Зовнішнього сценарію резервного копіювання не настроєно. backupFinished=§6Копіювання закінчено. backupStarted=§6Резервне копіювання почалося. -backupInProgress=§6Зовнішній сценарій резервного копіювання в даний час триває\! Зупинення плагіна вимкнення до завершення. -backUsageMsg=§6Повертаємось до попереднього розташування. +backupInProgress=§6Триває зовнішній сценарій резервного копіювання\! Зупинення вимкнення плагіна до завершення. +backUsageMsg=§6Повернення до попереднього розташування. balance=§aБаланс\:§c {0} -balanceCommandDescription=Вказує на поточний баланс гравця. +balanceCommandDescription=Відображає поточний баланс гравця. balanceCommandUsage=/<command> [player] balanceCommandUsage1=/<command> balanceCommandUsage1Description=Відображає ваш поточний баланс @@ -57,29 +57,29 @@ balanceCommandUsage2Description=Відображає баланс зазначе balanceOther=§aБаланс {0}§a\:§c {1} balanceTop=§6Топ багачів ({0}) balanceTopLine={0}. {1}, {2} -balancetopCommandDescription=Отримує верхні значення балансу. +balancetopCommandDescription=Показує топ найбагатших гравців. balancetopCommandUsage=/<command> [page] balancetopCommandUsage1=/<command> [page] -balancetopCommandUsage1Description=Відображає першу (або вказую) сторінку верхнього значення балансу +balancetopCommandUsage1Description=Відображає першу (або вказану) сторінку топу найбагатших гравців banCommandDescription=Блокує гравця. banCommandUsage=/<command> <player> [reason] banCommandUsage1=/<command> <player> [reason] -banCommandUsage1Description=Забороняє зазначеному гравцю з необов''язковою причиною +banCommandUsage1Description=Блокує зазначеного гравця з необов''язковою причиною banExempt=§4Ви не можете забанити цього гравця. banExemptOffline=§4Ви не можете забанити гравця в офлайні. banFormat=§cВи забанені\:\n§r{0} banIpJoin=Ваша IP-адреса заблокована на цьому сервері. Причина\: {0} banJoin=Вас заблоковано на цьому сервері. Причина\: {0} -banipCommandDescription=Блокує адресу IP. +banipCommandDescription=Блокує IP-адресу. banipCommandUsage=/<command> <address> [причина] banipCommandUsage1=/<command> <address> [причина] -banipCommandUsage1Description=Забороняє зазначену IP-адресу з необов''язковою причиною +banipCommandUsage1Description=Блокує зазначену IP-адресу з необов''язковою причиною bed=§oліжко§r bedMissing=§4Твоє ліжко не встановлене, відсутнє або заблоковане. bedNull=§mліжко§r -bedOffline=§4Неможливо телепортуватися до ліжка оффлайн користувачів. +bedOffline=§4Неможливо телепортуватися до ліжка гравців, які не на сервері. bedSet=§6Ліжко встановлено\! -beezookaCommandDescription=Кидає вибухову бджолу на супротивника. +beezookaCommandDescription=Кидає вибухову бджолу на противника. beezookaCommandUsage=/<command> bigTreeFailure=§4Генерація великого дерева провалена\! Спробуй знову на траві або землі. bigTreeSuccess=§6Велике дерево встановлено. @@ -90,7 +90,7 @@ bigtreeCommandUsage1Description=Створює велике дерево заз blockList=§6EssentialsX передає наступні команди іншим плагинам\: blockListEmpty=§6EssentialsX не передає ніякі команди іншим плагінам. bookAuthorSet=§6Автор книги встановлений на {0}. -bookCommandDescription=Дозволяє повторно відкривати та редагувати запечатані книжки. +bookCommandDescription=Дозволяє повторно відкривати та редагувати підписані книги. bookCommandUsage=/<command> [Заголовок|автор [name]] bookCommandUsage1=/<command> bookCommandUsage2Description=Встановлює автора підписаної книги @@ -213,6 +213,8 @@ destinationNotSet=Призначення не встановлено\! disabled=вимкнено disabledToSpawnMob=§4Поява цього мобу відімкнена у файлі конфігурації. disableUnlimited=§6Вимкнення необмеженого розміщення §c {0} §6для§c {1}§6. +discordCommandUsage=/<command> +discordCommandUsage1=/<command> discordCommandExecuteDescription=Виконує команду консолі на сервері Minecraft. discordCommandExecuteArgumentCommand=Команду, яку слід виконати discordCommandListDescription=Отримує список гравців онлайн. @@ -623,6 +625,9 @@ playerTempBanned=§6Гравець §c{0}§6 тимчасово заблоков playerUnbanIpAddress=§6Гравець§c {0} §6позбавив бану IP\:§c {1} playerUnbanned=§6Гравець§c {0} §6позбавив бану§c {1} playerUnmuted=§6Вам дозволили писати в чат. +playtimeCommandUsage=/<command> [player] +playtimeCommandUsage1=/<command> +playtimeCommandUsage2=/<command> <player> pong=Фіг тобі, а не пінг\! posPitch=§6Висота\: {0} (Рівень голови) possibleWorlds=§6Номери можливих світів починаються з §c0§6 і закінчуються §c{0}§6. @@ -715,20 +720,20 @@ serverTotal=§6Всього на сервері\:§c {0} serverUnsupported=Запущена версія, яка не підтримується сервером\! setBal=§aВаш баланс встановлено на {0}. setBalOthers=§aВи встановили баланс {0}§a в {1}. -setSpawner=§6Змінено тип спавнеру до§c {0}§6. +setSpawner=§6Змінено тип спавнеру на§c {0}§6. setjailCommandUsage=/<command> <jailname> setjailCommandUsage1=/<command> <jailname> setwarpCommandUsage=/<command> <warp> setwarpCommandUsage1=/<command> <warp> sheepMalformedColor=§4Неправильний колір. -shoutFormat=§6[G]§r {0} -editsignCommandClear=§6Напис очищено. -editsignCommandClearLine=§6Лінія стерта§c {0}§6. -editsignCommandDescription=Змінює написи в світі. -editsignCommandLimit=§4Ваш наданий текст занадто великий для того, щоб вмістити на цільовій таблиці. -editsignCommandNoLine=§4Ви повинні ввести номер лінії між §c1-4§4. +shoutFormat=§6[Shout]§r {0} +editsignCommandClear=§6Табличку очищено. +editsignCommandClearLine=§6Очищено рядок§c {0}§6. +editsignCommandDescription=Змінює таблички в світі. +editsignCommandLimit=§4Ваш наданий текст занадто довгий для того, щоб помістити його на табличку. +editsignCommandNoLine=§4Ви повинні ввести номер рядка між §c1-4§4. editsignCommandSetSuccess=§6Встановлено рядок§c {0}§6 на "§c{1}§6". -editsignCommandTarget=§4Ви повинні дивитись на напис для редагування його тексту. +editsignCommandTarget=§4Ви повинні дивитись на табличку для редагування на ній тексту. signFormatFail=§4[{0}] signFormatSuccess=§1[{0}] signFormatTemplate=[{0}] @@ -783,9 +788,9 @@ teleportRequestSpecificCancelled=§6Запит на телепортування teleportRequestTimeoutInfo=§6Заявка буде автоматично відмінена через§c {0} секунд§6. teleportTop=§6Телепортування нагору. teleportToPlayer=§6Телепортуємось до §c{0}§6. -teleportOffline=§6Гравець§c{0}§6 зараз в афк. Ви можете переміститися до нього, використовуючи /otp. +teleportOffline=§6Гравець§c{0}§6 зараз не на сервері. Ви можете телепортуватися до нього, використовуючи /otp. tempbanExempt=§4Ви не можете тимчасово забанити цього гравця. -tempbanExemptOffline=§4Ви не можете тимчасово забанити гравця в офлайні. +tempbanExemptOffline=§4Ви не можете тимчасово забанити гравця, який зараз не на сервері. tempbanJoin=Вас забанено на цьому сервері {0}. Причина\: {1} tempBanned=§cВи були тимчасово забанені на §r{0}\:\n§r{2} thunder=§6Ти§c {0} §6зливу у своєму світі. @@ -796,15 +801,15 @@ timeCommandUsage1=/<command> timeFormat=§c{0}§6 або §c{1}§6 або §c{2}§6 timeSetPermission=§4У вас немає прав для установки часу. timeSetWorldPermission=§4У вас немає прав для установки часу в світі ''{0}''. -timeWorldCurrent=§6Наразі час в§c {0} §c{1}§6. +timeWorldCurrent=§6Наразі час у світі§c {0} §c{1}§6. timeWorldSet=§6Час встановлено на§c {0} §6в\: §c{1}§6. toggleshoutCommandUsage=/<command> [player] [on|off] toggleshoutCommandUsage1=/<command> [player] topCommandUsage=/<command> -totalSellableAll=§aЗагальна вартість всіх блоків і предметів, які можна продати рівна §c{1}§a. -totalSellableBlocks=§aЗагальна вартість всіх блоків, які можна продати рівна §c{1}§a. +totalSellableAll=§aЗагальна вартість всіх блоків і предметів, які можна продати\: §c{1}§a. +totalSellableBlocks=§aЗагальна вартість всіх блоків, які можна продати\: §c{1}§a. totalWorthAll=§aПродані всі предмети і блоки, прибуток §c{1}§a. -totalWorthBlocks=§aПродані всі блоки з прибутком §c{1}§a. +totalWorthBlocks=§aПродані всі блоки на суму §c{1}§a. tpCommandUsage1=/<command> <player> tpaCommandUsage=/<command> <player> tpaCommandUsage1=/<command> <player> @@ -814,6 +819,7 @@ tpacancelCommandUsage=/<command> [player] tpacancelCommandUsage1=/<command> tpacancelCommandUsage2=/<command> <player> tpacceptCommandUsage1=/<command> +tpacceptCommandUsage2=/<command> <player> tpahereCommandUsage=/<command> <player> tpahereCommandUsage1=/<command> <player> tpallCommandUsage=/<command> [player] @@ -822,6 +828,7 @@ tpautoCommandUsage=/<command> [player] tpautoCommandUsage1=/<command> [player] tpdenyCommandUsage=/<command> tpdenyCommandUsage1=/<command> +tpdenyCommandUsage2=/<command> <player> tphereCommandUsage=/<command> <player> tphereCommandUsage1=/<command> <player> tpoCommandUsage1=/<command> <player> @@ -834,15 +841,15 @@ tprCommandUsage1=/<command> tps=§6Теперішній TPS \= {0} tptoggleCommandUsage=/<command> [player] [on|off] tptoggleCommandUsage1=/<command> [player] -tradeSignEmpty=§4В торговій табличці нічого нема. +tradeSignEmpty=§4В торговій табличці нічого немає. tradeSignEmptyOwner=§4В торговій табличці нічого немає щоб зібрати. -treeFailure=§4Генерація великого дерева провалена\! Спробуй знову на траві або землі. +treeFailure=§4Не вдалося згенерувати дерево. Спробуй знову на траві або землі. treeSpawned=§6Дерево створено. -true=§aвключено§r -typeTpacancel=§6Щоб відмінити цей запит, введіть §c/tpcancel§6. +true=§aувімкнено§r +typeTpacancel=§6Щоб скасувати цей запит, напишіть §c/tpcancel§6. typeTpaccept=§6Щоб телепортуватись, напишіть §c/tpaccept§6. typeTpdeny=§6Щоб відхилити цей запит, введіть §c/tpdeny§6. -typeWorldName=§6Вам також можна ввести ім''я конкретного світу. +typeWorldName=§6Також можете ввести ім''я конкретного світу. unableToSpawnItem=§4Неможливо видати §c{0}§4; цю річ неможливо видати. unableToSpawnMob=§4Неможливо заспавнити моба. unbanCommandUsage=/<command> <player> @@ -854,11 +861,11 @@ unknownItemId=§4Невідомий id предмету\: §r {0}§4. unknownItemInList=§4Невідомий предмет {0} в списку {1}. unknownItemName=§4Невідома назва предмету\: {0}. unlimitedItemPermission=§4Немає прав для необмеженої кількості речей §c{0}§4. -unlimitedItems=§6Безлімітні речі\:§r +unlimitedItems=§6Нескінченні речі\:§r unmutedPlayer=§6Тепер гравець§c {0} §6може писати в чат. -unsafeTeleportDestination=§4Телепорт не безпечний і захист після телепортації вимкнений. +unsafeTeleportDestination=§4Телепорт у це місце небезпечний, а захист телепортації вимкнений. unsupportedFeature=§4Ця функція не підтримується на поточній версії серверу. -unvanishedReload=§4Перезавантаження змусило вас стати видимим. +unvanishedReload=§4Через перезавантаження Ви стали видимими. upgradingFilesError=Помилка при оновленні файлів. uptime=§6Час роботи\:§c {0} userAFK=§7{0} §5медитує і може не відповідати. @@ -886,7 +893,7 @@ versionOutputWarn=§6{0} версія\: §c{1} versionOutputUnsupported=§d{0} §6версія\: §d{1} versionOutputUnsupportedPlugins=§6У Вас встановлені §dнепідтримувані плагіни§6\! versionMismatch=§4Версії невідповідають\! Будь ласка, оновіться до тієї самої версії {0}. -versionMismatchAll=§4Версії невідповідають\! Будь ласка, оновіть всі файли .jar Essentials до одинакової версії. +versionMismatchAll=§4Версії не збігаються\! Будь ласка, оновіть всі файли .jar Essentials до однакової версії. voiceSilenced=§6Ви не можете писати в чат\! voiceSilencedReason=§6Ваш голос заглушено\! Причина\: §c{0} walking=ходьби diff --git a/Essentials/src/main/resources/messages_vi.properties b/Essentials/src/main/resources/messages_vi.properties index cff5f5653a7..e6e261c2300 100644 --- a/Essentials/src/main/resources/messages_vi.properties +++ b/Essentials/src/main/resources/messages_vi.properties @@ -36,6 +36,8 @@ backAfterDeath=§6Dùng lệnh§c /back§6 để quay về điểm chết. backCommandDescription=Dịch chuyển đến vị trí của bạn trước khi tp/spawn/warp. backCommandUsage=/<command> [người chơi] backCommandUsage1=/<command> +backCommandUsage1Description=Dịch chuyển bạn đến địa điểm trước đó +backCommandUsage2Description=Dịch chuyển một người cụ thể tới điểm trước đó của họ backOther=§6Đã đưa§c {0}§6 về vị trí trước đó. backupCommandDescription=Chạy sao lưu nếu đã được cấu hình. backupCommandUsage=/<command> @@ -47,6 +49,7 @@ balance=§aSố dư\:§c {0} balanceCommandDescription=Trạng thái tiền dư hiện tại của người chơi. balanceCommandUsage=/<command> [người chơi] balanceCommandUsage1=/<command> +balanceCommandUsage1Description=Ghi ra số tiền của bạn balanceCommandUsage2Description=Hiển thị số dư của người chơi được chỉ định balanceOther=§aSố dư của {0}§a\:§c {1} balanceTop=§6Đứng đầu số dư ({0}) @@ -119,6 +122,7 @@ clearinventoryCommandUsage1=/<command> clearinventoryCommandUsage1Description=Xoá bỏ tất cả vật phẩm trong túi đồ của bạn clearinventoryconfirmtoggleCommandUsage=/<command> commandArgumentOptional=§7 +commandArgumentOr=§c commandArgumentRequired=§e commandCooldown=§cBạn không thể nhập lệnh đó đó trong {0}. commandDisabled=§cLệnh§6 {0}§c đã tắt. @@ -195,10 +199,13 @@ destinationNotSet=Đích đến chưa được đặt\! disabled=vô hiệu hoá disabledToSpawnMob=§4Tạo ra thực thể này đã bị vô hiệu hoá trong tệp cấu hình. disableUnlimited=§6Vô hiệu hóa đặt không giới hạn của§c {0} §6cho {1}§6. +discordCommandUsage=/<command> +discordCommandUsage1=/<command> discordCommandExecuteDescription=Truy xuất một lệnh điều khiển trên máy chủ Minecraft. discordCommandExecuteArgumentCommand=Lệnh được truy xuất discordCommandExecuteReply=Lệnh đang truy xuất\: "/{0}" discordCommandListDescription=Xem danh sách người chơi trực tuyến. +discordErrorCommandDisabled=Lệnh đó đã bị vô hiệu hoá\! discordLoggingInDone=Đăng nhập thành công với tên đăng nhập {0} disposal=Xếp đặt disposalCommandUsage=/<command> @@ -585,6 +592,8 @@ playerTempBanned=§6Người chơi §c{0}§6 đã tạm cấm §c{1}§6 trong § playerUnbanIpAddress=§6Người chơi§c {0} §6đã mở khóa IP\: {1} playerUnbanned=§6Người chơi§c {0} §6đã mở khóa§c {1} playerUnmuted=§6Bạn đã không còn bị khóa trò chuyện. +playtimeCommandUsage=/<command> [người chơi] +playtimeCommandUsage1=/<command> pong=Pong\! posPitch=§6Pitch\: {0} (Góc đầu) possibleWorlds=§6Những thế giới hiện có là từ §c0§6 đến §c{0}§6. diff --git a/Essentials/src/main/resources/messages_zh.properties b/Essentials/src/main/resources/messages_zh.properties index e96116fbf40..34397c6e907 100644 --- a/Essentials/src/main/resources/messages_zh.properties +++ b/Essentials/src/main/resources/messages_zh.properties @@ -143,6 +143,7 @@ clearinventoryCommandUsage3Description=清空所有指定玩家物品栏中所 clearinventoryconfirmtoggleCommandDescription=切换是否在清除物品栏的时候显示确认提示。 clearinventoryconfirmtoggleCommandUsage=/<command> commandArgumentOptional=§7 +commandArgumentOr=§c commandArgumentRequired=§e commandCooldown=§c你不能使用{0}命令。 commandDisabled=§c命令§6{0}§c已被禁用。 @@ -232,6 +233,18 @@ destinationNotSet=目的地未设置! disabled=关闭 disabledToSpawnMob=§4配置文件中已禁止此生物的生成。 disableUnlimited=§6已取消§c{1}§6无限放置§c{0}的能力。 +discordbroadcastCommandDescription=向指定的Discord频道广播一条消息。 +discordbroadcastCommandUsage=/<command> <频道> <消息> +discordbroadcastCommandUsage1=/<command> <频道> <消息> +discordbroadcastCommandUsage1Description=将给定的消息发送到指定的Discord频道 +discordbroadcastInvalidChannel=§4Discord频道§c{0}§4不存在。 +discordbroadcastPermission=§4你没有向§c{0}§4频道发送消息的权限 +discordbroadcastSent=§6消息已发送到§c{0}§6! +discordCommandDescription=将Discord邀请链接发送给玩家。 +discordCommandLink=加入我们的Discord服务器!邀请链接:§c{0}§6 +discordCommandUsage=/<command> +discordCommandUsage1=/<command> +discordCommandUsage1Description=将Discord邀请链接发送给玩家 discordCommandExecuteDescription=在Minecraft服务器上执行控制台命令。 discordCommandExecuteArgumentCommand=要执行的命令 discordCommandExecuteReply=执行命令:"/{0}" @@ -248,6 +261,8 @@ discordErrorLoggerNoPerms=由于权限不足,导致Discord控制台日志记 discordErrorNoGuild=无效或缺失服务器ID!请按照配置里的教程来设置插件。 discordErrorNoGuildSize=你的机器人尚未加入任何服务器!请按照配置里的教程来设置插件。 discordErrorNoPerms=你的机器人无法在任何频道中查看或发送消息!请确保机器人在所有你希望使用的频道中都拥有读取及发送消息的权限。 +discordErrorNoPrimary=你没有设置主频道或设置的主频道无效。已自动回滚到默认频道:\#{0}。 +discordErrorNoPrimaryPerms=你的机器人无法在你的主频道\#{0}中说话。 请确保你的机器人在你想要使用的频道中都拥有读取及发送消息的权限。 discordErrorNoToken=未提供令牌!请按照配置里的教程来设置插件。 discordErrorWebhook=在传输信息到控制台频道时发生了错误!这很有可能是因为控制台的webhook被意外删除而导致的。这通常可以通过让你的机器人得到“管理Webhook”权限,然后使用“/ess reload”来修复。 discordLoggingIn=正在尝试登录到Discord… @@ -260,6 +275,12 @@ disposalCommandUsage=/<command> distance=§6距离:{0} dontMoveMessage=§6传送将在§c{0}§6内开始,请不要移动。 downloadingGeoIp=下载GeoIP数据库中...这可能需要花费一段时间(国家:1.7 MB,城市:30 MB) +dumpConsoleUrl=服务器转储文件已创建:§c{0} +dumpCreating=§6正在创建服务器转储文件... +dumpDeleteKey=§6如果你想在以后删除此转储文件,请使用以下删除密钥:§c{0} +dumpError=§4在创建转储文件§c{0}§4时出错。 +dumpErrorUpload=§4在上传§c{0}§4时发生错误:§c{1} +dumpUrl=§6已创建服务器转储文件:§c{0} duplicatedUserdata=复制了玩家数据:{0} 和 {1} durability=§6这个工具剩余耐久值为§4{0}§6。 east=E @@ -309,6 +330,8 @@ essentialsCommandUsage6=/<command> cleanup essentialsCommandUsage6Description=清除旧的玩家数据 essentialsCommandUsage7=/<command> homes essentialsCommandUsage7Description=管理玩家的家 +essentialsCommandUsage8=/<command> dump [all] [config] [discord] [kits] [log] +essentialsCommandUsage8Description=使用请求信息生成服务器转储文件 essentialsHelp1=由于此文件已损坏,Essentials无法开启。EssentialsX现在已被关闭。如果你无法自行修复此问题,请前往http\://tiny.cc/EssentialsChat寻求帮助。 essentialsHelp2=由于文件损坏且Essentials无法打开,EssentialsX现在已被关闭。如果你无法自行修复此问题,请在游戏中输入/essentialshelp(或前往http\://tiny.cc/EssentialsChat寻求帮助)。 essentialsReload=§6Essentials已重新载入§c{0}§6。 @@ -565,6 +588,9 @@ jailAlreadyIncarcerated=§4玩家已在监狱中:{0} jailList=§6监狱:§r {0} jailMessage=§4请在监狱中面壁思过! jailNotExist=§4该监狱不存在。 +jailNotifyJailed=§6玩家§c{0}§6被§c{1}§6监禁。 +jailNotifyJailedFor=§6玩家§c{0}§6被§c{1}§6监禁§c{1}§6。 +jailNotifySentenceExtended=§6玩家§c{0}§6的监禁时间被§c{2}§6延长到§c{1}§6。 jailReleased=§c{0}§6出狱了。 jailReleasedPlayerNotify=§6你已被释放! jailSentenceExtended=§6囚禁时间追加到§c{0}§6。 @@ -641,6 +667,7 @@ listCommandUsage1=/<command> [组名] listCommandUsage1Description=列出所有(或指定组)的玩家 listGroupTag=§6{0}§r: listHiddenTag=§7[隐身]§r +listRealName=({0}) loadWarpError=§4加载传送点{0}失败。 localFormat=[L]<{0}> {1} loomCommandDescription=打开一个织布机。 @@ -660,6 +687,8 @@ mailCommandUsage4=/<command> sendall <消息> mailCommandUsage4Description=向所有玩家发送指定消息 mailCommandUsage5=/<command> sendtemp <玩家> <过期时间> <消息> mailCommandUsage5Description=向指定的玩家发送临时消息 +mailCommandUsage6=/<command> sendtempall <过期时间> <消息> +mailCommandUsage6Description=向所有的玩家发送给定过期时间的临时消息 mailDelay=你在一分钟内发送了太多的邮件。限制:{0} mailFormatNew=§6[§r{0}§6] §6[§r{1}§6] §r{2} mailFormatNewTimed=§6[§r{0}§6] §6[§r{1}§6] §r{2} @@ -862,6 +891,14 @@ playerTempBanned=§6操作员§c{0}§6临时封禁了§c{1}§6 §c{2}§6,理 playerUnbanIpAddress=§6操作员§c{0}§6解封了IP:§c{1} playerUnbanned=§6操作员§c{0}§6解封了§c{1} playerUnmuted=§6你被解除禁言。 +playtimeCommandDescription=显示玩家的游玩时间 +playtimeCommandUsage=/<command> [玩家] +playtimeCommandUsage1=/<command> +playtimeCommandUsage1Description=显示你的游玩时间 +playtimeCommandUsage2=/<command> <玩家> +playtimeCommandUsage2Description=显示指定玩家的游玩时间 +playtime=§6游玩时间:§c{0} +playtimeOther=§6{1}的游玩时间:§c{0} pong=啪! posPitch=§6仰角:{0}(头部角度) possibleWorlds=§6可行的世界编号为§c0§6至§c{0}§6。 @@ -1252,10 +1289,10 @@ tpacancelCommandUsage1=/<command> tpacancelCommandUsage1Description=取消你所有未完成的传送请求 tpacancelCommandUsage2=/<command> <玩家> tpacancelCommandUsage2Description=取消与指定玩家所有未完成的传送请求 -tpacceptCommandDescription=接受传送请求 tpacceptCommandUsage=/<command> [其他玩家] tpacceptCommandUsage1=/<command> -tpacceptCommandUsage1Description=接受传送请求 +tpacceptCommandUsage2=/<command> <玩家> +tpacceptCommandUsage3=/<command> * tpahereCommandDescription=请求指定玩家传送到你的位置。 tpahereCommandUsage=/<command> <玩家> tpahereCommandUsage1=/<command> <玩家> @@ -1268,10 +1305,10 @@ tpautoCommandDescription=自动接受传送请求。 tpautoCommandUsage=/<command> [玩家] tpautoCommandUsage1=/<command> [玩家] tpautoCommandUsage1Description=为你自己(或指定玩家)切换是否自动接受传送请求 -tpdenyCommandDescription=拒绝一个传送请求。 tpdenyCommandUsage=/<command> tpdenyCommandUsage1=/<command> -tpdenyCommandUsage1Description=拒绝一个未处理的传送请求 +tpdenyCommandUsage2=/<command> <玩家> +tpdenyCommandUsage3=/<command> * tphereCommandDescription=传送玩家到你的位置。 tphereCommandUsage=/<command> <玩家> tphereCommandUsage1=/<command> <玩家> diff --git a/Essentials/src/main/resources/messages_zh_TW.properties b/Essentials/src/main/resources/messages_zh_TW.properties index b3ddbeb6c91..29f631596cf 100644 --- a/Essentials/src/main/resources/messages_zh_TW.properties +++ b/Essentials/src/main/resources/messages_zh_TW.properties @@ -143,6 +143,7 @@ clearinventoryCommandUsage3Description=從指定玩家物品欄清除所有或 clearinventoryconfirmtoggleCommandDescription=切換是否提示確定清空物品欄。 clearinventoryconfirmtoggleCommandUsage=/<command> commandArgumentOptional=§7 +commandArgumentOr=§c commandArgumentRequired=§e commandCooldown=§c請在 {0}後重新輸入指令。 commandDisabled=§c已關閉 §6 {0}§c 指令。 @@ -232,6 +233,18 @@ destinationNotSet=未設定目的地 ! disabled=關閉 disabledToSpawnMob=§4已在配置檔案中禁止該生物的生成。 disableUnlimited=§c已關閉 {1} §6無限放置§c {0} §6的能力。 +discordbroadcastCommandDescription=廣播訊息到指定的 Discord 頻道。 +discordbroadcastCommandUsage=/<command> <channel> <msg> +discordbroadcastCommandUsage1=/<command> <channel> <msg> +discordbroadcastCommandUsage1Description=將指定的訊息傳送到指定的 Discord 頻道 +discordbroadcastInvalidChannel=§4不存在 §c{0}§4 Discord 頻道。 +discordbroadcastPermission=§4你沒有傳送訊息到 §c{0}§4 頻道的權限。 +discordbroadcastSent=§6已傳送訊息 ​§c{0}§6 ! +discordCommandDescription=將 Discord 邀請連結傳給玩家。 +discordCommandLink=§6加入我們的 Discord 伺服器: §c{0}§6 ! +discordCommandUsage=/<command> +discordCommandUsage1=/<command> +discordCommandUsage1Description=將 Discord 邀請連結傳給玩家 discordCommandExecuteDescription=在伺服器上執行控制台指令。 discordCommandExecuteArgumentCommand=要執行的指令 discordCommandExecuteReply=正在執行指令 : 「/{0}」 @@ -248,6 +261,8 @@ discordErrorLoggerNoPerms=由於權限不足,Discord 控制台紀錄器已被 discordErrorNoGuild=伺服器 ID 無效或遺失 ! 請按照設定檔案中的教學來設定插件。 discordErrorNoGuildSize=你的機器人不在任何伺服器裡面 ! 請按照設定檔案中的教學來設定插件。 discordErrorNoPerms=你的機器人無法查看或傳送訊息到任何頻道 ! 請確認你的機器人在所有你想使用的頻道中都有讀取及傳送訊息的權限。 +discordErrorNoPrimary=你還沒有定義主要頻道,或定義的主要頻道無效。還原為預設頻道 : \#{0}。 +discordErrorNoPrimaryPerms=你的機器人無法在主要頻道 \#{0} 中發言。請確保你的機器人在想要使用的所有頻道中都具有複寫權限。 discordErrorNoToken=未提供權杖 ! 請按照設定檔案中的教學來設定插件。 discordErrorWebhook=要傳送訊息至你的控制台頻道時發生錯誤 ! 這很有可能是因為控制台的 Webhook 被意外刪除而導致的。通常只要確認你的機器人有「管理 Webhooks」的權限,然後執行「/ess reload」即可修復。 discordLoggingIn=正在嘗試登入至 Discord…… @@ -260,6 +275,12 @@ disposalCommandUsage=/<command> distance=§6距離 : {0} dontMoveMessage=§6傳送將在 §c{0}§6後開始,不要移動。 downloadingGeoIp=下載 GeoIP 資料庫中…… 這可能會花點時間。 +dumpConsoleUrl=已經建立伺服器傾印檔案 : §c{0} +dumpCreating=§6正在建立伺服器傾印檔案…… +dumpDeleteKey=§6若你稍後想刪除這份傾印檔案,請使用這個刪除代碼 : §c{0} +dumpError=§4建立 §c{0}§4 傾印檔案時發生錯誤。 +dumpErrorUpload=§4上傳 §c{0}§4 時發生錯誤 : §c{1} +dumpUrl=§6已經建立伺服器傾印檔案 : §c{0} duplicatedUserdata=已經複製玩家資料 : {0} 和 {1}。 durability=§6這個工具還有 §c{0}§6 點耐久度。 east=東 @@ -309,6 +330,8 @@ essentialsCommandUsage6=/<command> cleanup essentialsCommandUsage6Description=清除舊的玩家資料 essentialsCommandUsage7=/<command> homes essentialsCommandUsage7Description=管理玩家的家 +essentialsCommandUsage8=/<command> dump [all] [config] [discord] [kits] [log] +essentialsCommandUsage8Description=根據請求的資訊產生伺服器傾印檔案 essentialsHelp1=檔案毀損以致 Essentials 無法將其開啟,現已停用 Essentials。若無法自行修正,請前往 https\://essentialsx.net/wiki/Home.html 尋求協助。 essentialsHelp2=檔案毀損以致 Essentials 無法將其開啟,現已停用 Essentials。若無法自行修正,在遊戲中輸入 /essentialshelp 或前往 https\://essentialsx.net/wiki/Home.html 尋求協助。 essentialsReload=§6已重新載入 Essentials§c {0}§6。 @@ -394,7 +417,7 @@ giveCommandUsage=/<command> <player> <item|numeric> [amount [itemmeta...]] giveCommandUsage1=/<command> <player> <item> [amount] giveCommandUsage1Description=給予指定玩家 64 個或指定數量的物品 giveCommandUsage2=/<command> <player> <item> <amount> <meta> -giveCommandUsage2Description=給予指定玩家指定數量的元數據指定物品 +giveCommandUsage2Description=給予指定玩家指定數量的元資料物品 geoipCantFind=§6玩家 §c{0} §6來自於 §a未知的國家§6。 geoIpErrorOnJoin=無法獲得 {0} 的 GeoIP 資料。請確保你的許可證金鑰和配置正確。 geoIpLicenseMissing=找不到許可證金鑰 ! 請訪問 https\://essentialsx.net/geoip 以獲得初次設定說明。 @@ -519,7 +542,7 @@ itemCommandUsage=/<command> <item|numeric> [amount [itemmeta...]] itemCommandUsage1=/<command> <item> [amount] itemCommandUsage1Description=給予你一組或指定數量的物品 itemCommandUsage2=/<command> <item> <amount> <meta> -itemCommandUsage2Description=給予你指定數量帶有元數據的指定物品 +itemCommandUsage2Description=給予你指定數量帶有元資料物品 itemId=§6ID : §c {0} itemloreClear=§6你已清除該物品的描述文字。 itemloreCommandDescription=編輯物品描述文字。 @@ -565,6 +588,9 @@ jailAlreadyIncarcerated=§4已在監獄中的玩家 :§c {0} jailList=§6監獄 : §r{0} jailMessage=§4請在監獄中面壁思過。 jailNotExist=§4該監獄不存在。 +jailNotifyJailed=§c {1}§6將玩家§c {0} §6關進監獄。 +jailNotifyJailedFor=§6玩家§c {0} §6被§c {2} §6逮捕並關進監獄§c {1}§6。 +jailNotifySentenceExtended=§6玩家§c {0} §6的監禁時間被§c {2} §6延長到§c {1}§6。 jailReleased=§6玩家 §c{0}§6 出獄了。 jailReleasedPlayerNotify=§6你已被釋放 ! jailSentenceExtended=§6監禁時間增加到 : §c{0}§6。 @@ -641,6 +667,7 @@ listCommandUsage1=/<command> [group] listCommandUsage1Description=列出伺服器上所有或指定組別的玩家 listGroupTag=§6{0}§r : listHiddenTag=§7[隱身]§r +listRealName=({0}) loadWarpError=§4無法載入地標 {0}。 localFormat=[L]<{0}> {1} loomCommandDescription=開啟織布機。 @@ -660,6 +687,8 @@ mailCommandUsage4=/<command> sendall <message> mailCommandUsage4Description=向所有玩家發送訊息 mailCommandUsage5=/<command> sendtemp <player> <expire time> <message> mailCommandUsage5Description=向指定的玩家傳送,指定時間內移除的訊息 +mailCommandUsage6=/<command> sendtempall <expire time> <message> +mailCommandUsage6Description=將指定訊息傳給所有玩家,並在指定時間過後銷毀 mailDelay=在短時間內發送太多郵件,最多 {0} 封。 mailFormatNew=§6[§r{0}§6] §6[§r{1}§6] §r{2} mailFormatNewTimed=§6[§e⚠§6] §6[§r{0}§6] §6[§r{1}§6] §r{2} @@ -788,7 +817,7 @@ noLocationFound=§4找不到有效地點。 noMail=§6你沒有任何郵件。 noMatchingPlayers=§6找不到匹配的玩家。 noMetaFirework=§4你沒有應用煙火數據的權限。 -noMetaJson=這個版本的 Bukkit 不支援 JSON 元數據資料。 +noMetaJson=這個版本的 Bukkit 不支援 JSON 元資料。 noMetaPerm=§4你沒有應用 §c{0}§4 數據的權限。 none=無 noNewMail=§6你沒有新的郵件。 @@ -862,6 +891,14 @@ playerTempBanned=§6玩家§c {1} §6暫時被§c {0} §6封禁 §c{2}§6。原 playerUnbanIpAddress=§6玩家§c {0} §6已解除該封禁 IP 位址 : §c{1}。 playerUnbanned=§6玩家§c {1} §6被§c {0} §6解除封禁。 playerUnmuted=§6你被解除禁言了。 +playtimeCommandDescription=顯示玩家的遊戲時長 +playtimeCommandUsage=/<command> [player] +playtimeCommandUsage1=/<command> +playtimeCommandUsage1Description=顯示你的遊戲時長 +playtimeCommandUsage2=/<command> <player> +playtimeCommandUsage2Description=顯示指定玩家的遊戲時長 +playtime=§6遊戲時長 :§c {0} +playtimeOther=§6{1} 的遊戲時長§6 :§c {0} pong=啪 ! posPitch=§6仰角 : {0} (頭部的角度) possibleWorlds=§6可使用的世界編號為 §c0§6 到 §c{0}§6。 @@ -1118,7 +1155,7 @@ skullCommandUsage2Description=獲得指定玩家的頭顱 slimeMalformedSize=§4大小非法。 smithingtableCommandDescription=開啟鍛造台。 smithingtableCommandUsage=/<command> -socialSpy=§6監聽 §c{0}§6 : §c{1} +socialSpy=§6已§c{1} §6對 §c{0}§6 的監聽。 socialSpyMsgFormat=§6[§c{0}§7 -> §c{1}§6] §7{2} socialSpyMutedPrefix=§f[§6監聽§f] §7 (已被禁言) §r socialspyCommandDescription=切換是否可以在聊天中看到 msg / mail 指令。 @@ -1252,10 +1289,10 @@ tpacancelCommandUsage1=/<command> tpacancelCommandUsage1Description=取消你所有未完成的傳送請求 tpacancelCommandUsage2=/<command> <player> tpacancelCommandUsage2Description=取消指定玩家所有未完成的傳送請求 -tpacceptCommandDescription=接受傳送請求。 tpacceptCommandUsage=/<command> [otherplayer] tpacceptCommandUsage1=/<command> -tpacceptCommandUsage1Description=接受傳送請求 +tpacceptCommandUsage2=/<command> <player> +tpacceptCommandUsage3=/<command> * tpahereCommandDescription=請求指定的玩家傳送到你身邊。 tpahereCommandUsage=/<command> <player> tpahereCommandUsage1=/<command> <player> @@ -1268,10 +1305,10 @@ tpautoCommandDescription=自動接受所有傳送請求。 tpautoCommandUsage=/<command> [player] tpautoCommandUsage1=/<command> [player] tpautoCommandUsage1Description=切換你或指定玩家的是否自動接受傳送請求 -tpdenyCommandDescription=拒絕傳送請求。 tpdenyCommandUsage=/<command> tpdenyCommandUsage1=/<command> -tpdenyCommandUsage1Description=拒絕傳送請求 +tpdenyCommandUsage2=/<command> <player> +tpdenyCommandUsage3=/<command> * tphereCommandDescription=傳送玩家到你身邊。 tphereCommandUsage=/<command> <player> tphereCommandUsage1=/<command> <player> @@ -1474,7 +1511,7 @@ worthCommandUsage3=/<command> all worthCommandUsage3Description=檢查物品欄內所有具有價值的物品 worthCommandUsage4=/<command> blocks [amount] worthCommandUsage4Description=檢查物品欄內所有具有價值或者指定數量的方塊 -worthMeta=§a一組元數據為 {1} 的 {0} 價值 §c{2}§a ({3} 單位物品,每個價值 {4})。 +worthMeta=§a一組元資料為 {1} 的 {0} 價值 §c{2}§a ({3} 單位物品,每個價值 {4})。 worthSet=§6已設定價格 year=年 years=年 From dc27af78bf5c65d0e26ae5d95fb51b1c96980f20 Mon Sep 17 00:00:00 2001 From: Josh Roy <10731363+JRoy@users.noreply.github.com> Date: Fri, 10 Dec 2021 14:09:16 -0500 Subject: [PATCH 120/120] Update to MC 1.18.1 --- .../main/java/com/earth2me/essentials/utils/VersionUtil.java | 4 ++-- EssentialsDiscord/build.gradle | 2 +- README.md | 2 +- build-logic/src/main/kotlin/constants.kt | 2 +- .../src/main/kotlin/essentials.base-conventions.gradle.kts | 2 +- .../ess3/nms/refl/providers/ReflPersistentDataProvider.java | 2 +- settings.gradle.kts | 1 + 7 files changed, 8 insertions(+), 7 deletions(-) diff --git a/Essentials/src/main/java/com/earth2me/essentials/utils/VersionUtil.java b/Essentials/src/main/java/com/earth2me/essentials/utils/VersionUtil.java index 5983f5838e8..710e7a1723c 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/utils/VersionUtil.java +++ b/Essentials/src/main/java/com/earth2me/essentials/utils/VersionUtil.java @@ -34,9 +34,9 @@ public final class VersionUtil { public static final BukkitVersion v1_16_5_R01 = BukkitVersion.fromString("1.16.5-R0.1-SNAPSHOT"); public static final BukkitVersion v1_17_R01 = BukkitVersion.fromString("1.17-R0.1-SNAPSHOT"); public static final BukkitVersion v1_17_1_R01 = BukkitVersion.fromString("1.17.1-R0.1-SNAPSHOT"); - public static final BukkitVersion v1_18_R01 = BukkitVersion.fromString("1.18-R0.1-SNAPSHOT"); + public static final BukkitVersion v1_18_1_R01 = BukkitVersion.fromString("1.18.1-R0.1-SNAPSHOT"); - private static final Set<BukkitVersion> supportedVersions = ImmutableSet.of(v1_8_8_R01, v1_9_4_R01, v1_10_2_R01, v1_11_2_R01, v1_12_2_R01, v1_13_2_R01, v1_14_4_R01, v1_15_2_R01, v1_16_5_R01, v1_17_1_R01, v1_18_R01); + private static final Set<BukkitVersion> supportedVersions = ImmutableSet.of(v1_8_8_R01, v1_9_4_R01, v1_10_2_R01, v1_11_2_R01, v1_12_2_R01, v1_13_2_R01, v1_14_4_R01, v1_15_2_R01, v1_16_5_R01, v1_17_1_R01, v1_18_1_R01); private static final Map<String, SupportStatus> unsupportedServerClasses; diff --git a/EssentialsDiscord/build.gradle b/EssentialsDiscord/build.gradle index 43495dfb8cf..9a8e7fe1f38 100644 --- a/EssentialsDiscord/build.gradle +++ b/EssentialsDiscord/build.gradle @@ -9,7 +9,7 @@ dependencies { } implementation 'com.vdurmont:emoji-java:5.1.1' implementation 'club.minnced:discord-webhooks:0.7.2' - compileOnly 'org.apache.logging.log4j:log4j-core:2.0-beta9' + compileOnly 'org.apache.logging.log4j:log4j-core:2.15.0' compileOnly 'me.clip:placeholderapi:2.10.9' } diff --git a/README.md b/README.md index 658260cc3e5..15043cb068e 100644 --- a/README.md +++ b/README.md @@ -26,7 +26,7 @@ EssentialsX is almost a completely drop-in replacement for Essentials. However, * **EssentialsX requires Java 8 or higher.** On older versions, the plugin may not work properly. -* **EssentialsX supports Minecraft versions 1.8.8, 1.9.4, 1.10.2, 1.11.2, 1.12.2, 1.13.2, 1.14.4, 1.15.2, 1.16.5, 1.17.1, and 1.18** +* **EssentialsX supports Minecraft versions 1.8.8, 1.9.4, 1.10.2, 1.11.2, 1.12.2, 1.13.2, 1.14.4, 1.15.2, 1.16.5, 1.17.1, and 1.18.1** Support diff --git a/build-logic/src/main/kotlin/constants.kt b/build-logic/src/main/kotlin/constants.kt index ab3ac4a3595..5b10e0b9439 100644 --- a/build-logic/src/main/kotlin/constants.kt +++ b/build-logic/src/main/kotlin/constants.kt @@ -1 +1 @@ -const val RUN_PAPER_MINECRAFT_VERSION = "1.17.1" +const val RUN_PAPER_MINECRAFT_VERSION = "1.18.1" diff --git a/build-logic/src/main/kotlin/essentials.base-conventions.gradle.kts b/build-logic/src/main/kotlin/essentials.base-conventions.gradle.kts index 2ab0139c38c..8db28a79be7 100644 --- a/build-logic/src/main/kotlin/essentials.base-conventions.gradle.kts +++ b/build-logic/src/main/kotlin/essentials.base-conventions.gradle.kts @@ -10,7 +10,7 @@ plugins { val baseExtension = extensions.create<EssentialsBaseExtension>("essentials", project) val checkstyleVersion = "8.36.2" -val spigotVersion = "1.18-R0.1-SNAPSHOT" +val spigotVersion = "1.18.1-R0.1-SNAPSHOT" val junit5Version = "5.7.0" val mockitoVersion = "3.2.0" diff --git a/providers/NMSReflectionProvider/src/main/java/net/ess3/nms/refl/providers/ReflPersistentDataProvider.java b/providers/NMSReflectionProvider/src/main/java/net/ess3/nms/refl/providers/ReflPersistentDataProvider.java index bc23bbdb64e..41fa62a008d 100644 --- a/providers/NMSReflectionProvider/src/main/java/net/ess3/nms/refl/providers/ReflPersistentDataProvider.java +++ b/providers/NMSReflectionProvider/src/main/java/net/ess3/nms/refl/providers/ReflPersistentDataProvider.java @@ -12,7 +12,7 @@ import java.util.Locale; /** - * Stores persistent data on 1.18-1.13 in a manner that's consistent with PDC on 1.14+ to enable + * Stores persistent data on 1.8-1.13 in a manner that's consistent with PDC on 1.14+ to enable * seamless upgrades. */ public class ReflPersistentDataProvider implements PersistentDataProvider { diff --git a/settings.gradle.kts b/settings.gradle.kts index 9e25c0594f0..8b8c0b78614 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -19,6 +19,7 @@ dependencyResolutionManagement { } mavenCentral { content { includeGroup("net.kyori") } + content { includeGroup("org.apache.logging.log4j") } } } repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)