Compare commits

..
2 Commits
Author SHA1 Message Date
MD ff7569c77d Refactor tpaccept world permission checks for clarity
When mdcfe in `world_nether` sends a `/tpa` to mdcfe3 in `world` and mdcfe3 accepts:
```
[13:57:02 INFO]: mdcfe3 issued server command: /tpaccept
[...]
[13:57:02 INFO]: [Essentials] checking if mdcfe3 has essentials.tpaccept - true
[...]
[13:57:02 INFO]: [Essentials] checking if mdcfe has essentials.tpa - true
[13:57:02 INFO]: [Essentials] checking if mdcfe has essentials.worlds.world - true
```

When mdcfe in `world` sends a `/tpahere` to mdcfe3 in `world_nether` and mdcfe3 accepts:
```
[14:02:36 INFO]: mdcfe3 issued server command: /tpaccept
[...]
[14:02:36 INFO]: [Essentials] checking if mdcfe3 has essentials.tpaccept - true
[...]
[14:02:36 INFO]: [Essentials] checking if mdcfe has essentials.tpahere - true
[14:02:36 INFO]: [Essentials] checking if mdcfe3 has essentials.worlds.world - true
```
2023-04-11 14:04:52 +01:00
Kees Monshouwer f0cdada4a9 Fix tpaccept world teleport permissions 2023-04-10 23:31:48 +02:00
67 changed files with 104 additions and 762 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 if (base.getClass() != UUIDPlayer.class || user.getBase() == null) {
} else {
user.update(base);
}
return user;
@@ -282,8 +282,6 @@ public interface ISettings extends IConf {
int getMaxUserCacheCount();
long getMaxUserCacheValueExpiry();
boolean allowSilentJoinQuit();
boolean isCustomJoinMessage();
@@ -1469,16 +1469,10 @@ public class Settings implements net.ess3.api.ISettings {
// #easteregg
@Override
public int getMaxUserCacheCount() {
final long count = Runtime.getRuntime().maxMemory() / 1024 / 1024;
final long count = Runtime.getRuntime().maxMemory() / 1024 / 96;
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 != null) {
if (listOfFiles.length >= 1) {
for (final File listOfFile : listOfFiles) {
final String filename = listOfFile.getName();
if (listOfFile.isFile() && filename.endsWith(".yml")) {
@@ -3,8 +3,6 @@ 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;
@@ -39,27 +37,18 @@ 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].toLowerCase(Locale.ENGLISH);
name = expandedArg[1];
} else if (user == null) {
throw new NotEnoughArgumentsException();
} else {
name = expandedArg[0].toLowerCase(Locale.ENGLISH);
name = expandedArg[0];
}
if (name.equals("bed")) {
if (name.equalsIgnoreCase("bed")) {
throw new Exception(tl("invalidHomeName"));
}
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);
user.delHome(name.toLowerCase(Locale.ENGLISH));
sender.sendMessage(tl("deleteHome", name));
}
@@ -4,13 +4,10 @@ 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;
@@ -35,71 +32,45 @@ 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"));
}
existingLines[line] = text;
if (callSignEvent(sign, user.getBase(), existingLines)) {
return;
}
sign.setLine(line, text);
sign.update();
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!
existingLines[i] = "";
sign.setLine(i, "");
}
if (callSignEvent(sign, user.getBase(), existingLines)) {
return;
}
sign.update();
user.sendMessage(tl("editsignCommandClear"));
} else {
final String[] existingLines = sign.getLines();
final int line = Integer.parseInt(args[1]) - 1;
existingLines[line] = "";
if (callSignEvent(sign, user.getBase(), existingLines)) {
return;
}
sign.setLine(line, "");
sign.update();
user.sendMessage(tl("editsignCommandClearLine", line + 1));
}
} else if (args[0].equalsIgnoreCase("copy")) {
} else if (args[0].equalsIgnoreCase("copy") || args[0].equalsIgnoreCase("paste")) {
final boolean copy = args[0].equalsIgnoreCase("copy");
final String tlPrefix = copy ? "editsignCopy" : "editsignPaste";
final int line = args.length == 1 ? -1 : Integer.parseInt(args[1]) - 1;
if (line == -1) {
for (int i = 0; i < 4; i++) {
// 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)));
processSignCopyPaste(user, sign, i, copy);
}
user.sendMessage(tl("editsignCopy", commandLabel));
user.sendMessage(tl(tlPrefix, commandLabel));
} else {
// 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));
processSignCopyPaste(user, sign, line, copy);
user.sendMessage(tl(tlPrefix + "Line", line + 1, commandLabel));
}
} 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));
if (!copy) {
sign.update();
}
callSignEvent(sign, user.getBase(), existingLines);
} else {
throw new NotEnoughArgumentsException();
}
@@ -108,21 +79,15 @@ public class Commandeditsign extends EssentialsCommand {
}
}
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;
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;
}
for (int i = 0; i < 4; i++) {
sign.setLine(i, lines[i]);
}
sign.update();
return false;
final String line = FormatUtil.formatString(user, "essentials.editsign", user.getSignCopy().get(index));
sign.setLine(index, line == null ? "" : line);
}
@Override
@@ -4,8 +4,6 @@ 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;
@@ -62,15 +60,6 @@ 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,8 +4,6 @@ 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;
@@ -64,25 +62,8 @@ 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", location.getWorld().getName(), location.getBlockX(), location.getBlockY(), location.getBlockZ(), name));
user.sendMessage(tl("homeSet", user.getLocation().getWorld().getName(), user.getLocation().getBlockX(), user.getLocation().getBlockY(), user.getLocation().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 = getNewExceptionFuture(user.getSource(), commandLabel);
final CompletableFuture<Boolean> future = new CompletableFuture<>();
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, future);
user.getAsyncTeleport().teleport(safe, new Trade(this.getName(), ess), TeleportCause.COMMAND, getNewExceptionFuture(user.getSource(), commandLabel));
}
}
@@ -8,6 +8,7 @@ import net.essentialsx.api.v2.events.TeleportRequestResponseEvent;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.Server;
import org.bukkit.World;
import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause;
import java.util.ArrayList;
@@ -87,12 +88,15 @@ public class Commandtpaccept extends EssentialsCommand {
throw new Exception(tl("noPendingRequest"));
}
if (request.isHere() && ((!requester.isAuthorized("essentials.tpahere") && !requester.isAuthorized("essentials.tpaall")) || (user.getWorld() != requester.getWorld() && ess.getSettings().isWorldTeleportPermissions() && !user.isAuthorized("essentials.worlds." + user.getWorld().getName())))) {
throw new Exception(tl("noPendingRequest"));
}
if (!request.isHere() && (!requester.isAuthorized("essentials.tpa") || (user.getWorld() != requester.getWorld() && ess.getSettings().isWorldTeleportPermissions() && !user.isAuthorized("essentials.worlds." + requester.getWorld().getName())))) {
throw new Exception(tl("noPendingRequest"));
if (request.isHere()) {
final boolean isRequesterAuthorized = requester.isAuthorized("essentials.tpahere") || requester.isAuthorized("essentials.tpaall");
if (!isRequesterAuthorized || !canTeleportToWorld(user, requester.getWorld())) {
throw new Exception(tl("noPendingRequest"));
}
} else {
if (!requester.isAuthorized("essentials.tpa") || !canTeleportToWorld(requester, user.getWorld())) {
throw new Exception(tl("noPendingRequest"));
}
}
final TeleportRequestResponseEvent event = new TeleportRequestResponseEvent(user, requester, request, true);
@@ -129,4 +133,8 @@ public class Commandtpaccept extends EssentialsCommand {
}
user.removeTpaRequest(request.getName());
}
private boolean canTeleportToWorld(final User user, final World destination) {
return user.getWorld() == destination || !ess.getSettings().isWorldTeleportPermissions() || user.isAuthorized("essentials.worlds." + destination.getName());
}
}
@@ -30,16 +30,11 @@ 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);
if (user != null) {
userConsumer.accept(user);
}
userConsumer.accept(user);
}
} else if (matchWildcards && searchTerm.contentEquals("*")) {
final boolean skipHidden = sender.isPlayer() && !ess.getUser(sender.getPlayer()).canInteractVanished();
@@ -16,7 +16,6 @@ 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;
@@ -27,7 +26,6 @@ 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) {
@@ -35,7 +33,6 @@ 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);
@@ -43,12 +40,9 @@ public class ModernUserMap extends CacheLoader<UUID, User> implements IUserMap {
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<>();
}
@@ -87,7 +81,6 @@ 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;
}
@@ -121,7 +114,6 @@ 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;
}
@@ -176,7 +168,6 @@ public class ModernUserMap extends CacheLoader<UUID, User> implements IUserMap {
public void addCachedUser(final User user) {
userCache.put(user.getUUID(), user);
debugLogCache(user);
}
@Override
@@ -205,14 +196,6 @@ 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();
@@ -1,137 +0,0 @@
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
}
}
@@ -100,7 +100,6 @@ bookCommandUsage3=/<command> title <title>
bookCommandUsage3Description=Задава заглавието на подписана книга
bookLocked=§6Книгата е заключена.
bookTitleSet=§6Заглавието на книгата е зададено на {0}.
bottomCommandUsage=/<command>
breakCommandDescription=Чупи блока към, който гледате.
breakCommandUsage=/<command>
broadcast=§r§6[§4Съобщение§6]§a {0}
@@ -5,10 +5,6 @@
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\:
@@ -19,7 +15,6 @@ 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,8 +100,6 @@ 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}
@@ -243,9 +241,7 @@ 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.
@@ -258,11 +254,7 @@ 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
@@ -281,17 +273,6 @@ 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}
@@ -1254,7 +1235,6 @@ 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.
@@ -1435,10 +1415,8 @@ 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,7 +86,6 @@ 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,8 +100,6 @@ 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}
@@ -992,7 +990,6 @@ pweatherCommandUsage1Description=Listet das Wetter für dich oder andere Spieler
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.
@@ -1012,14 +1009,12 @@ 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.
@@ -1038,15 +1033,11 @@ 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.
@@ -1054,7 +1045,6 @@ 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.
@@ -1065,12 +1055,10 @@ replyLastRecipientDisabledFor=§6Auf den letzen Nachrichtenempfänger antworten
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.
@@ -1082,7 +1070,6 @@ 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
@@ -1096,26 +1083,16 @@ 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.
@@ -1129,7 +1106,6 @@ 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>
@@ -1153,7 +1129,6 @@ 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.
@@ -1172,18 +1147,11 @@ 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}]
@@ -1284,7 +1252,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]
@@ -1504,10 +1471,6 @@ worldCommandUsage2Description=Teleportiert dich zu einer Location in der gegeben
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,7 +83,6 @@ bookCommandUsage3=/<command> title <title>
bookCommandUsage3Description=Ορίζει τον τίτλο ενός υπογεγραμμένου βιβλίου
bookLocked=§6Αυτό το βιβλίο είναι τώρα κλειδωμένο.
bookTitleSet=§6Τίτλος του βιβλίου ορίστηκε σε {0}.
bottomCommandUsage=/<command>
breakCommandDescription=Σπάει το μπλοκ που κοιτάτε.
breakCommandUsage=/<command>
broadcast=§6[§4Ανακοίνωση§6]§a {0}
@@ -100,8 +100,6 @@ 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}
@@ -242,12 +240,6 @@ 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>
@@ -256,14 +248,6 @@ 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.
@@ -281,20 +265,8 @@ 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
@@ -689,10 +661,8 @@ 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.
@@ -1059,7 +1029,6 @@ 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.
@@ -1254,7 +1223,6 @@ 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.
@@ -1270,7 +1238,6 @@ 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}
@@ -1435,10 +1402,8 @@ 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,8 +100,6 @@ 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}
@@ -242,12 +240,6 @@ 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>
@@ -256,20 +248,11 @@ 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.
@@ -281,20 +264,8 @@ 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
@@ -342,7 +313,6 @@ 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
@@ -510,7 +480,6 @@ 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
@@ -563,7 +532,6 @@ 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.
@@ -689,10 +657,8 @@ 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.
@@ -1042,12 +1008,6 @@ 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.
@@ -1059,7 +1019,6 @@ 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.
@@ -1117,9 +1076,7 @@ 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}.
@@ -1433,10 +1390,8 @@ 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,8 +100,6 @@ 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}
@@ -248,11 +246,11 @@ discordCommandAccountResponseLinked=Tu cuenta está vinculada a la cuenta de Min
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.
discordCommandDescription=Envía el enlace de invitación a Discord al jugador.
discordCommandLink=§6¡Únete a nuestro servidor de Discord en §c{0}§6\!
discordCommandUsage=/<command>
discordCommandUsage1=/<command>
discordCommandUsage1Description=Envía un enlace de invitación de Discord a un jugador
discordCommandUsage1Description=Envía el enlace de invitación a Discord al jugador
discordCommandExecuteDescription=Ejecuta un comando de consola en el servidor de Minecraft.
discordCommandExecuteArgumentCommand=El comando a ejecutar
discordCommandExecuteReply=Ejecutando comando\: "/{0}"
@@ -601,7 +599,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§c /sell nombredelobjeto§6.
itemNotEnough2=§6Si quieres vender todos tus objetos de ese tipo, escribe /sell nombredelobjeto (en inglés).
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}\!
@@ -768,7 +766,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=§6Velocidad establecida de§c {0} §6a§c {1} §6durante §c{2}§6.
moveSpeed=§6Establecida velocidad de {0} a§c {1} §6durante §c{2}§6.
msgCommandDescription=Envía un mensaje privado al jugador especificado.
msgCommandUsage=/<command> <hacia> <mensaje>
msgCommandUsage1=/<command> <hacia> <mensaje>
@@ -1254,7 +1252,6 @@ 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.
@@ -1416,11 +1413,11 @@ unableToSpawnMob=§4No puedes generar criaturas.
unbanCommandDescription=Desbanea el jugador especificado.
unbanCommandUsage=/<command> <jugador>
unbanCommandUsage1=/<command> <jugador>
unbanCommandUsage1Description=Desbanea un jugador específico
unbanCommandUsage1Description=Desbanea el jugador especificado
unbanipCommandDescription=Desbanea la dirección IP especificada.
unbanipCommandUsage=/<command> <dirección IP>
unbanipCommandUsage1=/<command> <dirección IP>
unbanipCommandUsage1Description=Desbanea una dirección IP especifica
unbanipCommandUsage1Description=Desbanea la dirección IP especificada
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.
@@ -1493,7 +1490,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=§6Has sido silenciado\! §6Motivo\: §c{0}
voiceSilencedReason=§6Tu voz ha sido silenciada\! §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,7 +100,6 @@ 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}
@@ -100,7 +100,6 @@ 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}
@@ -88,7 +88,6 @@ 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,7 +100,6 @@ 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}
@@ -100,7 +100,6 @@ bookCommandUsage3=/<command> כותרת <title>
bookCommandUsage3Description=קובע את הכותרת של ספר חתום
bookLocked=§6 ספר זה נעול.
bookTitleSet=§6 כותרת הספר נקבע ל {0}.
bottomCommandUsage=/<command>
breakCommandDescription=שובר את הבלוק שאתם מסתכלים עליו.
breakCommandUsage=/<command>
broadcast=§6[§4הכרזה§6]§a {0}
@@ -64,7 +64,6 @@ 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,7 +100,6 @@ 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}
@@ -100,8 +100,6 @@ 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}
@@ -1253,7 +1251,6 @@ 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.
@@ -100,7 +100,6 @@ bookCommandUsage3=/<command> title <title>
bookCommandUsage3Description=署名された本のタイトルを設定します
bookLocked=§6この本をロックしました。
bookTitleSet=§6本のタイトルが{0}に設定されました。
bottomCommandUsage=/<command>
breakCommandDescription=見ているブロックを壊します。
breakCommandUsage=/<command>
broadcast=§6[§4Broadcast§6]§a {0}
@@ -100,7 +100,6 @@ bookCommandUsage3=/<command> title <책 제목>
bookCommandUsage3Description=책의 제목을 설정합니다.
bookLocked=§6이 책은 잠긴상태로 전환되었습니다.
bookTitleSet=§6책의 제목을 §c{0}§6으로 설정합니다.
bottomCommandUsage=/<command>
breakCommandDescription=바라보고 있는 블록을 부숩니다.
breakCommandUsage=/<command>
broadcast=§6[§4공지§6]§a {0}
@@ -100,7 +100,6 @@ 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,7 +100,6 @@ 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,7 +100,6 @@ 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,7 +100,6 @@ 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,7 +100,6 @@ 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,8 +100,6 @@ 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}
@@ -768,7 +766,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 {2} §6na §c{1}§6.
moveSpeed=§6Zmieniono prędkość§c {0}§6 gracza§c {1} §6na §c{2}§6.
msgCommandDescription=Wysyła prywatną wiadomość do określonego gracza.
msgCommandUsage=/<command> <do> <wiadomość>
msgCommandUsage1=/<command> <do> <wiadomość>
@@ -1254,7 +1252,6 @@ 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.
@@ -100,7 +100,6 @@ 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}
@@ -100,8 +100,6 @@ 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}
@@ -1254,7 +1252,6 @@ 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.
@@ -1270,7 +1267,6 @@ 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,7 +98,6 @@ 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}
@@ -100,8 +100,6 @@ bookCommandUsage3=/<command> title <название>
bookCommandUsage3Description=Изменяет название подписанной книги
bookLocked=§6Книга заблокирована.
bookTitleSet=§6Название книги изменено на {0}.
bottomCommandDescription=Телепортует на самый низкий блок в этом месте.
bottomCommandUsage=/<command>
breakCommandDescription=Разрушает блок, на который вы смотрите.
breakCommandUsage=/<command>
broadcast=§6[§4Объявление§6]§a {0}
@@ -788,7 +786,7 @@ multiplePotionEffects=§4Вы не можете применить более о
muteCommandDescription=Устанавливает или снимает заглушение с игрока.
muteCommandUsage=/<command> <игрок> [длительность] [причина]
muteCommandUsage1=/<command> <игрок>
muteCommandUsage1Description=Заглушает указанного игрока, или снимает заглушение, если оно уже стоит
muteCommandUsage1Description=Навсегда устанавливает мут на указанного игрока или снимает мут если у них уже установлен мут
muteCommandUsage2=/<command> <игрок> <длительность> [причина]
muteCommandUsage2Description=Заглушает указанного игрока на указанное время с необязательным указанием причины
mutedPlayer=§6Игрок {0} §6был заглушен.
@@ -1068,7 +1066,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отклонил ваш запрос на телепортацию.
@@ -1246,15 +1244,14 @@ 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.
@@ -1392,7 +1389,7 @@ tprCommandDescription=Телепортирует в случайное мест
tprCommandUsage=/<command>
tprCommandUsage1=/<command>
tprCommandUsage1Description=Телепортирует вас в случайное место
tprSuccess=§6Телепортирование в случайное место...
tprSuccess=§6Телепортация в случайное место...
tps=§6Tекущий TPS \= {0}
tptoggleCommandDescription=Блокирует все виды телепортации.
tptoggleCommandUsage=/<command> [игрок] [on|off]
@@ -16,7 +16,6 @@ banCommandUsage=/<command> <player> [reason]
banCommandUsage1=/<command> <player> [reason]
beezookaCommandUsage=/<command>
bookCommandUsage1=/<command>
bottomCommandUsage=/<command>
breakCommandUsage=/<command>
broadcastCommandUsage=/<command> <msg>
burnCommandUsage=/<command> <player> <seconds>
@@ -100,8 +100,6 @@ 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}
@@ -1254,7 +1252,6 @@ 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.
@@ -98,7 +98,6 @@ 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,8 +100,6 @@ 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}
@@ -1095,7 +1093,6 @@ 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.
@@ -62,7 +62,6 @@ 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,7 +90,6 @@ 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}
@@ -117,7 +116,6 @@ 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.
@@ -144,7 +142,6 @@ 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 \!
@@ -213,7 +210,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=Sanal çöp menüsü açar.
disposalCommandDescription=Taşınabilir bir çöp menüsü açar.
disposalCommandUsage=/<komut>
distance=§6Konum\: {0}
dontMoveMessage=§c{0} §6saniye içerisinde ışınlanacaksınız. Lütfen hareket etmeyiniz.
@@ -500,7 +497,6 @@ 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.
@@ -521,7 +517,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}.
@@ -944,7 +940,6 @@ 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>
@@ -957,7 +952,6 @@ 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,8 +100,6 @@ bookCommandUsage3=/<command> заголовок <title>
bookCommandUsage3Description=Встановлює заголовок підписаної книги
bookLocked=§6Ця книга тепер зачинена.
bookTitleSet=§6Назва книги встановлена до {0}.
bottomCommandDescription=Телепортує до найнижчого блоку на Вашій позиції.
bottomCommandUsage=/<command>
breakCommandDescription=Знищує блок, на який ви дивитеся.
breakCommandUsage=/<command>
broadcast=§6[§4Оголошення§6]§a {0}
@@ -1254,7 +1252,6 @@ 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.
@@ -98,7 +98,6 @@ 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}
@@ -468,18 +467,15 @@ 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.
@@ -610,7 +606,6 @@ 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}
@@ -706,7 +701,6 @@ 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.
@@ -717,7 +711,6 @@ 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
@@ -738,7 +731,6 @@ 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.
@@ -748,7 +740,6 @@ 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
@@ -100,8 +100,6 @@ bookCommandUsage3=/<command> title <标题>
bookCommandUsage3Description=设置成书的标题
bookLocked=§6这本书现在被锁定了。
bookTitleSet=§6这本书的标题已被设置为{0}。
bottomCommandDescription=传送至你当前位置的最低点。
bottomCommandUsage=/<command>
breakCommandDescription=破坏你光标所指向的方块。
breakCommandUsage=/<command>
broadcast=§r§6[§4公告§6]§a {0}
@@ -1254,7 +1252,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。
@@ -100,7 +100,6 @@ bookCommandUsage3=/<command> title <title>
bookCommandUsage3Description=設定書的標題
bookLocked=§6已鎖定這本書。
bookTitleSet=§6這本書的標題已被設定為 {0}。
bottomCommandUsage=/<command>
breakCommandDescription=破壞你前方的方塊。
breakCommandUsage=/<command>
broadcast=§6[§4廣播§6]§a {0}
+1 -1
View File
@@ -4,7 +4,7 @@ plugins {
dependencies {
compileOnly project(':EssentialsX')
implementation('net.dv8tion:JDA:4.4.1_353') {
implementation('net.dv8tion:JDA:4.4.0_350') {
exclude(module: 'opus-java')
}
implementation 'com.vdurmont:emoji-java:5.1.1'
@@ -1,6 +1,5 @@
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;
@@ -15,7 +14,6 @@ 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;
@@ -23,14 +21,13 @@ 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, ChatType chatType) {
public DiscordChatMessageEvent(Player player, String message) {
this.player = player;
this.message = message;
this.chatType = chatType;
}
/**
* The player which caused this chat message.
* The player which which caused this chat message.
* @return the player who caused the event.
*/
public Player getPlayer() {
@@ -53,14 +50,6 @@ 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,6 +1,5 @@
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;
@@ -21,7 +20,7 @@ public interface DiscordService {
void sendMessage(final MessageType type, final String message, final boolean allowGroupMentions);
/**
* Sends a chat message to the {@link MessageType.DefaultTypes#CHAT default chat channel} with the same format
* Sends a chat messages to the {@link MessageType.DefaultTypes#CHAT default chat channel} with the same format
* used for regular chat messages specified in the EssentialsX Discord configuration.
* <p>
* Note: Messages sent with this method will not fire a {@link DiscordChatMessageEvent}.
@@ -30,16 +29,6 @@ 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,10 +65,7 @@ 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);
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};
private final static MessageType[] VALUES = new MessageType[]{JOIN, FIRST_JOIN, LEAVE, CHAT, DEATH, AFK, ADVANCEMENT, ACTION, SERVER_START, SERVER_STOP, KICK, MUTE};
/**
* Gets an array of all the default {@link MessageType MessageTypes}.
@@ -6,7 +6,6 @@ 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;
@@ -108,10 +107,6 @@ 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);
}
@@ -220,47 +215,17 @@ public class DiscordSettings implements IConf {
}
public MessageFormat getMcToDiscordFormat(Player player) {
return getMcToDiscordFormat(player, ChatType.UNKNOWN);
}
public MessageFormat getMcToDiscordFormat(Player player, ChatType chatType) {
final String format = getFormatString(getMcToDiscordFormatKey(chatType));
final String format = getFormatString("mc-to-discord");
final String filled;
if (plugin.isPAPI() && format != null) {
filled = me.clip.placeholderapi.PlaceholderAPI.setPlaceholders(player, format);
} else {
filled = format;
}
return generateMessageFormat(filled, getMcToDiscordDefaultFormat(chatType), false,
return generateMessageFormat(filled, "{displayname}: {message}", 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()) {
@@ -24,7 +24,6 @@ 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() {
@@ -47,8 +46,6 @@ 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);
@@ -82,7 +79,6 @@ public class EssentialsDiscord extends JavaPlugin implements IEssentialsModule {
public void onReload() {
if (jda != null && !jda.isInvalidStartup()) {
jda.updateListener();
jda.updatePresence();
jda.updatePrimaryChannel();
jda.updateConsoleRelay();
@@ -106,10 +102,6 @@ public class EssentialsDiscord extends JavaPlugin implements IEssentialsModule {
return isPAPI;
}
public boolean isEssentialsChat() {
return isEssentialsChat;
}
@Override
public void onDisable() {
if (jda != null && !jda.isInvalidStartup()) {
@@ -23,7 +23,6 @@ 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;
@@ -41,15 +40,12 @@ 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;
@@ -87,7 +83,6 @@ 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) {
@@ -219,8 +214,6 @@ 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 {
@@ -274,14 +267,9 @@ 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, chatType),
final String formattedMessage = MessageUtil.formatMessage(getSettings().getMcToDiscordFormat(player),
MessageUtil.sanitizeDiscordMarkdown(player.getName()),
MessageUtil.sanitizeDiscordMarkdown(player.getDisplayName()),
user.isAuthorized("essentials.discord.markdown") ? chatMessage : MessageUtil.sanitizeDiscordMarkdown(chatMessage),
@@ -292,27 +280,14 @@ public class JDADiscordService implements DiscordService, IEssentialsModule {
final String avatarUrl = DiscordUtil.getAvatarUrl(this, player);
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)),
MessageUtil.sanitizeDiscordMarkdown(player.getName()),
MessageUtil.sanitizeDiscordMarkdown(player.getDisplayName()),
MessageUtil.sanitizeDiscordMarkdown(getPlugin().getEss().getSettings().getWorldAlias(player.getWorld().getName())),
MessageUtil.sanitizeDiscordMarkdown(FormatUtil.stripEssentialsFormat(getPlugin().getEss().getPermissionsHandler().getPrefix(player))),
MessageUtil.sanitizeDiscordMarkdown(FormatUtil.stripEssentialsFormat(getPlugin().getEss().getPermissionsHandler().getSuffix(player))),
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;
}
DiscordUtil.dispatchDiscordMessage(this, MessageType.DefaultTypes.CHAT, formattedMessage, user.isAuthorized("essentials.discord.ping"), avatarUrl, formattedName, player.getUniqueId());
}
@Override
@@ -343,19 +318,6 @@ 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,6 +1,5 @@
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;
@@ -75,14 +74,10 @@ public class InteractionControllerImpl extends ListenerAdapter implements Intera
initialBatchRegistration = true;
final List<CommandData> list = new ArrayList<>();
for (final InteractionCommand command : batchRegistrationQueue.values()) {
// German is quite the language
final String description = StringUtil.abbreviate(command.getDescription(), 100);
final CommandData data = new CommandData(command.getName(), description);
final CommandData data = new CommandData(command.getName(), command.getDescription());
if (command.getArguments() != null) {
for (final InteractionCommandArgument argument : command.getArguments()) {
// 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());
data.addOption(OptionType.valueOf(argument.getType().name()), argument.getName(), argument.getDescription(), argument.isRequired());
}
}
list.add(data);
@@ -1,34 +0,0 @@
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());
});
}
}
@@ -11,11 +11,13 @@ 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;
@@ -23,6 +25,7 @@ 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;
@@ -78,6 +81,21 @@ 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
@@ -255,11 +273,11 @@ public class BukkitListener implements Listener {
}
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)),
MessageUtil.sanitizeDiscordMarkdown(player.getName()),
MessageUtil.sanitizeDiscordMarkdown(player.getDisplayName()),
MessageUtil.sanitizeDiscordMarkdown(jda.getPlugin().getEss().getSettings().getWorldAlias(player.getWorld().getName())),
MessageUtil.sanitizeDiscordMarkdown(FormatUtil.stripEssentialsFormat(jda.getPlugin().getEss().getPermissionsHandler().getPrefix(player))),
MessageUtil.sanitizeDiscordMarkdown(FormatUtil.stripEssentialsFormat(jda.getPlugin().getEss().getPermissionsHandler().getSuffix(player))),
jda.getGuild().getMember(jda.getJda().getSelfUser()).getEffectiveName());
uuid = player.getUniqueId();
@@ -1,43 +0,0 @@
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,10 +46,6 @@ 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.
@@ -142,15 +138,6 @@ 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.
@@ -281,36 +268,6 @@ messages:
# - {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), DiscordLinkStatusChangeEvent.Cause.UNSYNC_LEAVE);
ess.getLinkManager().removeAccount(ess.getEss().getUser(player.getUniqueId()), DiscordLinkStatusChangeEvent.Cause.UNSYNC_LEAVE);
} else {
unSync(player.getUniqueId(), discordId);
}
+1 -1
View File
@@ -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.20.0` |
| Latest release | `net.essentialsx` | `EssentialsX` | `2.19.7` |
| Snapshots | `net.essentialsx` | `EssentialsX` | `2.20.0-SNAPSHOT` |
| Older releases | `net.ess3` | `EssentialsX` | `2.18.2` |
+1 -1
View File
@@ -3,7 +3,7 @@ plugins {
}
group = "net.essentialsx"
version = "2.20.0"
version = "2.20.0-SNAPSHOT"
project.ext {
GIT_COMMIT = !indraGit.isPresent() ? "unknown" : indraGit.commit().abbreviate(7).name()