Compare commits

..
Author SHA1 Message Date
Josh Roy 14cdde009c Release 2.20.0 (#5336) 2023-05-23 11:18:21 -04:00
Flask Bot 1883e6adbc New Crowdin updates (#5348) 2023-05-22 00:49:43 +00:00
Josh Roy 2f9659e7fc Fix NPE during reload when deleted warps directory (#5353) 2023-05-20 10:03:24 -07:00
Josh Roy 1a4f63915f Fix SignChangeEvent never actually being called (#5341)
Fixes #5340. Caused by a regression in #5304 which reverted the behaviour introduced in #5304.
2023-05-09 00:26:28 +01:00
Flask Bot dd3f4c2921 New Crowdin updates (#5334) 2023-05-07 04:57:44 +00:00
Josh Roy 7ebb6359e5 Fix offline player consumer returning null users (#5339) 2023-05-06 19:13:44 -04:00
Josh Roy 069ebfcd5b Fix NPE while syncing offline users for discord line module (#5338)
Only would happen for users who haven't joined
(or been loaded by different parts of the plugin)
since the last restart. This change first of all switches to a method to fetch users which will update the User base to the UUIDPlayer dummy base. Secondly, this change will not update the base of a User to a UUIDPlayer dummy unless the base is currently null (which would be the case in the condition described above).
2023-05-06 18:31:23 -04:00
pop4959 991bc61b0c Expire UserMap cache more aggressively and add cache debugging (#5331) 2023-05-05 18:44:22 -04:00
Flask Bot 8194d1f747 New Crowdin updates (#5303) 2023-05-05 06:40:58 +00:00
Josh RoyandMD ee7ea2ae39 Fire SignChangeEvent in /editsign (#5304)
Co-authored-by: MD <1917406+mdcfe@users.noreply.github.com>
2023-05-02 16:13:50 -04:00
Josh Roy 3d23916ad5 Add HomeModifyEvent for home create/delete/rename/set (#5216)
Implements #5213.
2023-05-02 20:48:28 +01:00
Sasha SorokinandJosh Roy e5b0c4c855 Add support for local and global chats in Discord (#4684)
Co-authored-by: Josh Roy <10731363+JRoy@users.noreply.github.com>
2023-04-30 21:30:11 -04:00
Josh RoyandMD 84fd45bd09 Bump JDA 4 version (#5328)
Bumping this for 2.20 release as  JDA 5 still not out of beta

Co-authored-by: MD <1917406+mdcfe@users.noreply.github.com>
2023-04-29 18:14:36 +00:00
Josh Roy 01883a6b18 Truncate command and argument descriptions (#5314)
Fixes #5315.
2023-04-29 19:00:40 +01:00
Josh Roy fd49b70a69 Fix top command not sending messages (#5302)
my three year old refactors still haunt me
2023-04-13 06:22:47 +00:00
Josh Roy 3a737480ec Remove unneeded sanitization in webhook names (#5311)
Regression from 384f63bf92
2023-04-13 07:15:48 +01:00
diademiemiandJosh Roy 384f63bf92 Allow configuring Discord webhook name (#5159)
Co-authored-by: Josh Roy <10731363+JRoy@users.noreply.github.com>
2023-04-10 00:27:36 +00:00
Joel OteroandJosh Roy 77dc87bb8e Add /bottom command (#5292)
Co-authored-by: Josh Roy <10731363+JRoy@users.noreply.github.com>
2023-04-09 21:05:53 +00:00
MD c716fc8236 Bump runServer task to Paper 1.19.4 (#5269) 2023-04-06 00:15:15 +00:00
Flask Bot c52c1fea9d New Crowdin updates (#5244) 2023-04-04 21:49:43 -07:00
Josh Roy e7c56b32a4 Fix sulk sensors detecting vanished players (#5262) 2023-04-02 22:29:29 +00:00
Josh Roy 11e6d3ca7b Fix /mail sendall not working (#5263) 2023-04-02 22:12:04 +00:00
Josh Roy 75481925f7 Update display names before formatting chat messages (#5282) 2023-04-02 22:08:38 +00:00
Josh Roy ecb1850451 Add message for unknown last location for /tpo (#5290) 2023-04-02 22:04:36 +00:00
Josh Roy 0f4af9e735 Use strict comparison for potions in trade signs (#5260) 2023-04-02 21:45:46 +00:00
Josh RoyandMD bf14b88600 Bump to 1.19.4 (#5273)
Co-authored-by: MD <1917406+mdcfe@users.noreply.github.com>
2023-03-17 18:54:33 +00:00
81 changed files with 1186 additions and 441 deletions

No files matched your search

@@ -1079,7 +1079,7 @@ public class Essentials extends JavaPlugin implements net.ess3.api.IEssentials {
// Since we already call UserMap#getUser() above, we are already okay with adding the user to the cache,
// so we need to manually add the user to the cache in order to avoid a memory leak and maintain behavior.
userMap.addCachedUser(user);
} else {
} else if (base.getClass() != UUIDPlayer.class || user.getBase() == null) {
user.update(base);
}
return user;
@@ -121,6 +121,15 @@ public class EssentialsPlayerListener implements Listener, FakeAccessor {
}
}
private static boolean isGameEventEvent() {
try {
Class.forName("org.bukkit.event.block.BlockReceiveGameEvent");
return true;
} catch (final ClassNotFoundException ignored) {
return false;
}
}
public void registerEvents() {
ess.getServer().getPluginManager().registerEvents(this, ess);
@@ -128,6 +137,10 @@ public class EssentialsPlayerListener implements Listener, FakeAccessor {
ess.getServer().getPluginManager().registerEvents(new ArrowPickupListener(), ess);
}
if (isGameEventEvent()) {
ess.getServer().getPluginManager().registerEvents(new SculkListener1_17(), ess);
}
if (isEntityPickupEvent()) {
ess.getServer().getPluginManager().registerEvents(new PickupListener1_12(), ess);
} else {
@@ -1001,6 +1014,15 @@ public class EssentialsPlayerListener implements Listener, FakeAccessor {
}
}
private final class SculkListener1_17 implements Listener {
@EventHandler
public void onGameEvent(final org.bukkit.event.block.BlockReceiveGameEvent event) {
if (event.getEntity() instanceof Player && ess.getUser((Player) event.getEntity()).isVanished()) {
event.setCancelled(true);
}
}
}
private final class CommandSendFilter implements CommandSendListenerProvider.Filter {
@Override
public Predicate<String> apply(Player player) {
@@ -3,7 +3,6 @@ package com.earth2me.essentials;
import com.earth2me.essentials.commands.IEssentialsCommand;
import com.earth2me.essentials.signs.EssentialsSign;
import com.earth2me.essentials.textreader.IText;
import com.earth2me.essentials.utils.NumberUtil;
import org.bukkit.Material;
import org.bukkit.event.EventPriority;
import org.spongepowered.configurate.CommentedConfigurationNode;
@@ -19,8 +18,6 @@ import java.util.function.Predicate;
import java.util.regex.Pattern;
public interface ISettings extends IConf {
String DEBUG_FLAG_NAMESPACE = "net.essentialsx";
File getConfigFile();
boolean areSignsDisabled();
@@ -144,10 +141,6 @@ public interface ISettings extends IConf {
boolean isDebug();
boolean isDebug(DebugFlag flag);
Long getDebugLong(DebugFlag flag);
void setDebug(boolean debug);
boolean isEcoDisabled();
@@ -289,6 +282,8 @@ public interface ISettings extends IConf {
int getMaxUserCacheCount();
long getMaxUserCacheValueExpiry();
boolean allowSilentJoinQuit();
boolean isCustomJoinMessage();
@@ -423,52 +418,4 @@ public interface ISettings extends IConf {
OFF
}
// TODO: consider separating out non-bool values? or replace this with an object-mapped class?
enum DebugFlag {
GENERIC("debug.generic", true),
USERMAP_PRINT_STACK("usermap.print-stack", false),
USERMAP_MAX_WARNS("usermap.max-warns", false),
;
private final String flagKey;
private final boolean isSetByGlobal;
DebugFlag(final String flagKey, final boolean isSetByGlobal) {
this.flagKey = flagKey;
this.isSetByGlobal = isSetByGlobal;
}
public String getFlagKey() {
return flagKey;
}
public boolean isSetByGlobal() {
return isSetByGlobal;
}
public String getSystemPropertyKey() {
return DEBUG_FLAG_NAMESPACE + "." + flagKey;
}
public String getConfigKey() {
return "debug." + (flagKey.replace("debug.", ""));
}
public String getSystemPropertyValue() {
return System.getProperty(getSystemPropertyKey(), "false");
}
public boolean getSystemPropertyBoolean() {
return Boolean.parseBoolean(getSystemPropertyValue());
}
public Long getSystemPropertyLong() {
final String value = getSystemPropertyValue();
if (NumberUtil.isLong(value)) {
return Long.parseLong(value);
}
return null;
}
}
}
@@ -855,41 +855,12 @@ public class Settings implements net.ess3.api.ISettings {
}
private boolean _isDebug() {
if (config.isBoolean("debug")) {
return config.getBoolean("debug", false);
}
if (config.isBoolean("debug.enabled")) {
return config.getBoolean("debug.enabled", false);
}
return false;
return config.getBoolean("debug", false);
}
@Override
public boolean isDebug() {
return isDebug(DebugFlag.GENERIC);
}
@Override
public boolean isDebug(DebugFlag flag) {
if (flag.isSetByGlobal() && (debug || configDebug)) {
return true;
}
final String flagConfigPath = flag.getConfigKey();
if (config.isBoolean(flagConfigPath)) {
return config.getBoolean(flagConfigPath, false);
}
return flag.getSystemPropertyBoolean();
}
@Override
public Long getDebugLong(DebugFlag flag) {
final String flagConfigPath = flag.getConfigKey();
if (config.hasProperty(flagConfigPath)) {
return config.getLong(flagConfigPath, 0);
}
return flag.getSystemPropertyLong();
return debug || configDebug;
}
@Override
@@ -1498,10 +1469,16 @@ public class Settings implements net.ess3.api.ISettings {
// #easteregg
@Override
public int getMaxUserCacheCount() {
final long count = Runtime.getRuntime().maxMemory() / 1024 / 96;
final long count = Runtime.getRuntime().maxMemory() / 1024 / 1024;
return config.getInt("max-user-cache-count", (int) count);
}
// #easteregg
@Override
public long getMaxUserCacheValueExpiry() {
return config.getLong("max-user-cache-value-expiry", 600);
}
@Override
public boolean isLastMessageReplyRecipient() {
return config.getBoolean("last-message-reply-recipient", false);
@@ -121,7 +121,7 @@ public class Warps implements IConf, net.ess3.api.IWarps {
public final void reloadConfig() {
warpPoints.clear();
final File[] listOfFiles = warpsFolder.listFiles();
if (listOfFiles.length >= 1) {
if (listOfFiles != null) {
for (final File listOfFile : listOfFiles) {
final String filename = listOfFile.getName();
if (listOfFile.isFile() && filename.endsWith(".yml")) {
@@ -0,0 +1,36 @@
package com.earth2me.essentials.commands;
import com.earth2me.essentials.Trade;
import com.earth2me.essentials.User;
import com.earth2me.essentials.utils.LocationUtil;
import org.bukkit.Location;
import org.bukkit.Server;
import org.bukkit.event.player.PlayerTeleportEvent;
import java.util.concurrent.CompletableFuture;
import static com.earth2me.essentials.I18n.tl;
public class Commandbottom extends EssentialsCommand {
public Commandbottom() {
super("bottom");
}
@Override
public void run(final Server server, final User user, final String commandLabel, final String[] args) throws Exception {
final int bottomX = user.getLocation().getBlockX();
final int bottomZ = user.getLocation().getBlockZ();
final float pitch = user.getLocation().getPitch();
final float yaw = user.getLocation().getYaw();
final Location unsafe = new Location(user.getWorld(), bottomX, ess.getWorldInfoProvider().getMinHeight(user.getWorld()), bottomZ, yaw, pitch);
final Location safe = LocationUtil.getSafeDestination(ess, unsafe);
final CompletableFuture<Boolean> future = getNewExceptionFuture(user.getSource(), commandLabel);
future.thenAccept(success -> {
if (success) {
user.sendMessage(tl("teleportBottom", safe.getWorld().getName(), safe.getBlockX(), safe.getBlockY(), safe.getBlockZ()));
}
});
user.getAsyncTeleport().teleport(safe, new Trade(this.getName(), ess), PlayerTeleportEvent.TeleportCause.COMMAND, future);
}
}
@@ -3,6 +3,8 @@ package com.earth2me.essentials.commands;
import com.earth2me.essentials.CommandSource;
import com.earth2me.essentials.IUser;
import com.earth2me.essentials.User;
import net.essentialsx.api.v2.events.HomeModifyEvent;
import org.bukkit.Bukkit;
import org.bukkit.Server;
import java.util.ArrayList;
@@ -37,18 +39,27 @@ public class Commanddelhome extends EssentialsCommand {
if (expandedArg.length > 1 && (user == null || user.isAuthorized("essentials.delhome.others"))) {
user = getPlayer(server, expandedArg, 0, true, true);
name = expandedArg[1];
name = expandedArg[1].toLowerCase(Locale.ENGLISH);
} else if (user == null) {
throw new NotEnoughArgumentsException();
} else {
name = expandedArg[0];
name = expandedArg[0].toLowerCase(Locale.ENGLISH);
}
if (name.equalsIgnoreCase("bed")) {
if (name.equals("bed")) {
throw new Exception(tl("invalidHomeName"));
}
user.delHome(name.toLowerCase(Locale.ENGLISH));
final HomeModifyEvent event = new HomeModifyEvent(sender.getUser(ess), user, name, user.getHome(name), false);
Bukkit.getServer().getPluginManager().callEvent(event);
if (event.isCancelled()) {
if (ess.getSettings().isDebug()) {
ess.getLogger().info("HomeModifyEvent canceled for /delhome execution by " + sender.getDisplayName());
}
return;
}
user.delHome(name);
sender.sendMessage(tl("deleteHome", name));
}
@@ -4,10 +4,13 @@ import com.earth2me.essentials.User;
import com.earth2me.essentials.utils.FormatUtil;
import com.earth2me.essentials.utils.NumberUtil;
import com.google.common.collect.Lists;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Server;
import org.bukkit.block.Block;
import org.bukkit.block.Sign;
import org.bukkit.entity.Player;
import org.bukkit.event.block.SignChangeEvent;
import java.util.Collections;
import java.util.List;
@@ -32,45 +35,71 @@ public class Commandeditsign extends EssentialsCommand {
final Sign sign = (Sign) target.getState();
try {
if (args[0].equalsIgnoreCase("set") && args.length > 2) {
final String[] existingLines = sign.getLines();
final int line = Integer.parseInt(args[1]) - 1;
final String text = FormatUtil.formatString(user, "essentials.editsign", getFinalArg(args, 2)).trim();
if (ChatColor.stripColor(text).length() > 15 && !user.isAuthorized("essentials.editsign.unlimited")) {
throw new Exception(tl("editsignCommandLimit"));
}
sign.setLine(line, text);
sign.update();
existingLines[line] = text;
if (callSignEvent(sign, user.getBase(), existingLines)) {
return;
}
user.sendMessage(tl("editsignCommandSetSuccess", line + 1, text));
} else if (args[0].equalsIgnoreCase("clear")) {
if (args.length == 1) {
final String[] existingLines = sign.getLines();
for (int i = 0; i < 4; i++) { // A whole one line of line savings!
sign.setLine(i, "");
existingLines[i] = "";
}
sign.update();
if (callSignEvent(sign, user.getBase(), existingLines)) {
return;
}
user.sendMessage(tl("editsignCommandClear"));
} else {
final String[] existingLines = sign.getLines();
final int line = Integer.parseInt(args[1]) - 1;
sign.setLine(line, "");
sign.update();
existingLines[line] = "";
if (callSignEvent(sign, user.getBase(), existingLines)) {
return;
}
user.sendMessage(tl("editsignCommandClearLine", line + 1));
}
} else if (args[0].equalsIgnoreCase("copy") || args[0].equalsIgnoreCase("paste")) {
final boolean copy = args[0].equalsIgnoreCase("copy");
final String tlPrefix = copy ? "editsignCopy" : "editsignPaste";
} else if (args[0].equalsIgnoreCase("copy")) {
final int line = args.length == 1 ? -1 : Integer.parseInt(args[1]) - 1;
if (line == -1) {
for (int i = 0; i < 4; i++) {
processSignCopyPaste(user, sign, i, copy);
// We use unformat here to prevent players from copying signs with colors that they do not have permission to use.
user.getSignCopy().set(i, FormatUtil.unformatString(user, "essentials.editsign", sign.getLine(i)));
}
user.sendMessage(tl(tlPrefix, commandLabel));
user.sendMessage(tl("editsignCopy", commandLabel));
} else {
processSignCopyPaste(user, sign, line, copy);
user.sendMessage(tl(tlPrefix + "Line", line + 1, commandLabel));
// We use unformat here to prevent players from copying signs with colors that they do not have permission to use.
user.getSignCopy().set(line, FormatUtil.unformatString(user, "essentials.editsign", sign.getLine(line)));
user.sendMessage(tl("editsignCopyLine", line + 1, commandLabel));
}
if (!copy) {
sign.update();
} else if (args[0].equalsIgnoreCase("paste")) {
final int line = args.length == 1 ? -1 : Integer.parseInt(args[1]) - 1;
final String[] existingLines = sign.getLines();
if (line == -1) {
for (int i = 0; i < 4; i++) {
existingLines[i] = FormatUtil.formatString(user, "essentials.editsign", user.getSignCopy().get(i));
}
user.sendMessage(tl("editsignPaste", commandLabel));
} else {
existingLines[line] = FormatUtil.formatString(user, "essentials.editsign", user.getSignCopy().get(line));
user.sendMessage(tl("editsignPasteLine", line + 1, commandLabel));
}
callSignEvent(sign, user.getBase(), existingLines);
} else {
throw new NotEnoughArgumentsException();
}
@@ -79,15 +108,21 @@ public class Commandeditsign extends EssentialsCommand {
}
}
private void processSignCopyPaste(final User user, final Sign sign, final int index, final boolean copy) {
if (copy) {
// We use unformat here to prevent players from copying signs with colors that they do not have permission to use.
user.getSignCopy().set(index, FormatUtil.unformatString(user, "essentials.editsign", sign.getLine(index)));
return;
private boolean callSignEvent(final Sign sign, final Player player, final String[] lines) {
final SignChangeEvent event = new SignChangeEvent(sign.getBlock(), player, lines);
Bukkit.getServer().getPluginManager().callEvent(event);
if (event.isCancelled()) {
if (ess.getSettings().isDebug()) {
ess.getLogger().info("SignChangeEvent canceled for /editsign execution by " + player.getName());
}
return true;
}
final String line = FormatUtil.formatString(user, "essentials.editsign", user.getSignCopy().get(index));
sign.setLine(index, line == null ? "" : line);
for (int i = 0; i < 4; i++) {
sign.setLine(i, lines[i]);
}
sign.update();
return false;
}
@Override
@@ -4,6 +4,8 @@ import com.earth2me.essentials.CommandSource;
import com.earth2me.essentials.User;
import com.earth2me.essentials.utils.NumberUtil;
import net.ess3.api.IUser;
import net.essentialsx.api.v2.events.HomeModifyEvent;
import org.bukkit.Bukkit;
import org.bukkit.Server;
import java.util.ArrayList;
@@ -60,6 +62,15 @@ public class Commandrenamehome extends EssentialsCommand {
throw new NoSuchFieldException(tl("invalidHomeName"));
}
final HomeModifyEvent event = new HomeModifyEvent(user, usersHome, oldName, newName, usersHome.getHome(oldName));
Bukkit.getServer().getPluginManager().callEvent(event);
if (event.isCancelled()) {
if (ess.getSettings().isDebug()) {
ess.getLogger().info("HomeModifyEvent canceled for /renamehome execution by " + user.getDisplayName());
}
return;
}
usersHome.renameHome(oldName, newName);
user.sendMessage(tl("homeRenamed", oldName, newName));
usersHome.setLastHomeConfirmation(null);
@@ -4,6 +4,8 @@ import com.earth2me.essentials.CommandSource;
import com.earth2me.essentials.User;
import com.earth2me.essentials.utils.LocationUtil;
import com.earth2me.essentials.utils.NumberUtil;
import net.essentialsx.api.v2.events.HomeModifyEvent;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.Server;
@@ -62,8 +64,25 @@ public class Commandsethome extends EssentialsCommand {
return;
}
final Location prevHomeLoc = usersHome.getHome(name);
final HomeModifyEvent event;
if (prevHomeLoc == null) {
event = new HomeModifyEvent(user, usersHome, name, location, true);
} else {
event = new HomeModifyEvent(user, usersHome, name, prevHomeLoc, location);
}
Bukkit.getServer().getPluginManager().callEvent(event);
if (event.isCancelled()) {
if (ess.getSettings().isDebug()) {
ess.getLogger().info("HomeModifyEvent canceled for /sethome execution by " + user.getDisplayName());
}
return;
}
usersHome.setHome(name, location);
user.sendMessage(tl("homeSet", user.getLocation().getWorld().getName(), user.getLocation().getBlockX(), user.getLocation().getBlockY(), user.getLocation().getBlockZ(), name));
user.sendMessage(tl("homeSet", location.getWorld().getName(), location.getBlockX(), location.getBlockY(), location.getBlockZ(), name));
usersHome.setLastHomeConfirmation(null);
}
@@ -24,12 +24,12 @@ public class Commandtop extends EssentialsCommand {
final float yaw = user.getLocation().getYaw();
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<>();
final CompletableFuture<Boolean> future = getNewExceptionFuture(user.getSource(), commandLabel);
future.thenAccept(success -> {
if (success) {
user.sendMessage(tl("teleportTop", safe.getWorld().getName(), safe.getBlockX(), safe.getBlockY(), safe.getBlockZ()));
}
});
user.getAsyncTeleport().teleport(safe, new Trade(this.getName(), ess), TeleportCause.COMMAND, getNewExceptionFuture(user.getSource(), commandLabel));
user.getAsyncTeleport().teleport(safe, new Trade(this.getName(), ess), TeleportCause.COMMAND, future);
}
}
@@ -21,6 +21,11 @@ public class Commandtpoffline extends EssentialsCommand {
final User target = getPlayer(server, args, 0, true, true);
final Location logout = target.getLogoutLocation();
if (logout == null) {
user.sendMessage(tl("teleportOfflineUnknown", user.getDisplayName()));
throw new NoChargeException();
}
if (user.getWorld() != logout.getWorld() && ess.getSettings().isWorldTeleportPermissions() && !user.isAuthorized("essentials.worlds." + logout.getWorld().getName())) {
throw new Exception(tl("noPerm", "essentials.worlds." + logout.getWorld().getName()));
}
@@ -30,11 +30,16 @@ public abstract class EssentialsLoopCommand extends EssentialsCommand {
final UUID uuid = StringUtil.toUUID(searchTerm);
if (uuid != null) {
final User matchedUser = ess.getUser(uuid);
if (matchedUser == null) {
throw new PlayerNotFoundException();
}
userConsumer.accept(matchedUser);
} else if (matchWildcards && searchTerm.contentEquals("**")) {
for (final UUID u : ess.getUsers().getAllUserUUIDs()) {
final User user = ess.getUsers().loadUncachedUser(u);
userConsumer.accept(user);
if (user != null) {
userConsumer.accept(user);
}
}
} else if (matchWildcards && searchTerm.contentEquals("*")) {
final boolean skipHidden = sender.isPlayer() && !ess.getUser(sender.getPlayer()).canInteractVanished();
@@ -87,6 +87,9 @@ public class SignTrade extends EssentialsSign {
final Trade trade = getTrade(sign, 2, AmountType.COST, false, true, ess);
ItemStack stack = Inventories.getItemInHand(player.getBase());
if (trade.getItemStack() != null && stack != null && !MaterialUtil.isAir(stack.getType()) && trade.getItemStack().getType() == stack.getType() && MaterialUtil.getDamage(trade.getItemStack()) == MaterialUtil.getDamage(stack) && trade.getItemStack().getEnchantments().equals(stack.getEnchantments())) {
if (MaterialUtil.isPotion(trade.getItemStack().getType()) && !trade.getItemStack().isSimilar(stack)) {
return null;
}
final int amount = trade.getItemStack().getAmount();
if (Inventories.containsAtLeast(player.getBase(), trade.getItemStack(), amount)) {
stack = stack.clone();
@@ -1,8 +1,8 @@
package com.earth2me.essentials.userstorage;
import com.earth2me.essentials.ISettings;
import com.earth2me.essentials.OfflinePlayer;
import com.earth2me.essentials.User;
import com.earth2me.essentials.utils.NumberUtil;
import com.google.common.cache.CacheBuilder;
import com.google.common.cache.CacheLoader;
import com.google.common.cache.LoadingCache;
@@ -16,6 +16,7 @@ import java.util.UUID;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicLong;
import java.util.logging.Level;
@@ -26,6 +27,7 @@ public class ModernUserMap extends CacheLoader<UUID, User> implements IUserMap {
private final boolean debugPrintStackWithWarn;
private final long debugMaxWarnsPerType;
private final boolean debugLogCache;
private final ConcurrentMap<String, AtomicLong> debugNonPlayerWarnCounts;
public ModernUserMap(final IEssentials ess) {
@@ -33,16 +35,20 @@ public class ModernUserMap extends CacheLoader<UUID, User> implements IUserMap {
this.uuidCache = new ModernUUIDCache(ess);
this.userCache = CacheBuilder.newBuilder()
.maximumSize(ess.getSettings().getMaxUserCacheCount())
.expireAfterAccess(ess.getSettings().getMaxUserCacheValueExpiry(), TimeUnit.SECONDS)
.softValues()
.build(this);
// -Dnet.essentialsx.usermap.max-warns=20
final Long maxWarnSetting = ess.getSettings().getDebugLong(ISettings.DebugFlag.USERMAP_MAX_WARNS);
this.debugMaxWarnsPerType = maxWarnSetting != null ? maxWarnSetting : -1;
// -Dnet.essentialsx.usermap.print-stack=true
this.debugPrintStackWithWarn = ess.getSettings().isDebug(ISettings.DebugFlag.USERMAP_PRINT_STACK);
final String printStackProperty = System.getProperty("net.essentialsx.usermap.print-stack", "false");
// -Dnet.essentialsx.usermap.max-warns=20
final String maxWarnProperty = System.getProperty("net.essentialsx.usermap.max-warns", "100");
// -Dnet.essentialsx.usermap.log-cache=true
final String logCacheProperty = System.getProperty("net.essentialsx.usermap.log-cache", "false");
this.debugMaxWarnsPerType = NumberUtil.isLong(maxWarnProperty) ? Long.parseLong(maxWarnProperty) : -1;
this.debugPrintStackWithWarn = Boolean.parseBoolean(printStackProperty);
this.debugLogCache = Boolean.parseBoolean(logCacheProperty);
this.debugNonPlayerWarnCounts = new ConcurrentHashMap<>();
}
@@ -81,6 +87,7 @@ public class ModernUserMap extends CacheLoader<UUID, User> implements IUserMap {
public User getUser(final Player base) {
final User user = loadUncachedUser(base);
userCache.put(user.getUUID(), user);
debugLogCache(user);
return user;
}
@@ -114,6 +121,7 @@ public class ModernUserMap extends CacheLoader<UUID, User> implements IUserMap {
public User load(final UUID uuid) throws Exception {
final User user = loadUncachedUser(uuid);
if (user != null) {
debugLogCache(user);
return user;
}
@@ -168,6 +176,7 @@ public class ModernUserMap extends CacheLoader<UUID, User> implements IUserMap {
public void addCachedUser(final User user) {
userCache.put(user.getUUID(), user);
debugLogCache(user);
}
@Override
@@ -196,6 +205,14 @@ public class ModernUserMap extends CacheLoader<UUID, User> implements IUserMap {
uuidCache.shutdown();
}
private void debugLogCache(final User user) {
if (!debugLogCache) {
return;
}
final Throwable throwable = new Throwable();
ess.getLogger().log(Level.INFO, String.format("Caching user %s (%s)", user.getName(), user.getUUID()), throwable);
}
private void debugLogUncachedNonPlayer(final Player base) {
final String typeName = base.getClass().getName();
final long count = debugNonPlayerWarnCounts.computeIfAbsent(typeName, name -> new AtomicLong(0)).getAndIncrement();
@@ -37,9 +37,9 @@ public final class VersionUtil {
public static final BukkitVersion v1_18_2_R01 = BukkitVersion.fromString("1.18.2-R0.1-SNAPSHOT");
public static final BukkitVersion v1_19_R01 = BukkitVersion.fromString("1.19-R0.1-SNAPSHOT");
public static final BukkitVersion v1_19_2_R01 = BukkitVersion.fromString("1.19.2-R0.1-SNAPSHOT");
public static final BukkitVersion v1_19_3_R01 = BukkitVersion.fromString("1.19.3-R0.1-SNAPSHOT");
public static final BukkitVersion v1_19_4_R01 = BukkitVersion.fromString("1.19.4-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_2_R01, v1_19_3_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_2_R01, v1_19_4_R01);
public static final boolean PRE_FLATTENING = VersionUtil.getServerBukkitVersion().isLowerThan(VersionUtil.v1_13_0_R01);
@@ -0,0 +1,137 @@
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 when a home is about to be modified.
*/
public class HomeModifyEvent extends Event implements Cancellable {
private static final HandlerList handlers = new HandlerList();
private final IUser user;
private final IUser homeOwner;
private final Location newLocation;
private final Location oldLocation;
private final String newName;
private final String oldName;
private final HomeModifyCause cause;
private boolean canceled = false;
public HomeModifyEvent(IUser user, IUser homeOwner, String name, Location location, boolean create) {
this(user, homeOwner,
create ? location : null, // newLocation
create ? null : location, // oldLocation
create ? name : null, // newName
create ? null : name, // oldName
create ? HomeModifyCause.CREATE : HomeModifyCause.DELETE);
}
public HomeModifyEvent(IUser user, IUser homeOwner, String oldName, String newName, Location location) {
this(user, homeOwner, location, location, newName, oldName, HomeModifyCause.RENAME);
}
public HomeModifyEvent(IUser user, IUser homeOwner, String name, Location oldLocation, Location newLocation) {
this(user, homeOwner, newLocation, oldLocation, name, name, HomeModifyCause.UPDATE);
}
public HomeModifyEvent(IUser user, IUser homeOwner, Location newLocation, Location oldLocation, String newName, String oldName, HomeModifyCause cause) {
this.user = user;
this.homeOwner = homeOwner;
this.newLocation = newLocation;
this.oldLocation = oldLocation;
this.newName = newName;
this.oldName = oldName;
this.cause = cause;
}
/**
* Gets the user who modified the home or null if the console modified the home.
* @return The user who modified the home or null.
*/
public IUser getUser() {
return user;
}
/**
* Gets the owner of the home being modified.
* @return The user who owns the home.
*/
public IUser getHomeOwner() {
return homeOwner;
}
/**
* Returns the location of the home when {@link #getCause()} returns {@link HomeModifyCause#CREATE} or {@link HomeModifyCause#RENAME},
* returns the updated location of the home if it returns {@link HomeModifyCause#UPDATE}, or returns null if it returns {@link HomeModifyCause#DELETE}.
* @return The location of the home or null.
*/
public Location getNewLocation() {
return newLocation;
}
/**
* Returns the location of the home when {@link #getCause()} returns {@link HomeModifyCause#RENAME} or {@link HomeModifyCause#DELETE},
* returns the previous location of the home if it returns {@link HomeModifyCause#UPDATE}, or returns null if it returns {@link HomeModifyCause#CREATE}.
* @return The location of the home or null.
*/
public Location getOldLocation() {
return oldLocation;
}
/**
* Returns the name of the home when {@link #getCause()} returns {@link HomeModifyCause#CREATE} or {@link HomeModifyCause#UPDATE},
* returns the updated name if it returns {@link HomeModifyCause#RENAME}, or returns null if it returns {@link HomeModifyCause#DELETE}.
* @return The name of the home or null.
*/
public String getNewName() {
return newName;
}
/**
* Returns the name of the home when {@link #getCause()} returns {@link HomeModifyCause#UPDATE} or {@link HomeModifyCause#DELETE},
* returns the previous name if it returns {@link HomeModifyCause#RENAME}, or returns null if it returns {@link HomeModifyCause#CREATE}.
* @return The name of the home or null.
*/
public String getOldName() {
return oldName;
}
/**
* Returns the underlying cause of this modification to a home.
* @return The cause.
*/
public HomeModifyCause getCause() {
return cause;
}
@Override
public void setCancelled(boolean cancel) {
this.canceled = cancel;
}
@Override
public boolean isCancelled() {
return canceled;
}
@Override
public HandlerList getHandlers() {
return handlers;
}
public static HandlerList getHandlerList() {
return handlers;
}
/**
* The cause of why a home was modified.
* Used by {@link HomeModifyEvent}.
*/
public enum HomeModifyCause {
CREATE, DELETE, RENAME, UPDATE
}
}
@@ -2,12 +2,15 @@ package net.essentialsx.api.v2.events;
import net.ess3.api.IUser;
import net.essentialsx.api.v2.services.mail.MailMessage;
import org.bukkit.Bukkit;
import org.bukkit.event.Cancellable;
import org.bukkit.event.Event;
import org.bukkit.event.HandlerList;
/**
* Called when mail is sent to a {@link net.ess3.api.IUser IUser} by another player or the console.
* <p>
* Note: This event has no guarantee of the thread it is fired on, please use {@link #isAsynchronous()}} to see if this event is off the main Bukkit thread.
*/
public class UserMailEvent extends Event implements Cancellable {
private static final HandlerList handlers = new HandlerList();
@@ -17,6 +20,7 @@ public class UserMailEvent extends Event implements Cancellable {
private boolean canceled;
public UserMailEvent(IUser recipient, MailMessage message) {
super(!Bukkit.isPrimaryThread());
this.recipient = recipient;
this.message = message;
}
@@ -100,6 +100,8 @@ bookCommandUsage3=/<command> title <title>
bookCommandUsage3Description=Sets the title of a signed book
bookLocked=\u00a76This book is now locked.
bookTitleSet=\u00a76Title of the book set to {0}.
bottomCommandDescription=Teleport to the lowest block at your current position.
bottomCommandUsage=/<command>
breakCommandDescription=Breaks the block you are looking at.
breakCommandUsage=/<command>
broadcast=\u00a76[\u00a74Broadcast\u00a76]\u00a7a {0}
@@ -1253,6 +1255,7 @@ teleportationDisabledWarning=\u00a76You must enable teleportation before other p
teleportationEnabled=\u00a76Teleportation \u00a7cenabled\u00a76.
teleportationEnabledFor=\u00a76Teleportation \u00a7cenabled \u00a76for \u00a7c{0}\u00a76.
teleportAtoB=\u00a7c{0}\u00a76 teleported you to \u00a7c{1}\u00a76.
teleportBottom=\u00a76Teleporting to bottom.
teleportDisabled=\u00a7c{0} \u00a74has teleportation disabled.
teleportHereRequest=\u00a7c{0}\u00a76 has requested that you teleport to them.
teleportHome=\u00a76Teleporting to \u00a7c{0}\u00a76.
@@ -1268,6 +1271,7 @@ teleportRequestTimeoutInfo=\u00a76This request will timeout after\u00a7c {0} sec
teleportTop=\u00a76Teleporting to top.
teleportToPlayer=\u00a76Teleporting to \u00a7c{0}\u00a76.
teleportOffline=\u00a76The player \u00a7c{0}\u00a76 is currently offline. You are able to teleport to them using /otp.
teleportOfflineUnknown=\u00a76Unable to find the last known position of \u00a7c{0}\u00a76.
tempbanExempt=\u00a74You may not tempban that player.
tempbanExemptOffline=\u00a74You may not tempban offline players.
tempbanJoin=You are banned from this server for {0}. Reason: {1}
@@ -100,6 +100,7 @@ bookCommandUsage3=/<command> title <title>
bookCommandUsage3Description=Задава заглавието на подписана книга
bookLocked=§6Книгата е заключена.
bookTitleSet=§6Заглавието на книгата е зададено на {0}.
bottomCommandUsage=/<command>
breakCommandDescription=Чупи блока към, който гледате.
breakCommandUsage=/<command>
broadcast=§r§6[§4Съобщение§6]§a {0}
@@ -5,6 +5,10 @@
addedToAccount=§a{0} je dodano na vas racun.
addedToOthersAccount=dodan §a {0} {1} §a račun. Novo ravnotežu\: {2}
adventure=pustolovina
afkCommandDescription=Označava da ste trenutno odsutni.
afkCommandUsage=/<command> [Igrač/poruka...]
afkCommandUsage1Description=Mijenja vaš afk status uz optimalan razlog
afkCommandUsage2=/<command> igrač [Igrač/poruka]
alertBroke=slomio\:
alertFormat=§3[{0}] §r {1} §6 {2} u\: {3}
alertPlaced=postavljen\:
@@ -15,6 +19,7 @@ antiBuildDrop=§4Nemate pravo da padne§c {0}§4.
antiBuildInteract=§4Nemate pravo da za interakciju sa §c {0}§4.
antiBuildPlace=§4Nemate pravo da postavi§c {0} §4ovde.
antiBuildUse=§4Nemate pravo da koriste§c {0}§4.
anvilCommandDescription=Otvara nakovanj.
autoAfkKickReason=Izbaceni ste za prazan hod vise od {0} minuta.
backupDisabled=§7Jedna vanjska sigurnosna kopija nije konfigurirana.
backupFinished=§7Backup je zavrsen.
@@ -100,6 +100,8 @@ bookCommandUsage3=/<command> title <název>
bookCommandUsage3Description=Nastaví název podepsané knihy
bookLocked=§6Tato kniha je nyní uzamčena.
bookTitleSet=§6Kniha byla nazvána {0}.
bottomCommandDescription=Teleportuje na nejnižší blok na tvé aktuální pozici.
bottomCommandUsage=/<command>
breakCommandDescription=Rozbije blok, na který se díváš.
breakCommandUsage=/<command>
broadcast=§6[§4Oznámení§6]§a {0}
@@ -240,6 +242,12 @@ discordbroadcastCommandUsage1Description=Odešle zprávu na zadaný kanál na Di
discordbroadcastInvalidChannel=§4Discord kanál §c{0}§4 neexistuje.
discordbroadcastPermission=§4Nemáš oprávnění posílat zprávy do kanálu §c{0}§4.
discordbroadcastSent=§6Zpráva odeslána do kanálu §c{0}§6\!
discordCommandAccountArgumentUser=Discord účet pro hledání
discordCommandAccountDescription=Vyhledá propojený Minecraft účet buď pro tebe, nebo jiného uživatele Discordu
discordCommandAccountResponseLinked=Tvůj účet je propojen s Minecraft účtem\: **{0}**
discordCommandAccountResponseLinkedOther=Účet uživatele {0} je propojen s Minecraftovým účtem\: **{1}**
discordCommandAccountResponseNotLinked=Nemáš propojený Minecraft účet.
discordCommandAccountResponseNotLinkedOther={0} nemá propojený Minecraft účet.
discordCommandDescription=Zašle hráči pozvánku na Discord.
discordCommandLink=§6Připoj se k našemu Discord serveru na §c{0}§6\!
discordCommandUsage=/<command>
@@ -248,6 +256,14 @@ 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}“
discordCommandUnlinkDescription=Odpojí aktuálně propojený Minecraft účet s tvým Discord účtem
discordCommandUnlinkInvalidCode=Momentálně nemáš Minecraft účet, který je propojen s Discordem\!
discordCommandUnlinkUnlinked=Tvůj Discord účet byl odpojen od všech přidružených Minecraft účtů.
discordCommandLinkArgumentCode=Kód uvedený ve hře pro propojení tvého Minecraft účtu
discordCommandLinkDescription=Propojí tvůj Discord účet s tvým Minecraft účtem pomocí kódu získaným ve hře příkazem /link
discordCommandLinkHasAccount=Už máš připojený účet\! Pro odpojení tvého aktuálního účtu napiš /unlink.
discordCommandLinkInvalidCode=Neplatný propojovací kód\! Ujisti se, že jsi použil ve hře /link a správně sis zkopíroval kód.
discordCommandLinkLinked=Tvůj účet byl úspěšně propojen\!
discordCommandListDescription=Seznam přihlášených uživatelů.
discordCommandListArgumentGroup=Hledání omezit na skupinu
discordCommandMessageDescription=Zašle zprávu hráči na Minecraft serveru.
@@ -265,8 +281,20 @@ discordErrorNoPrimary=Nedefinovali jste primární kanál nebo definovaný prim
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“.
discordLinkInvalidGroup=Pro roli {1} byla uvedena neplatná skupina {0}. Jsou dostupné následující skupiny\: {2}
discordLinkInvalidRole=Pro skupinu {1} bylo uvedeno neplatné ID role, {0}. Id rolí si můžeš zobrazit pomocí příkazu /roleinfo na Discordu.
discordLinkInvalidRoleInteract=Role {0} ({1}) nemůže být použita pro synchronizaci skupina -> role, protože je výše, než je nejvyšší role tvého bota. Buď posuň roli tvého bota nad roli „{0}“, nebo posuň „{0}“ pod roli tvého bota.
discordLinkInvalidRoleManaged=Role {0} ({1}) nemůže být použita pro synchronizaci skupina -> role, protože je spravována jiným botem nebo propojením.
discordLinkLinked=§6Pro propojení tvého Minecraft účtu s Discordem napiš §c{0} §6na Discord serveru.
discordLinkLinkedAlready=§6Už máš svůj Discord účet propojený\! Pokud chceš odpojit svůj Discord účet, použij §c/unlink§6.
discordLinkLoginKick=§6Než se budeš moci připojit na tento server, musíš propojit svůj Discord účet.\n§6Pro připojení tvého Minecraft účtu k discordu napiš\:\n§c{0}\n§6na Discord serveru tohoto Minecraft serveru\:\n§c{1}
discordLinkLoginPrompt=§6Než se budeš moci pohybovat, psát do chatu, nebo interagovat s tímto serverem, musíš si propojit svůj Discord účet. Pro propojení tvého Minecraft účtu s Discordem napiš §c{0} §6na Discord serveru tohoto Minecraft serveru\: §c{1}
discordLinkNoAccount=§6Momentálně nemáš s tímto Minecraft účtem propojený Discord účet.
discordLinkPending=§6Už máš propojovací kód. Pro dokončení propojení tvého Minecraft účtu s Discordem napiš §c{0} §6na Discord serveru.
discordLinkUnlinked=§6Tvůj Minecraft účet byl odpojen ze všech spojených Discord účtů.
discordLoggingIn=Pokouším se přihlásit do Discordu...
discordLoggingInDone=Uspěšně přihlášen jako {0}
discordMailLine=**Nový mail od {0}\:** {1}
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š
@@ -586,7 +614,7 @@ itemType=§6Předmět\:§c {0}
itemdbCommandDescription=Vyhledá předmět.
itemdbCommandUsage=/<command> <předmět>
itemdbCommandUsage1=/<command> <předmět>
itemdbCommandUsage1Description=Hledá daný předmět v databázi předmětů
itemdbCommandUsage1Description=Vyhledá daný předmět v databázi předmětů
jailAlreadyIncarcerated=§4Tento hráč již úpí ve vězení\:§c {0}
jailList=§6Vězení\:§r {0}
jailMessage=§4Provinil ses, tak teď musíš pykat.
@@ -661,8 +689,10 @@ lightningCommandUsage2=/<command> <hráč> <síla>
lightningCommandUsage2Description=Vrhne blesk po cílovém hráči se zadanou silou
lightningSmited=§6Zasáhl tě blesk\!
lightningUse=§6Hráč§c {0} §6byl zasažen bleskem
linkCommandDescription=Vygeneruje kód pro propojení tvého Minecraft s Discord účty.
linkCommandUsage=/<command>
linkCommandUsage1=/<command>
linkCommandUsage1Description=Vygeneruje kód pro příkaz /link na Discordu
listAfkTag=§7[AFK]§r
listAmount=§6Je připojeno §c{0}§6 z maximálního počtu §c{1}§6 hráčů.
listAmountHidden=§6Je připojeno §c{0}§6/§c{1}§6 z maximálního počtu §c{2}§6 hráčů.
@@ -1029,6 +1059,7 @@ 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.
replyFromDiscord=**Odpověď od {0}\:** {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.
@@ -1223,6 +1254,7 @@ teleportationDisabledWarning=§6Aby se mohli ostatní hráči k tobě teleportov
teleportationEnabled=§6Teleportování §apovoleno§6.
teleportationEnabledFor=§6Teleportování §apovoleno§6 pro hráče §c{0}§6.
teleportAtoB=§6Hráč §c{0} §6tě teleportoval na pozici §c{1}§6.
teleportBottom=§6Teleportuješ se na dno.
teleportDisabled=Hráč §c{0} §4má teleportování vypnuto.
teleportHereRequest=§6Hráč §c{0}§6 tě žádá, aby ses k němu teleportoval.
teleportHome=§6Teleportuješ se na §c{0}§6.
@@ -1238,6 +1270,7 @@ teleportRequestTimeoutInfo=§6Tato žádost vyprší za §c{0} sekund§6.
teleportTop=§6Teleportuješ se na povrch.
teleportToPlayer=§6Teleportuješ se k hráči §c{0}§6.
teleportOffline=§6Hráč §c{0}§6 je momentálně offline. Můžeš se k němu teleportovat pomocí /otp.
teleportOfflineUnknown=§6Nelze najít poslední známou polohu §c{0}§6.
tempbanExempt=§4Tohoto hráče nemůžeš dočasně zablokovat.
tempbanExemptOffline=§4Nemůžeš dočasně zablokovat nepřipojeného hráče.
tempbanJoin=Na tomto serveru jsi zablokován na {0}. Důvod\: {1}
@@ -1254,14 +1287,14 @@ 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
thunderCommandUsage1Description=Povolí/zakáže bouře na volitelnou 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
timeCommandUsage1Description=Zobrazí časy 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]
@@ -1402,8 +1435,10 @@ 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
unlinkCommandDescription=Odpojí aktuálně propojený Minecraft účet s tvým Discord účtem.
unlinkCommandUsage=/<command>
unlinkCommandUsage1=/<command>
unlinkCommandUsage1Description=Odpojí aktuálně propojený Minecraft účet s tvým Discord účtem.
unmutedPlayer=§6Hráč §c{0}§6 může znovu hovořit.
unsafeTeleportDestination=§4Cíl teleportace je nebezpečný a teleport-safety je vypnuto.
unsupportedBrand=§4Platforma, na které běží tvůj server, momentálně tuto funkci nepodporuje.
@@ -86,6 +86,7 @@ bookCommandDescription=Tillader genåbning og redigering af forseglede bøger.
bookCommandUsage1=/<command>
bookLocked=§6Denne bog er nu låst.
bookTitleSet=§6Bogens titel er ændret til {0}.
bottomCommandUsage=/<command>
breakCommandDescription=Ødelægger den block du kigger på.
breakCommandUsage=/<command>
broadcast=§6[§4Meddelelse§6]§a {0}
@@ -100,6 +100,8 @@ bookCommandUsage3=/<command> Titel <title>
bookCommandUsage3Description=Setzt den Titel eines signierten Buches fest
bookLocked=§6Dieses Buch ist jetzt versiegelt.
bookTitleSet=§6Buchtitel auf {0} geändert.
bottomCommandDescription=Teleportiere zum niedrigsten Punkt an deiner aktuellen Position.
bottomCommandUsage=/<command>
breakCommandDescription=Zerstört den Block, den du anschaust.
breakCommandUsage=/<command>
broadcast=§6[§4Broadcast§6]§a {0}
@@ -240,7 +242,7 @@ discordbroadcastCommandUsage1Description=Sendet eine Nachricht an den angegebene
discordbroadcastInvalidChannel=§4Discord Kanal §c{0}§4 existiert nicht.
discordbroadcastPermission=§4Du hast keine Berechtigung, Nachrichten an den angegebenen §c{0}§4 Kanal zu senden.
discordbroadcastSent=§6Nachricht gesendet an §c{0}§6\!
discordCommandAccountArgumentUser=Der Discord Account zum Nachschlagen
discordCommandAccountArgumentUser=Der nachzuschlagende Discord Account
discordCommandAccountDescription=Sucht den verlinkten Minecraft Account für dich oder einen anderen Discord Benutzer
discordCommandAccountResponseLinked=Dein Account ist mit dem Minecraft Account **{0}** verknüpft
discordCommandAccountResponseLinkedOther={0}''s Account ist mit dem Minecraft Account **{1}** verknüpft
@@ -318,7 +320,7 @@ ecoCommandUsage2=/<command> take <player> <amount>
ecoCommandUsage2Description=Nimmt den angegebenen Geldbetrag vom angegebenen Spieler
ecoCommandUsage3=<command> set <player><amount>
ecoCommandUsage3Description=Setzt den angegebenen Spieler für die angegebene Anzahl von Sekunden in Brand
ecoCommandUsage4=<command> set <player><amount>
ecoCommandUsage4=/<command> reset <player> <amount>
ecoCommandUsage4Description=Setzt den Guthaben des angegebenen Spielers auf den Startsaldo des Servers zurück
editBookContents=§eDu darfst den Inhalt dieses Buches jetzt bearbeiten.
enabled=aktiviert
@@ -578,6 +580,7 @@ itemloreCommandDescription=Die Beschreibung eines Gegenstand bearbeiten.
itemloreCommandUsage=/<command> <add/set/clear> [text/zeile] [text]
itemloreCommandUsage1=/<command> add [text]
itemloreCommandUsage1Description=Fügt den angegebenen Text an das Ende der Lore des Gegenstands an
itemloreCommandUsage2=/<command> set <zeilennummer> <text>
itemloreCommandUsage2Description=Setzt die angegebene Zeile in der Lore des gehaltenen Gegenstandes zum angegebenen Text
itemloreCommandUsage3=/<command> clear
itemloreCommandUsage3Description=Löscht die Lore des gehaltenen Gegenstandes
@@ -963,6 +966,7 @@ powerToolsEnabled=§6All deine Powertools wurden aktiviert.
powertoolCommandDescription=Weist einem Gegenstand in der Hand einen Befehl zu.
powertoolCommandUsage=/<command> [l\:|a\:|r\:|c\:|d\:][befehl] [argumente] - {player} kanm mit sem Namen eines geklickten Spielers ersetzt werden.
powertoolCommandUsage1=/<command> l\:
powertoolCommandUsage1Description=Listet alle Powertools für den aktuellen Gegenstand auf
powertoolCommandUsage2=/<command> d\:
powertoolCommandUsage2Description=Löscht alle Powertools auf dem gehaltenden Item
powertoolCommandUsage3=/<command> r\:<cmd>
@@ -976,9 +980,19 @@ powertooltoggleCommandUsage=/<command>
ptimeCommandDescription=Client-Zeit des Spielers anpassen. @-Präfix zum Korrigieren hinzufügen.
ptimeCommandUsage=/<command> [list|reset|day|night|dawn|17\:30|4pm|4000ticks] [Spieler|*]
ptimeCommandUsage1=/<command> list [player|*]
ptimeCommandUsage1Description=Gibt die Spielzeit für dich oder einen oder mehrere angegebene Spieler an
ptimeCommandUsage2=/<command> <zeit> [spieler|*]
ptimeCommandUsage2Description=Legt die Zeit für dich oder einen oder mehrere angegebene Spieler fest
ptimeCommandUsage3=/<command> reset [spieler|*]
ptimeCommandUsage3Description=Setzt die Zeit für dich oder andere Spieler zurück (falls angegeben)
pweatherCommandDescription=Wetter eines Spielers anpassen
pweatherCommandUsage=/<command> [list|reset|storm|sun|clear] [spieler|*]
pweatherCommandUsage1=/<command> list [player|*]
pweatherCommandUsage1Description=Listet das Wetter für dich oder andere Spieler auf, falls diese angegeben wurden
pweatherCommandUsage2=/<command> <storm|sun> [Spieler|*]
pweatherCommandUsage2Description=Legt das Wetter für dich oder andere Spieler(e) fest, wenn das Wetter angegeben wurde
pweatherCommandUsage3=/<command> reset [spieler|*]
pweatherCommandUsage3Description=Setzt das Wetter für dich oder andere Spieler zurück (falls angegeben)
pTimeCurrent=§6Die Zeit für§c {0} §6ist§c {1}§6.
pTimeCurrentFixed=§6Die Zeit für §c{0}§6 wurde auf §c{1}§6 gesetzt.
pTimeNormal=§6Die Zeit für §c{0}§6 ist normal und entspricht der Serverzeit.
@@ -998,17 +1012,21 @@ questionFormat=§2[Frage]§r {0}
rCommandDescription=Antworte schnell auf den letzten Spieler, der dich benachrichtigt.
rCommandUsage=/<command> <nachricht>
rCommandUsage1=/<command> <nachricht>
rCommandUsage1Description=Antwortet dem letzten Spieler, der dir eine Nachricht geschrieben hat, mit angegebenem Text
radiusTooBig=§4Radius ist zu groß\! Maxmialer Radius beträgt§c {0}§4.
readNextPage=§6Tippe§c /{0} {1} §6für die nächste Seite.
realName=§f{0}§r§6 ist §f{1}
realnameCommandDescription=Zeigt den Benutzernamen eines Spielers basierend auf dem Nick an.
realnameCommandUsage=/<command> <spitzname>
realnameCommandUsage1=/<command> <spitzname>
realnameCommandUsage1Description=Zeigt den Benutzernamen eines Benutzers basierend auf dem angegebenen Nicknamen an
recentlyForeverAlone=§4{0} ging vor kurzem Offline.
recipe=§6Rezept für §c{0}§5 (§c{1}§6 von §c{2}§6)
recipeBadIndex=Es gibt kein Rezept mit dieser Nummer.
recipeCommandDescription=Zeigt, wie man Gegenstände herstellt.
recipeCommandUsage=/<command> <gegenstand> [nummer]
recipeCommandUsage1=/<command> <Gegenstand> [Seite]
recipeCommandUsage1Description=Zeigt an, wie der Gegenstand gecraftet werden kann
recipeFurnace=§6Schmelzen\: §c{0}§6.
recipeGrid=§c{0}X §6| §{1}X §6| §{2}X
recipeGridItem=§c{0}X §6ist §c{1}
@@ -1019,25 +1037,40 @@ recipeShapeless=§6Kombiniere §c{0}
recipeWhere=§6Wo\: {0}
removeCommandDescription=Entfernt Objekte in deiner Welt.
removeCommandUsage=/<command> <all|tamed|named|drops|arrows|boats|minecarts|xp|paintings|itemframes|endercrystals|monsters|animals|ambient|mobs|[monstertyp]> [radius|welt]
removeCommandUsage1=/<command> <Mob-Typ> [Welt]
removeCommandUsage1Description=Entfernt alle angegebenen Mob-Typen in der aktuellen oder in einer anderen Welt, falls angegeben
removeCommandUsage2=/<command> <mob type> <radius> [world]
removeCommandUsage2Description=Entfernt den angegebenen Mob-Typ innerhalb des angegebenen Radius in der aktuellen oder in einer anderen Welt, wenn angegeben
removed=§c{0} §6Einheiten entfernt.
renamehomeCommandDescription=Benennt ein Haus um.
renamehomeCommandUsage=/<command> <[Spieler\:]Name> <new name>
renamehomeCommandUsage1=/<command> <name> <neuer name>
renamehomeCommandUsage1Description=Bennt dein Home in den gegebenen Namen um
renamehomeCommandUsage2=/<command> <spieler>\:<name> <neuer name>
renamehomeCommandUsage2Description=Benennt das Haus des angegebenen Spielers um
repair=§6Dein §c{0}§6 wurde erfolgreich repariert.
repairAlreadyFixed=§4Dieser Gegenstand benötigt keine Reparatur.
repairCommandDescription=Repariert die Haltbarkeit eines oder aller Gegenstände.
repairCommandUsage=/<command> [hand|all]
repairCommandUsage1=/<command>
repairCommandUsage1Description=Repariert den gehaltenen Gegenstand
repairCommandUsage2=/<command> all
repairCommandUsage2Description=Repariere alle Items aus deinem Inventar
repairEnchanted=§4Du darfst keine verzauberten Gegenstände reparieren.
repairInvalidType=§4Dieser Gegenstand kann nicht repariert werden.
repairNone=§4Es sind keine Gegenstände vorhanden, die repariert werden können.
replyFromDiscord=**Antwort von {0}\:** {1}
replyLastRecipientDisabled=§6Auf letzen Nachrichtenempfänger antworten §cdeaktiviert§6.
replyLastRecipientDisabledFor=§6Auf den letzen Nachrichtenempfänger antworten für §c{0} §cdeaktiviert§6.
replyLastRecipientEnabled=§cAuf den letzen Nachrichtenempfänger antworten §caktiviert§6.
replyLastRecipientEnabledFor=§6Auf den letzen Nachrichtenempfänger antworten für §c{0} §caktiviert§6.
requestAccepted=§7Du hast die Teleportierungsanfrage §aangenommen.
requestAcceptedAll=§c{0} §6ausstehende Teleportationsanfrage(n) akzeptiert.
requestAcceptedAuto=§6Teleportationsanfrage von {0} automatisch akzeptiert.
requestAcceptedFrom=§c{0} §6hat deine Teleportierungsanfrage angenommen.
requestAcceptedFromAuto=§c{0} §6hat deine Teleportationsanfrage automatisch angenommen.
requestDenied=§6Du hast die Teleportierungsanfrage §cabgelehnt.
requestDeniedAll=§c{0} §6ausstehende Teleportationsanfrage(n) abgelehnt.
requestDeniedFrom=§c{0} §6hat deine Teleportierungsanfrage abgelehnt.
requestSent=§6Eine Anfrage wurde an§c {0}§6 gesendet.
requestSentAlready=§4Du hast {0}§4 bereits eine Teleportierungsanfrage gesendet.
@@ -1049,6 +1082,7 @@ rest=§6Du fühlst dich gut ausgeruht.
restCommandDescription=Ruht dich oder den gegebenen Spieler aus.
restCommandUsage=/<command> [spieler]
restCommandUsage1=/<command> [spieler]
restCommandUsage1Description=Setzt die Zeit seit dem letzten Ausruhen für dich oder andere Spieler, falls angegeben, zurück
restOther=§6Ausruhen§c {0}§6.
returnPlayerToJailError=§4Fehler beim zurücksetzen von§c {0} §4im Gefängis\: {1}\!
rtoggleCommandDescription=Ändere, ob der Empfänger der Antwort der letzte Empfänger oder der letzte Absender ist
@@ -1062,17 +1096,30 @@ seenAccounts=§6Spieler ist auch bekannt als\:§c {0}
seenCommandDescription=Zeigt die letzte Abmeldezeit eines Spielers.
seenCommandUsage=/<command> <spielername>
seenCommandUsage1=/<command> <spielername>
seenCommandUsage1Description=Zeigt die Logout-Zeit, Sperrung, Stummschaltung und UUID-Information des angegebenen Spielers an
seenOffline=§6Spieler§c {0} §6ist seit §c{1}§4 offline§6.
seenOnline=§6Spieler§c {0} §6ist seit §c{1}§a online.
sellBulkPermission=§6Du hast keine Berechtigung, in Massen zu verkaufen.
sellCommandDescription=Verkauft den Gegenstand, der momentan in deiner Hand ist.
sellCommandUsage=/<command> <<itemname>|<id>|hand|inventory|blocks> [menge]
sellCommandUsage1=/<command> <itemname> [amount]
sellCommandUsage1Description=Verkauft alle (oder die angegebene Anzahl) des ausgewählten Items in deinem Inventar
sellCommandUsage2=/<command> hand [amount]
sellCommandUsage2Description=Verkauft alle (oder die angegebene Anzahl) des gehaltenen Items
sellCommandUsage3=/<command> all
sellCommandUsage3Description=Verkauft alle verkäuflichen Gegenstände in deinem Inventar
sellCommandUsage4=/<command> blocks [amount]
sellCommandUsage4Description=Verkauft alle (oder die angegebene Zahl, wenn angegeben) Blöcke in deinem Inventar
sellHandPermission=§6Du hast keine Berechtigung, einzeln zu verkaufen.
serverFull=Server ist voll\!
serverReloading=Es gibt eine gute Chance, dass du den Server gerade reloadest. Falls das der Fall ist, wieso hasst du dich selber? Erwarte keine Unterstützung des EssentialsX-Teams wenn du /reload verwendest.
serverTotal=§6Server insgesamt\:§c {0}
serverUnsupported=§cDu verwendest eine Serverversion, die nicht unterstützt wird\!
serverUnsupportedClass=Status-bestimmende Klasse\: {0}
serverUnsupportedCleanroom=Sie betreiben einen Server, der Bukkit-Plugins nicht richtig unterstützt, die auf internen Mojang-Code angewiesen sind. Überlegen Sie sich, einen Essentials Ersatz für Ihre Server-Software zu verwenden.
serverUnsupportedDangerous=Sie betreiben einen Server Fork, der als extrem gefährlich bekannt ist und zu Datenverlust führt. Es wird dringend empfohlen, zu einer stabileren Server-Software wie Papier zu wechseln.
serverUnsupportedLimitedApi=Sie verwenden einen Server mit eingeschränkter API-Funktionalität. EssentialsX wird weiterhin funktionieren, aber bestimmte Funktionen können deaktiviert sein.
serverUnsupportedDumbPlugins=Du verwendest Plugins, wo bekannt ist, dass diese schwerwiegende Probleme mit EssentialsX und anderen Plugins verursachen.
serverUnsupportedMods=Du verwendest einen Server der Bukkit Plugins nicht korrekt unterstützt. Bukkit Plugins sollten nicht mit Forge/Fabric mods verwendet werden. Für Forge\: Überlege ForgeEssentials, oder SpongeForge + Nucleus zu verwenden.
setBal=§aDein Kontostand wurde auf §c{0} §agesetzt.
setBalOthers=§aDu hast den Kontostand von §6{0}§a auf §c{1} §a gesetzt.
@@ -1080,19 +1127,33 @@ 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>
sethomeCommandUsage1Description=Setzte dein Home mit dem gegebenen Namen und deiner aktuellen Location fest
sethomeCommandUsage2=/<command> <player>\:<name>
sethomeCommandUsage2Description=Legt das Zuhause des angegebenen Spielers mit dem angegebenen Namen an deinem Standort fest
setjailCommandDescription=Erstellt ein Gefängnis mit dem angegebenen Namen [gefängnisname].
setjailCommandUsage=/<command> <gefängnisname>
setjailCommandUsage1=/<command> <gefängnisname>
setjailCommandUsage1Description=Legt das Gefängnis mit dem angegebenen Namen an deinen Standort fest
settprCommandDescription=Lege die Ort der zufälligen Teleportierung und die Parameter fest.
settprCommandUsage=/<command> [center|minrange|maxrange] [wert]
settprCommandUsage1=/<command> center
settprCommandUsage1Description=Legt die Mitte des Zufalls-Teleport auf deinen Standort fest
settprCommandUsage2=/<command> minrange <radius>
settprCommandUsage2Description=Legt den minimalen zufälligen Teleportradius auf den angegebenen Wert
settprCommandUsage3=/<command> maxrange <radius>
settprCommandUsage3Description=Legt den maximalen Teleportations-Radius fest
settpr=§6Setze Zufallsteleportierungszentrum.
settprValue=§6Setzte Zufallsteleport §c{0}§6 zu §c{1}§6.
setwarpCommandDescription=Erstellt einen neuen Warp-Punkt.
setwarpCommandUsage=/<command> <warp-punkt>
setwarpCommandUsage1=/<command> <warp-punkt>
setwarpCommandUsage1Description=Legt den Warp-Punkt mit dem angegebenen Namen an deinem Standort fest
setworthCommandDescription=Setze den Verkaufswert eines Gegenstands.
setworthCommandUsage=/<command> [itemname|id] <preis>
setworthCommandUsage1=/<command> <preis>
setworthCommandUsage1Description=Legt den Wert des gehaltenen Gegenstandes auf den angegebenen Preis fest
setworthCommandUsage2=/<command> <itemname> <preis>
setworthCommandUsage2Description=Legt den Verkaufswert des angegebenen Items zum angegebenen Preis fest
sheepMalformedColor=§4Ungültige Farbe.
shoutDisabled=§6Rufmodus §cdeaktiviert§6.
shoutDisabledFor=§6Rufmodus §cdeaktiviert §6für §c{0}§6.
@@ -1104,13 +1165,25 @@ editsignCommandClearLine=§6Zeile §c{0}§6 geleert.
showkitCommandDescription=Zeige Inhalte eines Kits.
showkitCommandUsage=/<command> <kitname>
showkitCommandUsage1=/<command> <kitname>
showkitCommandUsage1Description=Zeigt eine Zusammenfassung der Gegenstände im angegebenen Kit an
editsignCommandDescription=Bearbeitet ein Schild in der Welt.
editsignCommandLimit=§4Dein eingegebener Text ist zu groß, um auf das Zielschild zu passen.
editsignCommandNoLine=§4Du musst eine Zeilennummer zwischen §c1-4§4 eingeben.
editsignCommandSetSuccess=§6Setze Linie§c {0}§6 zu "§c{1}§6".
editsignCommandTarget=§4Du musst ein Schild anschauen, um seinen Text bearbeiten.
editsignCopy=§6Schild kopiert\! Du kannst es nun mit §c/{0} paste§6 wieder einfügen.
editsignCopyLine=§6Zeile §c{0} §6des Schildes kopiert\! Füge sie mit §c/{1} paste {0} §6ein.
editsignPaste=§6Schild eingefügt\!
editsignPasteLine=§6Zeile §c{0} §6vom Schild eigefügt\!
editsignCommandUsage=/<command> <set/clear/copy/paste> [zeilennummer] [text]
editsignCommandUsage1=/<command> set <zeilennummer> <text>
editsignCommandUsage1Description=Setzt die angegebene Linie des Ziel-Schilds auf den angegebenen Text
editsignCommandUsage2=/<command> clear <zeilennummer>
editsignCommandUsage2Description=Leert die angegebene Zeile von dem Zielschild
editsignCommandUsage3=/<command> copy [zeilennummer]
editsignCommandUsage3Description=Kopiert alle (oder die angegebene) Zeile(n) des anvisierten Schildes in die Zwischenablage
editsignCommandUsage4=/<command> paste [zeilennummer]
editsignCommandUsage4Description=Fügt die Zwischenablage komplett (oder in die angegebene Zeile) des anvisierten Schildes ein
signFormatFail=§4[{0}]
signFormatSuccess=§1[{0}]
signFormatTemplate=[{0}]
@@ -1123,7 +1196,9 @@ skullChanged=§6Kopf zu §c{0} §6geändert.
skullCommandDescription=Setze den Besitzer eines Spielerkopfes
skullCommandUsage=/<command> [besitzer]
skullCommandUsage1=/<command>
skullCommandUsage1Description=Ruft deinen eigenen Spielerkopf ab
skullCommandUsage2=/<command> <spieler>
skullCommandUsage2Description=Ruft den Kopf des angegebenen Spielers ab
slimeMalformedSize=§4Ungültige Größe.
smithingtableCommandDescription=Öffnet einen Schmiedetisch.
smithingtableCommandUsage=/<command>
@@ -1145,6 +1220,8 @@ spawnSet=§6Du hast denSpawn-Punkt für die Gruppe§c {0}§6 gesetzt.
spectator=Zuschauermodus
speedCommandDescription=Ändere deine Geschwindigkeitsbegrenzungen.
speedCommandUsage=/<command> [typ] <geschwindigkeit> [spieler]
speedCommandUsage1Description=Legt entweder deine Flug- oder Laufgeschwindigkeit auf den angegebenen Wert fest
speedCommandUsage2Description=Setzt entweder den angegebenen Geschwindigkeittyp auf die angegebene Geschwindigkeit für dich oder einen anderen Spieler wenn angegeben
stonecutterCommandDescription=Öffnet eine Steinsäge.
stonecutterCommandUsage=/<command>
sudoCommandDescription=Lasse einen anderen Benutzer einen Befehl ausführen.
@@ -1182,27 +1259,32 @@ teleportRequestTimeoutInfo=§6Diese Anfrage wird nach§c {0} Sekunden§6 ungült
teleportTop=§6Zum höchsten Punkt teleportieren.
teleportToPlayer=§6Du teleportierst dich zu §c{0}§6.
teleportOffline=§6Der Spieler §c{0}§6 ist gerade offline. Du kannst dich mit /otp zu ihm teleportieren.
teleportOfflineUnknown=§6Die letzte bekannte Position von §c{0}§ 6 konnte nicht gefunden werden.
tempbanExempt=§4Du kannst diesen Spieler nicht temporär bannen.
tempbanExemptOffline=\\u00a74Du darfst Spieler, die offline sind, nicht tempor\\u00e4r bannen.
tempbanJoin=§4Du bist auf diesem Server gesperrt. \nDauer\: {0}\nGrund\: {1}
tempBanned=§cDu bist für§r {0}§c temporär gesperrt\:\n§r{2}
tempbanCommandDescription=Temporäres Speeren eines Benutzers.
tempbanCommandUsage1=/<command> <Spieler> <Länge> [Grund]
tempbanCommandUsage1Description=Bannt den gegebenen Spieler für die angegebene Zeit mit einem optionalen Grund
tempbanipCommandDescription=Temporäres Sperren einer IP-Adresse.
thunder=§6Es donnert jetzt in deiner Welt §c{0}§6.
thunderCommandDescription=Aktiviere/deaktiviere Thunder.
thunderCommandUsage=/<command> <true/false> [länge]
thunderCommandUsage1Description=Aktiviert/deaktiviert Donner (ggf. für eine bestimmte Zeit)
thunderDuration=§6Es donnert jetzt für§c {1} §6Sekunden in der Welt§c {0}§6.
timeBeforeHeal=§4Zeit bis zur nächsten Heilung\:§c {0}§4.
timeBeforeTeleport=§4Zeit bis zum nächsten Teleport\:§c {0}§4.
timeCommandDescription=Zeige/Ändere die Zeit der Welt. Standardmäßig die aktuelle Welt.
timeCommandUsage=/<command> [set|add] [day|night|dawn|17\:30|4pm|4000ticks] [weltname|all]
timeCommandUsage1=/<command>
timeCommandUsage1Description=Zeigt die Zeit in allen Welten an
timeFormat=§c{0}§6 oder §c{1}§6 oder §c{2}§6
timeSetPermission=§4Du hast keine Berechtigung die Zeit zu ändern.
timeSetWorldPermission=§4Du bist nicht berechtigt in der Welt §c''{0}''§4 die Zeit zu ändern.
timeWorldAdd=§6Die Zeit wurde in §c{1}§6 um§c {0} §6verschoben.
timeWorldCurrent=§6Die aktuelle Zeit in§c {0} §6ist §c{1}
timeWorldCurrentSign=§6Gerade ist es §c{0}&6 Uhr.
timeWorldSet=§6Die Zeit in §c{1}§6 wurde auf §c{0} §6gesetzt.
togglejailCommandDescription=Nimmt einen Spieler gefangen oder lässt ihn frei, teleportiert ihn zu dem angegebenen Gefängnis.
togglejailCommandUsage=/<command> <spieler> <gefängnisname> [datumsdifferenz]
@@ -1219,16 +1301,21 @@ tpCommandDescription=Zu einem Spieler teleportieren.
tpCommandUsage=/<command> <spieler> [andererspieler]
tpCommandUsage1=/<command> <spieler>
tpCommandUsage1Description=Teleportiert dich zu dem angegebenen Spieler
tpCommandUsage2Description=Teleportiert den ersten angegebenen Spieler zum zweiten
tpaCommandDescription=Anfrage zu dem angegebenen Spieler zu Teleportieren.
tpaCommandUsage=/<command> <spieler>
tpaCommandUsage1=/<command> <spieler>
tpaCommandUsage1Description=Fragt eine Teleportation zum angegebenen Spieler an
tpaallCommandDescription=Fragt alle anwesenden Spieler, ob sie sich zu dir teleportieren wollen.
tpaallCommandUsage=/<command> <spieler>
tpaallCommandUsage1=/<command> <spieler>
tpaallCommandUsage1Description=Fragt einen Teleport an alle Spieler an
tpacancelCommandDescription=Alle ausstehenden Teleportierungsanfragen abbrechen. [player] spezifizieren um Anfragen mit ihm abzubrechen.
tpacancelCommandUsage=/<command> [spieler]
tpacancelCommandUsage1=/<command>
tpacancelCommandUsage1Description=Bricht alle deine Teleport-Anfragen ab
tpacancelCommandUsage2=/<command> <spieler>
tpacancelCommandUsage2Description=Bricht die Teleport-Anfrage mit dem angegebenen Spieler ab
tpacceptCommandDescription=Akteptiert Teleportationsanfragen.
tpacceptCommandUsage=/<command> [andererspieler]
tpacceptCommandUsage1=/<command>
@@ -1244,6 +1331,7 @@ tpallCommandUsage1=/<command> [spieler]
tpautoCommandDescription=Akzeptiere Teleportationsanfragen automatisch.
tpautoCommandUsage=/<command> [spieler]
tpautoCommandUsage1=/<command> [spieler]
tpdenyCommandDescription=Lehnt Teleportations-Anfragen ab.
tpdenyCommandUsage=/<command>
tpdenyCommandUsage1=/<command>
tpdenyCommandUsage2=/<command> <spieler>
@@ -1291,6 +1379,7 @@ unbanCommandUsage1=/<command> <spieler>
unbanipCommandDescription=Enbannt die angegebene IP-Adresse.
unbanipCommandUsage=/<command> <adresse>
unbanipCommandUsage1=/<command> <adresse>
unbanipCommandUsage1Description=Entbannt die angegebene IP-Adresse
unignorePlayer=§6Du ignorierst §c{0} §6nicht mehr.
unknownItemId=§4Unbekannte Gegenstandsnummer\:§r {0}§4.
unknownItemInList=§4Unbekannter Gegenstand {0} in der Liste {1}.
@@ -1299,8 +1388,10 @@ unlimitedCommandDescription=Erlaubt das unbegrenzte Platzieren von Gegenständen
unlimitedCommandUsage=/<command> <list|item|clear> [spieler]
unlimitedItemPermission=\\u00a74Keine Berechtigung f\\u00fcr unendliche Items \\u00a7c{0}\\u00a74.
unlimitedItems=§6Unbegrenzte Objekte\:§r
unlinkCommandDescription=Löscht die Verbindung deines Minecraft-Accounts zu deinem Discord-Account.
unlinkCommandUsage=/<command>
unlinkCommandUsage1=/<command>
unlinkCommandUsage1Description=Löscht die Verbindung deines Minecraft-Accounts zu deinem Discord-Account.
unmutedPlayer=§6Spieler§c {0}§6 ist nicht mehr stummgeschaltet.
unsafeTeleportDestination=§4Das Teleport-Ziel ist nicht sicher und der Teleportschutz ist nicht aktiv.
unsupportedBrand=§4Die Server-Plattform, die die momentan verwendest, bietet die Möglichkeiten für diese Funktion nicht an.
@@ -1335,6 +1426,8 @@ versionOutputUnsupported=§d{0} §6Version\: §d{1}
versionOutputUnsupportedPlugins=§6Du verwendest Plugins, die§d nicht§6 unterstützt werden\!
versionMismatch=§4Versionen sind nicht gleich\! Bitte aktualisiere {0}.
versionMismatchAll=§4Versionen sind nicht gleich\! Bitte aktualisiere alle Essentials jar-Dateien auf die gleiche Version.
versionReleaseLatest=§6Du nutzt die neuste stable Version von EssentialsX\!
versionReleaseNew=§4Es steht eine neue Version von EssentialsX zum download\: §c{0}§4.
versionReleaseNewLink=§4Hier herunterladen\:§c {0}
voiceSilenced=§6Du bist nun stummgeschaltet\!
voiceSilencedTime=§6Deine Stimme wurde für {0} zum Schweigen gebracht\!
@@ -1344,11 +1437,14 @@ walking=gehend
warpCommandDescription=Zeige alle Warp-Punkte an oder warpe zum angegebenen Ort.
warpCommandUsage=/<command> <seitennummer|warp-punkt> [spieler]
warpCommandUsage1=/<command> [page]
warpCommandUsage2=/<command> <warp> [spieler]
warpCommandUsage2Description=Teleportiert dich oder einen bestimmten Spieler zu dem angegebenen Warp
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.
warpinfoCommandUsage=/<command> <warp-punkt>
warpinfoCommandUsage1=/<command> <warp-punkt>
warpinfoCommandUsage1Description=Gibt Informationen zum angegebenen Warp an
warpingTo=§6Warpe zu§c {0}§6.
warpList={0}
warpListPermission=§4Du hast keine Rechte, die Warp-Punkte anzuzeigen.
@@ -1358,9 +1454,13 @@ warps=§6Warp-Punkte\:§r {0}
warpsCount=§6Es existieren§c {0}§6 Warp-Punkte. Zeige§c {1}§6 von§c {2}§6 an.
weatherCommandDescription=Legt das Wetter fest.
weatherCommandUsage=/<command> <storm/sun> [duration]
weatherCommandUsage1=/<command> <storm|sun> [dauer]
weatherCommandUsage1Description=Setzte das Wetter auf den gegebenen Typ für eine optionale Dauer
warpSet=§6Warp§c {0}§6 wurde erstellt.
warpUsePermission=\\u00a74Du hast f\\u00fcr diesen Warp keine Rechte.
weatherInvalidWorld=Die Welt mit dem Namen {0} wurde nicht gefunden\!
weatherSignStorm=§6Wetter\: §cstürmig§6.
weatherSignSun=§6Wetter\: §csonnig§6.
weatherStorm=§6In §c{0} §6stürmt es jetzt.
weatherStormFor=§6Du hast das Wetter zu §cSturm§6 in§c {0}§6 für §c{1} Sekunden §6gesetzt.
weatherSun=§6In §c{0}§6 scheint jetzt die §cSonne§6.
@@ -1372,6 +1472,7 @@ whoisBanned=§6 - Gesperrt\:§r {0}
whoisCommandDescription=Finde heraus, welcher Benutzername hinter einem Spitznamen steckt.
whoisCommandUsage=/<command> <spitzname>
whoisCommandUsage1=/<command> <spieler>
whoisCommandUsage1Description=Gibt grundlegende Informationen über den angegebenen Spieler
whoisExp=§6 - Erfahrung\:§r {0} (Level {1})
whoisFly=§6 - Flugmodus\:§r {0} ({1})
whoisSpeed=§6 - Geschwindigkeit\:§r {0}
@@ -1397,9 +1498,16 @@ workbenchCommandUsage=/<command>
worldCommandDescription=Zwischen Welten wechseln.
worldCommandUsage=/<command> [world]
worldCommandUsage1=/<command>
worldCommandUsage1Description=Teleportiert dich an den entsprechenden Standort im Nether oder in der Oberwelt
worldCommandUsage2=/<command> <welt>
worldCommandUsage2Description=Teleportiert dich zu einer Location in der gegebenen Welt
worth=§aEin Stapel {0} ist §c{1}§a wert. ({2} Stück je {3})
worthCommandDescription=Berechnet den Wert der Gegenstände in der Hand oder wie angegeben.
worthCommandUsage=/<command> <<gegenstandsname>|<id>|hand|inventory|blocks> [-][anzahl]
worthCommandUsage1=/<command> <itemname> [amount]
worthCommandUsage2=/<command> hand [amount]
worthCommandUsage3=/<command> all
worthCommandUsage4=/<command> blocks [amount]
worthMeta=§aEin Stapel von {0} mit Metadaten {1} ist §c{2}§a wert. ({3} Stück je {4})
worthSet=§6Wert des Gegenstands gesetzt.
year=Jahr
@@ -83,6 +83,7 @@ bookCommandUsage3=/<command> title <title>
bookCommandUsage3Description=Ορίζει τον τίτλο ενός υπογεγραμμένου βιβλίου
bookLocked=§6Αυτό το βιβλίο είναι τώρα κλειδωμένο.
bookTitleSet=§6Τίτλος του βιβλίου ορίστηκε σε {0}.
bottomCommandUsage=/<command>
breakCommandDescription=Σπάει το μπλοκ που κοιτάτε.
breakCommandUsage=/<command>
broadcast=§6[§4Ανακοίνωση§6]§a {0}
@@ -100,6 +100,8 @@ 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}.
bottomCommandDescription=Teleport to the lowest block at your current position.
bottomCommandUsage=/<command>
breakCommandDescription=Breaks the block you are looking at.
breakCommandUsage=/<command>
broadcast=§6[§4Broadcast§6]§a {0}
@@ -240,6 +242,12 @@ discordbroadcastCommandUsage1Description=Sends the given message to the specifie
discordbroadcastInvalidChannel=§4Discord channel §c{0}§4 does not exist.
discordbroadcastPermission=§4You do not have permission to send messages to the §c{0}§4 channel.
discordbroadcastSent=§6Message sent to §c{0}§6\!
discordCommandAccountArgumentUser=The Discord account to look up
discordCommandAccountDescription=Looks up the linked Minecraft account for either yourself or another Discord user
discordCommandAccountResponseLinked=Your account is linked to the Minecraft account\: **{0}**
discordCommandAccountResponseLinkedOther={0}''s account is linked to the Minecraft account\: **{1}**
discordCommandAccountResponseNotLinked=You do not have a linked Minecraft account.
discordCommandAccountResponseNotLinkedOther={0} does not have a linked Minecraft account.
discordCommandDescription=Sends the Discord invite link to the player.
discordCommandLink=§6Join our Discord server at §c{0}§6\!
discordCommandUsage=/<command>
@@ -248,6 +256,14 @@ 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}"
discordCommandUnlinkDescription=Unlinks the Minecraft account currently linked to your Discord account
discordCommandUnlinkInvalidCode=You do not currently have a Minecraft account linked to Discord\!
discordCommandUnlinkUnlinked=Your Discord account has been unlinked from all associated Minecraft accounts.
discordCommandLinkArgumentCode=The code provided in-game to link your Minecraft account
discordCommandLinkDescription=Links your Discord account with your Minecraft account using a code from the in-game /link command
discordCommandLinkHasAccount=You already have an account linked\! To unlink your current account, type /unlink.
discordCommandLinkInvalidCode=Invalid linking code\! Make sure you''ve run /link in-game and copied the code correctly.
discordCommandLinkLinked=Successfully linked your account\!
discordCommandListDescription=Gets a list of online players.
discordCommandListArgumentGroup=A specific group to limit your search by
discordCommandMessageDescription=Messages a player on the Minecraft server.
@@ -265,8 +281,20 @@ discordErrorNoPrimary=You did not define a primary channel or your defined prima
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".
discordLinkInvalidGroup=Invalid group {0} was provided for role {1}. The following groups are available\: {2}
discordLinkInvalidRole=An invalid role ID, {0}, was provided for group\: {1}. You can see the ID of roles with the /roleinfo command in Discord.
discordLinkInvalidRoleInteract=The role, {0} ({1}), cannot be used for group->role synchronization because it above your bot''s uppermost role. Either move your bot''s role above "{0}" or move "{0}" below your bot''s role.
discordLinkInvalidRoleManaged=The role, {0} ({1}), cannot be used for group->role synchronization because it is managed by another bot or integration.
discordLinkLinked=§6To link your Minecraft account to Discord, type §c{0} §6in the Discord server.
discordLinkLinkedAlready=§6You have already linked your Discord account\! If you wish to unlink your discord account use §c/unlink§6.
discordLinkLoginKick=§6You must link your Discord account before you can join this server.\n§6To link your Minecraft account to Discord, type\:\n§c{0}\n§6in this server''s Discord server\:\n§c{1}
discordLinkLoginPrompt=§6You must link your Discord account before you can move, chat on or interact with this server. To link your Minecraft account to Discord, type §c{0} §6in this server''s Discord server\: §c{1}
discordLinkNoAccount=§6You do not currently have a Discord account linked to your Minecraft account.
discordLinkPending=§6You already have a link code. To complete linking your Minecraft account to Discord, type §c{0} §6in the Discord server.
discordLinkUnlinked=§6Unlinked your Minecraft account from all associated discord accounts.
discordLoggingIn=Attempting to login to Discord...
discordLoggingInDone=Successfully logged in as {0}
discordMailLine=**New mail from {0}\:** {1}
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
@@ -661,8 +689,10 @@ lightningCommandUsage2=/<command> <player> <power>
lightningCommandUsage2Description=Strikes lighting at the target player with the given power
lightningSmited=§6Thou hast been smitten\!
lightningUse=§6Smiting§c {0}
linkCommandDescription=Generates a code to link your Minecraft account to Discord.
linkCommandUsage=/<command>
linkCommandUsage1=/<command>
linkCommandUsage1Description=Generates a code for the /link command on Discord
listAfkTag=§7[AFK]§r
listAmount=§6There are §c{0}§6 out of maximum §c{1}§6 players online.
listAmountHidden=§6There are §c{0}§6/§c{1}§6 out of maximum §c{2}§6 players online.
@@ -1029,6 +1059,7 @@ 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.
@@ -1223,6 +1254,7 @@ teleportationDisabledWarning=§6You must enable teleportation before other playe
teleportationEnabled=§6Teleportation §cenabled§6.
teleportationEnabledFor=§6Teleportation §cenabled §6for §c{0}§6.
teleportAtoB=§c{0}§6 teleported you to §c{1}§6.
teleportBottom=§6Teleporting to bottom.
teleportDisabled=§c{0} §4has teleportation disabled.
teleportHereRequest=§c{0}§6 has requested that you teleport to them.
teleportHome=§6Teleporting to §c{0}§6.
@@ -1238,6 +1270,7 @@ teleportRequestTimeoutInfo=§6This request will timeout after§c {0} seconds§6.
teleportTop=§6Teleporting to top.
teleportToPlayer=§6Teleporting to §c{0}§6.
teleportOffline=§6The player §c{0}§6 is currently offline. You are able to teleport to them using /otp.
teleportOfflineUnknown=§6Unable to find the last known position of §c{0}§6.
tempbanExempt=§4You may not tempban that player.
tempbanExemptOffline=§4You may not tempban offline players.
tempbanJoin=You are banned from this server for {0}. Reason\: {1}
@@ -1402,8 +1435,10 @@ 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
unlinkCommandDescription=Unlinks your Minecraft account from the currently linked Discord account.
unlinkCommandUsage=/<command>
unlinkCommandUsage1=/<command>
unlinkCommandUsage1Description=Unlinks your Minecraft account from the currently linked Discord account.
unmutedPlayer=§6Player§c {0} §6unmuted.
unsafeTeleportDestination=§4The teleport destination is unsafe and teleport-safety is disabled.
unsupportedBrand=§4The server platform you are currently running does not provide the capabilities for this feature.
@@ -100,6 +100,8 @@ 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}.
bottomCommandDescription=Teleport to the lowest block at your current position.
bottomCommandUsage=/<command>
breakCommandDescription=Breaks the block you are looking at.
breakCommandUsage=/<command>
broadcast=§6[§4Broadcast§6]§a {0}
@@ -240,6 +242,12 @@ discordbroadcastCommandUsage1Description=Sends the given message to the specifie
discordbroadcastInvalidChannel=§4Discord channel §c{0}§4 does not exist.
discordbroadcastPermission=§4You do not have permission to send messages to the §c{0}§4 channel.
discordbroadcastSent=§6Message sent to §c{0}§6\!
discordCommandAccountArgumentUser=The Discord account to look up
discordCommandAccountDescription=Looks up the linked Minecraft account for either yourself or another Discord user
discordCommandAccountResponseLinked=Your account is linked to the Minecraft account\: **{0}**
discordCommandAccountResponseLinkedOther={0}''s account is linked to the Minecraft account\: **{1}**
discordCommandAccountResponseNotLinked=You do not have a linked Minecraft account.
discordCommandAccountResponseNotLinkedOther={0} does not have a linked Minecraft account.
discordCommandDescription=Sends the Discord invite link to the player.
discordCommandLink=§6Join our Discord server at §c{0}§6\!
discordCommandUsage=/<command>
@@ -248,11 +256,20 @@ 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}"
discordCommandUnlinkDescription=Unlinks the Minecraft account currently linked to your Discord account
discordCommandUnlinkInvalidCode=You do not currently have a Minecraft account linked to Discord\!
discordCommandUnlinkUnlinked=Your Discord account has been unlinked from all associated Minecraft accounts.
discordCommandLinkArgumentCode=The code provided in-game to link your Minecraft account
discordCommandLinkDescription=Links your Discord account with your Minecraft account using a code from the in-game /link command
discordCommandLinkHasAccount=You already have an account linked\! To unlink your current account, type /unlink.
discordCommandLinkInvalidCode=Invalid linking code\! Make sure you''ve run /link in-game and copied the code correctly.
discordCommandLinkLinked=Successfully linked your account\!
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.
@@ -264,8 +281,20 @@ discordErrorNoPrimary=You did not define a primary channel or your defined prima
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".
discordLinkInvalidGroup=Invalid group {0} was provided for role {1}. The following groups are available\: {2}
discordLinkInvalidRole=An invalid role ID, {0}, was provided for group\: {1}. You can see the ID of roles with the /roleinfo command in Discord.
discordLinkInvalidRoleInteract=The role, {0} ({1}), cannot be used for group->role synchronization because it above your bot''s uppermost role. Either move your bot''s role above "{0}" or move "{0}" below your bot''s role.
discordLinkInvalidRoleManaged=The role, {0} ({1}), cannot be used for group->role synchronization because it is managed by another bot or integration.
discordLinkLinked=§6To link your Minecraft account to Discord, type §c{0} §6in the Discord server.
discordLinkLinkedAlready=§6You have already linked your Discord account\! If you wish to unlink your discord account use §c/unlink§6.
discordLinkLoginKick=§6You must link your Discord account before you can join this server.\n§6To link your Minecraft account to Discord, type\:\n§c{0}\n§6in this server''s Discord server\:\n§c{1}
discordLinkLoginPrompt=§6You must link your Discord account before you can move, chat on or interact with this server. To link your Minecraft account to Discord, type §c{0} §6in this server''s Discord server\: §c{1}
discordLinkNoAccount=§6You do not currently have a Discord account linked to your Minecraft account.
discordLinkPending=§6You already have a link code. To complete linking your Minecraft account to Discord, type §c{0} §6in the Discord server.
discordLinkUnlinked=§6Unlinked your Minecraft account from all associated discord accounts.
discordLoggingIn=Attempting to login to Discord...
discordLoggingInDone=Successfully logged in as {0}
discordMailLine=**New mail from {0}\:** {1}
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
@@ -313,6 +342,7 @@ enderchestCommandUsage2=/<command> <player>
enderchestCommandUsage2Description=Opens the ender chest of the target player
errorCallingCommand=Error calling the command /{0}
errorWithMessage=§cError\:§4 {0}
essChatNoSecureMsg=EssentialsX Chat version {0} does not support secure chat on this server software. Update EssentialsX, and if this issue persists, inform the developers.
essentialsCommandDescription=Reloads essentials.
essentialsCommandUsage=/<command>
essentialsCommandUsage1=/<command> reload
@@ -480,6 +510,7 @@ 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.
homeRenamed=§6Home §c{0} §6has been renamed to §c{1}§6.
homeSet=§6Home set to current location.
hour=hour
hours=hours
@@ -532,6 +563,7 @@ invseeCommandDescription=See the inventory of other players.
invseeCommandUsage=/<command> <player>
invseeCommandUsage1=/<command> <player>
invseeCommandUsage1Description=Opens the inventory of the specified player
invseeNoSelf=§cYou can only view other players'' inventories.
is=is
isIpBanned=§6IP §c{0} §6is banned.
internalError=§cAn internal error occurred while attempting to perform this command.
@@ -657,8 +689,10 @@ lightningCommandUsage2=/<command> <player> <power>
lightningCommandUsage2Description=Strikes lighting at the target player with the given power
lightningSmited=§6Thou hast been smitten\!
lightningUse=§6Smiting§c {0}
linkCommandDescription=Generates a code to link your Minecraft account to Discord.
linkCommandUsage=/<command>
linkCommandUsage1=/<command>
linkCommandUsage1Description=Generates a code for the /link command on Discord
listAfkTag=§7[AFK]§r
listAmount=§6There are §c{0}§6 out of maximum §c{1}§6 players online.
listAmountHidden=§6There are §c{0}§6/§c{1}§6 out of maximum §c{2}§6 players online.
@@ -1008,6 +1042,12 @@ removeCommandUsage1Description=Removes all of the given mob type in the current
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.
renamehomeCommandDescription=Renames a home.
renamehomeCommandUsage=/<command> <[player\:]name> <new name>
renamehomeCommandUsage1=/<command> <name> <new name>
renamehomeCommandUsage1Description=Renames your home to the given name
renamehomeCommandUsage2=/<command> <player>\:<name> <new name>
renamehomeCommandUsage2Description=Renames the specified player''s home to the given name
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.
@@ -1019,6 +1059,7 @@ 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.
@@ -1076,7 +1117,9 @@ serverTotal=§6Server Total\:§c {0}
serverUnsupported=You are running an unsupported server version\!
serverUnsupportedClass=Status determining class\: {0}
serverUnsupportedCleanroom=You are running a server that does not properly support Bukkit plugins that rely on internal Mojang code. Consider using an Essentials replacement for your server software.
serverUnsupportedDangerous=You are running a server fork that is known to be extremely dangerous and lead to data loss. It is strongly recommended you switch to a more stable server software like Paper.
serverUnsupportedLimitedApi=You are running a server with limited API functionality. EssentialsX will still work, but certain features may be disabled.
serverUnsupportedDumbPlugins=You are using plugins known to cause severe issues with EssentialsX and other plugins.
serverUnsupportedMods=You are running a server that does not properly support Bukkit plugins. Bukkit plugins should not be used with Forge/Fabric mods\! For Forge\: Consider using ForgeEssentials, or SpongeForge + Nucleus.
setBal=§aYour balance was set to {0}.
setBalOthers=§aYou set {0}§a''s balance to {1}.
@@ -1390,8 +1433,10 @@ 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
unlinkCommandDescription=Unlinks your Minecraft account from the currently linked Discord account.
unlinkCommandUsage=/<command>
unlinkCommandUsage1=/<command>
unlinkCommandUsage1Description=Unlinks your Minecraft account from the currently linked Discord account.
unmutedPlayer=§6Player§c {0} §6unmuted.
unsafeTeleportDestination=§4The teleport destination is unsafe and teleport-safety is disabled.
unsupportedBrand=§4The server platform you are currently running does not provide the capabilities for this feature.
@@ -100,6 +100,8 @@ bookCommandUsage3=/<command> título <title>
bookCommandUsage3Description=Establece el título de un libro firmado
bookLocked=§6El libro ha sido bloqueado.
bookTitleSet=§6Ahora el título del libro es {0}.
bottomCommandDescription=Teletransportandote al bloque más bajo en su posición actual.
bottomCommandUsage=/<command>
breakCommandDescription=Rompe el bloque que estás mirando.
breakCommandUsage=/<command>
broadcast=§6[§4Aviso§6]§a {0}
@@ -240,15 +242,28 @@ discordbroadcastCommandUsage1Description=Envía el mensaje dado al canal de Disc
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\!
discordCommandAccountArgumentUser=soy insano la vdd despues de todo yo quuiero la traudcicon xdasdas
discordCommandDescription=Envía el enlace de invitación a Discord al jugador.
discordCommandAccountArgumentUser=La cuenta de Discord a buscar
discordCommandAccountDescription=Busca la cuenta de Minecraft vinculada a ti mismo o a otro usuario de Discord
discordCommandAccountResponseLinked=Tu cuenta está vinculada a la cuenta de Minecraft\: **{0}**
discordCommandAccountResponseLinkedOther=La cuenta de {0} está vinculada a la cuenta de Minecraft\: **{1}**
discordCommandAccountResponseNotLinked=No tienes una cuenta de Minecraft vinculada.
discordCommandAccountResponseNotLinkedOther={0} no tiene una cuenta de Minecraft vinculada.
discordCommandDescription=Envía un enlace de invitación de Discord a un 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
discordCommandUsage1Description=Envía un enlace de invitación de Discord a un jugador
discordCommandExecuteDescription=Ejecuta un comando de consola en el servidor de Minecraft.
discordCommandExecuteArgumentCommand=El comando a ejecutar
discordCommandExecuteReply=Ejecutando comando\: "/{0}"
discordCommandUnlinkDescription=Desvincula la cuenta de Minecraft actualmente vinculada a tu cuenta de Discord
discordCommandUnlinkInvalidCode=¡Actualmente no tienes una cuenta de Minecraft vinculada a Discord\!
discordCommandUnlinkUnlinked=Tu cuenta de Discord ha sido desvinculada de todas las cuentas de Minecraft asociadas.
discordCommandLinkArgumentCode=El código proporcionado en el juego para vincular tu cuenta de Minecraft
discordCommandLinkDescription=Vincula tu cuenta de Discord con tu cuenta de Minecraft usando un código del comando /link en el juego
discordCommandLinkHasAccount=¡Ya tienes una cuenta vinculada\! Para desvincular tu cuenta actual, escribe /unlink.
discordCommandLinkInvalidCode=¡Código de enlace no válido\! Asegúrese de que ha ejecutado /link en el juego y copiado el código correctamente.
discordCommandLinkLinked=¡Se ha vinculado con éxito tu cuenta\!
discordCommandListDescription=Genera una lista de jugadores 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.
@@ -266,8 +281,20 @@ discordErrorNoPrimary=No has definido un canal principal o el que has definido n
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".
discordLinkInvalidGroup=Grupo inválido {0} proporcionado para el rol {1}. Los siguientes grupos están disponibles\: {2}
discordLinkInvalidRole=Un ID de rol inválido, {0}, ha sido proporcionado para el grupo\: {1}. Puedes ver el ID de los roles con el comando /roleinfo en Discord.
discordLinkInvalidRoleInteract=El rol, {0} ({1}), no se puede utilizar para la sincronización de roles debido a que está por encima del rol máximo de tu bot. Puedes mover el rol de tu bot encima de "{0}" o mover "{0}" debajo.
discordLinkInvalidRoleManaged=El rol, {0} ({1}), no se puede utilizar para sincronizar de roles debido a que está controlado por otro bot o integración.
discordLinkLinked=§6Para vincular tu cuenta de Minecraft a Discord, escribe §c{0} §6en el servidor de Discord.
discordLinkLinkedAlready=§6Ya tienes vinculada tu cuenta de Discord\! Si deseas desvincularla usa §c/unlink§6.
discordLinkLoginKick=§6Debes vincular tu cuenta de Discord para acceder a este servidor.\n§6Para vincular tu cuenta de Minecraft a Discord, escribe\:\n§c{0}\n§6en el Discord de este servidor\:\n§c{1}
discordLinkLoginPrompt=§6Debes vincular tu cuenta de Discord para poder moverte, chatear o interactuar con el servidor. Para vincular tu cuenta de Minecraft a Discord, escribe§c{0} §6en el Discord de este servidor\: §c{1}
discordLinkNoAccount=§6Actualmente no tienes una cuenta de Discord vinculada a tu cuenta de Minecraft.
discordLinkPending=§6Ya tienes un código de vinculación. Para completar la vinculación de tu cuenta de Minecraft a Discord, escribe §c{0} §6en el servidor de Discord.
discordLinkUnlinked=§6Has desvinculado tu cuenta de Minecraft de todas las cuentas de Discord asociadas.
discordLoggingIn=Intentando iniciar sesión en Discord...
discordLoggingInDone=Se ha iniciado sesión con éxito como {0}
discordMailLine=**Nuevo mail de {0}\:** {1}
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
@@ -483,6 +510,7 @@ homeCommandUsage2=/<command> <player>\:<name>
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.
homeRenamed=§6La casa §c{0} §6ha sido renombrada a §c{1}§6.
homeSet=§7Hogar establecido.
hour=hora
hours=horas
@@ -573,7 +601,7 @@ itemnameCommandUsage2Description=Establece el nombre del item sostenido al texto
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.
itemNotEnough2=§6Si quieres vender todos tus objetos de ese tipo, escribe /sell nombredelobjeto (en inglés).
itemNotEnough2=§6Si quieres vender todos tus objetos de ese tipo, escribe§c /sell nombredelobjeto§6.
itemNotEnough3=§c/sell nombredeobjeto -1§6 venderá todos excepto un objeto, etc.
itemsConverted=§6Todos los items han sido convertidos en bloques.
itemsCsvNotLoaded=¡No se pudo cargar {0}\!
@@ -661,8 +689,10 @@ lightningCommandUsage2=/<command> <jugador> <poder>
lightningCommandUsage2Description=Lanza un rayo al jugador objetivo con el poder elegido
lightningSmited=§6¡Has sido golpeado mágicamente\!
lightningUse=§6Golpeando al jugador§c {0}
linkCommandDescription=Genera un código para vincular tu cuenta de Minecraft a Discord.
linkCommandUsage=/<command>
linkCommandUsage1=/<command>
linkCommandUsage1Description=Genera un código para el comando /link en Discord
listAfkTag=§8[Ausente]§r
listAmount=§9Hay §c{0}§9 jugadores de un máximo de §c{1}§9 jugadores §2en linea§9.
listAmountHidden=§6Hay§c{0}§6/§c{1}§6 de un máximo de §c{2}§6 jugadondo online.
@@ -738,7 +768,7 @@ moreCommandUsage1Description=Llena el ítem retenido hasta el monto establecido,
moreThanZero=Las cantidades deben ser mayores que 0.
motdCommandDescription=Mira el Mensaje del Día.
motdCommandUsage=/<command> [capítulo] [página]
moveSpeed=§6Establecida velocidad de {0} a§c {1} §6durante §c{2}§6.
moveSpeed=§6Velocidad establecida de§c {0} §6a§c {1} §6durante §c{2}§6.
msgCommandDescription=Envía un mensaje privado al jugador especificado.
msgCommandUsage=/<command> <hacia> <mensaje>
msgCommandUsage1=/<command> <hacia> <mensaje>
@@ -1012,6 +1042,12 @@ removeCommandUsage1Description=Elimina todos los mobs del tipo dado en el mundo
removeCommandUsage2=/<comando> <tipo de mob> <radio> [mundo]
removeCommandUsage2Description=Elimina el tipo de mob dado dentro del radio dado en el mundo actual u otro si se especifica
removed=§6Eliminadas§c {0} §6entidades.
renamehomeCommandDescription=Cambia el nombre de un hogar.
renamehomeCommandUsage=/<command> <[player\:]name> <new name>
renamehomeCommandUsage1=/<command> <name> <new name>
renamehomeCommandUsage1Description=Renombra tu casa con el nombre dado
renamehomeCommandUsage2=/<command> <player>\:<name> <new name>
renamehomeCommandUsage2Description=Cambia el nombre de la casa del jugador especificado por el nombre dado
repair=§6Has reparado exitósamente tu\: §c{0}§6.
repairAlreadyFixed=§4Este ítem no necesita reparación.
repairCommandDescription=Repara la durabilidad de uno o todos tus objetos.
@@ -1023,6 +1059,7 @@ repairCommandUsage2Description=Repara todos los objetos en tu inventario
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.
@@ -1217,6 +1254,7 @@ teleportationDisabledWarning=§6Debes activar la teletransportación antes de qu
teleportationEnabled=§6Teletransporte §chabilitado§6.
teleportationEnabledFor=§6Teletransporte §chabilitado §6para §c{0}§6.
teleportAtoB=§c{0}§6 te ha teletransportado a §c{1}§6.
teleportBottom=§6Teletransportandote hasta abajo.
teleportDisabled=§c{0} §4tiene la teletransportación desactivada.
teleportHereRequest=§c{0}§6te ha pedido que te teletransportes hasta él.
teleportHome=§6Teletransportándose hacia §c{0}§6.
@@ -1232,6 +1270,7 @@ teleportRequestTimeoutInfo=§6La solicitud será automáticamente cancelada desp
teleportTop=§6Teletransportandote hasta la cima.
teleportToPlayer=§6Teletransportándose a §c{0}§6.
teleportOffline=§6El[la] jugador[a] §c{0}§6 está desconectado[a].Puedes teletransportarte a él[ella] usando /otp.
teleportOfflineUnknown=§6No se ha podido encontrar la última posición conocida de §c{0}§6.
tempbanExempt=§4No puedes banear temporalmente a ese usuario.
tempbanExemptOffline=§4No puedes banear temporalmente a jugadores que no están conectados.
tempbanJoin=You are banned from this server for {0}. Reason\: {1}
@@ -1377,11 +1416,11 @@ unableToSpawnMob=§4No puedes generar criaturas.
unbanCommandDescription=Desbanea el jugador especificado.
unbanCommandUsage=/<command> <jugador>
unbanCommandUsage1=/<command> <jugador>
unbanCommandUsage1Description=Desbanea el jugador especificado
unbanCommandUsage1Description=Desbanea un jugador específico
unbanipCommandDescription=Desbanea la dirección IP especificada.
unbanipCommandUsage=/<command> <dirección IP>
unbanipCommandUsage1=/<command> <dirección IP>
unbanipCommandUsage1Description=Desbanea la dirección IP especificada
unbanipCommandUsage1Description=Desbanea una dirección IP especifica
unignorePlayer=§6Ya no ignoras al jugador§c {0}§6.
unknownItemId=§4ID de ítem desconocido\:§r {0}§4.
unknownItemInList=§4Ítem desconocido {0} en {1} lista.
@@ -1396,8 +1435,10 @@ unlimitedCommandUsage3=/<comando> limpiar [jugador]
unlimitedCommandUsage3Description=Limpia todos los objetos ilimitados para ti u otro jugador si se especifica
unlimitedItemPermission=§4Sin permiso para artículo ilimitado §c{0}§4.
unlimitedItems=§6Ítems ilimitados\:§r
unlinkCommandDescription=Desvincula tu cuenta de Minecraft de la cuenta de Discord actualmente vinculada.
unlinkCommandUsage=/<command>
unlinkCommandUsage1=/<command>
unlinkCommandUsage1Description=Desvincula tu cuenta de Minecraft de la cuenta de Discord actualmente vinculada.
unmutedPlayer=§6El jugador§c {0} §6ya no está silenciado.
unsafeTeleportDestination=§4El destino es inseguro y el teletransporte seguro está desactivado.
unsupportedBrand=§4La plataforma en la que se ejecuta el servidor no proporciona las capacidades para esta función.
@@ -1418,6 +1459,9 @@ userIsAwaySelf=§7Ahora estás AFK.
userIsAwaySelfWithMessage=§7Ahora estás AFK.
userIsNotAwaySelf=§7Ya no estás AFK\!
userJailed=§6¡Has sido encarcelado\!
usermapEntry=§c{0} §6está mapeado en §c{1}§6.
usermapPurge=§6Comprobando archivos en userdata que no estén mapeados, los resultados serán registrados en consola. Modo Destructivo\: {0}
usermapSize=§6Usuarios actuales en cache en el mapeo del usuario §c{0}§6/§c{1}§6/§c{2}§6.
userUnknown=§4Aviso\: §cel jugador §4{0} §cnunca ha visitado el servidor\!
usingTempFolderForTesting=Usando carpeta temporal para pruebas\:
vanish=§6Invisibilidad mágica para {0}§6\:§c {1}
@@ -1449,7 +1493,7 @@ versionReleaseNew=§4Hay una nueva versión de EssentialsX disponible para desca
versionReleaseNewLink=§4Descárgala aquí\:§c {0}
voiceSilenced=§7Tu voz ha sido silenciada
voiceSilencedTime=§6Tu voz ha sido silenciada por {0}\!
voiceSilencedReason=§6Tu voz ha sido silenciada\! §6Motivo\: §c{0}
voiceSilencedReason=§6Has sido silenciado\! §6Motivo\: §c{0}
voiceSilencedReasonTime=§6Tu voz ha sido silenciada por {0}\! Razón\: §c{1}
walking=caminando
warpCommandDescription=Lista todos los warp o teletransporta al warp especificado.
@@ -100,6 +100,7 @@ bookCommandUsage3=/<käsklus> title <pealkiri>
bookCommandUsage3Description=Määrab kirjutatud raamatu pealkirja
bookLocked=§6See raamat on nüüd lukus.
bookTitleSet=§6Raamatu pealkirjaks on määratud "{0}".
bottomCommandUsage=/<command>
breakCommandDescription=Lõhub vaadatava ploki.
breakCommandUsage=/<käsklus>
broadcast=§6[§4Teadaanne§6]§a {0}
@@ -259,6 +260,7 @@ discordErrorLoggerInvalidChannel=Discordi konsooli logimine on keelatud kanali d
discordErrorLoggerNoPerms=Discordi konsooli logija on ebapiisavate õiguste tõttu keelatud\! Veenduge, et teie robotil on serveris õigused "Halda veebihaake". Pärast selle parandamist käivitage "/ess reload".
discordLoggingIn=Proovin logida Discordi...
discordLoggingInDone=Edukalt sisse logitud kui {0}
discordMailLine=**Uus kiri mängijalt {0}\:** {1}
disposal=Prügišaht
disposalCommandDescription=Avab kaasaskantava hävitusmenüü.
disposalCommandUsage=/<käsklus>
@@ -654,6 +656,7 @@ listGroupTag=§6{0}§r\:
listHiddenTag=§7[PEIDETUD]§r
listRealName=({0})
loadWarpError=§4Koolu {0} laadimisel esines viga.
localFormat=§3[L] §r<{0}> {1}
loomCommandDescription=Avab kangasteljed.
loomCommandUsage=/<käsklus>
mailClear=§6Postkasti tühjendamiseks kirjuta§c /mail clear§6.
@@ -813,6 +816,7 @@ noPlacePermission=§4Sul puudub luba selle sildi juurde ploki asetamiseks.
noPotionEffectPerm=§4Sul puudub luba sellele võlujoogile efekti §c{0} §4 rakendamiseks.
noPowerTools=§6Sul puuduvad võimutööriistad.
notAcceptingPay=§4Mängija §4{0} §4ei võta makseid vastu.
notAllowedToLocal=§4Sul puudub luba kohalikus vestluses rääkimiseks.
notEnoughExperience=§4Sul pole piisavalt kogemuspunkte.
notEnoughMoney=§4Sul pole piisavalt raha.
notFlying=ei lenda
@@ -100,6 +100,7 @@ bookCommandUsage3=/<command> otsikko <title>
bookCommandUsage3Description=Asettaa kirjalle otsikon
bookLocked=§6Tämä kirja on nyt lukittu.
bookTitleSet=§6Kirjan otsikko on nyt {0}.
bottomCommandUsage=/<command>
breakCommandDescription=Rikkoo palikan, johon katsot.
breakCommandUsage=/<command>
broadcast=§6[§4Ilmoitus§6]§a {0}
@@ -126,6 +127,7 @@ cantReadGeoIpDB=Ei pystytty lukemaan GeoIP tietokantaa\!
cantSpawnItem=§4Sinulla ei ole oikeutta luoda tavaraa§c {0}§4.
cartographytableCommandDescription=Avaa karttapöydän.
cartographytableCommandUsage=/<command>
chatTypeLocal=§[L]
chatTypeSpy=[Vakoilu]
cleaned=Käyttäjätiedot on poistettu.
cleaning=Poistetaan käyttäjätietoja.
@@ -142,6 +144,7 @@ clearinventoryCommandUsage3Description=Poistaa kaiken (tai tietyn määrän) ann
clearinventoryconfirmtoggleCommandDescription=Vaihdettavissa, pyydetäänkö sinua vahvistamaan tavaraluettelon tyhjennys vai ei.
clearinventoryconfirmtoggleCommandUsage=/<command>
commandArgumentOptional=§7
commandArgumentOr=§c
commandArgumentRequired=§e
commandCooldown=§cEt voi kirjoittaa tätä komentoa ajassa {0}.
commandDisabled=§cKomento§6 {0}§c on poistettu käytöstä.
@@ -150,13 +153,18 @@ commandHelpFailedForPlugin=Virhe haettaessa apua lisäosasta\: {0}
commandHelpLine1=§6Komentoapu\: §f/{0}
commandHelpLine2=§6Kuvaus\: §f{0}
commandHelpLine3=§7Käyttö;
commandHelpLine4=§6Myös\: §f{0}
commandHelpLineUsage={0} §6- {1}
commandNotLoaded=§4Komento {0} on väärin ladattu.
compassBearing=§6Osoittaa\: {0} ({1} astetta).
compassCommandDescription=Kuvailee nykyistä katsomiskulmaasi.
compassCommandUsage=/<command>
condenseCommandDescription=Tiivistää esineet pienemmiksi kappaleiksi.
condenseCommandUsage=/<command> [item]
condenseCommandUsage1=/<command>
condenseCommandUsage1Description=Tyhjentää tavaraluottelosi
condenseCommandUsage2=/<command> <item>
condenseCommandUsage2Description=Poistaa tietyn tavaran tavaraluettelostasi
configFileMoveError=Virhe siirrettäessä tiedostoa config.yml varmuuskopio sijaintiin.
configFileRenameError=Virhe nimettäessä tiedostoa temp tiedostoon config.yml
confirmClear=§7§lVAHVISTAAKSESI§7 tavaraluettelon tyhjennyksen, suorita uudellen komento\: §6{0}
@@ -171,9 +179,11 @@ createdKit=§6Luotu paketti §c{0}, §c{1} §6merkinnällä ja viiveellä §c{2}
createkitCommandDescription=Luo kitin pelissä\!
createkitCommandUsage=/<command> <kitname> <delay>
createkitCommandUsage1=/<command> <kitname> <delay>
createkitCommandUsage1Description=Luo kitin annetulla nimellä ja ajalla
createKitFailed=§4Pakkauksen luomisessa tapahtui virhe {0}.
createKitSeparator=§m-----------------------
createKitSuccess=§6Luotu paketti\: §f{0}\n§6Viive\: §f{1}\n§6Osoite\: §f{2}\n§6Kopioi yllä olevan linkin sisältö kits.yml tiedostoon.
createKitUnsupported=§4NBT-tavaroiden sarjoitus on otettu käyttöön, mutta tämä palvelin ei käytä versiota Paper 1.15.2+. Palataan takaisin tavalliseen sarjoitukseen.
creatingConfigFromTemplate=Luodaan config tiedostoa mallista\: {0}
creatingEmptyConfig=Luodaan tyhjää config tiedostoa\: {0}
creative=luova
@@ -184,22 +194,33 @@ customtextCommandUsage=/<alias> - Määritä bukkit.yml-tiedostossa
day=päivä
days=päivää
defaultBanReason=Bannivasara on puhunut\!
deletedHomes=Kaikki kodit poistettu.
deletedHomesWorld=Kaikki kodit kohteessa {0} poistettu.
deleteFileError=Ei voida poistaa tiedostoa\: {0}
deleteHome=§6Koti§c {0} §6on poistettu.
deleteJail=§6Vankila§c {0} §6on poistettu.
deleteKit=§6Pakki§c {0} §6on poistettu.
deleteWarp=§6Warp§c {0} §6on poistettu.
deletingHomes=Poistetaan kaikkia koteja...
deletingHomesWorld=Poistetaan kaikkia koteja kohteessa {0}...
delhomeCommandDescription=Poistaa kodin.
delhomeCommandUsage=/<command> [pelaaja\:]<name>
delhomeCommandUsage1=/<command> <name>
delhomeCommandUsage1Description=Poistaa kotisi annetulla nimellä
delhomeCommandUsage2=/<command> <player>\:<name>
delhomeCommandUsage2Description=Poistaa tietyn pelaajan kodin annetulla nimellä
deljailCommandDescription=Poistaa vankilan.
deljailCommandUsage=/<command> <jailname>
deljailCommandUsage1=/<command> <jailname>
deljailCommandUsage1Description=Poistaa vankilan annetulla nimellä
delkitCommandDescription=Poistaa määritetyn kitin.
delkitCommandUsage=/<command> <kit>
delkitCommandUsage1=/<command> <kit>
delkitCommandUsage1Description=Poistaa kitin annetulla nimellä
delwarpCommandDescription=Poistaa määritetyn warpin.
delwarpCommandUsage=/<command> <warp>
delwarpCommandUsage1=/<command> <warp>
delwarpCommandUsage1Description=Poistaa warpin annetulla nimellä
deniedAccessCommand=§4Pelaajan §c{0} §4pääsy komentoon evättiin.
denyBookEdit=§4Et voi avata tätä kirjaa.
denyChangeAuthor=§4Et voi vaihtaa tämän kirjan kirjoittajaa.
@@ -213,6 +234,15 @@ 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.
discordbroadcastCommandDescription=Lähettää viestin tietylle Discord-kanavalle.
discordbroadcastCommandUsage=/<command> <channel> <msg>
discordbroadcastCommandUsage1=/<command> <channel> <msg>
discordbroadcastInvalidChannel=§4Discord-kanavaa §c{0}§4 ei ole olemassa.
discordbroadcastPermission=§4Sinulla ei ole oikeuttaa lähettää viestejä kanavalle §c{0}§4.
discordbroadcastSent=§6Viesti lähetettiin kanavalle §c{0}§6\!
discordCommandAccountArgumentUser=Etsittävä Discord-tili
discordCommandAccountDescription=Etsii linkitettyjä Minecraft-tilejä itsellesi tai toiselle Discord-käyttäjälle
discordCommandAccountResponseLinked=Tilisi on yhdistetty Minecraft-tiliin **{0}**
discordCommandUsage=/<command>
discordCommandUsage1=/<command>
discordCommandExecuteReply=Suoritetaan komento\: "/{0}"
@@ -353,6 +383,8 @@ holdPotion=§4Sinulla täytyy olla taikajuoma kädessäsi lisätäksesi siihen e
holeInFloor=§4Reikä lattiassa\!
homeCommandDescription=Teleporttaa sinut kotiisi.
homeCommandUsage=/<command> [pelaaja\:][name]
homeCommandUsage1=/<command> <name>
homeCommandUsage2=/<command> <player>\:<name>
homes=§6Kodit\:§r {0}
homeConfirmation=§6Sinulla on jo koti nimeltä §c{0}§6\!\nKorvataksesi edellisen kotisi, kirjoita komento uudelleen.
homeSet=§6Koti asetettu nykyiseen sijaintiin.
@@ -419,6 +451,7 @@ itemnameClear=§6Olet puhdistanut tämän kohteen nimen.
itemnameCommandDescription=Nimeää tavaran.
itemnameCommandUsage=/<command> [name]
itemnameCommandUsage1=/<command>
itemnameCommandUsage2=/<command> <name>
itemnameInvalidItem=§cSinun täytyy pitää esinettä kädessäsi nimetäksesi sen.
itemnameSuccess=§6Olet nimennyt tavaran kädessäsi\: "§c{0}§6".
itemNotEnough1=§4Sinulla ei ole tarpeeksi tavaroita myytäväksi.
@@ -813,6 +846,8 @@ setBalOthers=§aAsetit pelaajan {0}§a rahatilanteen arvoon {1}.
setSpawner=§6Vaihdettiin spawnerin tyypiksi§c {0}§6.
sethomeCommandDescription=Asettaa kodin nykyiseen sijaintiisi.
sethomeCommandUsage=/<command> [[pelaaja\:]nimi]
sethomeCommandUsage1=/<command> <name>
sethomeCommandUsage2=/<command> <player>\:<name>
setjailCommandDescription=Luo vankilan tietyllä nimellä [jailname].
setjailCommandUsage=/<command> <jailname>
setjailCommandUsage1=/<command> <jailname>
@@ -88,6 +88,7 @@ bookCommandUsage2=/<command> may-akda <may-akda>
bookCommandUsage3=/<command> titulo <titulo>
bookLocked=§6Naka-lock na ang libro na ito.
bookTitleSet=§6Itinakda ang pamagat ng libro sa {0}.
bottomCommandUsage=/<command>
breakCommandDescription=Sisirain yung bloke kung saan ka nakatingin.
breakCommandUsage=/<command>
broadcast=§6[§4Brodkast§6]§a {0}
@@ -100,6 +100,7 @@ bookCommandUsage3=/<command> title <titre>
bookCommandUsage3Description=Définit le titre d''un livre signé
bookLocked=§cCe livre est désormais scellé.
bookTitleSet=§6Le titre du livre est maintenant {0}.
bottomCommandUsage=/<command>
breakCommandDescription=Casse le bloc que vous regardez.
breakCommandUsage=/<command>
broadcast=§6[§4Message§6]§a {0}
@@ -1267,6 +1268,7 @@ teleportRequestTimeoutInfo=§6Cette demande de téléportation expirera dans§c
teleportTop=§6Téléportation vers le haut.
teleportToPlayer=§6Téléportation vers §c{0}§6.
teleportOffline=§6Le joueur §c{0}§6 est actuellement hors-ligne. Vous pouvez vous téléporter à lui en utilisant /otp.
teleportOfflineUnknown=§6Impossible de trouver la dernière position connue de §c{0}§6.
tempbanExempt=§4Vous ne pouvez pas bannir temporairement ce joueur.
tempbanExemptOffline=§4Vous ne pouvez pas bannir temporairement les joueurs déconnectés.
tempbanJoin=Vous êtes banni(e) de ce serveur pendant {0}. Raison \: {1}
@@ -1457,6 +1459,7 @@ userIsNotAwaySelf=§7Vous n''êtes plus AFK.
userJailed=§6Vous avez été emprisonné(e) \!
usermapEntry=§c{0} §6est associé à §c{1}§6.
usermapPurge=§6Vérification des fichiers dans les données utilisateur qui ne sont pas associés, les résultats seront enregistrés dans la console. Mode destructif\: {0}
usermapSize=§6Les utilisateurs actuellement mis en cache dans la carte de l''utilisateur sont §c{0}§6/§c{1}§6/§c{2}§6.
userUnknown=§4Attention \: l''utilisateur "§c{0}§4" n''est jamais venu sur ce serveur.
usingTempFolderForTesting=Utilise un fichier temporaire pour un test.
vanish=§6Invisibilité pour {0}§6 \: {1}
@@ -100,6 +100,7 @@ bookCommandUsage3=/<command> כותרת <title>
bookCommandUsage3Description=קובע את הכותרת של ספר חתום
bookLocked=§6 ספר זה נעול.
bookTitleSet=§6 כותרת הספר נקבע ל {0}.
bottomCommandUsage=/<command>
breakCommandDescription=שובר את הבלוק שאתם מסתכלים עליו.
breakCommandUsage=/<command>
broadcast=§6[§4הכרזה§6]§a {0}
@@ -64,6 +64,7 @@ bookCommandUsage1=/<command>
bookCommandUsage2=/<command> author <author>
bookLocked=§6Ova knjiga je sada zaključana.
bookTitleSet=§6Naslov knjige postavljen na {0}.
bottomCommandUsage=/<command>
breakCommandUsage=/<command>
burnMsg=§6Zapaslio si §c {0} §6na§c {1} sekundi§6.
cannotStackMob=§4Nemaš dozvolu spajati više bića.
@@ -100,6 +100,7 @@ bookCommandUsage3=/<command> title <title>
bookCommandUsage3Description=Beállítja az aláírt könyv címét
bookLocked=§6Ez a könyv lezárásra került.
bookTitleSet=§6A könyv címe mostantól\: {0}.
bottomCommandUsage=/<command>
breakCommandDescription=Kiüti a blokkot onnan, ahova nézel.
breakCommandUsage=/<command>
broadcast=§6[§4Közvetítés§6]§a {0}
@@ -462,12 +463,16 @@ holeInFloor=§4Lyuk a padlóban\!
homeCommandDescription=Teleportál az otthonodhoz.
homeCommandUsage=/<command> [játékos\:][név]
homeCommandUsage1=/<command> <név>
homeCommandUsage1Description=Teleportál a megadott nevű otthonodba
homeCommandUsage2=/<command> <játékos>\:<név>
homeCommandUsage2Description=A megadott nevű játékos otthonába teleportál a megadott névvel
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.
homeRenamed=§6Home §c{0} §6 át lett nevezve §c{1}§6-ra.
homeSet=§6Beállítva otthonnak ez a hely.
hour=óra
hours=óra
ice=§6Sokkal hidegebbnek érzed magad...
iceCommandUsage=/<command> [játékos]
iceCommandUsage1=/<command>
iceCommandUsage2=/<command> <játékos>
@@ -100,6 +100,8 @@ bookCommandUsage3=/<command> Titolo <title>
bookCommandUsage3Description=Imposta il titolo di un libro firmato
bookLocked=§6Questo libro è ora bloccato.
bookTitleSet=§6Titolo del libro impostato a {0}.
bottomCommandDescription=Teletrasportati al blocco più basso nella tua posizione attuale.
bottomCommandUsage=/<command>
breakCommandDescription=Rompe il blocco che stai guardando.
breakCommandUsage=/<command>
broadcast=§6[§4Annuncio§6]§a {0}
@@ -1251,6 +1253,7 @@ teleportationDisabledWarning=§6Devi abilitare il teletrasporto prima che gli al
teleportationEnabled=§6Teletrasporto §cabilitato§6.
teleportationEnabledFor=§6Teletrasporto §cabilitato§6 §6per §c{0}§6.
teleportAtoB=§c{0}§6 ti ha teletrasportato a §c{1}§6.
teleportBottom=§6Teletrasporto in basso.
teleportDisabled={0} ha il teletrasporto disabilitato.
teleportHereRequest=§c{0}§c ha richiesto di teletrasportati da lui.
teleportHome=§6Teletrasportato a §c{0}§6.
@@ -1266,6 +1269,7 @@ teleportRequestTimeoutInfo=§7Questa richiesta scadrà tra {0} secondi.
teleportTop=§7Teletrasportato in cima.
teleportToPlayer=§6Teletrasportato a §c{0}§6.
teleportOffline=§6Il giocatore §c{0}§6 è attualmente offline. Puoi teletrasportarti usando /otp.
teleportOfflineUnknown=§6Impossibile trovare l''ultima posizione conosciuta di §c{0}§6.
tempbanExempt=§7Non puoi bannare questo giocatore.
tempbanExemptOffline=§4Non puoi bannare temporaneamente un giocatore che è offline.
tempbanJoin=You are banned from this server for {0}. Reason\: {1}
@@ -14,14 +14,14 @@ afkCommandUsage2=/<command> <player> [message]
afkCommandUsage2Description=指定されたプレーヤーのAFK状態を、任意の理由で切り替えます
alertBroke=壊した。
alertFormat=§ 3 [{0}] §r {1} § 6 {2} で\: {3}
alertPlaced=設置
alertUsed=使用
alertPlaced=設置\:
alertUsed=使用\:
alphaNames=§4プレイヤー名には、英数字とアンダーバーのみを含めることができます。
antiBuildBreak=§4あなたはここで§c{0}§4ブロックを破壊することができません。
antiBuildCraft=§4あなたは§c{0}§4をクラフトすることができません。
antiBuildDrop=§4あなたは§c{0}§4をドロップする事ができません。
antiBuildInteract=§4その動作は許可されていません。§c {0}§4.
antiBuildPlace=§あなたはここに§c{0}§4を設置することができません。
antiBuildPlace=§4あなたはここに§c{0}§4を設置することができません。
antiBuildUse=§4あなたは§c{0}§4を使用することはできません。
antiochCommandDescription=オペレーターへのちょっとしたサプライズです。
antiochCommandUsage=/<command> [message]
@@ -100,6 +100,7 @@ bookCommandUsage3=/<command> title <title>
bookCommandUsage3Description=署名された本のタイトルを設定します
bookLocked=§6この本をロックしました。
bookTitleSet=§6本のタイトルが{0}に設定されました。
bottomCommandUsage=/<command>
breakCommandDescription=見ているブロックを壊します。
breakCommandUsage=/<command>
broadcast=§6[§4Broadcast§6]§a {0}
@@ -100,6 +100,7 @@ bookCommandUsage3=/<command> title <책 제목>
bookCommandUsage3Description=책의 제목을 설정합니다.
bookLocked=§6이 책은 잠긴상태로 전환되었습니다.
bookTitleSet=§6책의 제목을 §c{0}§6으로 설정합니다.
bottomCommandUsage=/<command>
breakCommandDescription=바라보고 있는 블록을 부숩니다.
breakCommandUsage=/<command>
broadcast=§6[§4공지§6]§a {0}
@@ -257,6 +258,7 @@ discordCommandExecuteReply=명령어를 실행합니다\: "/{0}"
discordCommandUnlinkDescription=현재 연동된 Discord 계정에서 Minecraft 계정의 연동을 해제해요
discordCommandUnlinkInvalidCode=현재 Discord에 연동된 Minecraft 계정이 없어요\!
discordCommandUnlinkUnlinked=내 Discord 계정이 모든 Minecraft 계정에서 연동 해제됐어요.
discordCommandLinkLinked=계정을 성공적으로 연결했습니다\!
discordCommandListDescription=현재 접속중인 플레이어 목록을 표시합니다.
discordCommandListArgumentGroup=검색을 제한할 그룹
discordCommandMessageDescription=마인크래프트 서버에 있는 플레이어에게 메시지를 보냅니다.
@@ -1014,6 +1016,7 @@ repairCommandUsage2Description=인벤토리의 모든 아이템을 수리합니
repairEnchanted=§4당신은 인챈트 된 아이템을 수리할 수 없습니다.
repairInvalidType=§4이 아이템은 수리될 수 없습니다.
repairNone=§4수리하는데 필요한 아이템이 없습니다.
replyFromDiscord=**{0} 님으로부터 답장\:** {1}
replyLastRecipientDisabled=§6마지막 메시지를 보낸 사람에게의 빠른 답장을 §c비활성화§6했습니다.
replyLastRecipientDisabledFor=§c{0} §6의 마지막 메시지를 보낸 사람에게의 빠른 답장을 §c비활성화§6했습니다.
replyLastRecipientEnabled=§6마지막 메시지를 보낸 사람에게의 빠른 답장을 §c활성화§6했습니다.
@@ -1211,6 +1214,7 @@ teleportRequestTimeoutInfo=§c{0}§6초 후 텔레포트 요청이 시간초과
teleportTop=§6꼭대기로 올라왔습니다.
teleportToPlayer=§c{0}§6로 이동 합니다.
teleportOffline=§6플레이어 §c{0} §6(은)는 현재 접속중이 아닙니다. /otp를 사용하여 텔레포트시킬 수 있습니다.
teleportOfflineUnknown=§c{0}§6의 최근 위치를 찾을 수 없습니다.
tempbanExempt=§4해당 플레이어를 임시 차단할 수 없습니다.
tempbanExemptOffline=§4당신은 접속중이지 않은 플레이어를 임시 차단시킬수 없습니다.
tempbanJoin={0} 동안 서버에서 차단되었습니다. 사유\: {1}
@@ -100,6 +100,7 @@ bookCommandUsage3=/<command> title <title>
bookCommandUsage3Description=Sets Teh Title Ov Signd Book
bookLocked=§6DIS Book Iz Nao Lockd.
bookTitleSet=§6TITLE Ov Teh Book Set 2 {0}.
bottomCommandUsage=/<command>
breakCommandDescription=Breakz Teh Block U R Lookin At.
breakCommandUsage=/<command>
broadcast=§6[§4Broadcats§6]§a {0}
@@ -100,6 +100,7 @@ bookCommandUsage3=/<command> title <title>
bookCommandUsage3Description=Nustato pasirašytos knygos pavadinimą
bookLocked=§6Ši knyga dabar yra užrakinta.
bookTitleSet=§6Knygos pavadinimas nustatytas į {0}.
bottomCommandUsage=/<command>
breakCommandDescription=Nugriauna bloką į kurį žiūrite.
breakCommandUsage=/<command>
broadcast=§6[§4Skelbimas§6]§a {0}
@@ -100,6 +100,7 @@ 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}.
bottomCommandUsage=/<command>
breakCommandDescription=Salauž bloku, uz kuru jūs skataties.
breakCommandUsage=/<command>
broadcast=§6[§4Paziņojums§6]§a {0}
@@ -100,6 +100,7 @@ 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}
bottomCommandUsage=/<command>
breakCommandDescription=Breekt het blok waar je naar kijkt.
breakCommandUsage=/<command>
broadcast=§6[§4Omroep§6]§a {0}
@@ -100,6 +100,7 @@ bookCommandUsage3=/<command> tittel <title>
bookCommandUsage3Description=Angir tittelen til en signert bok
bookLocked=§6Denne boken er nå låst.
bookTitleSet=§6Tittelen på boken er satt til {0}.
bottomCommandUsage=/<command>
breakCommandDescription=Ødelegger blokken du ser på.
breakCommandUsage=/<command>
broadcast=§6[§4Kringkasting§6]§a {0}
@@ -100,6 +100,8 @@ bookCommandUsage3=/<command> title <tytuł>
bookCommandUsage3Description=Ustanawia tytuł podpisanej książki
bookLocked=§cTa książka jest teraz zablokowana.
bookTitleSet=§6Ustanowiono tytuł książki\: {0}.
bottomCommandDescription=Teleportuj się do najniższego bloku w twojej obecnej pozycji.
bottomCommandUsage=/<command>
breakCommandDescription=Niszczy blok, na który patrzysz.
breakCommandUsage=/<command>
broadcast=§6[§4Ogłoszenie§6]§a {0}
@@ -766,7 +768,7 @@ moreCommandUsage1Description=Wypełnia stack przedmiotów w dłoni do określone
moreThanZero=§4Ilość musi być większa niż 0.
motdCommandDescription=Pokazuje wiadomość dnia.
motdCommandUsage=/<command> [rozdział] [strona]
moveSpeed=§6Zmieniono prędkość§c {0}§6 gracza§c {1} §6na §c{2}§6.
moveSpeed=§6Zmieniono prędkość§c {0}§6 gracza§c {2} §6na §c{1}§6.
msgCommandDescription=Wysyła prywatną wiadomość do określonego gracza.
msgCommandUsage=/<command> <do> <wiadomość>
msgCommandUsage1=/<command> <do> <wiadomość>
@@ -1252,6 +1254,7 @@ teleportationDisabledWarning=§6Musisz zezwolić na teleportację, aby inni grac
teleportationEnabled=§6Teleportacja włączona.
teleportationEnabledFor=§6Teleportacja włączona dla {0}.
teleportAtoB=§6Zostałeś przeteleportowany przez §c{0}§6 do {1}§6.
teleportBottom=§7Teleportacja na wierzch.
teleportDisabled=§c{0} §4ma zdezaktywowana teleportacje.
teleportHereRequest=§c{0}§7 cię prosi, żebyś się do niego przeteleportował.
teleportHome=§6Trwa teleportacja do domu §c{0}§6.
@@ -1267,6 +1270,7 @@ teleportRequestTimeoutInfo=§7Prośba o teleportacje przedawni się za§c {0} §
teleportTop=§7Teleportacja na wierzch.
teleportToPlayer=§6Teleportowanie do §c{0}§6.
teleportOffline=§6Gracz §c{0}§6 nie jest obecnie dostępny. Możesz się do niego przeteleportować, używając polecenia /otp.
teleportOfflineUnknown=§6Nie można znaleźć ostatniej znanej pozycji §c{0}§6.
tempbanExempt=§4Nie możesz tymczasowo zbanować tego gracza.
tempbanExemptOffline=§4Nie możesz tymczasowo zablokować graczy offline.
tempbanJoin=Jesteś zbanowany na tym serwerze na {0}. Powód\: {1}
@@ -100,6 +100,7 @@ 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}.
bottomCommandUsage=/<command>
breakCommandDescription=Parte o bloco para onde estás a olhar.
breakCommandUsage=/<command>
broadcast=§r§6 [§4Aviso§6] §a {0}
@@ -240,6 +241,12 @@ discordbroadcastCommandUsage1Description=Envia a mensagem para o canal de Discor
discordbroadcastInvalidChannel=§4O canal do Discord §c{0}§4 não existe.
discordbroadcastPermission=§4Não tens permissões para enviar mensagens para o canal §c{0}§4.
discordbroadcastSent=§6A mensagem foi enviada para §c{0}§6\!
discordCommandAccountArgumentUser=A conta do Discord para procurar
discordCommandAccountDescription=Procura a conta do Minecraft vinculada para você mesmo ou outro usuário do Discord
discordCommandAccountResponseLinked=Sua conta está vinculada à conta do Minecraft\: **{0}**
discordCommandAccountResponseLinkedOther=A conta de {0} está vinculada à conta do Minecraft\: **{1}**
discordCommandAccountResponseNotLinked=Você não tem uma conta de Minecraft vinculada.
discordCommandAccountResponseNotLinkedOther={0} não tem uma conta de Minecraft vinculada.
discordCommandDescription=Envia o convite de Discord ao jogador.
discordCommandLink=§6Junta-te ao nosso servidor de Discord em §c{0}§6\!
discordCommandUsage=/<command>
@@ -248,15 +255,40 @@ discordCommandUsage1Description=Envia o convite de Discord ao jogador
discordCommandExecuteDescription=Executa um comando da consola no servidor de Minecraft.
discordCommandExecuteArgumentCommand=O comando a ser executado
discordCommandExecuteReply=Comando a ser executado\: "/{0}"
discordCommandUnlinkDescription=Desvincula a conta do Minecraft atualmente vinculada à sua conta do Discord
discordCommandUnlinkInvalidCode=Atualmente você não tem uma conta do Minecraft vinculada ao Discord\!
discordCommandUnlinkUnlinked=Sua conta do Discord foi desvinculada de todas as contas de Minecraft associadas.
discordCommandLinkArgumentCode=O código fornecido no jogo para vincular sua conta do Minecraft
discordCommandLinkDescription=Vincula a sua conta do Discord com a sua conta do Minecraft usando um código do comando /link fornecido no jogo
discordCommandLinkHasAccount=Você já possui uma conta vinculada\! Para desvincular sua conta atual, digite /unlink.
discordCommandLinkInvalidCode=Código de vinculação inválido\! Certifique-se de ter executado /link no jogo e copiado o código corretamente.
discordCommandLinkLinked=Conta vinculada com sucesso\!
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=Você adicionou o seu bot ao seu servidor incorretamente\! Por favor, siga o tutorial na configuração e adicione o seu bot usando 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.
discordErrorLoggerNoPerms=O logger do console do Discord foi desativado devido a falta de permissões\! Por favor, certifique-se de que o seu bot tem as permissões "Gerenciar Webhooks" no servidor. Após corrigir isso, execute "/ess reload".
discordErrorNoGuild=O ID do servidor é inválido\! Segue as instruções no ficheiro de configurações para definires corretamente 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.
discordErrorNoPrimary=Não definiste um canal primário ou o teu canal primário definido é inválido. Utilizando o canal padrão\: \#{0}.
discordErrorNoPrimaryPerms=O teu bot não pode falar no teu canal principal, \#{0}. Por favor, certifica-te que o teu bot tem permissões de leitura e escritura em todos os canais que desejas usar.
discordErrorNoToken=Token não fornecido\! Por favor segue o tutorial nas configurações para configurar o plugin.
discordErrorWebhook=Ocorreu um erro ao enviar mensagens para o teu canal da consola\! Isto foi provavelmente causado por acidentalmente apagar o webhook da tua consola. Isto pode normalmente ser corrigido, ao garantir que o teu bot tem a permissão "Administrar Webhooks" e executando "/ess reload".
discordLinkInvalidGroup=Grupo inválido {0} foi fornecido para o cargo {1}. Os seguintes grupos estão disponíveis\: {2}
discordLinkInvalidRole=Um ID de cargo inválido, {0}, foi fornecido para o grupo\: {1}. Podes ver o ID dos cargos com o comando /roleinfo no Discord.
discordLinkInvalidRoleInteract=O cargo, {0} ({1}), não pode ser usado para sincronização de grupo->cargo porque está acima do cargo mais alto do teu bot. Move o cargo do teu bot acima de "{0}" ou move "{0}" abaixo do papel do teu bot.
discordLinkInvalidRoleManaged=O cargo, {0} ({1}), não pode ser usado para sincronização de grupo->cargo porque é administrado por outro bot ou integração.
discordLinkLinked=§6Para conectar a tua conta do Minecraft ao Discord, digita §c{0} §6no servidor do Discord.
discordLinkLinkedAlready=§6Já conectaste a tua conta do Discord\! Se desejas desconectar a tua conta do Discord usa §c/unlink§6.
discordLinkLoginKick=§6Tens de conectar a tua conta do Discord para poderes aderir ao servidor.\n§6Para conectar a tua conta do Minecraft ao Discord, escreve\:\n§c{0}\n§6no servidor do Discord deste servidor\:\n§c{1}
discordLinkLoginPrompt=§6Tens de conectar a tua conta do Discord para poderes andar, falar ou interagir com este servidor. Para conectar a tua conta do Minecraft ao Discord, escreve §c{0} §6no servidor do Discord deste servidor\: §c{1}
discordLinkNoAccount=§6Não tens uma conta do Discord conectada à tua conta do Minecraft.
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\!
@@ -981,6 +1013,7 @@ 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.
@@ -100,6 +100,8 @@ bookCommandUsage3=/<command> 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}.
bottomCommandDescription=Teletransporte para o bloco mais baixo na sua posição atual.
bottomCommandUsage=/<command>
breakCommandDescription=Quebra o bloco que você está olhando para.
breakCommandUsage=/<command>
broadcast=§r§6 [§4Anúncio§6] §a {0}
@@ -1252,6 +1254,7 @@ teleportationDisabledWarning=§6Você deve ativar a teleportação antes que out
teleportationEnabled=§6Teletransporte §habilitado§6.
teleportationEnabledFor=§6Teletransporte §chabilitado §6para §c {0}§6.
teleportAtoB=§c{0}§6 teletransportou você para §c{1}§6.
teleportBottom=§6Teleportando para baixo.
teleportDisabled=§c{0} §4está com teletransportação desativada.
teleportHereRequest=§c{0}§6 pediu para que você se teletransporte até ele.
teleportHome=§6Teletransportando para §c{0}§6.
@@ -1267,6 +1270,7 @@ teleportRequestTimeoutInfo=§6Esse pedido irá se esgotar depois de§c {0} segun
teleportTop=§6Indo para o topo.
teleportToPlayer=§6Teletransportando para §6 §c {0}.
teleportOffline=§6O jogador §c{0}§6 está offline. Você pode teleportar até ele usando /otp.
teleportOfflineUnknown=§6Não foi possível encontrar a última posição conhecida de §c{0}§6.
tempbanExempt=§4Você não pode banir temporariamente esse jogador.
tempbanExemptOffline=§4Você não pode banir temporariamente jogadores desconectados.
tempbanJoin=You are banned from this server for {0}. Reason\: {1}
@@ -98,6 +98,7 @@ bookCommandUsage3=/<comanda> title <titlu>
bookCommandUsage3Description=Setează titlul unei cărți semnate
bookLocked=§6Această carte este acum blocată.
bookTitleSet=§6Titlul cărții setat la {0}.
bottomCommandUsage=/<command>
breakCommandDescription=Sparge block-ul la care te uiti.
breakCommandUsage=/<command>
broadcast=§r§4[Broadcast]§a {0}
@@ -17,11 +17,11 @@ alertFormat=§3[{0}] §r {1} §6 {2} в\: {3}
alertPlaced=поставил\:
alertUsed=использовал\:
alphaNames=§4Никнеймы игроков могут содержать только буквы, цифры и нижние подчеркивания.
antiBuildBreak=§4У вас нет прав ломать блоки§c {0} §4здесь.
antiBuildBreak=§4У вас нет прав ломать блоки§c {0}§4.
antiBuildCraft=§4У вас нет прав создавать§c {0}§4.
antiBuildDrop=§4У вас нет прав выбрасывать§c {0}§4.
antiBuildInteract=§4У вас нет прав взаимодействовать с§c {0}§4.
antiBuildPlace=§4У вас нет прав ставить§c {0} §4здесь.
antiBuildPlace=§4У вас нет прав ставить§c {0}§4.
antiBuildUse=§4У вас нет прав использовать§c {0}§4.
antiochCommandDescription=Небольшой сюрприз для операторов.
antiochCommandUsage=/<command> [сообщение]
@@ -100,6 +100,8 @@ bookCommandUsage3=/<command> title <название>
bookCommandUsage3Description=Изменяет название подписанной книги
bookLocked=§6Книга заблокирована.
bookTitleSet=§6Название книги изменено на {0}.
bottomCommandDescription=Телепортует на самый низкий блок в этом месте.
bottomCommandUsage=/<command>
breakCommandDescription=Разрушает блок, на который вы смотрите.
breakCommandUsage=/<command>
broadcast=§6[§4Объявление§6]§a {0}
@@ -786,7 +788,7 @@ multiplePotionEffects=§4Вы не можете применить более о
muteCommandDescription=Устанавливает или снимает заглушение с игрока.
muteCommandUsage=/<command> <игрок> [длительность] [причина]
muteCommandUsage1=/<command> <игрок>
muteCommandUsage1Description=Навсегда устанавливает мут на указанного игрока или снимает мут если у них уже установлен мут
muteCommandUsage1Description=Заглушает указанного игрока, или снимает заглушение, если оно уже стоит
muteCommandUsage2=/<command> <игрок> <длительность> [причина]
muteCommandUsage2Description=Заглушает указанного игрока на указанное время с необязательным указанием причины
mutedPlayer=§6Игрок {0} §6был заглушен.
@@ -1066,7 +1068,7 @@ requestAccepted=§6Запрос на телепортацию принят.
requestAcceptedAll=§6Принято §c{0} §6ожидающих запросов на телепортацию.
requestAcceptedAuto=§6Автоматически принят запрос на телепортацию от {0}.
requestAcceptedFrom=§c{0} §6принял ваш запрос на телепортацию.
requestAcceptedFromAuto=§c{0} §6автоматически принял ваш запрос на телепортирование.
requestAcceptedFromAuto=§c{0} §6автоматически принял ваш запрос на телепортацию.
requestDenied=§6Запрос на телепортацию отклонен.
requestDeniedAll=§6Отклонено §c{0} §6ожидающих запросов на телепортацию.
requestDeniedFrom=§c{0} §6отклонил ваш запрос на телепортацию.
@@ -1244,14 +1246,15 @@ survival=выживание
takenFromAccount=§e{0}§a было снято с вашего аккаунта.
takenFromOthersAccount=§e{0}§a снято с аккаунта §e {1}§a. Текущий баланс\:§e {2}
teleportAAll=§6Запрос на телепортацию отправлен всем игрокам...
teleportAll=§6Телепортирую всех игроков...
teleportationCommencing=§6Телепортирование начинается...
teleportAll=§6Телепортирование всех игроков...
teleportationCommencing=§6Телепортация начинается...
teleportationDisabled=§6Телепортации §cвыключены§6.
teleportationDisabledFor=§6Телепортации §cвыключены §6для §c{0}§6.
teleportationDisabledWarning=§6Вы должны включить телепортации, прежде чем другие игроки смогут телепортировать вас.
teleportationEnabled=§6Телепортации §cвключены§6.
teleportationEnabledFor=§6Телепортации §cвключены §6для §c{0}§6.
teleportAtoB=§c{0}§6 телепортировал вас к §c{1}§6.
teleportBottom=§6Телепортирование вниз.
teleportDisabled=§c{0} §4отключил телепортацию.
teleportHereRequest=§c{0}§6 просит вас телепортироваться к нему.
teleportHome=§6Телепортирование к §c{0}§6.
@@ -1267,6 +1270,7 @@ teleportRequestTimeoutInfo=§6Заявка будет автоматически
teleportTop=§6Телепортирование наверх.
teleportToPlayer=§6Телепортирование к §c{0}§6.
teleportOffline=§6Игрок §c{0}§6 сейчас офлайн. Вы можете телепортироваться к нему используя /otp.
teleportOfflineUnknown=§6Не удалось найти последнюю локацию §c{0}§6.
tempbanExempt=§4Вы не можете временно забанить этого игрока.
tempbanExemptOffline=§4Вы не можете временно банить офлайн игроков.
tempbanJoin=Вы забанены на этом сервере на {0}. Причина\: {1}
@@ -1388,7 +1392,7 @@ tprCommandDescription=Телепортирует в случайное мест
tprCommandUsage=/<command>
tprCommandUsage1=/<command>
tprCommandUsage1Description=Телепортирует вас в случайное место
tprSuccess=§6Телепортация в случайное место...
tprSuccess=§6Телепортирование в случайное место...
tps=§6Tекущий TPS \= {0}
tptoggleCommandDescription=Блокирует все виды телепортации.
tptoggleCommandUsage=/<command> [игрок] [on|off]
@@ -16,6 +16,7 @@ banCommandUsage=/<command> <player> [reason]
banCommandUsage1=/<command> <player> [reason]
beezookaCommandUsage=/<command>
bookCommandUsage1=/<command>
bottomCommandUsage=/<command>
breakCommandUsage=/<command>
broadcastCommandUsage=/<command> <msg>
burnCommandUsage=/<command> <player> <seconds>
@@ -100,6 +100,8 @@ bookCommandUsage3=/<command> title <názov>
bookCommandUsage3Description=Nastavuje názov podpísanej knihy
bookLocked=§6Táto kniha bola uzamknutá.
bookTitleSet=§6Názov knihy nastavený na {0}.
bottomCommandDescription=Teleportuje ťa na najnižší bod na tvojich súradniciach.
bottomCommandUsage=/<command>
breakCommandDescription=Zničí kocku, na ktorú sa pozeráš.
breakCommandUsage=/<command>
broadcast=§6[§4Oznam§6]§a {0}
@@ -629,7 +631,7 @@ jumpEasterDisable=§6Režim lietajúceho čarodejníka vypnutý.
jumpEasterEnable=§6Režim lietajúceho čarodejníka zapnutý.
jailsCommandDescription=Vypíše zoznam väzení.
jailsCommandUsage=/<command>
jumpCommandDescription=Preskočí na najbližší blok v smere pohľadu.
jumpCommandDescription=Preskočí na najbližšiu kocku v smere pohľadu.
jumpCommandUsage=/<command>
jumpError=§4To by tvoj počítač nemusel rozdýchať.
kickCommandDescription=Vyhodí daného hráča s uvedením dôvodu.
@@ -1107,7 +1109,7 @@ sellCommandUsage2Description=Predá všetky (alebo dane množstvo, ak je špecif
sellCommandUsage3=/<command> all
sellCommandUsage3Description=Predá všetky možné predmety v tvojom inventári
sellCommandUsage4=/<command> blocks [množstvo]
sellCommandUsage4Description=Predá všetky (alebo dané množstvo, ak je špecifikované) bloky v tvojom inventári
sellCommandUsage4Description=Predá všetky (alebo dané množstvo, ak je špecifikované) kocky v tvojom inventári
sellHandPermission=§6Nemáš oprávnenie na predaj z ruky.
serverFull=Server je plný\!
serverReloading=Podľa všetkého práve znova načítaš svoj server s pluginmi. Prečo si takto ubližuješ? Pri používaní /reload nečakaj žiadnu podporu od tímu EssentialsX.
@@ -1252,6 +1254,7 @@ teleportationDisabledWarning=§6Aby sa k tebe mohli teleportovať iní hráči,
teleportationEnabled=§6Teleportovanie §czapnuté§6.
teleportationEnabledFor=§6Teleportovanie §czapnuté§6 pre hráča §c{0}§6.
teleportAtoB=§6Hráč §c{0}§6 ťa teleportoval na §c{1}§6.
teleportBottom=§6Teleportuješ sa nadol.
teleportDisabled=§4Hráč §c{0} §4má vypnuté teleportovanie.
teleportHereRequest=§6Hráč §c{0}§6 ťa žiada o teleportovanie sa k nemu.
teleportHome=§6Teleportuješ sa na §c{0}§6.
@@ -1267,6 +1270,7 @@ teleportRequestTimeoutInfo=§6Táto žiadosť vyprší o§c {0} sekúnd§6.
teleportTop=§6Teleportuješ sa navrch.
teleportToPlayer=§6Teleportuješ sa k hráčovi §c{0}§6.
teleportOffline=§6Hráč §c{0}§6 je momentálne offline. Môžeš ho teleportovať pomocou /otp.
teleportOfflineUnknown=§6Nepodarilo sa nájsť poslednú známu polohu hráča §c{0}§6.
tempbanExempt=§4Nemôžeš dať dočasný ban tomuto hráčovi.
tempbanExemptOffline=§4Nemôžeš dať dočasný ban offline hráčovi.
tempbanJoin=Na tomto serveri máš ban na {0}. Dôvod\: {1}
@@ -1570,7 +1574,7 @@ worthCommandUsage2Description=Skontroluje hodnotu držaného predmetu (alebo dan
worthCommandUsage3=/<command> all
worthCommandUsage3Description=Skontroluje hodnotu všetkých možných predmetov v tvojom inventári
worthCommandUsage4=/<command> blocks [množstvo]
worthCommandUsage4Description=Skontroluje hodnotu všetkých (alebo daného množstva, ak je špecifikované) blokov v tvojom inventári
worthCommandUsage4Description=Skontroluje hodnotu všetkých (alebo daného množstva, ak je špecifikované) kociek v tvojom inventári
worthMeta=§aStack {0} s metadátami {1} má hodnotu §c{2}§a ({3} predmetov po {4} za kus)
worthSet=§6Cena nastavená
year=rok
@@ -98,6 +98,7 @@ bookCommandUsage3=/<command> title <title>
bookCommandUsage3Description=Postavlja naziv potpisane knjige
bookLocked=§6Ova knjiga je sada zakljucana.
bookTitleSet=§6Naslov knjige je sada {0}.
bottomCommandUsage=/<command>
breakCommandDescription=Ruši blok u koji gledate.
breakCommandUsage=/<command>
broadcast=§6[§4Obaveštenje§6]§a {0}
@@ -100,6 +100,8 @@ 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}
bottomCommandDescription=Teleportera till det understa blocket vid din nuvarande position.
bottomCommandUsage=/<command>
breakCommandDescription=Tar sönder blocket du tittar på.
breakCommandUsage=/<command>
broadcast=§6[§4Utsänd§6]§a {0}
@@ -1093,6 +1095,7 @@ teleportationDisabledWarning=§7Du måste aktivera teleportering innan andra spe
teleportationEnabled=§6Teleportation §cenabled§6.
teleportationEnabledFor=§6Teleportation §cenabled §6for §c{0}§6.
teleportAtoB=§c{0}§6 teleported you to §c{1}§6.
teleportBottom=§6Teleporterar till botten.
teleportDisabled={0} har teleportering inaktiverat.
teleportHereRequest=§c{0}§c har frågat dig om du vill teleportera till dem.
teleportHome=§6Teleporting to §c{0}§6.
@@ -1106,6 +1109,7 @@ teleportRequestTimeoutInfo=§7Den här begäran kommer att gå ut efter {0} seku
teleportTop=§7Teleporterar till toppen.
teleportToPlayer=§6Teleporting to §c{0}§6.
teleportOffline=§6Spelaren§c{0}§6 är just nu offline. Du kan teleportera till de med /otp.
teleportOfflineUnknown=§6Kunde inte hitta den senast kända positionen för §c{0}§6.
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}
@@ -62,6 +62,7 @@ bookCommandUsage1=/<command>
bookCommandUsage3=/<command> หัวข้อ <title>
bookLocked=§7หนังสือเล่มนี้ถูกล็อค
bookTitleSet=§7ชื่อเรื่องของหนังสือเล่มนี้ถูกตั้งเป็น §a{0}
bottomCommandUsage=/<command>
breakCommandUsage=/<command>
broadcast=§r§6[§4ประกาศ§6]§a {0}
broadcastCommandUsage=/<command> <msg>
@@ -90,6 +90,7 @@ 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}.
bottomCommandUsage=/<command>
breakCommandDescription=Baktığınız yerdeki bloğu kırar.
breakCommandUsage=/<komut>
broadcast=§r§6[§4Duyuru§6]§a {0}
@@ -116,6 +117,7 @@ cantReadGeoIpDB=GeoIP veritabınını okumakta başarısız olundu\!
cantSpawnItem=§c {0}§4 eşyasını oluşturabilmene izin verilmiyor.
cartographytableCommandDescription=Bir haritacılık masası açar.
cartographytableCommandUsage=/<komut>
chatTypeLocal=[L]
chatTypeSpy=[Casus]
cleaned=Oyuncu dosyaları temizlendi.
cleaning=Oyuncu dosyaları temizleniyor.
@@ -142,6 +144,7 @@ compassCommandDescription=Mevcut yönünüzü açıklar.
compassCommandUsage=/<komut>
condenseCommandDescription=Öğeleri daha kompakt bloklara yoğunlaştırır.
condenseCommandUsage1=/<komut>
condenseCommandUsage1Description=Envanterindeki tüm eşyaları siler
condenseCommandUsage2=/<komut> <öğe>
configFileMoveError=config.yml dosyasını yedekleme lokasyonuna taşıma işleminde başarısız olundu.
configFileRenameError=Ayarlar yüklenirken hata oluştu \!
@@ -210,7 +213,7 @@ disableUnlimited=§c {1} §6isimli eşyanın §c {0}§6 için sınırsız yerle
discordCommandUsage=/<komut>
discordCommandUsage1=/<komut>
disposal=Tasfiye
disposalCommandDescription=Taşınabilir bir çöp menüsü açar.
disposalCommandDescription=Sanal çöp menüsü açar.
disposalCommandUsage=/<komut>
distance=§6Konum\: {0}
dontMoveMessage=§c{0} §6saniye içerisinde ışınlanacaksınız. Lütfen hareket etmeyiniz.
@@ -497,6 +500,7 @@ listCommandUsage1=/<komut> [grup]
listGroupTag=§6{0}§r\:
listHiddenTag=§7[HIDDEN]§r
loadWarpError=§c{0} §4isimli ışınlanma noktası yüklenemedi.
localFormat=[L]<{0}> {1}
loomCommandDescription=Dokuma tezgahı açar.
loomCommandUsage=/<komut>
mailClear=§6Postanızı temizlemek için §c / mail clear§6 yazın.
@@ -517,7 +521,7 @@ mayNotJailOffline=§4Çevrimdışı oyuncuları hapsedemezsin.
meCommandDescription=Oyuncu bağlamındaki bir eylemi açıklar.
meCommandUsage=/<komut> <açıklama>
meCommandUsage1=/<komut> <açıklama>
meSender=ben
meSender=Ben
meRecipient=ben
minimumBalanceError=§4Bir oyuncunun sahip olabileceği minimum bakiye {0}.
minimumPayAmount=§cÖdeyebileceğiniz minimum miktar {0}.
@@ -940,6 +944,7 @@ 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>
@@ -952,6 +957,7 @@ 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>
@@ -100,6 +100,8 @@ bookCommandUsage3=/<command> заголовок <title>
bookCommandUsage3Description=Встановлює заголовок підписаної книги
bookLocked=§6Ця книга тепер зачинена.
bookTitleSet=§6Назва книги встановлена до {0}.
bottomCommandDescription=Телепортує до найнижчого блоку на Вашій позиції.
bottomCommandUsage=/<command>
breakCommandDescription=Знищує блок, на який ви дивитеся.
breakCommandUsage=/<command>
broadcast=§6[§4Оголошення§6]§a {0}
@@ -240,7 +242,12 @@ discordbroadcastCommandUsage1Description=Відправляє зазначене
discordbroadcastInvalidChannel=§4Discord-канал §c{0}§4 не існує.
discordbroadcastPermission=§4У Вас немає дозволу відправляти повідомлення в канал §c{0}§4.
discordbroadcastSent=§6Повідомлення надіслано в §c{0}§6\!
discordCommandAccountArgumentUser=Обліковий запис Discord, щоб знайти
discordCommandAccountDescription=Має прив''язаний обліковий запис Minecraft для себе або іншого користувача Discord
discordCommandAccountResponseLinked=Ваш обліковий запис прив''язано до облікового запису Minecraft\: **{0}**
discordCommandAccountResponseLinkedOther=Обліковий запис {0}, є прив''язаним до облікового запису Minecraft\: **{1}**
discordCommandAccountResponseNotLinked=У вас немає прив''язаного облікового запису Minecraft.
discordCommandAccountResponseNotLinkedOther={0} не має прив''язаного облікового запису Minecraft.
discordCommandDescription=Надсилає запрошення в Discord гравцю.
discordCommandLink=§6Доєднуйтесь до нашого Discord-сервера §c{0}§6\!
discordCommandUsage=/<command>
@@ -249,6 +256,14 @@ discordCommandUsage1Description=Надсилає запрошення в Discord
discordCommandExecuteDescription=Виконує команду консолі на сервері Minecraft.
discordCommandExecuteArgumentCommand=Команду, яку слід виконати
discordCommandExecuteReply=Виконання команди\: "/{0}"
discordCommandUnlinkDescription=Відв''язує обліковий запис Minecraft, який наразі прив''язано до вашого облікового запису Discord
discordCommandUnlinkInvalidCode=Наразі у вас немає облікового запису Minecraft, прив''язаного до Discord\!
discordCommandUnlinkUnlinked=Ваш обліковий запис Discord видалено з усіх пов''язаних облікових записів Minecraft.
discordCommandLinkArgumentCode=Код, надається в грі для прив''язки вашого облікового запису Minecraft
discordCommandLinkDescription=Зв''яжіть свій обліковий запис Discord з вашим обліковим записом Minecraft за допомогою коду з внутрішньоігрової команди /link
discordCommandLinkHasAccount=Ви вже прив''язали обліковий запис\! Щоб відв''язати поточний обліковий запис, введіть /unlink.
discordCommandLinkInvalidCode=Невірний код посилання\! Переконайтеся, що ви виконали команду /link у грі, а також правильно скопіювали код.
discordCommandLinkLinked=Ваш обліковий запис успішно прив''язано\!
discordCommandListDescription=Отримує список гравців онлайн.
discordCommandListArgumentGroup=Обмежити пошук за конкретною групою
discordCommandMessageDescription=Надсилає повідомлення гравцю на Minecraft-сервері.
@@ -266,8 +281,20 @@ discordErrorNoPrimary=Ви не визначили головний канал
discordErrorNoPrimaryPerms=Ваш бот не може говорити в головному каналі, \#{0}. Будь ласка, перевірте чи Ваш бот має дозвіл на читання та запис в усіх каналах, що Ви хочете використовувати.
discordErrorNoToken=Немає токена\! Будь ласка, зверніть увагу на гайд в конфіг-файлі, щоб налаштувати плагін.
discordErrorWebhook=Виникла помилка під час відправлення повідомлення в ваш консольний канал\! Скоріше за все, це сталося через випадкове видалення вебхуку консолі. Зазвичай, це можна виправити, перевіривши чи Ваш бот має дозвіл "Manage Webhooks (Керування вебхуками)" та введенням команди "/ess reload".
discordLinkInvalidGroup=Для ролі {1} було вказано невірну групу {0}. Доступні наступні групи\: {2}
discordLinkInvalidRole=Для групи було вказано невірний ідентифікатор ролі, {0}\: {1}. Ви можете переглянути ідентифікатори ролей за допомогою команди /roleinfo у Discord.
discordLinkInvalidRoleInteract=Роль {0} ({1}) не може бути використана для синхронізації група->роль, оскільки вона вище за саму верхню роль вашого бота. Або перемістіть роль вашого бота вище "{0}", або перемістіть "{0}" нижче ролі вашого бота.
discordLinkInvalidRoleManaged=Роль, {0} ({1}), не може бути використана для синхронізації група->роль, оскільки нею керує інший бот або інтеграція.
discordLinkLinked=§6Щоб прив''язати свій обліковий запис Minecraft до Discord, введіть §c{0} §6на сервері Discord.
discordLinkLinkedAlready=§6Ви вже прив''язали свій обліковий запис Discord\! Якщо ви хочете відв''язати свій обліковий запис Discord, скористайтеся командою §c/unlink§6.
discordLinkLoginKick=§6Перед тим, як приєднатися до цього сервера, ви повинні прив''язати свій обліковий запис Discord.\n§6Щоб прив''язати свій обліковий запис Minecraft до Discord, введіть\:\n§c{0}\n§6в полі Discord цього сервера\:\n§c{1}
discordLinkLoginPrompt=§6Ви повинні прив''язати свій обліковий запис Discord, перш ніж ви зможете пересуватися, спілкуватися або взаємодіяти з цим сервером. Щоб прив''язати свій обліковий запис Minecraft до Discord, введіть §c{0} §6в полі Discord цього сервера\: §c{1}
discordLinkNoAccount=§6Ви не маєте облікового запису Discord, прив''язаного до вашого облікового запису Minecraft.
discordLinkPending=§6Ви вже маєте код прив''язки. Щоб завершити прив''язку вашого облікового запису Minecraft до Discord, введіть §c{0} §6на сервері Discord.
discordLinkUnlinked=§6Відв''язати свій обліковий запис Minecraft, від усіх пов''язаних з ним облікових записів Discord.
discordLoggingIn=Спроба входу в Discord...
discordLoggingInDone=Успішний вхід як {0}
discordMailLine=**Нове повідомлення від {0}\:** {1}
discordNoSendPermission=Неможливо надіслати повідомлення в канал\: \#{0}. Будь ласка, перевірте чи Ваш бот має дозвіл "Send Messages (Відправляти повідомлення)" в цьому каналі\!
discordReloadInvalid=Спроба перезапустити конфіг-файл EssentialX Discord, коли плагін в некоректному стані\! Якщо ви змінювали конфіг, перезапустіть сервер.
disposal=Утилізація
@@ -662,8 +689,10 @@ lightningCommandUsage2=/<command> <гравець> <потужність>
lightningCommandUsage2Description=Б''є блискавкою в вказаного гравця з вказаною потужністю
lightningSmited=§6Тебе вразила блискавка\!
lightningUse=§6Вдаряємо блискавкою§c {0}
linkCommandDescription=Згенеруйте код для прив''язки вашого облікового запису Minecraft до облікового запису Discord.
linkCommandUsage=/<command>
linkCommandUsage1=/<command>
linkCommandUsage1Description=Згенеруйте код для команди /link на Discord
listAfkTag=§7[AFK]§r
listAmount=§6Наразі §c{0}§6 з максимальних §c{1}§6 гравців онлайн.
listAmountHidden=§6Є §c{0}§6/§c{1}§6 з §c{2}§6 гравців онлайн.
@@ -1014,6 +1043,11 @@ removeCommandUsage2=/<command> <тип моба> <радіус> [світ]
removeCommandUsage2Description=Видаляє усіх мобів вказаного типу у вказаному радіусі в цьому або вказаному світах
removed=§6Видалено§c {0} §6створінь.
renamehomeCommandDescription=Перейменовує будинок.
renamehomeCommandUsage=/<command> <[player\:]name> <new name>
renamehomeCommandUsage1=/<command> <name> <new name>
renamehomeCommandUsage1Description=Перейменовує ваш будинок на вказану вами назву
renamehomeCommandUsage2=/<command> <player>\:<name> <new name>
renamehomeCommandUsage2Description=Перейменовує будинок вказаного гравця на вказану вами назву
repair=§6Ви успішно відновили ваш\: §c{0}§6.
repairAlreadyFixed=§4Ця річ не потребує ремонту.
repairCommandDescription=Ремонтує один або усі предмети.
@@ -1025,6 +1059,7 @@ repairCommandUsage2Description=Ремонтує усі предмети в ін
repairEnchanted=§4Заборонено ремонтувати зачаровані речі.
repairInvalidType=§4Цей предмет неможливо полагодити.
repairNone=§4Не знайдені предмети, які можна зремонтувати.
replyFromDiscord=**Відповідь від {0}\:** {1}
replyLastRecipientDisabled=§Відповідь до останнього одержувача повідомлення §відключена§6.
replyLastRecipientDisabledFor=§6Відповідь до останнього одержувача повідомлення §відключена §6для §c{0}§6.
replyLastRecipientEnabled=§Відповідь до останнього одержувача повідомлення §включена§6.
@@ -1219,6 +1254,7 @@ teleportationDisabledWarning=§6Ви маєте дозволити телепо
teleportationEnabled=§6Телепортації §cувімкнені§6.
teleportationEnabledFor=§6Телепортації §cувімкнені §6для §c{0}§6.
teleportAtoB=§c{0}§6 телепортував вас до {1}§6.
teleportBottom=§6Телепортування донизу.
teleportDisabled=§c{0} §4відімкнув телепортацію.
teleportHereRequest=§c{0}§6 просить вас телепортуватися до нього.
teleportHome=§6Телепортування до §c{0}§6.
@@ -1234,6 +1270,7 @@ teleportRequestTimeoutInfo=§6Заявка буде автоматично ві
teleportTop=§6Телепортування нагору.
teleportToPlayer=§6Телепортуємось до §c{0}§6.
teleportOffline=§6Гравець§c{0}§6 зараз не на сервері. Ви можете телепортуватися до нього, використовуючи /otp.
teleportOfflineUnknown=§6Не вдалося знайти останню відому позицію §c{0}§6.
tempbanExempt=§4Ви не можете тимчасово забанити цього гравця.
tempbanExemptOffline=§4Ви не можете тимчасово забанити гравця, який зараз не на сервері.
tempbanJoin=Вас забанено на цьому сервері {0}. Причина\: {1}
@@ -1398,8 +1435,10 @@ unlimitedCommandUsage3=/<command> clear [гравець]
unlimitedCommandUsage3Description=Очищує список необмежених предметів для Вас або іншого гравця, якщо зазначено
unlimitedItemPermission=§4Немає прав для необмеженої кількості речей §c{0}§4.
unlimitedItems=§6Нескінченні речі\:§r
unlinkCommandDescription=Відв''язати ваш обліковий запис Minecraft від прив''язаного до нього облікового запису Discord.
unlinkCommandUsage=/<command>
unlinkCommandUsage1=/<command>
unlinkCommandUsage1Description=Відв''язати ваш обліковий запис Minecraft від прив''язаного до нього облікового запису Discord.
unmutedPlayer=§6Тепер гравець§c {0} §6може писати в чат.
unsafeTeleportDestination=§4Телепорт у це місце небезпечний, а захист телепортації вимкнений.
unsupportedBrand=§4На серверній платформі, з якою Ви працюєте, немає можливостей для реалізації цієї функції.
@@ -1420,6 +1459,9 @@ userIsAwaySelf=§7Тепер ви AFK.
userIsAwaySelfWithMessage=§7Тепер ви AFK.
userIsNotAwaySelf=§7Ви більше не AFK.
userJailed=§6Ви ув''язнені\!
usermapEntry=§c{0} §6 відображається у §c{1}§6.
usermapPurge=§6Перевірка файлів у користувацьких даних, які не зіставлено, результати буде виведено у консоль. Деструктивний режим\: {0}
usermapSize=§6Поточні кешовані користувачі у мапі користувачів\: §c{0}§6/§c{1}§6/§c{2}§6.
userUnknown=§4Увага\: Користувач ''§c{0}§4'' ніколи не приєднувався до цього серверу.
usingTempFolderForTesting=Використання тимчасової папки для тесту\:
vanish=§6Невидимість для {0}§6\: {1}
@@ -98,6 +98,7 @@ bookCommandUsage3=/<command> title <title>
bookCommandUsage3Description=Đặt tiêu đề cho quyển sách đã được ký
bookLocked=§6Quyển sách này đã bị khóa.
bookTitleSet=§6Tiêu để của quyền sách được đặt thành {0}.
bottomCommandUsage=/<command>
breakCommandDescription=Phá vỡ khối nơi bạn đang nhìn.
breakCommandUsage=/<command>
broadcast=§6[§4Truyền thông§6]§a {0}
@@ -467,15 +468,18 @@ heal=§6Bạn đã được hồi.
healCommandDescription=Hồi máu cho bạn hoặc người chơi.
healCommandUsage=/<command> [người chơi]
healCommandUsage1=/<command> [người chơi]
healCommandUsage1Description=Hồi phục cho chính bạn hoặc người chơi khác nếu được chỉ định
healDead=§4Bạn không thể hồi cho người đã chết\!
healOther=§6Đã hồi§c {0}§6.
helpCommandDescription=Hiển thị danh sách các lệnh có sẵn\:
helpCommandUsage=/<command> [nội dung tìm kiếm] [trang]
helpConsole=Để xem trợ giúp từ bảng điều khiển, gõ ''?''.
helpFrom=§6Lệnh từ {0}\:
helpLine=§6/{0}§r\: {1}
helpMatching=§6Lệnh đang khớp "§c{0}§6"\:
helpOp=§4[Trợ giúp OP]§r §6{0}\:§r {1}
helpPlugin=§4{0}§r\: Trợ giúp Plugin\: /help {1}
helpopCommandDescription=Gửi thông báo đến các quản trị viên đang online.
helpopCommandUsage1Description=Gửi tin nhắn được cho đến tất cả các Admin đang online
holdBook=§4Bạn không đang giữ quyển sách có thể viết được.
holdFirework=§4Bạn cần phải đang giữ pháo hoa để thêm hiệu ứng.
@@ -606,6 +610,7 @@ kitItem=§6- §f{0}
kitNotFound=§4Bộ dụng cụ này không tồn tại.
kitOnce=§4Bạn không thể dùng bộ dụng cụ này lần nữa.
kitReceive=§6Đã nhận bộ dụng cụ§c {0}§6.
kitresetCommandDescription=Đặt lại thời gian hồi dành cho một bộ công cụ được chỉ định.
kitresetCommandUsage1Description=Đặt lại thời gian hồi chiêu của một kit được chỉ định cho bạn hoặc người chơi khác nếu được chỉ định
kitResetOther=§6Đặt lại bộ §c{0} §6thời gian hồi chiêu cho §c{1}§6.
kits=§6Bộ dụng cụ\:§r {0}
@@ -701,6 +706,7 @@ nearCommandUsage1=/<command>
nearbyPlayers=§6Người chơi ở gần\:§r {0}
negativeBalanceError=§4Người chơi không được phép có số dư âm.
nickChanged=§6Biệt danh thay đổi.
nickCommandUsage4Description=Loại bỏ một tên gọi nhất định
nickDisplayName=§4Bạn phải kích hoạt change-displayname trong cấu hình Essentials.
nickInUse=§4Tên này đã được sử dụng.
nickNameBlacklist=§4Biệt danh đó không được cho phép.
@@ -711,6 +717,7 @@ nickSet=§6Biệt danh của bạn giờ là §c{0}§6.
nickTooLong=§4Biệt danh này quá dài.
noAccessCommand=§4Bạn không có quyền để dùng lệnh này.
noAccessPermission=§4Bạn không có quyền truy cập vào §c{0}§4.
noAccessSubCommand=§4Bạn không đủ khả năng sử dụng §c{0}§4.
noBreakBedrock=§4Bạn không được phép phá vỡ đá nền.
noDestroyPermission=§4Bạn không có quyền để phá khối §c{0}§4.
northEast=NE
@@ -731,6 +738,7 @@ noMetaJson=Dữ liệu từ tệp JSON không được hổ trợ trong phiên b
noMetaPerm=§4Bạn không có quyền đặt cấu hình §c{0}§4 cho vật phẩm này.
none=không ai
noNewMail=§6Bạn không có thư mới.
nonZeroPosNumber=§4Cần phải là một số khác không.
noPendingRequest=§4Bạn không có yêu cầu chờ giải quyết.
noPerm=§4Bạn không có quyền §c{0}§4.
noPermissionSkull=§4Bạn không có quyển sửa cái đầu này.
@@ -740,6 +748,7 @@ noPlacePermission=§4Bạn không có quyền đặt khối ở gần cái bản
noPotionEffectPerm=§4Bạn không có quyền để đặt hiệu ứng §c{0} §4to this potion.
noPowerTools=§6Bạn không có công cụ điện được chỉ định.
notAcceptingPay=§4{0} §4không chấp nhận thanh toán.
notAllowedToLocal=§4Bạn không đủ quyền hạn để nhắn trong kênh chat cục bộ.
notEnoughExperience=§4Bạn không có đủ kinh nghiệm.
notEnoughMoney=§4Bạn không có đủ tiền.
notFlying=không bay
@@ -12,7 +12,7 @@ afkCommandUsage1=/<command> [消息]
afkCommandUsage1Description=以一个可选理由切换离开状态
afkCommandUsage2=/<command> <玩家> [信息]
afkCommandUsage2Description=为指定玩家以一个可选理由切换离开状态
alertBroke=破坏:
alertBroke=破坏了:
alertFormat=§3[{0}] §r{1}§6{2}于:{3}
alertPlaced=放置了:
alertUsed=使用了:
@@ -100,6 +100,8 @@ bookCommandUsage3=/<command> title <标题>
bookCommandUsage3Description=设置成书的标题
bookLocked=§6这本书现在被锁定了。
bookTitleSet=§6这本书的标题已被设置为{0}。
bottomCommandDescription=传送至你当前位置的最低点。
bottomCommandUsage=/<command>
breakCommandDescription=破坏你光标所指向的方块。
breakCommandUsage=/<command>
broadcast=§r§6[§4公告§6]§a {0}
@@ -915,7 +917,7 @@ playerTempBanIpAddress=§6操作员§c{0}§6临时封禁了IP地址§c{1}§6§c{
playerBanned=§6操作员§c{0}§6封禁了§c{1}§6,理由:§c{2}§6。
playerJailed=§6玩家§c{0}§6入狱了。
playerJailedFor=§6玩家§c{0}§6被§c{1}§6囚禁。
playerKicked=§6操作员§c{0}§6踢出了§c{1}§6,时长:§c{2}§6。
playerKicked=§6操作员§c{0}§6踢出了§c{1}§6,原因:§c{2}§6。
playerMuted=§6你被禁言了!
playerMutedFor=§6你被禁言§c{0}§6。
playerMutedForReason=§6你被禁言§c{0}§6。理由:§c{1}
@@ -1252,6 +1254,7 @@ teleportationDisabledWarning=§6你必须启用传送功能才能让其他玩家
teleportationEnabled=§6传送§c已禁用§6。
teleportationEnabledFor=§6传送功能 §c开启 §6了 §c{0}§6.
teleportAtoB=§c{0}§6将你传送至§c{1}§6。
teleportBottom=§6传送到底部。
teleportDisabled=§c{0}§4禁用了传送。
teleportHereRequest=§c{0}§6请求你传送到他那里。
teleportHome=§6传送到§c{0}§6。
@@ -1267,6 +1270,7 @@ teleportRequestTimeoutInfo=§6此请求将在§c{0}秒§6后自动取消。
teleportTop=§6传送到顶部。
teleportToPlayer=§6正在传送至§c{0}§6。
teleportOffline=§6玩家§c{0}§6已离线。你可以使用/otp命令来传送到他的位置。
teleportOfflineUnknown=§6无法找到§c{0}§6已知的最后位置。
tempbanExempt=§4你无法临时封禁该玩家。
tempbanExemptOffline=§4你无法临时封禁已离线玩家。
tempbanJoin=你已被此服务器临时封禁{0}。理由:{1}
@@ -1488,9 +1492,9 @@ versionReleaseLatest=§6你正在运行最新的EssentialsX稳定版!
versionReleaseNew=§4已有新的EssentialsX版本可供下载:§c{0}§4。
versionReleaseNewLink=§4在此处下载:§c{0}
voiceSilenced=§6你已被禁言!
voiceSilencedTime=§6你已被{0}禁言!
voiceSilencedTime=§6你已被禁言{0}!
voiceSilencedReason=§6你已被禁言!理由:§c{0}
voiceSilencedReasonTime=§6你已被{0}禁言!理由:§c{1}
voiceSilencedReasonTime=§6你已被禁言{0}!理由:§c{1}
walking=行走中
warpCommandDescription=列出所有的传送点(或传送到指定的位置)。
warpCommandUsage=/<command> <pagenumber|warp> [玩家]
@@ -100,6 +100,7 @@ bookCommandUsage3=/<command> title <title>
bookCommandUsage3Description=設定書的標題
bookLocked=§6已鎖定這本書。
bookTitleSet=§6這本書的標題已被設定為 {0}。
bottomCommandUsage=/<command>
breakCommandDescription=破壞你前方的方塊。
breakCommandUsage=/<command>
broadcast=§6[§4廣播§6]§a {0}
@@ -995,16 +996,16 @@ pTimeCurrent=§c{0}§6 的時間是§c {1}§6。
pTimeCurrentFixed=§c{0}§6 的時間被修正到§c {1}§6。
pTimeNormal=§c{0}§6 的時間是正常的並與伺服器匹配。
pTimeOthersPermission=§4你沒有設定其他玩家時間的權限。
pTimePlayers=§6這些玩家的客戶端時間與伺服器端時間不同步:§r
pTimeReset=§6玩家 §c{0} §6的客戶端時間已被重置。
pTimePlayers=§6這些玩家的用戶端時間與伺服器端時間不同步:§r
pTimeReset=§6玩家 §c{0} §6的用戶端時間已被重設。
pTimeSet=§6玩家 §c{1}§6 的時間已被設定為 §c{0}§6。
pTimeSetFixed=§6玩家 §c{1}§6 的時間已被固定為 §c{0}§6。
pWeatherCurrent=§c{0}§6 的天氣是§c {1}§6。
pWeatherInvalidAlias=§4無效的天氣類型
pWeatherNormal=§c{0}§6 的天氣是正常的並與伺服器匹配。
pWeatherOthersPermission=§4你沒有設定其他玩家天氣的權限。
pWeatherPlayers=§6這些玩家的客戶端天氣與伺服器端天氣不同步:§r
pWeatherReset=§6玩家 §c{0} §6的客戶端天氣已被重置。
pWeatherPlayers=§6這些玩家的用戶端天氣與伺服器端天氣不同步:§r
pWeatherReset=§6玩家 §c{0} §6的用戶端天氣已被重設。
pWeatherSet=§6玩家 §c{1}§6 的天氣已被設定為 §c{0}§6。
questionFormat=§2[提問]§r {0}
rCommandDescription=快速回覆上一個玩家訊息。
+4
View File
@@ -53,6 +53,10 @@ commands:
description: Allows reopening and editing of sealed books.
usage: /<command> [title|author [name]]
aliases: [ebook]
bottom:
description: Teleport to the lowest block at your current position.
usage: /<command>
aliases: [ ebottom ]
break:
description: Breaks the block you are looking at.
usage: /<command>
@@ -2,8 +2,7 @@ package com.earth2me.essentials.chat;
import com.earth2me.essentials.Essentials;
import com.earth2me.essentials.EssentialsLogger;
import com.earth2me.essentials.chat.processing.LegacyChatHandler;
import com.earth2me.essentials.chat.processing.SignedChatHandler;
import com.earth2me.essentials.chat.processing.ChatHandler;
import com.earth2me.essentials.metrics.MetricsWrapper;
import net.ess3.api.IEssentials;
import org.bukkit.command.Command;
@@ -32,13 +31,8 @@ public class EssentialsChat extends JavaPlugin {
return;
}
final SignedChatHandler signedHandler = new SignedChatHandler((Essentials) ess, this);
if (signedHandler.tryRegisterListeners()) {
getLogger().info("Secure signed chat and previews are enabled.");
} else {
final LegacyChatHandler legacyHandler = new LegacyChatHandler((Essentials) ess, this);
legacyHandler.registerListeners();
}
final ChatHandler legacyHandler = new ChatHandler((Essentials) ess, this);
legacyHandler.registerListeners();
if (metrics == null) {
metrics = new MetricsWrapper(this, 3814, false);
@@ -59,11 +59,14 @@ public abstract class AbstractChatHandler {
return;
}
// Ensure we're getting the latest display name
user.setDisplayNick();
// Reuse cached IntermediateChat if available
ChatProcessingCache.IntermediateChat chat = cache.getIntermediateChat(event.getPlayer());
ChatProcessingCache.ProcessedChat chat = cache.getProcessedChat(event.getPlayer());
if (chat == null) {
chat = new ChatProcessingCache.IntermediateChat(user, getChatType(user, event.getMessage()), event.getMessage());
cache.setIntermediateChat(event.getPlayer(), chat);
chat = new ChatProcessingCache.ProcessedChat(user, getChatType(user, event.getMessage()), event.getMessage());
cache.setProcessedChat(event.getPlayer(), chat);
}
final long configRadius = ess.getSettings().getChatRadius();
@@ -118,9 +121,6 @@ public abstract class AbstractChatHandler {
synchronized (format) {
event.setFormat(format);
}
chat.setFormatResult(event.getFormat());
chat.setMessageResult(event.getMessage());
}
/**
@@ -133,7 +133,7 @@ public abstract class AbstractChatHandler {
return;
}
final ChatProcessingCache.Chat chat = cache.getIntermediateOrElseProcessedChat(event.getPlayer());
final ChatProcessingCache.Chat chat = cache.getProcessedChat(event.getPlayer());
// If local chat is enabled, handle the recipients here; else we have nothing to do
if (chat.getRadius() < 1) {
@@ -264,17 +264,9 @@ public abstract class AbstractChatHandler {
* {@link #handleChatFormat(AsyncPlayerChatEvent)} when previews are not available.
*/
protected void handleChatPostFormat(AsyncPlayerChatEvent event) {
final ChatProcessingCache.IntermediateChat intermediateChat = cache.clearIntermediateChat(event.getPlayer());
if (isAborted(event) || intermediateChat == null) {
return;
if (isAborted(event)) {
cache.clearProcessedChat(event.getPlayer());
}
// in case of modifications by other plugins during the preview
intermediateChat.setFormatResult(event.getFormat());
intermediateChat.setMessageResult(event.getMessage());
final ChatProcessingCache.ProcessedChat processed = new ChatProcessingCache.ProcessedChat(ess, intermediateChat);
cache.setProcessedChat(event.getPlayer(), processed);
}
/**
@@ -295,11 +287,6 @@ public abstract class AbstractChatHandler {
return event.isCancelled();
}
boolean isPlayerChat(final AsyncPlayerChatEvent event) {
// Used to distinguish chats from Player#chat (sync) from chats sent by the player (async)
return event.isAsynchronous();
}
ChatType getChatType(final User user, final String message) {
if (message.length() == 0) {
//Ignore empty chat events generated by plugins
@@ -7,8 +7,8 @@ import org.bukkit.event.EventPriority;
import org.bukkit.event.player.AsyncPlayerChatEvent;
import org.bukkit.plugin.PluginManager;
public class LegacyChatHandler extends AbstractChatHandler {
public LegacyChatHandler(Essentials ess, EssentialsChat essChat) {
public class ChatHandler extends AbstractChatHandler {
public ChatHandler(Essentials ess, EssentialsChat essChat) {
super(ess, essChat);
}
@@ -2,57 +2,27 @@ package com.earth2me.essentials.chat.processing;
import com.earth2me.essentials.Trade;
import com.earth2me.essentials.User;
import com.google.common.cache.Cache;
import com.google.common.cache.CacheBuilder;
import net.ess3.api.IEssentials;
import net.essentialsx.api.v2.ChatType;
import org.bukkit.entity.Player;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.TimeUnit;
public class ChatProcessingCache {
private final Map<Player, IntermediateChat> intermediateChats = Collections.synchronizedMap(new HashMap<>());
private final Cache<Player, ProcessedChat> processedChats = CacheBuilder.newBuilder()
.expireAfterWrite(5, TimeUnit.MINUTES)
.build();
public IntermediateChat getIntermediateChat(final Player player) {
return intermediateChats.get(player);
}
public void setIntermediateChat(final Player player, final IntermediateChat intermediateChat) {
intermediateChats.put(player, intermediateChat);
}
public IntermediateChat clearIntermediateChat(final Player player) {
return intermediateChats.remove(player);
}
private final Map<Player, ProcessedChat> chats = Collections.synchronizedMap(new HashMap<>());
public ProcessedChat getProcessedChat(final Player player) {
return processedChats.getIfPresent(player);
return chats.get(player);
}
public void setProcessedChat(final Player player, final ProcessedChat chat) {
processedChats.put(player, chat);
chats.put(player, chat);
}
public ProcessedChat clearProcessedChat(final Player player) {
final ProcessedChat chat = processedChats.getIfPresent(player);
processedChats.invalidate(player);
return chat;
}
public Chat getIntermediateOrElseProcessedChat(final Player player) {
final IntermediateChat chat = getIntermediateChat(player);
if (chat != null) {
return chat;
}
return getProcessedChat(player);
public void clearProcessedChat(final Player player) {
chats.remove(player);
}
public abstract static class Chat {
@@ -89,58 +59,19 @@ public class ChatProcessingCache {
}
public static class ProcessedChat extends Chat {
private final String message;
private final String format;
private final Trade charge;
public ProcessedChat(final IEssentials ess, final IntermediateChat sourceChat) {
super(sourceChat.getUser(), sourceChat.getType(), sourceChat.getOriginalMessage());
this.message = sourceChat.messageResult;
this.format = sourceChat.formatResult;
this.radius = sourceChat.radius;
this.charge = new Trade(getLongType(), ess);
}
public String getMessage() {
return message;
}
public String getFormat() {
return format;
}
public Trade getCharge() {
return charge;
}
}
public static class IntermediateChat extends Chat {
private String messageResult;
private String formatResult;
public IntermediateChat(final User user, final ChatType type, final String originalMessage) {
public ProcessedChat(final User user, final ChatType type, final String originalMessage) {
super(user, type, originalMessage);
this.charge = new Trade(getLongType(), user.getEssentials());
}
public void setRadius(final long radius) {
this.radius = radius;
}
public String getMessageResult() {
return messageResult;
}
public void setMessageResult(String messageResult) {
this.messageResult = messageResult;
}
public String getFormatResult() {
return formatResult;
}
public void setFormatResult(String formatResult) {
this.formatResult = formatResult;
public Trade getCharge() {
return charge;
}
}
}
@@ -1,120 +0,0 @@
package com.earth2me.essentials.chat.processing;
import com.earth2me.essentials.Essentials;
import com.earth2me.essentials.I18n;
import com.earth2me.essentials.chat.EssentialsChat;
import com.earth2me.essentials.utils.VersionUtil;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.player.AsyncPlayerChatEvent;
import org.bukkit.event.player.AsyncPlayerChatPreviewEvent;
import org.bukkit.plugin.PluginManager;
public class SignedChatHandler extends AbstractChatHandler {
public SignedChatHandler(Essentials ess, EssentialsChat essChat) {
super(ess, essChat);
}
public boolean tryRegisterListeners() {
if (VersionUtil.getServerBukkitVersion().isLowerThan(VersionUtil.v1_19_2_R01)) {
return false;
}
try {
final Class<?> previewClass = Class.forName("org.bukkit.event.player.AsyncPlayerChatPreviewEvent");
if (!AsyncPlayerChatEvent.class.isAssignableFrom(previewClass)) {
essChat.getLogger().severe(I18n.tl("essChatNoSecureMsg", essChat.getDescription().getVersion()));
return false;
}
} catch (ClassNotFoundException e) {
essChat.getLogger().severe(I18n.tl("essChatNoSecureMsg", essChat.getDescription().getVersion()));
return false;
}
final PluginManager pm = essChat.getServer().getPluginManager();
pm.registerEvents(new PreviewLowest(), essChat);
pm.registerEvents(new PreviewHighest(), essChat);
pm.registerEvents(new ChatLowest(), essChat);
pm.registerEvents(new ChatNormal(), essChat);
pm.registerEvents(new ChatHighest(), essChat);
return true;
}
private void handleChatApplyPreview(AsyncPlayerChatEvent event) {
final ChatProcessingCache.ProcessedChat chat = cache.getProcessedChat(event.getPlayer());
if (!isPlayerChat(event) || chat == null) {
handleChatFormat(event);
handleChatPostFormat(event);
} else {
event.setFormat(chat.getFormat());
event.setMessage(chat.getMessage());
}
}
private void handleChatConfirmPreview(AsyncPlayerChatEvent event) {
if (!ess.getSettings().isDebug()) return;
final ChatProcessingCache.ProcessedChat chat = cache.getProcessedChat(event.getPlayer());
if (chat == null) {
// Can't confirm preview for some reason
essChat.getLogger().info("Processed chat missing for " + event.getPlayer());
} else {
if (!event.getFormat().equals(chat.getFormat())) {
// Chat format modified by another plugin
essChat.getLogger().info("Chat format has been modified for " + event.getPlayer());
essChat.getLogger().info("Expected '" + chat.getFormat() + "', got '" + event.getFormat());
}
if (!event.getMessage().equals(chat.getMessage())) {
// Chat message modified by another plugin
essChat.getLogger().info("Chat message has been modified for " + event.getPlayer());
essChat.getLogger().info("Expected '" + chat.getMessage() + "', got '" + event.getMessage());
}
}
}
private interface PreviewListener extends Listener {
void onPlayerChatPreview(AsyncPlayerChatPreviewEvent event);
}
private class PreviewLowest implements PreviewListener {
@EventHandler(priority = EventPriority.LOWEST)
public void onPlayerChatPreview(AsyncPlayerChatPreviewEvent event) {
handleChatFormat(event);
}
}
private class PreviewHighest implements PreviewListener {
@EventHandler(priority = EventPriority.HIGHEST)
public void onPlayerChatPreview(AsyncPlayerChatPreviewEvent event) {
handleChatPostFormat(event);
}
}
private class ChatLowest implements ChatListener {
@Override
@EventHandler(priority = EventPriority.LOWEST)
public void onPlayerChat(AsyncPlayerChatEvent event) {
handleChatApplyPreview(event);
}
}
private class ChatNormal implements ChatListener {
@Override
@EventHandler(priority = EventPriority.NORMAL)
public void onPlayerChat(AsyncPlayerChatEvent event) {
handleChatRecipients(event);
}
}
private class ChatHighest implements ChatListener {
@Override
@EventHandler(priority = EventPriority.HIGHEST)
public void onPlayerChat(AsyncPlayerChatEvent event) {
handleChatConfirmPreview(event);
handleChatSubmit(event);
}
}
}
+1 -1
View File
@@ -4,7 +4,7 @@ plugins {
dependencies {
compileOnly project(':EssentialsX')
implementation('net.dv8tion:JDA:4.4.0_350') {
implementation('net.dv8tion:JDA:4.4.1_353') {
exclude(module: 'opus-java')
}
implementation 'com.vdurmont:emoji-java:5.1.1'
@@ -1,5 +1,6 @@
package net.essentialsx.api.v2.events.discord;
import net.essentialsx.api.v2.ChatType;
import org.bukkit.entity.Player;
import org.bukkit.event.Cancellable;
import org.bukkit.event.Event;
@@ -14,6 +15,7 @@ public class DiscordChatMessageEvent extends Event implements Cancellable {
private static final HandlerList handlers = new HandlerList();
private final Player player;
private final ChatType chatType;
private String message;
private boolean cancelled = false;
@@ -21,13 +23,14 @@ public class DiscordChatMessageEvent extends Event implements Cancellable {
* @param player The player which caused this event.
* @param message The message of this event.
*/
public DiscordChatMessageEvent(Player player, String message) {
public DiscordChatMessageEvent(Player player, String message, ChatType chatType) {
this.player = player;
this.message = message;
this.chatType = chatType;
}
/**
* The player which which caused this chat message.
* The player which caused this chat message.
* @return the player who caused the event.
*/
public Player getPlayer() {
@@ -50,6 +53,14 @@ public class DiscordChatMessageEvent extends Event implements Cancellable {
this.message = message;
}
/**
* Type of chat of the original message.
* @return type of chat of the original message.
*/
public ChatType getChatType() {
return chatType;
}
@Override
public boolean isCancelled() {
return cancelled;
@@ -1,5 +1,6 @@
package net.essentialsx.api.v2.services.discord;
import net.essentialsx.api.v2.ChatType;
import net.essentialsx.api.v2.events.discord.DiscordChatMessageEvent;
import org.bukkit.entity.Player;
import org.bukkit.plugin.Plugin;
@@ -20,7 +21,7 @@ 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
* Sends a chat message to the {@link MessageType.DefaultTypes#CHAT default chat channel} with the same format
* used for regular chat messages specified in the EssentialsX Discord configuration.
* <p>
* Note: Messages sent with this method will not fire a {@link DiscordChatMessageEvent}.
@@ -29,6 +30,16 @@ public interface DiscordService {
*/
void sendChatMessage(final Player player, final String chatMessage);
/**
* Sends a chat message to the appropriate chat channel depending on the chat type with the format specified
* for that type in the EssentialsX Discord configuration.
* <p>
* 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 ChatType chatType, 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.
@@ -65,7 +65,10 @@ public final class MessageType {
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, FIRST_JOIN, LEAVE, CHAT, DEATH, AFK, ADVANCEMENT, ACTION, SERVER_START, SERVER_STOP, KICK, MUTE};
public final static MessageType LOCAL = new MessageType("local", true);
public final static MessageType QUESTION = new MessageType("question", true);
public final static MessageType SHOUT = new MessageType("shout", true);
private final static MessageType[] VALUES = new MessageType[]{JOIN, FIRST_JOIN, LEAVE, CHAT, DEATH, AFK, ADVANCEMENT, ACTION, SERVER_START, SERVER_STOP, KICK, MUTE, LOCAL, QUESTION, SHOUT};
/**
* Gets an array of all the default {@link MessageType MessageTypes}.
@@ -6,6 +6,7 @@ import com.earth2me.essentials.config.EssentialsConfiguration;
import com.earth2me.essentials.utils.FormatUtil;
import net.dv8tion.jda.api.OnlineStatus;
import net.dv8tion.jda.api.entities.Activity;
import net.essentialsx.api.v2.ChatType;
import org.apache.logging.log4j.Level;
import org.bukkit.entity.Player;
@@ -107,6 +108,10 @@ public class DiscordSettings implements IConf {
return config.getBoolean("always-receive-primary", false);
}
public boolean isUseEssentialsEvents() {
return config.getBoolean("use-essentials-events", false);
}
public int getChatDiscordMaxLength() {
return config.getInt("chat.discord-max-length", 2000);
}
@@ -215,17 +220,77 @@ public class DiscordSettings implements IConf {
}
public MessageFormat getMcToDiscordFormat(Player player) {
final String format = getFormatString("mc-to-discord");
return getMcToDiscordFormat(player, ChatType.UNKNOWN);
}
public MessageFormat getMcToDiscordFormat(Player player, ChatType chatType) {
final String format = getFormatString(getMcToDiscordFormatKey(chatType));
final String filled;
if (plugin.isPAPI() && format != null) {
filled = me.clip.placeholderapi.PlaceholderAPI.setPlaceholders(player, format);
} else {
filled = format;
}
return generateMessageFormat(filled, "{displayname}: {message}", false,
return generateMessageFormat(filled, getMcToDiscordDefaultFormat(chatType), false,
"username", "displayname", "message", "world", "prefix", "suffix");
}
private String getMcToDiscordFormatKey(ChatType chatType) {
switch (chatType) {
case LOCAL:
return "mc-to-discord-local";
case QUESTION:
return "mc-to-discord-question";
case SHOUT:
return "mc-to-discord-shout";
default:
return "mc-to-discord";
}
}
private String getMcToDiscordDefaultFormat(ChatType chatType) {
switch (chatType) {
case LOCAL:
return "**[Local]** {displayname}: {message}";
case QUESTION:
return "**[Question]** {displayname}: {message}";
case SHOUT:
return "**[Shout]** {displayname}: {message}";
default:
return "{displayname}: {message}";
}
}
public String getLegacyNameFormat() {
// For compatibility with old configs
if (isShowDisplayName()) {
return "{displayname}";
} else if (isShowName()) {
return "{username}";
} else {
// Will default to "{botname}" in the format
return null;
}
}
public MessageFormat getMcToDiscordNameFormat(Player player) {
String format = getFormatString("mc-to-discord-name-format");
if (format == null) {
format = getLegacyNameFormat();
}
final String filled;
if (plugin.isPAPI() && format != null) {
filled = me.clip.placeholderapi.PlaceholderAPI.setPlaceholders(player, format);
} else {
filled = format;
}
return generateMessageFormat(filled, "{botname}", false,
"username", "displayname", "world", "prefix", "suffix", "botname");
}
public MessageFormat getTempMuteFormat() {
return tempMuteFormat;
}
@@ -24,6 +24,7 @@ public class EssentialsDiscord extends JavaPlugin implements IEssentialsModule {
private JDADiscordService jda;
private DiscordSettings settings;
private boolean isPAPI = false;
private boolean isEssentialsChat = false;
@Override
public void onEnable() {
@@ -46,6 +47,8 @@ public class EssentialsDiscord extends JavaPlugin implements IEssentialsModule {
isPAPI = getServer().getPluginManager().getPlugin("PlaceholderAPI") != null;
isEssentialsChat = getServer().getPluginManager().getPlugin("EssentialsChat") != null;
settings = new DiscordSettings(this);
ess.addReloadListener(settings);
@@ -79,6 +82,7 @@ public class EssentialsDiscord extends JavaPlugin implements IEssentialsModule {
public void onReload() {
if (jda != null && !jda.isInvalidStartup()) {
jda.updateListener();
jda.updatePresence();
jda.updatePrimaryChannel();
jda.updateConsoleRelay();
@@ -102,6 +106,10 @@ public class EssentialsDiscord extends JavaPlugin implements IEssentialsModule {
return isPAPI;
}
public boolean isEssentialsChat() {
return isEssentialsChat;
}
@Override
public void onDisable() {
if (jda != null && !jda.isInvalidStartup()) {
@@ -23,6 +23,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.ChatType;
import net.essentialsx.api.v2.events.discord.DiscordMessageEvent;
import net.essentialsx.api.v2.services.discord.DiscordService;
import net.essentialsx.api.v2.services.discord.InteractionController;
@@ -40,12 +41,15 @@ import net.essentialsx.discord.interactions.commands.MessageCommand;
import net.essentialsx.discord.listeners.BukkitListener;
import net.essentialsx.discord.listeners.DiscordCommandDispatcher;
import net.essentialsx.discord.listeners.DiscordListener;
import net.essentialsx.discord.listeners.EssentialsChatListener;
import net.essentialsx.discord.listeners.BukkitChatListener;
import net.essentialsx.discord.util.ConsoleInjector;
import net.essentialsx.discord.util.DiscordUtil;
import net.essentialsx.discord.util.MessageUtil;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.bukkit.event.HandlerList;
import org.bukkit.event.Listener;
import org.bukkit.plugin.Plugin;
import org.bukkit.plugin.ServicePriority;
import org.jetbrains.annotations.NotNull;
@@ -83,6 +87,7 @@ public class JDADiscordService implements DiscordService, IEssentialsModule {
private ConsoleInjector injector;
private DiscordCommandDispatcher commandDispatcher;
private InteractionControllerImpl interactionController;
private Listener chatListener;
private boolean invalidStartup = false;
public JDADiscordService(EssentialsDiscord plugin) {
@@ -214,6 +219,8 @@ public class JDADiscordService implements DiscordService, IEssentialsModule {
Bukkit.getPluginManager().registerEvents(new BukkitListener(this), plugin);
updateListener();
try {
if (VersionUtil.getServerBukkitVersion().isHigherThanOrEqualTo(VersionUtil.v1_12_0_R01)) {
try {
@@ -267,9 +274,14 @@ public class JDADiscordService implements DiscordService, IEssentialsModule {
@Override
public void sendChatMessage(final Player player, final String chatMessage) {
sendChatMessage(ChatType.UNKNOWN, player, chatMessage);
}
@Override
public void sendChatMessage(ChatType chatType, Player player, String chatMessage) {
final User user = getPlugin().getEss().getUser(player);
final String formattedMessage = MessageUtil.formatMessage(getSettings().getMcToDiscordFormat(player),
final String formattedMessage = MessageUtil.formatMessage(getSettings().getMcToDiscordFormat(player, chatType),
MessageUtil.sanitizeDiscordMarkdown(player.getName()),
MessageUtil.sanitizeDiscordMarkdown(player.getDisplayName()),
user.isAuthorized("essentials.discord.markdown") ? chatMessage : MessageUtil.sanitizeDiscordMarkdown(chatMessage),
@@ -278,9 +290,29 @@ public class JDADiscordService implements DiscordService, IEssentialsModule {
MessageUtil.sanitizeDiscordMarkdown(FormatUtil.stripEssentialsFormat(getPlugin().getEss().getPermissionsHandler().getSuffix(player))));
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());
final String formattedName = MessageUtil.formatMessage(getSettings().getMcToDiscordNameFormat(player),
player.getName(),
player.getDisplayName(),
getPlugin().getEss().getSettings().getWorldAlias(player.getWorld().getName()),
FormatUtil.stripEssentialsFormat(getPlugin().getEss().getPermissionsHandler().getPrefix(player)),
FormatUtil.stripEssentialsFormat(getPlugin().getEss().getPermissionsHandler().getSuffix(player)),
guild.getMember(jda.getSelfUser()).getEffectiveName());
DiscordUtil.dispatchDiscordMessage(this, chatTypeToMessageType(chatType), formattedMessage, user.isAuthorized("essentials.discord.ping"), avatarUrl, formattedName, player.getUniqueId());
}
private MessageType chatTypeToMessageType(ChatType chatType) {
switch (chatType) {
case SHOUT:
return MessageType.DefaultTypes.SHOUT;
case QUESTION:
return MessageType.DefaultTypes.QUESTION;
case LOCAL:
return MessageType.DefaultTypes.LOCAL;
default:
return MessageType.DefaultTypes.CHAT;
}
}
@Override
@@ -311,6 +343,19 @@ public class JDADiscordService implements DiscordService, IEssentialsModule {
return message;
}
public void updateListener() {
if (chatListener != null) {
HandlerList.unregisterAll(chatListener);
chatListener = null;
}
chatListener = getSettings().isUseEssentialsEvents() && plugin.isEssentialsChat()
? new EssentialsChatListener(this)
: new BukkitChatListener(this);
Bukkit.getPluginManager().registerEvents(chatListener, plugin);
}
public void updatePresence() {
jda.getPresence().setPresence(plugin.getSettings().getStatus(), plugin.getSettings().getStatusActivity());
}
@@ -1,5 +1,6 @@
package net.essentialsx.discord.interactions;
import com.earth2me.essentials.utils.StringUtil;
import net.dv8tion.jda.api.events.interaction.SlashCommandEvent;
import net.dv8tion.jda.api.exceptions.ErrorResponseException;
import net.dv8tion.jda.api.hooks.ListenerAdapter;
@@ -74,10 +75,14 @@ public class InteractionControllerImpl extends ListenerAdapter implements Intera
initialBatchRegistration = true;
final List<CommandData> list = new ArrayList<>();
for (final InteractionCommand command : batchRegistrationQueue.values()) {
final CommandData data = new CommandData(command.getName(), command.getDescription());
// German is quite the language
final String description = StringUtil.abbreviate(command.getDescription(), 100);
final CommandData data = new CommandData(command.getName(), description);
if (command.getArguments() != null) {
for (final InteractionCommandArgument argument : command.getArguments()) {
data.addOption(OptionType.valueOf(argument.getType().name()), argument.getName(), argument.getDescription(), argument.isRequired());
// German doesn't support spaces between words
final String argDescription = StringUtil.abbreviate(argument.getDescription(), 100);
data.addOption(OptionType.valueOf(argument.getType().name()), argument.getName(), argDescription, argument.isRequired());
}
}
list.add(data);
@@ -0,0 +1,34 @@
package net.essentialsx.discord.listeners;
import net.essentialsx.api.v2.ChatType;
import net.essentialsx.api.v2.events.discord.DiscordChatMessageEvent;
import net.essentialsx.discord.JDADiscordService;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.player.AsyncPlayerChatEvent;
public class BukkitChatListener implements Listener {
private final JDADiscordService jda;
public BukkitChatListener(JDADiscordService jda) {
this.jda = jda;
}
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
public void onChat(AsyncPlayerChatEvent event) {
final Player player = event.getPlayer();
Bukkit.getScheduler().runTask(jda.getPlugin(), () -> {
final DiscordChatMessageEvent chatEvent = new DiscordChatMessageEvent(event.getPlayer(), event.getMessage(), ChatType.UNKNOWN);
chatEvent.setCancelled(!jda.getSettings().isShowAllChat() && !event.getRecipients().containsAll(Bukkit.getOnlinePlayers()));
Bukkit.getPluginManager().callEvent(chatEvent);
if (chatEvent.isCancelled()) {
return;
}
jda.sendChatMessage(player, chatEvent.getMessage());
});
}
}
@@ -2,6 +2,7 @@ package net.essentialsx.discord.listeners;
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;
@@ -10,13 +11,11 @@ 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;
import net.essentialsx.discord.JDADiscordService;
import net.essentialsx.discord.util.DiscordUtil;
import net.essentialsx.discord.util.MessageUtil;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.GameRule;
import org.bukkit.entity.Player;
@@ -24,7 +23,6 @@ import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.PlayerDeathEvent;
import org.bukkit.event.player.AsyncPlayerChatEvent;
import org.bukkit.event.player.PlayerKickEvent;
import org.bukkit.event.player.PlayerQuitEvent;
@@ -80,21 +78,6 @@ public class BukkitListener implements Listener {
}
}
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
public void onChat(AsyncPlayerChatEvent event) {
final Player player = event.getPlayer();
Bukkit.getScheduler().runTask(jda.getPlugin(), () -> {
final DiscordChatMessageEvent chatEvent = new DiscordChatMessageEvent(event.getPlayer(), event.getMessage());
chatEvent.setCancelled(!jda.getSettings().isShowAllChat() && !event.getRecipients().containsAll(Bukkit.getOnlinePlayers()));
Bukkit.getPluginManager().callEvent(chatEvent);
if (chatEvent.isCancelled()) {
return;
}
jda.sendChatMessage(player, chatEvent.getMessage());
});
}
@EventHandler(priority = EventPriority.MONITOR)
public void onJoin(AsyncUserDataLoadEvent event) {
// Delay join to let nickname load
@@ -271,11 +254,13 @@ public class BukkitListener implements Listener {
avatarUrl = DiscordUtil.getAvatarUrl(jda, player);
}
if (jda.getSettings().isShowName()) {
name = player.getName();
} else if (jda.getSettings().isShowDisplayName()) {
name = player.getDisplayName();
}
name = MessageUtil.formatMessage(jda.getSettings().getMcToDiscordNameFormat(player),
player.getName(),
player.getDisplayName(),
jda.getPlugin().getEss().getSettings().getWorldAlias(player.getWorld().getName()),
FormatUtil.stripEssentialsFormat(jda.getPlugin().getEss().getPermissionsHandler().getPrefix(player)),
FormatUtil.stripEssentialsFormat(jda.getPlugin().getEss().getPermissionsHandler().getSuffix(player)),
jda.getGuild().getMember(jda.getJda().getSelfUser()).getEffectiveName());
uuid = player.getUniqueId();
}
@@ -0,0 +1,43 @@
package net.essentialsx.discord.listeners;
import net.essentialsx.api.v2.events.chat.ChatEvent;
import net.essentialsx.api.v2.events.chat.GlobalChatEvent;
import net.essentialsx.api.v2.events.chat.LocalChatEvent;
import net.essentialsx.api.v2.events.discord.DiscordChatMessageEvent;
import net.essentialsx.discord.JDADiscordService;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
public class EssentialsChatListener implements Listener {
private final JDADiscordService jda;
public EssentialsChatListener(JDADiscordService jda) {
this.jda = jda;
}
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
public void onLocalChat(LocalChatEvent event) {
processChatEvent(event);
}
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
public void onGlobalChat(GlobalChatEvent event) {
processChatEvent(event);
}
private void processChatEvent(ChatEvent event) {
final Player player = event.getPlayer();
Bukkit.getScheduler().runTask(jda.getPlugin(), () -> {
final DiscordChatMessageEvent chatEvent = new DiscordChatMessageEvent(event.getPlayer(), event.getMessage(), event.getChatType());
Bukkit.getPluginManager().callEvent(chatEvent);
if (!chatEvent.isCancelled()) {
jda.sendChatMessage(event.getChatType(), player, chatEvent.getMessage());
}
});
}
}
@@ -46,6 +46,10 @@ channels:
# players the essentials.discord.receive.primary permission.
always-receive-primary: false
# Whether to use Essentials Chat events instead of normal chat event.
# This allows you to filter chat by its type (local, question, shout).
use-essentials-events: false
# Chat relay settings
# General settings for chat relays between Minecraft and Discord.
# To configure the channel Minecraft chat is sent to, see the "message-types" section of the config.
@@ -138,6 +142,15 @@ message-types:
kick: staff
# Message sent when a player's mute state is changed on the Minecraft server.
mute: staff
# Message sent when a player talks in local chat.
# use-essentials-events must be set to "true" for this to work.
local: none
# Message sent when a player asks a question in global chat.
# use-essentials-events must be set to "true" for this to work.
question: primary
# Message sent when a player talks in global chat.
# use-essentials-events must be set to "true" for this to work.
shout: primary
# 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.
@@ -147,11 +160,6 @@ show-avatar: false
# 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
# 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).
@@ -263,6 +271,46 @@ 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 bot's name which appears in Discord when sending player-specific messages.
# 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)
# - {world}: The name of the world the player sending the message is in
# - {prefix}: The prefix of the player sending the message
# - {suffix}: The suffix of the player sending the message
# - {botname}: Name of the Discord bot
# ... PlaceholderAPI placeholders are also supported here too!
mc-to-discord-name-format: "{botname}"
# This is the message that is used to relay minecraft local 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)
# - {message}: The content of the message being sent
# - {world}: The name of the world the player sending the message is in
# - {prefix}: The prefix of the player sending the message
# - {suffix}: The suffix of the player sending the message
# ... PlaceholderAPI placeholders are also supported here too!
mc-to-discord-local: "**[Local]** {displayname}: {message}"
# This is the message that is used to relay questions from 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)
# - {message}: The content of the message being sent
# - {world}: The name of the world the player sending the message is in
# - {prefix}: The prefix of the player sending the message
# - {suffix}: The suffix of the player sending the message
# ... PlaceholderAPI placeholders are also supported here too!
mc-to-discord-question: "**[Question]** {displayname}: {message}"
# This is the message that is used to relay minecraft global 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)
# - {message}: The content of the message being sent
# - {world}: The name of the world the player sending the message is in
# - {prefix}: The prefix of the player sending the message
# - {suffix}: The suffix of the player sending the message
# ... PlaceholderAPI placeholders are also supported here too!
mc-to-discord-shout: "**[Shout]** {displayname}: {message}"
# 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
@@ -64,7 +64,7 @@ public class RoleSyncManager implements Listener {
if (member == null) {
if (ess.getSettings().isUnlinkOnLeave()) {
ess.getLinkManager().removeAccount(ess.getEss().getUser(player.getUniqueId()), DiscordLinkStatusChangeEvent.Cause.UNSYNC_LEAVE);
ess.getLinkManager().removeAccount(ess.getEss().getUser(player), DiscordLinkStatusChangeEvent.Cause.UNSYNC_LEAVE);
} else {
unSync(player.getUniqueId(), discordId);
}
+2 -2
View File
@@ -26,7 +26,7 @@ however, have some new requirements:
* **EssentialsX requires CraftBukkit, Spigot or Paper to run.** Other server software may work, but these are not tested
by the team and we may not be able to help with any issues that occur.
* **EssentialsX currently 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, 1.18.2, and 1.19.3.**
1.16.5, 1.17.1, 1.18.2, and 1.19.4.**
* **EssentialsX currently requires Java 8 or higher.** We recommend using the latest Java version supported by your
server software.
* **EssentialsX requires [Vault](http://dev.bukkit.org/bukkit-plugins/vault/) to enable using chat prefix/suffixes and
@@ -76,7 +76,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.7` |
| Latest release | `net.essentialsx` | `EssentialsX` | `2.20.0` |
| Snapshots | `net.essentialsx` | `EssentialsX` | `2.20.0-SNAPSHOT` |
| Older releases | `net.ess3` | `EssentialsX` | `2.18.2` |
+1 -1
View File
@@ -1 +1 @@
const val RUN_PAPER_MINECRAFT_VERSION = "1.19.3"
const val RUN_PAPER_MINECRAFT_VERSION = "1.19.4"
@@ -10,7 +10,7 @@ plugins {
val baseExtension = extensions.create<EssentialsBaseExtension>("essentials", project)
val checkstyleVersion = "8.36.2"
val spigotVersion = "1.19.3-R0.1-SNAPSHOT"
val spigotVersion = "1.19.4-R0.1-SNAPSHOT"
val junit5Version = "5.7.0"
val mockitoVersion = "3.2.0"
+1 -1
View File
@@ -3,7 +3,7 @@ plugins {
}
group = "net.essentialsx"
version = "2.20.0-SNAPSHOT"
version = "2.20.0"
project.ext {
GIT_COMMIT = !indraGit.isPresent() ? "unknown" : indraGit.commit().abbreviate(7).name()